通讯录的改进——动态通讯录

一、前言

上次通讯录的实现有两大明显缺点:

①大小固定,一旦确定,不可修改,必须提前留够充足的空间

②信息全部保存在内存中,程序退出后便全部丢失,下次进入程序需要重新输入,无法永久保留

本篇博客重点来解决这两大问题,使通讯录的使用更加符合常理。

二、基本框架

框架基本上是不变的,只是在退出通讯录的时候稍有不同。

改进后的通讯录在退出时先要将信息保存起来,然后再调用函数销毁通讯录。

三、基本功能

这里重点说一下需要修改和新增的函数,其他函数的实现是不变的,可以参考上篇通讯录的实现。

(1)初始化通讯录

在初始化通讯录的时候,需要使用malloc()或calloc()为通讯录提前开辟较小的空间。然后还需要将存储在文件中的信息读取到通讯录里,即需要加载通讯录。

(2)加载通讯录

首先,打开文件。接着利用fscanf()函数按照保存信息时的格式将数据读取到通讯录里。

每读取一个人的信息后,需要检测当前通讯录的容量。

最后,关闭文件。

(3)检测容量

如果当前存储的人数等于了当前的最大容量,则使用realloc()函数增加最大容量,否则什么也不做。

(4)增加信息

与之前相比,只需要在增加信息前检测一下容量。

(5)保存通讯录

首先,以写的形式打开文件。接着按照相应的格式将数据以此存入文件。最后,关闭文件。

(7)销毁通讯录

由于改进后的通讯录是动态开辟的,存放在内存中的堆区,因此最好在退出程序前利用free()销毁对应的空间。

四、总结

至此,通讯录的优化便完成了,逻辑上更加合理了。

最后,优化后的完整代码如有需要可以通过application-examples.git获取。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值