通讯录的实现
前言
实践出真知!本文就带你用结构体相关的知识去实现一个C语言的小项目-通讯录。如果有兴趣的话也可以自己去编译器上跑跑看哦。
文章目录
整体思路与框架
在考虑做通讯录之前,我们得搞清楚我们想实现通讯录的哪些功能?1.添加联系人,2.删除联系人3.查找联系人。4.修改联系人。5.展示整个通讯录。6.对通讯录的练习人进行排序(本文是按照电话号的字典序来排的)
所以我们整体的框架就呈现出来了,程序包含三个文件:用test.c来测试整个程序的运行逻辑,用Contact.c来实现各个模块的功能,用Contact.h包含整个程序的头文件,宏,以及一些函数的声明等等。
模块化实现功能及其详解
通讯录信息的存储形式
通过定义一个结构体,里面包含一个联系人所有的相关信息。
typedef struct PeoInfor {
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char address[ADDRE_MAX];
char tel[TEL_MAX];
}PeoInfor;
再定义一个结构体,里面包含联系人的个数和用一个结构体数组包含所有联系人的信息
typedef struct Contact {
PeoInfor data[MAX];
int size;
}Contact;
初始化通讯录
void InitContact(Contact* con)
{
assert(con);
con->size = 0;
memset(con->data, 0, sizeof(con->data));
}
添加联系人
void Add_person(Contact* con)
{
assert(con);
if (con->size == MAX) printf("通讯录人数已满,添加失败\n");
printf("下面请输入您要添加的联系人的信息\n");
printf("请输入添加联系人的姓名:\n");
scanf("%s", con->data[con->size].name);
printf("请输入添加联系人的年龄\n");
scanf("%d", &(con->data[con->size].age));
printf("请输入添加联系人的性别\n");
scanf("%s", con->data[con->size].sex);
printf("请输入添加联系人的地址\n");
scanf("%s", con->data[con->size].address);
printf("请输入添加联系人的电话\n");
scanf("%s", con->data[con->size].tel);
con->size++;
}
查找某个人
int FindByname(Contact* con, char* name)
{
assert(con);
for (int i = 0; i < con->size; i++)
{
if (strcmp(name, con->data[i].name) == 0)
{
return i;
break;
}
}
return -1;
}
void Search_person(Contact* con)
{
char name[NAME_MAX];
printf("请输入您要查找的人的姓名:\n");
scanf("%s", name);
int i = FindByname(con, name);
if (i == -1)
{
printf("要查找的人不存在\n");
return;
}
printf("%-10s\t%-5s\t%-5s\t%-20s\t%-12s\n", "姓名", "年龄", "性别", "地址", "电话号码");
printf("%-10s\t%-5d\t%-5s\t%-20s\t%-12s\n",
con->data[i].name, (con->data[i].age),
con->data[i].sex, con->data[i].address,
con->data[i].tel);
}
删除联系人
void Del_person(Contact* con)