【C语言】通讯录

在我们学习了指针、结构体、动态内存管理、文件操作,这里我们可以做一个小项目来巩固所学的知识点——通讯录。

源代码链接:

【C语言】通讯录——源代码_Brant_zero的博客-CSDN博客

目录

一、通讯录中变量的创建

二、通讯录功能函数的实现

2.1 通讯录的初始化

2.2 添加联系人信息

2.3 扩容检查并扩容​

2.4 查找联系人

2.5 删除联系人

2.6 修改联系人信息

2.7 联系人排序

2.8 打印通讯录:

2.9 销毁通讯录:

2.10 保存通讯录信息

2.11 加载通讯录信息

三、主函数、菜单的实现


一、通讯录中变量的创建

为了实现这个通讯录,首先我们要创建一个结构体变量用来存放联系人的信息。为了方便后期调整,我们可以使用#define定义这些常量。

这时我们思考,我们创建的这个通讯录不可能只存放一个人的信息,所以我们可以创建一个结构体数组来存放多个人的数据,数组中每一个元素就是一个人的信息,即一个结构体变量。

与此同时,我们还需要知道当前通讯录存放了多少了人的信息,即(sz)——通讯录中已存放的个数。

这时我们可以再创建一个结构体变量将结构体数组和结构体大小(sz)放入其中,来更好的管理数据。

但是我们再想,我们根本不知道通讯录会存放多少人,每次直接开辟一个固定大小的结构体数组会十分尴尬:①数组开辟的太大,没有那么多人需要存放。②数组开辟的太小,程序放不下信息。

这时我们就要使用所学过的知识——动态内存开辟,定义一个max,表示当前数组开辟的大小,如果sz等于了max,表示当前开辟的空间不够了,我们就再开辟10个空间(这个空间可以随意)

接下来我们就可以创建一个通讯录Text_Contact。


二、通讯录功能函数的实现

2.1 通讯录的初始化

2.2 添加联系人信息

在录入信息之前我们要进行判断,判断当前sz是否等于Max,判断是否需要扩容 

2.3 扩容检查并扩容

2.4 查找联系人

2.5 删除联系人

删除联系人的前提是通讯录中有此人的信息,并且能找到该联系人在通讯录数组中的下标,所以我们在实现删除联系人之前要调用SEARCH_PeoInfo函数。

 

2.6 修改联系人信息

实现修改信息的作用也是要先找到此人的下标,所以我们可以再次调用我们的SEARCH_PeoInfo函数。

2.7 联系人排序

这里我们使用两种方式排序:1.年龄排序。2.首字母排序

这里我们可以使用qsort进行排序。

 qsort的使用主要就是compare函数的编写。

我们对通讯录进行排序,其实就是对通讯录数组进行排序,第一个参数我们将通讯录数组传入就可以了,数组名表示首元素的地址嘛。

第二个参数表示排序的数目,我们可以直接使用总结构体中的sz,存放了多少个数据就排序多少 个人。

第三个参数就是单个元素的大小,我们使用sizeof来计算一个元素的大小,即sizeof(p1->arr[0])

第四个参数,比较函数的书写。

按年龄排序

我们直数组中第r1个元素中的年龄与第r2个元素中年龄进行比较就可以了。

因为我们比较的是通讯录中的元素,所以要先进行强制类型转换,转为单个通讯录指针类型(PeoInfo*),然后使用成员访问操作符即可访问到成员的age。

按姓名排序

按姓名排序与上面的方法类似,只不过还要使用一层strcmp函数用来比较字符串的大小。代码如下,还是比较简单的。

2.8 打印通讯录:

2.9 销毁通讯录:

2.10 保存通讯录信息

2.11 加载通讯录信息


三、主函数、菜单的实现


希望大家能留下一个赞哦,你的三连就是我写博客的动力!!!

谢谢各位,我们下次再见。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brant_zero2022

素材免费分享不求打赏,只求关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值