我们需要用C语言模拟一个通讯录可以用来存储联系人的信息
每个人的信息包括:
姓名、电话、性别、住址、年龄
功能包括:
- 新增联系人
- 删除联系人
- 查找联系人
- 修改联系人
- 查看所有联系人
- 以名字排序所有联系人
- 清空通讯录
目录
2.1.查询联系人名字函数的定义和实现(contact.c文件)
一、创建头文件和.c文件
首先我们需要创建三个文件(库函数和函数声明的contact.h头文件,函数定义的contact.c文件,函数应用的主函数test.c文件)
一个用于存放我们所需的函数一个用于测试,一个用于实现我们自己所写函数的功能。
1.创建我们的主函数和我们的test函数
2.优化测试函数
写出测试函数后发现case后表示的数字不是很明白,所以我们用枚举类型来改进一下测试函数
枚举类型的取值默认都是从0开始的刚好对应了我们的case的可能取值
假如我通讯录包含一个人的信息有名字,年龄,性别,电话,住址,要实现这样一个功能肯定是要用到我们的结构体的。。
3.声明结构体
但是由于联系人的信息如果固定写死的话不方便以后修改,所以我们干脆用#define定义一些宏来取代数组元素个数。
4.定义宏
如果我们只是有了一个通讯录,如果里面有5个人员信息的时候我们却不知道,那么后面的人员信息就不知道往什么地方存,那么我们就可以在定义一个变量用来记录我们当前通讯录里面有多少个人,那么就可以在定义一个结构体用来存我们的通讯录和通讯录里面有多少人。
这里用指针用来开辟动态内存。
二、构建菜单
通讯录的信息有了,接下来我们就需要的告诉用户使用我们通讯录的时候是怎样操作的,我们这里给上一个menu的菜单莱提示用户怎样进行操作
三、初始化通讯录
然后就是根据菜单的提升输入内容,然后我们就可以根据用户输入的内容来实现我们对应的功能。在此之间我们需要先初始化一下我们的通讯录,不然里面存的一些数字是一些随机数,影响我们后续的使用。
1.初始化函数的声明(头文件)
2.初始化函数的实现(contact.c文件)
3.初始化函数的应用(test.c文件)
四、添加联系人
在需要对结构体内部值修改的时候我们需要用到址调用,当我们把这样一个结构体类型传过来的我们就用一个结构体的指针来接收他。
1.添加联系人函数的声明(头文件)
2.添加联系人函数的实现的声明(contact.c文件)
当我们拿到这个结构体的时候得确保一下如果这个通讯录满了的话我们就可以给空间进行增容如果没满我就可以把人员信息往里面开始存了。存的方式也很简单,我们只需要那这这个指针变量去指向date的这个结构体里面的sz就可以了
2.1.增容函数的定义和实现(contact.c文件)
3.添加联系人函数的应用(test.c文件)
写到这里就可以看下效果了
五、删除指定联系人
删除联系人也很简单有两种方法一种是我们从数组里面找到这个数然后把后面的数一个一个往前面拿,另一个是把最后一个元素放在我们需要删除的那个元素位置在进行排序就完成了。那么这里我们采用第一种方法,首先要确定通过什么方式来找到结构体中对应的这个元素,假如我们就用名字的方法来删除所对应的元素,我们可以定义一个name变量,然后通过遍历这个结构体来找,如果找到了我们就把后面的数依次往前拿,如果遍历完都没有找到这个名字,那么就说明这个联系人不存在我们的通讯录。
1.删除指定联系人函数的声明(头文件)
2.删除指定联系人函数的实现(contact.c文件)
2.1.查询联系人名字函数的定义和实现(contact.c文件)
我们发现好像我们总是需要通过名字来实现我们的查找功能,那么我们这里是不是可以把查找某个人也封装成一个函数,每一次需要使用的时候就可以直接去调用它。我们假设如果这个函数返回一个-1就说明没有找到我们需要经行操作的那个人,如果是找到了,我们就返回找到了的那个下标。