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)識(shí)符常量
為了后續(xù)我們方便隨時(shí)調(diào)整通訊錄的大小所以我們把數(shù)組的數(shù)字挨個(gè)用#define定義標(biāo)識(shí)符常量
代碼如下:
#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測(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.枚舉方法定義編號(hào)
代碼如下:
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("請(qǐng)選擇:>");
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ò)誤,請(qǐng)重新選擇\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é)初始化為02.增加通訊錄聯(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("請(qǐng)輸入名字:>");
scanf("%s", cp->data[cp->sz].name);
printf("請(qǐng)輸入年齡:>");
scanf("%d", &(cp->data[cp->sz].age));
printf("請(qǐng)輸入性別:>");
scanf("%s", cp->data[cp->sz].sex);
printf("請(qǐng)輸入電話:>");
scanf("%s", cp->data[cp->sz].tele);
printf("請(qǐng)輸入地址:>");
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ù)查找通訊錄成員名字來刪除所對(duì)應(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("請(qǐng)輸入要?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ù)查找通訊錄成員名字來刪除所對(duì)應(yīng)的信息。
代碼如下
/查找聯(lián)系人信息
void SearchContact(contact* cp)
{
char name[MAX_NAME] = { 0 };
printf("請(qǐng)輸入要查找人的名字\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ù)查找通訊錄成員名字來修改所對(duì)應(yīng)的信息。
代碼如下:
//修改聯(lián)系人的信息
void ModifyContact(contact* cp)
{
char name[MAX_NAME] = { 0 };
printf("請(qǐng)輸入要修改人的名字\n");
scanf("%s", name);
int pos = FindByName(cp, name);
if (pos == -1)
{
printf("要修改的人不存在\n");
return;
}
else
{
printf("請(qǐng)輸入名字:>");
scanf("%s", cp->data[pos].name);
printf("請(qǐng)輸入年齡:>");
scanf("%d", &(cp->data[pos].age));
printf("請(qǐng)輸入性別:>");
scanf("%s", cp->data[pos].sex);
printf("請(qǐng)輸入電話:>");
scanf("%s", cp->data[pos].tele);
printf("請(qǐng)輸入地址:>");
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)容請(qǐng)搜索腳本之家以前的文章或繼續(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-06
C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ 設(shè)置和獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼,防止DLL加載不到配置和文件,需要的朋友可以參考下2017-09-09
C語言實(shí)現(xiàn)天氣信息管理系統(tǒng)
這篇文章主要介紹了C語言實(shí)現(xiàn)天氣信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
基于matlab MFCC+GMM的安全事件聲學(xué)檢測(cè)系統(tǒng)
這篇文章主要為大家介紹了基于matlab MFCC+GMM的安全事件聲學(xué)檢測(cè)系統(tǒng)實(shí)現(xiàn)及源碼示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02

