详解通讯录(静态版、动态增长版、文件存储版)(上)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 详解通讯录(静态版、动态增长版、文件存储版)(上)

前言:Hello! 我是@每天都要敲代码!截止到今天我们已经写了几个小项目:改版的猜数字游戏、三子棋、扫雷、计算器;今天就在写一个关于通讯录的小项目,感兴趣的小伙伴也可以去回顾一下我们已经写过的小游戏和小项目!今天就带大家一起写一个通讯录,从静态版本---》动态版本---》文件存储版本;不断的进行优化和完善!


在写通讯录之前我们先理清一下思路:


1.通讯录能够存放1000个人的信息;每个人的信息:名字(name)+年龄(age)+性别(sex)+电话(tel)+地址(addr);


2.具体的功能我们至少需要实现:增(Add)、删(Del)、查(Search)、改(Modify)功能;其它的功能由读者自由发挥!


3.我们写成项目工程的模式,主要保包括三个模式:


40f3a87603cf42ffa88b7f1a65a4b29c.png

🧐1. 大体框架


在实现具体功能之前,我们还是先测试一下大体框架的逻辑是不是行得通!和改版的猜数字游戏、三子棋、扫雷、计算器类似;框架都是使用do...while和switch语句!


bb7fc7586344432fbdd307868642c190.png


❤️逻辑测试:

0051383e738d4847971957566997f0ad.png



🧐2.通讯录具体功能设计环节

🤏2.1 创建所需结构体


80dbea990cf34fef926eacff3eecf8ca.png


❤️解析:

(1)首先要创建一个结构体PeoInfo,成员包括:name、sex、age、tele、addr;


(2)之后在创建一个结构体数组data[MAX_SIZE];用数组来存储信息;通过数组的下标sz来访问对应的成员变量,并记录当前有效的数据个数;


(3)还需要一个sz用来记录当前通讯录实际的大小;用来标志实际的有效人数!


🤏2.2 初始化通讯录InitContact

74d74ab299c140549d326c0c7f7c85fc.png



❤️解析:

(1)才开始我们要进行初始化,也可以直接Contact con = {0}的形式,直接全部初始化;


(2)也可以分开初始化,利用结构体的访问形式pc->sz = 0;对于数组,我们利用内存设置函数memset来初始化,以字节为单位一个字节一个字节的初始化!


🤏2.3 添加联系人AddContact


0f21b79c08e94ba2a9f691c5987bb38e.png

❤️解析:

(1)想要添加新的联系人,首先要看通信录还有没有空间;所以要先进行判满处理;

(2)之后输入个人的信息存储到数组里,包括:name、sex、age、tele、addr;


(3)添加完成后,就让sz++;记录当前通讯录实际有效人数!


🤏2.4 打印联系人PrintContact

820d8feb7fbc4121a69d5cd15e3cc651.png


❤️解析:

(1)首先先打印一个标题;增加可读性!然后在利用for循环打印实际的个人信息!


(2)前面的数字代表域宽:比如-20就代表域宽是20(长度不够20用空格填充),负号代表左对齐,默认是右对齐的!


(3)\t表示tab键,相当于一个分隔符!


🤏2.5 删除联系人DelContact


1e0dbf65dba54b1faaacb613433797b1.png


❤️解析:

要想删除肯定离不开查找,包括下面的查找、修改都需要查找,我们就不妨封装一个函数;遍历整个数组通过名字来进行查找;找到就返回下标,找不到返回-1;


(1)先判断通讯里面是否为空,为空就不需要操作,直接结束;


(2)我们要查找肯定有一个依据,这里就通过姓名查找;所以我们要输入一个要查找的姓名;通过姓名来定位它的下标;


(3)假如要删除下表为pos的信息;就只需要把pos后的数据往前移动,覆盖掉pos位置的信息就可以了;


(4)删除成功后,就把sz--;说明数组里的有效数据减1!


🤏2.6 查找联系人SearchContact


0c5ecdbd08c34703b76f400ab34b98d5.png


❤️解析:

(1)还是要根据姓名进行查找,找不到就结束退出;在这里也可以添加一个通讯录是否为空的判断,不添加也没问题;为空说明也是找不到的,返回pos = -1,逻辑是没问题的;


(2)找到了,我们就根据返回的pos下标,打印当前的信息就可以了!


🤏2.7 修改联系人ModifyContact


cc0668de714649b0bf177dea5598ae4a.png

❤️解析:

(1)还是要根据姓名进行查找,找不到就结束退出;


(2)找到了,根据返回的pos值修改;怎样修改呢?直接重新输入就可以了!


🤏2.8 排序联系人SortByAge

698b70af95114a628f434dd3899ee6ba.png


❤️解析:

(1)先进行判空处理,结构体为空;就不需要排序;


(2)用过年龄进行排序,利用冒泡排序算法;注意交换时,是结构体与结构体之前的交换;而不是一个结构里的age与另一个结构体的age进行交换;这样会改变原有一个结构体数据的值属性!


🤏2.9 清空联系人CleanContact


113f7f6f9cb949619632e8ea0604f15f.png

❤️解析:

(1)给出提示,询问是不是确定要清空;输入yes才会被清空,直接把sz置为0,并break跳出循环;如果输入no就取消清空并break跳出循;


(2)如果输入的不是yes/no就会一直让你重新输入!


🧐test.c部分


991c7780726848c5a7f3aabdb422f83c.png



🧐contact.h部分


4feaa0d70f2f4b8ba6a5ed8e15eea742.png


🧐contact.c部分


d3c292fef9b649819a0d00c35fb0e0b8.png

相关文章
|
存储 文件存储 C语言
【C语言】通讯录3.0 (文件存储版)
通讯录是一种记录联系人信息的工具,包括姓名、电话号码、电子邮件地址、住址等。 文章的一二三章均于上一篇相同,可以直接看第四章改造内容。 此通讯录是基于通讯录2.0(动态增长版)的基础上进行增加文件操作功能,请先看系列文章第二篇,再看本篇博客。
41 1
|
文件存储 C语言
|
存储 文件存储
详解通讯录(静态版、动态增长版、文件存储版)(下)
详解通讯录(静态版、动态增长版、文件存储版)(下)
63 0
详解通讯录(静态版、动态增长版、文件存储版)(下)
|
存储 运维 监控
阿里云的文件存储NAS使用心得
阿里云的文件存储NAS使用心得
318 0
|
存储 弹性计算 固态存储
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
阿里云服务器1TB存储多少钱?系统盘最大可选到500GB,数据盘选到1TB价格为3655元一年。也可以选择对象存储OSS和文件存储NAS
5976 2
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
|
存储 弹性计算 人工智能
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
阿里云文件存储NAS极速型NAS低时延,适合企业级时延敏感型核心业务;文件存储CPFS拥有高吞吐和高IOPS,适合高性能计算业务;通用型NAS大容量、高性价比、弹性扩展,支持低频介质,适合通用类文件共享业务。
1635 0
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
|
2月前
|
存储 NoSQL 文件存储
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
|
存储 弹性计算 并行计算
在高性能计算(HPC)场景下,阿里云存储的文件存储产品的实践
在高性能计算(HPC)场景下,阿里云存储的文件存储产品具有以下的应用需求和实践
408 4
|
存储 弹性计算 监控
|
弹性计算 Linux DataWorks
阿里云ecs搭建简易ftp服务器-用于DataWorks文件存储及依赖校验
很多企业客户在使用阿里云产品时,经常需要与FTP服务器进行文件交互,诸如跨IDC任务done文件依赖,跨账号、部门临时数据交互等场景。这里简要记录阿里云ecs搭建简易ftp服务器用于上述场景答疑的过程。