C語言實現(xiàn)簡易通訊錄實例
一、問題描述
用C語言來寫一個簡易的通訊錄
二、功能介紹
通訊錄
1.通訊錄中能夠存放1000個人的信息
每個人的信息:
名字,年齡,性別,電話,地址
2.增加人的信息
3.刪除人的信息
4.修改指定人的信息
5.查找指定人的信息
6.排序
二、實現(xiàn)流程
1.創(chuàng)建通訊錄
1.創(chuàng)建頭文件contact.h
頭文件contact.h用來實現(xiàn)類型的定義和函數(shù)的聲明。
2.定義結構體類型(struct peoInfo)
一個人的信息包含名字,年齡,性別,電話,地址,所以我們要定義一個結構體類型才能完整的表述。
寫一個結構體類型struct peoInfo存放一個人的信息
代碼如下:
/類型的定義 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.定義通訊錄結構體類型(struct contact)
因為要存放1000個這樣的人的信息,所以我們創(chuàng)建一個結構體類型的數(shù)組data。再創(chuàng)建一個變量sz來表示這個數(shù)組的下標,data數(shù)組中存第一個人信息的時候,我們放在下標為sz的位置,這個時候讓我們的sz等于0,存第二個人的信息的時候,讓我們的sz等于1,這樣后續(xù)就方便我們通過下標的方式找到存入的每一個人的信息。
代碼如下:
peoInfo data[MAX];//存放添加進來的人的信息 int sz;//記錄的是通訊錄中有效信息的個數(shù)
上述代碼加起來就構成了我們的通訊錄,很明顯這也是一個結構體。
代碼如下:
//通訊錄 typedef struct contact { peoInfo data[MAX];//存放添加進來的人的信息 int sz;//記錄的是通訊錄中有效信息的個數(shù) }contact;
4.#define定義標識符常量
為了后續(xù)我們方便隨時調整通訊錄的大小所以我們把數(shù)組的數(shù)字挨個用#define定義標識符常量
代碼如下:
#define MAX_NAME 20 #define MAX_SEX 10 #define MAX_TELE 12 #define MAX_ADDR 30 #define MAX 1000
5.功能實現(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)系人......選擇錯誤,重新選擇,選擇重新開始等等。
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.主文件的實現(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("選擇錯誤,請重新選擇\n"); break; } } while (input); return 0; }
寫出一個菜單來供用戶們選擇自己想要的功能,采用枚舉的方式讓程序員看代碼的時候能一目了然,一眼就也可以看出來這里要實現(xiàn)的是什么功能。
3.創(chuàng)建源文件contact.c
源文件contact.c來實現(xiàn)我們想要的功能(函數(shù)的實現(xiàn))
1.初始化通訊錄為0(Initcontact函數(shù)實現(xiàn))
//初始化通訊錄為0 void Initcontact(contact* cp) { cp->sz = 0;//通訊錄中人的數(shù)量先初始化為0 memset(cp->data, 0, sizeof(cp->data));//數(shù)組內存中每個字節(jié)初始化為0
2.增加通訊錄聯(lián)系人信息(AddContact函數(shù)實現(xiàn))
先判斷通訊錄人數(shù)是不是滿了,滿了就無法添加,沒滿就添加聯(lián)系人信息。
代碼如下:
//增加聯(lián)系人的信息 void AddContact(contact* cp) { if (cp->sz == MAX) { printf("通訊錄已滿,無法添加\n"); return; } //增加一個人的信息 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ù)實現(xiàn))
代碼如下:
//打印聯(lián)系人的信息 void PintContact(const contact* cp) { //打印標題 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ù)實現(xiàn))
首先判斷通訊錄里有沒有聯(lián)系人,沒有就無需刪除,有的話就根據查找函數(shù)查找通訊錄成員名字來刪除所對應的信息。
代碼如下:
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.查找要刪除的人 //有沒有 printf("請輸入要刪除人的名字\n"); scanf("%s", name); int pos = FindByName(cp, name); if (pos == -1) { printf("要刪除的人不存在\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ù)實現(xiàn))
根據查找函數(shù)查找通訊錄成員名字來刪除所對應的信息。
代碼如下
/查找聯(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ù)實現(xiàn))
根據查找函數(shù)查找通訊錄成員名字來修改所對應的信息。
代碼如下:
//修改聯(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"); } }
部分功能結果圖:
總結:
上述簡單實現(xiàn)了通訊錄的增刪改查功能,寫出了一個簡易通訊錄
到此這篇關于C語言實現(xiàn)簡易通訊錄實例的文章就介紹到這了,更多相關C語言通訊錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于matlab MFCC+GMM的安全事件聲學檢測系統(tǒng)
這篇文章主要為大家介紹了基于matlab MFCC+GMM的安全事件聲學檢測系統(tǒng)實現(xiàn)及源碼示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02