一、前言
上次通讯录的实现有两大明显缺点:
①大小固定,一旦确定,不可修改,必须提前留够充足的空间
②信息全部保存在内存中,程序退出后便全部丢失,下次进入程序需要重新输入,无法永久保留
本篇博客重点来解决这两大问题,使通讯录的使用更加符合常理。
二、基本框架
框架基本上是不变的,只是在退出通讯录的时候稍有不同。
改进后的通讯录在退出时先要将信息保存起来,然后再调用函数销毁通讯录。
三、基本功能
这里重点说一下需要修改和新增的函数,其他函数的实现是不变的,可以参考上篇通讯录的实现。
(1)初始化通讯录
在初始化通讯录的时候,需要使用malloc()或calloc()为通讯录提前开辟较小的空间。然后还需要将存储在文件中的信息读取到通讯录里,即需要加载通讯录。
(2)加载通讯录
首先,打开文件。接着利用fscanf()函数按照保存信息时的格式将数据读取到通讯录里。
每读取一个人的信息后,需要检测当前通讯录的容量。
最后,关闭文件。
(3)检测容量
如果当前存储的人数等于了当前的最大容量,则使用realloc()函数增加最大容量,否则什么也不做。
(4)增加信息
与之前相比,只需要在增加信息前检测一下容量。
(5)保存通讯录
首先,以写的形式打开文件。接着按照相应的格式将数据以此存入文件。最后,关闭文件。
(7)销毁通讯录
由于改进后的通讯录是动态开辟的,存放在内存中的堆区,因此最好在退出程序前利用free()销毁对应的空间。
四、总结
至此,通讯录的优化便完成了,逻辑上更加合理了。
最后,优化后的完整代码如有需要可以通过application-examples.git获取。