一、什么是通讯录
上文我们讲过顺序表底层是数组,而通讯录项目又是基于顺序表得以实现,那么本篇我们主要讲通讯录是如何实现的。
通讯录在我们日常生活中是必不可少的,其功能主要是对联系人数据的存储,添加,删除,修改和查找(昨天我们已经实现了顺序表的增删查改)。
下面我们进行通讯录的实现。
二、通讯录的初始化
由于通讯录是在顺序表的基础上实现的,故我们因包含各自的头文件。但是头文件不能相互包含,因此我们引出一个定义:前置声明。
前置声明是C++中的一种技术,目的是为了告诉编译器某个实体的存在,以便在稍后的代码中引用它,而不必在声明的地方提供完整的定义,这样有利于提高编译速度并且减少代码的依赖性。
我们仍然需要使用typedef重定义一个结构体名称PerInfo(PersonInformation),给定联系人的相关信息:姓名(name),性别(gender),年龄(age),电话(tel)和住址(addr)。创建5个数组存放相关信息,用#define预处理指令指定每个数组空间的大小(方便后续的修改)。创建通讯录变量Contact con(此处con就是顺序表中的sl)。
补充:age的类型是整形。
三、通讯录功能的实现
1.增加数据
以下通讯录所有功能的实现都借于顺序表函数。
这里我们创建通讯录变量PerInfo info,打印提示信息。需要注意的是age是整形,scanf时要加取地址(&)符号。
2.删除数据
定义一个新联系人姓名char name[NAME_MAX];
在删除数据时我们需要创建一个查找函数(这里我们通过名字来查找)FindByName(),然后通过循环遍历原数组姓名。用strcmp判断两字符串name是否相等(结果返回0)。找到了返回一个>0的数(这里我们返回原数组姓名下标),否则返回一个<0的数(无效的数 -1(下标>0))。
3.查找修改数据
和删除数据类似同样需要调用FindByName()函数,这里不再做过多解释。
4.销毁及保存数据
我们肯定不想每次添加联系人都从头开始,这里我们借用文件操作的知识来创建一个ContactSave()函数来保存数据。
创建FILE*的指针pf保存文件地址。调用fopen函数以二进制"wb"形式写入"contact.txt"文件当中,再判断pf的有效性。而后通过循环调用fwrite函数将联系人信息保存到文件当中即可。
最后进行通讯录销毁操作。
上述所使用的文件操作函数及参数可在CPlusPlus官网查询。
四、通讯录菜单打印
各位先尝试自己来写,这部分会在后续讲到。
有兴趣可以自己实现一个测试函数。
建议大家每完成一个功能就进行测试,这样有利于减少程序后续错误并且节省时间,是一个良好的编程习惯。
到此为止顺序表及应用以全部完成,感谢各位铁铁耐心看完,创作不易,多谢各位点赞和关注了。