C语言课程实践:通讯录管理

这是一个大一上学期期末的c语言课程实践作业,比较简单,用到的都是基础知识。

首先看题目:

题目3:通讯录程序设计

设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。电话号码可由字符和数字组成。(用文件保存)实现功能:

(1)信息录入功能

(2)信息浏览功能

(3)信息查询功能

(4)信息修改功能

确定选题之后,我做的第一步是分析题目要求:

要求:

  1. 添加

因为要录入的信息是str和int混合的,所以我决定使用结构体数组来储存信息。

为了更人性化的设计,我想到了新建联系人列表和添加联系人(后期才想到的)

  1. 删除

因为是结构体数组,思路是先定位要删除的人,再用后面的数据直接覆盖,跟普通数组一样

  1. 查询

利用字符串的对比,遍历所有数据

其次,将录入或者修改的信息用二进制文件保存

思路:录入数据:先输入数据——>打开文件——>写入数据——>保存(关闭文件)

修改数据(增,删,查,找):打开文件——>读取数据——>关闭文件——>修改数据——>打开文件——>写入数据——>保存(关闭文件)

ok,这个程序的总体思路就是这样,多次重复使用的部分用函数封装,最后各部分代码如下:

part1:

根据题目要求储存的信息定义结构体数组

struct phonebook
{
    char name[20];//用户姓名
    char origin[20];//籍贯
    char num1[12];//电话号码1
    char num2[12];//电话号码2
    char email[20];//邮箱
};

part2:

主函数如下:

part3:

各个子函数如下:

meanu(菜单)

new_info

save函数:保存数据

接收new_info返回的数据条数,并且保存数据,

new_info和save配合使用即可输入并且保存数据(实现菜单中的第一个功能)

case 1:n =new_info(p); save(p,n); break;

doc_long(获取文件中数据的条数)

由于本人才疏学浅,学识有限,只能做到执行一次程序只使用一个功能,所以我要读取之前保存的数据的时候会遇到一个尴尬的问题:无法知道文件中数据的条数,所以doc_long这个函数应运而生。

在获得了数据的条数之后,便可以读取数据:

read

由此第二个功能,删除联系人即可实现

del_info

output:输出联系人信息

写这个功能的时候我遇到一个问题,就是无论我文件里面有几条数据,我只能输出第一位联系人的信息,后来我发现是因为我的指针没有自增,因此,指针的自增是非常重要的

doc_num = doc_long(p); read(p, doc_num); output(p, doc_num); break;

配合doc_long read两个函数,可以轻松实现输出联系人的功能

search:查找某一人的信息

方法跟删除联系人的时候是一样的,我直接照搬上面的代码,再稍微修改一下

modify:修改联系人信息

add_info:增加联系人信息

此功能一开始写的时候是比较棘手的,没啥头绪,卡了我比较久的一个功能。后来一想,也没有那么难

思路:先把指针移动到当前数组的最后,再在数组的末尾添加数据就好了

clear:清空通讯录

最后附上我的完整程序:

总结:整个作业写下来,并不是一帆风顺的,文章开头提到的那些思路也不是从一开始就想到的,是在不断写程序的过程中总结出来的,怎样写方便,怎样写简单,都是慢慢摸索的,有一种船到桥头自然直的感觉,使我这次实践受益匪浅。

以上就是一位c语言初学者的一份期末作业,希望分享给和我一样的初学者一起交流,如果有什么改进方案或者错误的地方·,请务必私信我,谢谢

你可能感兴趣的:(c语言,c语言)