C语言通讯录系统——结构体数组(1)

381 阅读4分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

需求分析

制作一个通讯录程序,该程序具有查找、添加、修改、删除功能。通讯录包括:姓名,电话,街道,城市,省,邮编等。该系统需要能够提供下列功能:
(1)系统以菜单方式工作。
(2)创建通讯录。(信息用文件保存)
(3)添加通讯录:在已有通讯录的末尾,写入新的信息,并返回选单。
(4)查询:(按照姓名或电话号码查询),如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
(5)修改:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
(6)删除:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
(7)显示:显示通讯录中的所有记录。
(8)退出:退出选单。

概要设计

image.png
功能模块图如上所示,主要分为10个模块:初始化模块、显示菜单模块、添加联系人、删除联系人、查找联系人、修改联系人、显示联系人、排序联系人、清空联系人、退出系统并存档。\

部分函数流程图如下:

输入函数

image.png\

删除函数

image.png\

查找函数

image.png

修改函数

image.png

读取文件

image.png

详细设计

所有成员的记录用结构体数组存储,每个结构体包括姓名、电话号码、街道、城市、省份、邮编这几个数据项,这些都用char字符型数组进行存储。上述的各项功能由定义函数分别实现,由主函数控制各个函数的调用;整个程序产生于文本界面,通过一些字符简单对界面进行装饰。具体的各个函数设计思路如下:
1、导入通讯录函数:通过fopen函数打开指定文件,并用fread函数将文件内的数据读入结构体数组中,这两个标准库函数都定义在stdio.h 头文件中。
2、保存文件函数:通过将文件名字符串作为参数传入,用fwrite函数将当前结构体数组中的全部数据写入文件中并关闭文件。该函数无返回值。
3、录入新成员信息函数:先判断有效信息条数,调用增容函数,成功就提示用户输入各项信息数据,如果增容失败给用户进行一个提示。
4、删除记录函数:输入需要删除人的名字后,先对通讯录进行判断是否为空,如果为空就提示“通讯录已空,无法删除!”,如果不为空,遍历所有结构体并找出符合的删除,并将后面的所有数据向前移动一个位置。最后提示用户删除成功。
5、查找记录函数:输入需要查找人的姓名,调用索引姓名函数,如果没找到返回值为-1,输出查找人的信息不存在,如果找到了就返回找到的值,显示那个被查找人的所有信息。
6、修改函数:输入需要修改人的姓名,调用索引姓名函数,如果没找到返回值为-1,输出要修改人的信息不存在,如果找到了就返回找到的值,对这项数据进行修改。
7、显示所有人信息:定义一个变量i,通过i的自增,循环显示所有人的信息。
8、对姓名进行排序:这是调用了冒泡算法,首先判断通讯录是否为空,通讯录不为空后再执行操作。临时变量tmp进行中间存储达到一个排序的效果。用flag做判断,如果等于1就结束提示已经排好序了。排序主要调用strcmp函数进行对比。
9、清空通讯录:给有些信息记录进行赋值为0达到清空通讯录效果。
10、退出函数:释放数据域以及指针。
11、菜单函数:用户可以通过清晰的字符界面完成需要的操作。
12、主函数:用switch语句来判断用户输入的指令,转向具体的函数来执行,并根据函数的返回值判断执行结果并予以提示。结束程序前需要按0进行保存数据。