大家先赞后看,养成好习惯
你们的点赞和关注还有收藏就是我的动力!!!
目录
前言
“通讯录”是基于顺序表的基础上实现的项目,要熟悉顺序表才比较容易看懂和完成通讯录项目。在这个博客里面不会来介绍之前的东西,之前没看懂的可以到这【数据结构之“顺序表”】-优快云博客
一、通讯录文件的创建和联系人结构体定义
1.1 文件创建
加上之前顺序表的两个文件一共是五个文件。
test.c是实现联系人储存的文件,contact.c是通讯录的源文件,contact.h是通讯录的头文件,seqlist.c和seqlist.h是之前的顺序表的源文件和头文件。(源文件是功能实现的代码,头文件是用来包含一些头文件和定义一些东西)
1.2 联系人结构体定义
我们这里的联系人信息包含:姓名、性别、年龄 、电话、地址
typedef struct PersonInfo//通讯录
{
char name[Max_name];//姓名
char gender[Max_gender];//性别
int age;//年龄
char tel[Max_tel];//电话
char addr[Max_addr];//地址
}PeoInfo;//命名为PeoInfo
二、通讯录的功能实现
2.1通讯录初始化
我们就调用一下顺序表的初始化就可以了,因为在顺序表的arr中存放每一个结构体(也就是联系人的信息)就是PersonInfo。
//通讯录初始化
void contactInit(contact * con)
{
//这里的con就是sl也就是一个结构体指针初始化为NULL
//我们直接调用顺序表的初始化
SLInit(con);//初始化
}
2.2通讯录销毁
销毁也同初始化,直接调用顺序表的销毁。
//通讯录销毁
void contactDestroy(contact* con)
{
SLDestroy(con);//销毁
}
2.3添加联系人
也就是给结构体里面的人赋初值,然后调用一下顺序表的插入函数(头插、尾插都行)。
//添加通讯录联系人
void contactAdd(contact* con)
{
PeoInfo info;//同SL sl;定义一个结构体,方便使用
printf("请输入联系人姓名:\n");
scanf("%s", info.name);
printf("请输入联系人性别:\n");
scanf("%s", info.gender);
printf("请输入联系人年龄:\n");
scanf("%d", &info.age);
printf("请输入联系人电话:\n");
scanf("%s", info.tel);
printf("请输入联系人地址:\n");
scanf("%s", info.addr);
SLPushFront(con,info);//头插联系人
printf("添加联系人成功!\n");
}
2.4删除联系人
删除联系人有很多方法,可以通过姓名、性别、年龄 、电话、地址 五种方法随便选择一种。
我这里演示的是通过姓名来删除联系人,剩下的几种大家可以自行尝试!!。
想法我们要遍历每一个结构体里面的info.name然后判断与要被删除的联系人姓名,然后返回下标进行了(顺序表本质就是一个数组,可以通过下标来找到),调用查找联系人返回下标函数,我们比较的是字符使用要用strcmp函数,然后调用一下顺序表指定位置的删除就可以了。
//查找联系人,并返回下标
int contactFindName(contact* con,char name[Max_name])
{
//还可以通过其他来返回下标,地址,电话都行,要看传来的参数是什么。
for (int i = 0;i < con->size;i++)
{
if (0 == strcmp(con->arr[i].name, name))//strcmp字符串比较函数
{
//找到了
return i;
}
}
//没找到
return -1;
}
//