国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【C語(yǔ)言進(jìn)階】C語(yǔ)言實(shí)現(xiàn)通訊錄(簡(jiǎn)易版)

wums / 616人閱讀

摘要:前言我們需要用語(yǔ)言模擬一個(gè)通訊錄可以用來(lái)存儲(chǔ)個(gè)人的信息每個(gè)人的信息包括姓名電話性別住址年齡功能包括新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人以名字排序所有聯(lián)系人注此版本不包含其他內(nèi)容,后續(xù)會(huì)出更加全面的升級(jí)版本通訊錄語(yǔ)言簡(jiǎn)易版

前言:

我們需要用C語(yǔ)言模擬一個(gè)通訊錄可以用來(lái)存儲(chǔ)1000個(gè)人的信息

每個(gè)人的信息包括:

姓名、電話、性別、住址、年齡

功能包括:

  1. 新增聯(lián)系人
  2. 查找聯(lián)系人
  3. 刪除聯(lián)系人
  4. 修改聯(lián)系人
  5. 查看所有聯(lián)系人
  6. 以名字排序所有聯(lián)系人

注:此版本不包含其他內(nèi)容,后續(xù)會(huì)出更加全面的升級(jí)版本

通訊錄(C語(yǔ)言簡(jiǎn)易版)

目錄

一、通訊錄菜單

二、通訊錄主函數(shù)

三、枚舉主函數(shù)內(nèi)部選項(xiàng)

四、定義聯(lián)系人及通訊錄

????????(一)定義聯(lián)系人內(nèi)容(結(jié)構(gòu)體)

????????(二)定義通訊錄內(nèi)容(結(jié)構(gòu)體)

五、全局變量聲明

六、初始化通訊錄

七、通過(guò)姓名查找函數(shù)

八、實(shí)現(xiàn)通訊錄功能

????????(一)新增聯(lián)系人

????????(二)刪除聯(lián)系人

????????(三)查找聯(lián)系人

?????????(四)修改聯(lián)系人

????????(五)顯示所有聯(lián)系人

????????(六)按姓名排序所有聯(lián)系人

九、頭文件

十、完整代碼


一、通訊錄菜單

菜單能夠?qū)崿F(xiàn)和用戶的交互。

那么作為一個(gè)通訊錄怎么能沒(méi)有菜單選項(xiàng)呢?

我們第一步先來(lái)設(shè)計(jì)一個(gè)菜單選項(xiàng)

代碼如下:

void menu(){	printf("*********************************/n");	printf("**      1. 添加聯(lián)系人          **/n");	printf("**      2. 刪除聯(lián)系人          **/n");	printf("**      3. 查找聯(lián)系人          **/n");	printf("**      4. 修改聯(lián)系人          **/n");	printf("**      5. 顯示所有聯(lián)系人      **/n");	printf("**      6. 按姓名排序聯(lián)系人    **/n");	printf("**      0. exit                **/n");	printf("*********************************/n");}

?演示效果:


二、通訊錄主函數(shù)

寫完了通訊錄菜單后,我們就要對(duì)主函數(shù)進(jìn)行設(shè)計(jì)

代碼如下:

int main(){    int input = 0;    //創(chuàng)建通訊錄    struct Contact con;//con就是通訊錄,里面包含:1000個(gè)元素的數(shù)和size    //初始化通訊錄    InitContact(&con);    do    {        menu();        printf("請(qǐng)選擇:>");        scanf("%d", &input);        switch(input)        {        case ADD:            AddContact(&con);            break;        case DEL:            DelContact(&con);            break;        case SEARCH:            SearchContact(&con);            break;        case MODIFY:            MoidfyContact(&con);            break;        case SHOW:            ShowContact(&con);            break;        case SORT:            SortContact(&con);            break;        case EXIT:            printf("退出通訊錄/n");            break;        default:            printf("選擇錯(cuò)誤/n");            break;        }    } while (input);    return 0;}


三、枚舉主函數(shù)內(nèi)部選項(xiàng)

上面主函數(shù)內(nèi)部的分支循環(huán)?case?中我們輸入的字符是為了便于理解,但是這樣是沒(méi)辦法實(shí)現(xiàn)最開始的以數(shù)字來(lái)進(jìn)行菜單選項(xiàng)的初衷的,所以我們需要枚舉這些選擇功能來(lái)達(dá)到這樣的一個(gè)效果。

代碼如下:

enum Choose{    EXIT,  //0    ADD,   //1    DEL,   //2    SEARCH,//3    MODIFY,//4    SHOW,  //5    SORT   //6};


四、定義聯(lián)系人及通訊錄

這一步是為了實(shí)現(xiàn)前言中的通訊錄內(nèi)容以及聯(lián)系人內(nèi)容,為此我們需要用到結(jié)構(gòu)體函數(shù) struct

(一)定義聯(lián)系人內(nèi)容(結(jié)構(gòu)體)

代碼如下:

//結(jié)構(gòu)體:通訊錄中每個(gè)成員的信息typedef struct PeoInform{    char name[MAX_NAME];    int age;    char sex[MAX_SEX];    char phone[MAX_PHONE];    char address[MAX_ADDRESS];}PeoInform;

?(二)定義通訊錄內(nèi)容(結(jié)構(gòu)體)

代碼如下:

//通訊錄類型struct Contact{    struct PeoInform data[MAX];//存放1000個(gè)信息    int size;//記錄當(dāng)前結(jié)構(gòu)體內(nèi)已經(jīng)有的元素個(gè)數(shù)};


五、全局變量聲明

為了實(shí)現(xiàn)我們上面結(jié)構(gòu)體內(nèi)部的這些內(nèi)容,我們需要進(jìn)行一些聲明

代碼如下:

#define MAX 1000#define MAX_NAME 20#define MAX_SEX 5#define MAX_PHONE 12#define MAX_ADDRESS 30


六、初始化通訊錄

盡管我們這是一個(gè)基礎(chǔ)的通訊錄,它并不具備保存功能,但是我們應(yīng)該讓它擁有一個(gè)初始化功能。

代碼如下:

//初始化通訊錄的函數(shù)void InitContact(struct Contact *ps){    memset(ps->data, 0, sizeof(ps->data));    ps->size = 0;//設(shè)置通訊錄最初只有0個(gè)元素}


七、通過(guò)姓名查找函數(shù)

為了更好的實(shí)現(xiàn)通訊錄功能,使其可讀性提高,這里特意設(shè)計(jì)了一個(gè)函數(shù)來(lái)通過(guò)查找姓名來(lái)實(shí)現(xiàn)通訊錄的功能

代碼如下:

//修飾FindByName函數(shù),使其封裝在程序內(nèi)部,不暴露出去static int FindByName(const struct Contact *ps, char name[MAX_NAME]){    int i = 0;    for(i = 0; i < ps->size; i++)    {        if(0 == strcmp(ps->data[i].name, name))        {            return i;        }    }    return -1;//找不到的情況}


八、實(shí)現(xiàn)通訊錄功能

(一)新增聯(lián)系人

//增加一個(gè)信息到通訊錄void AddContact(struct Contact *ps){    if(ps->size == MAX)    {        printf("通訊錄已滿,無(wú)法增加/n");    }    else    {        printf("請(qǐng)輸入名字:>");        scanf("%s", ps->data[ps->size].name);        printf("請(qǐng)輸入年齡:>");        scanf("%d", &(ps->data[ps->size].age));        printf("請(qǐng)輸入性別:>");        scanf("%s", ps->data[ps->size].sex);        printf("請(qǐng)輸入電話:>");        scanf("%s", ps->data[ps->size].phone);        printf("請(qǐng)輸入家庭地址:>");        scanf("%s", ps->data[ps->size].address);        ps->size++;        printf("添加成功/n");    }}

模擬效果:


?(二)刪除聯(lián)系人

//刪除指定的聯(lián)系人void DelContact(struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要?jiǎng)h除人的名字:>");    scanf("%s", name);    //1.查找要?jiǎng)h除的人在什么位置    //找到了返回名字所在元素的下標(biāo)    //找不到返回 -1    int pos = FindByName(ps, name);    //2.刪除    //查詢不到聯(lián)系人    if (pos == -1)    {        printf("查詢不到要?jiǎng)h除的聯(lián)系人,請(qǐng)重試/n");    }    else    {        //刪除數(shù)據(jù)        int j = 0;        for(j = pos; j < ps->size-1; j++)        {            ps->data[j] = ps->data[j + 1];            //由于刪除了這個(gè)數(shù)據(jù),所以后面的數(shù)據(jù)會(huì)頂替上來(lái)        }        ps->size--;        printf("刪除成功/n");    }}

?演示效果:


(三)查找聯(lián)系人

//查找指定的人的信息void SearchContact(const struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要查找人的名字:>");    scanf("%s", name);    int pos = FindByName(ps, name);    if (pos == -1)    {        printf("要查找的人不存在,請(qǐng)重試/n");    }    else    {        printf("%-20s/t%-4s/t%-5s/t%-12s/t%-20s/n", "名字", "年齡", "性別", "電話", "地址");        printf("%-20s/t%-4d/t%-5s/t%-12s/t%-20s/n",            ps->data[pos].name,            ps->data[pos].age,            ps->data[pos].sex,            ps->data[pos].phone,            ps->data[pos].address);    }}

演示效果:?


?(四)修改聯(lián)系人

//修改指定聯(lián)系人的信息void MoidfyContact(struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要修改聯(lián)系人的名字:>");    scanf("%s", name);    int pos = FindByName(ps, name);    if (pos == -1)    {        printf("要修改聯(lián)系人的信息不存在,請(qǐng)重試/n");    }    else    {        printf("請(qǐng)輸入名字:>");        scanf("%s", ps->data[pos].name);        printf("請(qǐng)輸入年齡:>");        scanf("%d", &(ps->data[pos].age));        printf("請(qǐng)輸入性別:>");        scanf("%s", ps->data[pos].sex);        printf("請(qǐng)輸入電話:>");        scanf("%s", ps->data[pos].phone);        printf("請(qǐng)輸入家庭地址:>");        scanf("%s", ps->data[pos].address);        printf("修改完成/n");    }}

演示效果:?


?(五)顯示所有聯(lián)系人

//展示通訊錄中聯(lián)系人的信息void ShowContact(const struct Contact *ps){    if(ps->size == 0)    {        printf("通訊錄為空/n");    }    else    {        int i = 0;        //標(biāo)題        printf("%-20s/t%-4s/t%-5s/t%-12s/t%-20s/n", "名字", "年齡", "性別", "電話", "地址");        //數(shù)據(jù)        for(i = 0; i < ps->size; i++)        {            printf("%-20s/t%-4d/t%-5s/t%-12s/t%-20s/n",            ps->data[i].name,            ps->data[i].age,            ps->data[i].sex,            ps->data[i].phone,            ps->data[i].address);        }    }}

演示效果:?


(六)按姓名排序所有聯(lián)系人

//按姓名排序通訊錄內(nèi)容void SortContact(struct Contact *ps){    if (ps->size <= 0){		printf("通訊錄中沒(méi)有聯(lián)系人,請(qǐng)?zhí)砑?/n");	}	int i = 0;	int j = 0;	for (i = 0; i< ps->size - 1; i++)	{		for (j = 0; j< ps->size - i - 1; j++)		{			if (strcmp( ps->data[j].name, ( ps->data[j + 1]).name) > 0)			{                PeoInform tmp;				tmp = ps->data[j];				ps->data[j] = ps->data[j + 1];				ps->data[j + 1] = tmp;			}		}		printf("排序成功!/n");	}}

演示效果:?

由于此時(shí)通訊錄只有一個(gè)成員,我們無(wú)法直觀地實(shí)現(xiàn)按名字排序的效果,所以這邊添加了幾個(gè)聯(lián)系人來(lái)更好的演示。

(1)排序前

(2)排序后


九、頭文件

寫到這里我們是不是忘記了點(diǎn)什么?沒(méi)錯(cuò),那就是頭文件,不引用頭文件就會(huì)產(chǎn)生報(bào)錯(cuò),所以我們?cè)趯懘a的時(shí)候一定要加上頭文件哦!

代碼如下:

#include #include #include 


十、完整代碼

最后我們獻(xiàn)上完整的代碼:

#include #include #include #define MAX 1000#define MAX_NAME 20#define MAX_SEX 5#define MAX_PHONE 12#define MAX_ADDRESS 30//枚舉:選擇功能enum Choose{    EXIT,  //0    ADD,   //1    DEL,   //2    SEARCH,//3    MODIFY,//4    SHOW,  //5    SORT   //6};//結(jié)構(gòu)體:通訊錄中每個(gè)成員的信息typedef struct PeoInform{    char name[MAX_NAME];    int age;    char sex[MAX_SEX];    char phone[MAX_PHONE];    char address[MAX_ADDRESS];}PeoInform;//通訊錄類型struct Contact{    struct PeoInform data[MAX];//存放1000個(gè)信息    int size;//記錄當(dāng)前結(jié)構(gòu)體內(nèi)已經(jīng)有的元素個(gè)數(shù)};//初始化通訊錄的函數(shù)void InitContact(struct Contact *ps){    memset(ps->data, 0, sizeof(ps->data));    ps->size = 0;//設(shè)置通訊錄最初只有0個(gè)元素}//增加一個(gè)信息到通訊錄void AddContact(struct Contact *ps){    if(ps->size == MAX)    {        printf("通訊錄已滿,無(wú)法增加/n");    }    else    {        printf("請(qǐng)輸入名字:>");        scanf("%s", ps->data[ps->size].name);        printf("請(qǐng)輸入年齡:>");        scanf("%d", &(ps->data[ps->size].age));        printf("請(qǐng)輸入性別:>");        scanf("%s", ps->data[ps->size].sex);        printf("請(qǐng)輸入電話:>");        scanf("%s", ps->data[ps->size].phone);        printf("請(qǐng)輸入家庭地址:>");        scanf("%s", ps->data[ps->size].address);        ps->size++;        printf("添加成功/n");    }}//修飾FindByName函數(shù),使其封裝在程序內(nèi)部,不暴露出去static int FindByName(const struct Contact *ps, char name[MAX_NAME]){    int i = 0;    for(i = 0; i < ps->size; i++)    {        if(0 == strcmp(ps->data[i].name, name))        {            return i;        }    }    return -1;//找不到的情況}//刪除指定的聯(lián)系人void DelContact(struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要?jiǎng)h除人的名字:>");    scanf("%s", name);    //1.查找要?jiǎng)h除的人在什么位置    //找到了返回名字所在元素的下標(biāo)    //找不到返回 -1    int pos = FindByName(ps, name);    //2.刪除    //查詢不到聯(lián)系人    if (pos == -1)    {        printf("查詢不到要?jiǎng)h除的聯(lián)系人,請(qǐng)重試/n");    }    else    {        //刪除數(shù)據(jù)        int j = 0;        for(j = pos; j < ps->size-1; j++)        {            ps->data[j] = ps->data[j + 1];            //由于刪除了這個(gè)數(shù)據(jù),所以后面的數(shù)據(jù)會(huì)頂替上來(lái)        }        ps->size--;        printf("刪除成功/n");    }}//查找指定的人的信息void SearchContact(const struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要查找人的名字:>");    scanf("%s", name);    int pos = FindByName(ps, name);    if (pos == -1)    {        printf("要查找的人不存在,請(qǐng)重試/n");    }    else    {        printf("%-20s/t%-4s/t%-5s/t%-12s/t%-20s/n", "名字", "年齡", "性別", "電話", "地址");        printf("%-20s/t%-4d/t%-5s/t%-12s/t%-20s/n",            ps->data[pos].name,            ps->data[pos].age,            ps->data[pos].sex,            ps->data[pos].phone,            ps->data[pos].address);    }}//修改指定聯(lián)系人的信息void MoidfyContact(struct Contact *ps){    char name[MAX_NAME];    printf("請(qǐng)輸入要修改聯(lián)系人的名字:>");    scanf("%s", name);    int pos = FindByName(ps, name);    if (pos == -1)    {        printf("要修改聯(lián)系人的信息不存在,請(qǐng)重試/n");    }    else    {        printf("請(qǐng)輸入名字:>");        scanf("%s", ps->data[pos].name);        printf("請(qǐng)輸入年齡:>");        scanf("%d", &(ps->data[pos].age));        printf("請(qǐng)輸入性別:>");        scanf("%s", ps->data[pos].sex);        printf("請(qǐng)輸入電話:>");        scanf("%s", ps->data[pos].phone);        printf("請(qǐng)輸入家庭地址:>");        scanf("%s", ps->data[pos].address);        printf("修改完成/n");    }}//展示通訊錄中的信息void ShowContact(const struct Contact *ps){    if(ps->size == 0)    {        printf("通訊錄為空/n");    }    else    {        int i = 0;        //標(biāo)題        printf("%-20s/t%-4s/t%-5s/t%-12s/t%-20s/n", "名字", "年齡", "性別", "電話", "地址");        //數(shù)據(jù)        for(i = 0; i < ps->size; i++)        {            printf("%-20s/t%-4d/t%-5s/t%-12s/t%-20s/n",            ps->data[i].name,            ps->data[i].age,            ps->data[i].sex,            ps->data[i].phone,            ps->data[i].address);        }    }}//按姓名排序通訊錄內(nèi)容void SortContact(struct Contact *ps){    if (ps->size <= 0){		printf("通訊錄中沒(méi)有聯(lián)系人,請(qǐng)?zhí)砑?/n");	}	int i = 0;	int j = 0;	for (i = 0; i< ps->size - 1; i++)	{		for (j = 0; j< ps->size - i - 1; j++)		{			if (strcmp( ps->data[j].name, ( ps->data[j + 1]).name) > 0)			{                PeoInform tmp;				tmp = ps->data[j];				ps->data[j] = ps->data[j + 1];				ps->data[j + 1] = tmp;			}		}		printf("排序成功!/n");	}}void menu(){	printf("*********************************/n");	printf("**      1. 添加聯(lián)系人          **/n");	printf("**      2. 刪除聯(lián)系人          **/n");	printf("**      3. 查找聯(lián)系人          **/n");	printf("**      4. 修改聯(lián)系人          **/n");	printf("**      5. 顯示所有聯(lián)系人      **/n");	printf("**      6. 按姓名排序聯(lián)系人    **/n");	printf("**      0. exit                **/n");	printf("*********************************/n");}int main(){    int input = 0;    //創(chuàng)建通訊錄    struct Contact con;//con就是通訊錄,里面包含:1000個(gè)元素的數(shù)和size    //初始化通訊錄    InitContact(&con);    do    {        menu();        printf("請(qǐng)選擇:>");        scanf("%d", &input);        switch(input)        {        case ADD:            AddContact(&con);            break;        case DEL:            DelContact(&con);            break;        case SEARCH:            SearchContact(&con);            break;        case MODIFY:            MoidfyContact(&con);            break;        case SHOW:            ShowContact(&con);            break;        case SORT:            SortContact(&con);            break;        case EXIT:            printf("退出通訊錄/n");            break;        default:            printf("選擇錯(cuò)誤/n");            break;        }    } while (input);    return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/119295.html

相關(guān)文章

  • ??C語(yǔ)言訊錄管理系統(tǒng)(簡(jiǎn)易)??

    ??C語(yǔ)言通訊錄管理系統(tǒng)(簡(jiǎn)易版)?? ?一、通訊錄?二、菜單實(shí)現(xiàn)和用戶交互?三、主函數(shù)????1.enum選項(xiàng)????2.switch判斷 ?四、定義聯(lián)系人和通訊錄????1.定義聯(lián)系人結(jié)構(gòu)體????2.定義通訊錄結(jié)構(gòu)體????3.定義結(jié)構(gòu)體變量 ?五、通訊錄初始化?六、新增聯(lián)系人?七、查找聯(lián)系人?八、刪除聯(lián)系人?九、修改聯(lián)系人?十、查看所有聯(lián)系人?十一、清空所有聯(lián)系人?十二、以名字排序所有...

    justCoding 評(píng)論0 收藏0
  • C語(yǔ)言進(jìn)階C語(yǔ)言實(shí)現(xiàn)訊錄 升級(jí) { 含動(dòng)態(tài)擴(kuò)容/銷毀/信息保存功能 }(強(qiáng)烈建議收藏食用)

    摘要:之前的通訊錄在程序退出后內(nèi)部的數(shù)據(jù)就會(huì)消失,再次打開程序后只能重新輸入數(shù)據(jù),為此我們?cè)黾恿艘粋€(gè)保存功能來(lái)保存信息。 前言: 由于之前實(shí)現(xiàn)的通訊錄在存儲(chǔ)方面只能支持靜態(tài)的1000人的存儲(chǔ)量,但是如果聯(lián)系人較少,則會(huì)造成較大的內(nèi)存浪費(fèi)。而當(dāng)聯(lián)系人一旦超過(guò)1000時(shí),就不能再繼續(xù)存儲(chǔ)信息了。因...

    gxyz 評(píng)論0 收藏0
  • 動(dòng)態(tài)文件訊錄C語(yǔ)言中的文件的讀寫操作

    摘要:那么我們首先來(lái)改造儲(chǔ)存空間也就是通訊錄結(jié)構(gòu)體靜態(tài)版本人信息存放在數(shù)組中統(tǒng)計(jì)存放的人數(shù)動(dòng)態(tài)版本統(tǒng)計(jì)存放的人數(shù)有效容量我們將原本的結(jié)構(gòu)體數(shù)組改為一個(gè)結(jié)構(gòu)體指針,以此來(lái)維護(hù)用以儲(chǔ)存?zhèn)€人信息的空間。 上一期我們編寫了一個(gè)C語(yǔ)言版本的簡(jiǎn)易通訊錄,但是我們的之前的通訊錄是沒(méi)有記憶功能的,也就是說(shuō),一旦關(guān)...

    h9911 評(píng)論0 收藏0
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易動(dòng)態(tài)電話簿&amp;&amp;文末提供源代碼下載

    摘要:導(dǎo)航前言功能函數(shù)結(jié)構(gòu)設(shè)定菜單交互主函數(shù)通訊錄初始化新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人清空所有聯(lián)系人以名字排序所有聯(lián)系人結(jié)尾語(yǔ)前言本文將實(shí)現(xiàn)一個(gè)簡(jiǎn)易的電話簿管理。信息包括名字,性別,電話號(hào)碼,年齡,住址。 ...

    蘇丹 評(píng)論0 收藏0
  • 只看不敲,神也學(xué)不好C---------計(jì)算機(jī)經(jīng)典書籍經(jīng)驗(yàn)分享

    摘要:學(xué)單片機(jī)多去官網(wǎng)上查資料,下載手冊(cè),像我入門的單片機(jī)經(jīng)常去官網(wǎng),還有學(xué)的系列板子,公司的官網(wǎng)的官方例程給的很詳細(xì),在英文視角閱讀對(duì)你大有益處。 目錄 1.C語(yǔ)言經(jīng)典 2.單片機(jī)系列 3.Python方面 4.嵌入式LWip協(xié)議 5.Android 6.C++經(jīng)典書籍 7.Linux開發(fā) ...

    FleyX 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<