C語言實(shí)現(xiàn)簡易通訊錄實(shí)例
一、問題描述
用C語言來寫一個(gè)簡易的通訊錄
二、功能介紹
通訊錄
1.通訊錄中能夠存放1000個(gè)人的信息
每個(gè)人的信息:
名字,年齡,性別,電話,地址
2.增加人的信息
3.刪除人的信息
4.修改指定人的信息
5.查找指定人的信息
6.排序
二、實(shí)現(xiàn)流程
1.創(chuàng)建通訊錄
1.創(chuàng)建頭文件contact.h
頭文件contact.h用來實(shí)現(xiàn)類型的定義和函數(shù)的聲明。
2.定義結(jié)構(gòu)體類型(struct peoInfo)
一個(gè)人的信息包含名字,年齡,性別,電話,地址,所以我們要定義一個(gè)結(jié)構(gòu)體類型才能完整的表述。
寫一個(gè)結(jié)構(gòu)體類型struct peoInfo存放一個(gè)人的信息
代碼如下:
/類型的定義 typedef struct peoInfo { char name[MAX_NAME];//名字 char sex[MAX_SEX];//性別 int age;//年齡 char tele[MAX_TELE];//電話 char addr[MAX_ADDR];//地址 }peoInfo;
typedef(類型重命名),struct peoInfo重命名為peoInfo。
3.定義通訊錄結(jié)構(gòu)體類型(struct contact)
因?yàn)橐娣?000個(gè)這樣的人的信息,所以我們創(chuàng)建一個(gè)結(jié)構(gòu)體類型的數(shù)組data。再創(chuàng)建一個(gè)變量sz來表示這個(gè)數(shù)組的下標(biāo),data數(shù)組中存第一個(gè)人信息的時(shí)候,我們放在下標(biāo)為sz的位置,這個(gè)時(shí)候讓我們的sz等于0,存第二個(gè)人的信息的時(shí)候,讓我們的sz等于1,這樣后續(xù)就方便我們通過下標(biāo)的方式找到存入的每一個(gè)人的信息。
代碼如下:
peoInfo data[MAX];//存放添加進(jìn)來的人的信息 int sz;//記錄的是通訊錄中有效信息的個(gè)數(shù)
上述代碼加起來就構(gòu)成了我們的通訊錄,很明顯這也是一個(gè)結(jié)構(gòu)體。
代碼如下:
//通訊錄 typedef struct contact { peoInfo data[MAX];//存放添加進(jìn)來的人的信息 int sz;//記錄的是通訊錄中有效信息的個(gè)數(shù) }contact;
4.#define定義標(biāo)識符常量
為了后續(xù)我們方便隨時(shí)調(diào)整通訊錄的大小所以我們把數(shù)組的數(shù)字挨個(gè)用#define定義標(biāo)識符常量
代碼如下:
#define MAX_NAME 20 #define MAX_SEX 10 #define MAX_TELE 12 #define MAX_ADDR 30 #define MAX 1000
5.功能實(shí)現(xiàn)函數(shù)的聲明
/初始化通訊錄 void Initcontact(contact* cp); //增加聯(lián)系人信息 void AddContact(contact* cp); //打印聯(lián)系人信息 void PintContact(const contact* cp); //刪除聯(lián)系人信息 void DelContact(contact* cp); //查找聯(lián)系人信息 void SearchContact(contact* cp); //修改聯(lián)系人信息 void ModifyContact(contact* cp);
2.創(chuàng)建源文件test.c
源文件test.c測試通訊錄的模塊
通訊錄有了之后,我們要寫出通訊錄的基本操作邏輯,選擇增加聯(lián)系人,選擇刪除聯(lián)系人,選擇修改聯(lián)系人......選擇錯(cuò)誤,重新選擇,選擇重新開始等等。
1.打印菜單
代碼如下:
void menu() { printf("******************************\n"); printf("*****1.add 2.del *********\n"); printf("*****3.search 4.modify*******\n"); printf("*****5.sort 6.print *******\n"); printf("*****0.exit ***************\n"); printf("******************************\n"); }
2.枚舉方法定義編號
代碼如下:
enum Option { EXIT, ADD, DEL, SEARCH, MODIFY, SORT, PRINT };
3.主文件的實(shí)現(xiàn)
代碼如下
int main() { int input = 0; //創(chuàng)建通訊錄 contact con;//通訊錄 //初始化通訊錄 Initcontact(&con); do { menu(); printf("請選擇:>"); scanf("%d", &input); switch (input) { case ADD: //增加人的信息 AddContact(&con); break; case DEL: //刪除人的信息 DelContact(&con); break; case SEARCH: //查找聯(lián)系人的信息 SearchContact(&con); break; case MODIFY: //修改聯(lián)系人信息 ModifyContact(&con); break; case SORT: break; case PRINT: //打印人的信息 PintContact(&con); break; case EXIT: printf("退出登錄\n"); break; default: printf("選擇錯(cuò)誤,請重新選擇\n"); break; } } while (input); return 0; }
寫出一個(gè)菜單來供用戶們選擇自己想要的功能,采用枚舉的方式讓程序員看代碼的時(shí)候能一目了然,一眼就也可以看出來這里要實(shí)現(xiàn)的是什么功能。
3.創(chuàng)建源文件contact.c
源文件contact.c來實(shí)現(xiàn)我們想要的功能(函數(shù)的實(shí)現(xiàn))
1.初始化通訊錄為0(Initcontact函數(shù)實(shí)現(xiàn))
//初始化通訊錄為0 void Initcontact(contact* cp) { cp->sz = 0;//通訊錄中人的數(shù)量先初始化為0 memset(cp->data, 0, sizeof(cp->data));//數(shù)組內(nèi)存中每個(gè)字節(jié)初始化為0
2.增加通訊錄聯(lián)系人信息(AddContact函數(shù)實(shí)現(xiàn))
先判斷通訊錄人數(shù)是不是滿了,滿了就無法添加,沒滿就添加聯(lián)系人信息。
代碼如下:
//增加聯(lián)系人的信息 void AddContact(contact* cp) { if (cp->sz == MAX) { printf("通訊錄已滿,無法添加\n"); return; } //增加一個(gè)人的信息 printf("請輸入名字:>"); scanf("%s", cp->data[cp->sz].name); printf("請輸入年齡:>"); scanf("%d", &(cp->data[cp->sz].age)); printf("請輸入性別:>"); scanf("%s", cp->data[cp->sz].sex); printf("請輸入電話:>"); scanf("%s", cp->data[cp->sz].tele); printf("請輸入地址:>"); scanf("%s", cp->data[cp->sz].addr); cp->sz++; printf("增加成功\n"); }
3.打印通訊錄聯(lián)系人信息( PintContact函數(shù)實(shí)現(xiàn))
代碼如下:
//打印聯(lián)系人的信息 void PintContact(const contact* cp) { //打印標(biāo)題 int i = 0; printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年齡", "性別", "電話", "地址"); for (i = 0; i < cp->sz; i++) { printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n", cp ->data[i].name, cp -> data[i].age, cp -> data[i].sex, cp -> data[i].tele, cp -> data[i].addr); } }
增加完聯(lián)系人信息之后我們可以打印出來看一看。
4.刪除通訊錄聯(lián)系人信息 (DelContact函數(shù)實(shí)現(xiàn))
首先判斷通訊錄里有沒有聯(lián)系人,沒有就無需刪除,有的話就根據(jù)查找函數(shù)查找通訊錄成員名字來刪除所對應(yīng)的信息。
代碼如下:
static int FindByName(contact* cp, char name[]) { int i = 0; for (i = 0; i < cp->sz; i++) { if (strcmp(cp->data[i].name, name) == 0) { return i; } } return -1; } //刪除聯(lián)系人信息 void DelContact(contact* cp) { char name[MAX_NAME] = { 0 }; if (cp->sz == 0) { printf("通訊錄為空,無需刪除\n"); return; } //1.查找要?jiǎng)h除的人 //有沒有 printf("請輸入要?jiǎng)h除人的名字\n"); scanf("%s", name); int pos = FindByName(cp, name); if (pos == -1) { printf("要?jiǎng)h除的人不存在\n"); return; } //2.刪除 int i = 0; for (i = pos; i < cp -> sz - 1; i++) { cp->data[i] = cp->data[i + 1]; } cp->sz--; printf("刪除成功\n"); }
5.查找通訊錄聯(lián)系人信息( SearchContact函數(shù)實(shí)現(xiàn))
根據(jù)查找函數(shù)查找通訊錄成員名字來刪除所對應(yīng)的信息。
代碼如下
/查找聯(lián)系人信息 void SearchContact(contact* cp) { char name[MAX_NAME] = { 0 }; printf("請輸入要查找人的名字\n"); scanf("%s", name); int pos = FindByName(cp, name); if (pos == -1) { printf("要查找的人不存在\n"); return; } else { printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年齡", "性別", "電話", "地址"); printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n", cp->data[pos].name, cp->data[pos].age, cp->data[pos].sex, cp->data[pos].tele, cp->data[pos].addr); } }
6.修改聯(lián)系人信息(ModifyContact函數(shù)實(shí)現(xiàn))
根據(jù)查找函數(shù)查找通訊錄成員名字來修改所對應(yīng)的信息。
代碼如下:
//修改聯(lián)系人的信息 void ModifyContact(contact* cp) { char name[MAX_NAME] = { 0 }; printf("請輸入要修改人的名字\n"); scanf("%s", name); int pos = FindByName(cp, name); if (pos == -1) { printf("要修改的人不存在\n"); return; } else { printf("請輸入名字:>"); scanf("%s", cp->data[pos].name); printf("請輸入年齡:>"); scanf("%d", &(cp->data[pos].age)); printf("請輸入性別:>"); scanf("%s", cp->data[pos].sex); printf("請輸入電話:>"); scanf("%s", cp->data[pos].tele); printf("請輸入地址:>"); scanf("%s", cp->data[pos].addr); printf("修改成功\n"); } }
部分功能結(jié)果圖:
總結(jié):
上述簡單實(shí)現(xiàn)了通訊錄的增刪改查功能,寫出了一個(gè)簡易通訊錄
到此這篇關(guān)于C語言實(shí)現(xiàn)簡易通訊錄實(shí)例的文章就介紹到這了,更多相關(guān)C語言通訊錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語言代碼實(shí)現(xiàn)通訊錄管理系統(tǒng)
- C語言實(shí)現(xiàn)通訊錄系統(tǒng)程序
- C語言實(shí)現(xiàn)簡單的通訊錄管理系統(tǒng)
- 用C語言實(shí)現(xiàn)通訊錄
- C語言實(shí)現(xiàn)可增容動(dòng)態(tài)通訊錄詳細(xì)過程
- C語言與C++動(dòng)態(tài)通訊錄超詳細(xì)實(shí)現(xiàn)流程
- C語言動(dòng)態(tài)與靜態(tài)分別實(shí)現(xiàn)通訊錄詳細(xì)過程
- C語言靜態(tài)動(dòng)態(tài)兩版本通訊錄實(shí)戰(zhàn)源碼
- C語言實(shí)現(xiàn)通訊錄功能的流程與代碼
相關(guān)文章
C語言實(shí)現(xiàn)實(shí)驗(yàn)設(shè)備管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)實(shí)驗(yàn)設(shè)備管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼,防止DLL加載不到配置和文件,需要的朋友可以參考下2017-09-09C語言實(shí)現(xiàn)天氣信息管理系統(tǒng)
這篇文章主要介紹了C語言實(shí)現(xiàn)天氣信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06基于matlab MFCC+GMM的安全事件聲學(xué)檢測系統(tǒng)
這篇文章主要為大家介紹了基于matlab MFCC+GMM的安全事件聲學(xué)檢測系統(tǒng)實(shí)現(xiàn)及源碼示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02