1、 C 程序设计课程设计报告 通讯录管理系统通讯录管理系统 一、设计目的与内容一、设计目的与内容 设计一个简单通讯录管理系统,可以存储以下数据:姓名,地址,邮编, Email,qq,编号,年龄。 手机号码。并且可以实现增加或删除记录、按人名或电话号码进行查询记录、对 记录中的姓 名和电话号码进行修改、利用文件保存记录、显示所有保存的记录等功能。核心 数据结构用到的结构体采用动态内存分配和链表结构。 使用文件进行存储和管理。程序启动时可从文件中读取通信信息,或从键 盘输入通信 信息;运行过程中如添加或删除记录时也可对文件进行存取;退出前可选择 将学生信息 保存到文件中。 二、算法的基本思想二、算法
2、的基本思想 功功 能能 模模 块块 通讯录管理系统通讯录管理系统 查询模块查询模块 输入模块输入模块 更新更新模块模块 输出输出模块模块 数据结构定义如下:数据结构定义如下: 一、一、 struct person 二、二、 char name10; 三、三、 char addr20; 四、四、 char postnumber10; 五、五、 char email25; 六、六、 char QQ15; 七、七、 char phone15; 八、八、 int age; 九、九、 int num; 十、十、 struct person *next; 按按 号号 码码 查查 找找 显显 示示 记记 录
3、录 按按 人人 名名 查查 找找 显显 示示 记记 录录 增增 加加 记记 录录 删删 除除 记记 录录 从从 文文 件件 读读 入入 修修 改改 记记 录录 输输 出出 到到 文文 件件 从从 键键 盘盘 输输 入入 读读 文文 件件 并并 输输 出出 到到 屏屏 幕幕 十一、十一、 ;/定义结构体输入模块定义结构体输入模块 1 从键盘输入数据从键盘输入数据: 通过主函数调用insert函数,并将adr头指针传递给insert函数,执行 函数, 通过指针开辟空间并且输入结构体数据建立起一个链表, 用t 指针指向第 一个结点,调用结束后,将t指针返回到调用位置处赋值给adr指针。 2 从文件读
4、入数数据:从文件读入数数据: 运行程序时,通过主函数调用read函数,在read函数中读出文件 contact.dat中存储的数据并显示在屏幕上,在read函数中定义了指向结构体 的指针p,q,head,通过动态内存分配不断开辟一个结构体大小的空间节点, 把从文件中读出的数据存储到开辟的空间中,通过p,q指针的移动将各节点 连接成一个链表,使head指向头结点,将head指针返回到调用位置处赋值 给adr指针。 十二、十二、 查询模块查询模块 在此模块中可以实现按姓名或电话号码查询记录功能,通过主函数调用 namesearch或phonesearch函数,在函数中输入要查询的记录的人名或电话
5、号码,通过指针p从指向链表的头结点开始将节点中的姓名或电话号码与要查 找的姓名或电话号码进行比较,若相等,则将此节点数据输出到屏幕,若p指 向最后一个节点时,依然没找到查询的记录的人名或电话号码,则显示查找的内 容不存在。 十三、十三、 更新模块更新模块 通过增加、删除、修改记录,实现模块更新。增加记录即为从键盘输入记录, 删除和修改记录依然通过删除和修改链表中的节点来实现,删除或修改时,在函 数中输入要删除或修改的记录的人名,通过指针p从指向链表的头结点开始查 找需要删除或修改的记录,若找到则通过移动指针p实现删除或修改操作。 四、四、输出模块输出模块 创建链表完成时可以将链表数据输出到文件
6、contact.dat 中。程序运行时可 从此文件中读出数据到屏幕中,并自动创建一个链表,并将指向链表头结点指针 p返回到调用处,以保证程序能继续执行其他模块。 三、主要功能模块流程图三、主要功能模块流程图 头结点指针头结点指针 adr 传递给指针参传递给指针参 数数t struct person *p=t; char name10; int m=0; 输入要查找的姓名输入要查找的姓名 name P!=NULL p-name=nam p=p-nex; N Y N m+; Y 输出记录输出记录 按 姓 名 查按 姓 名 查 找记录流程找记录流程 图图: m=0 查找内查找内 容不存容不存 在在 Y N 头结点指针头结点指针 adr 传递传递 给给 指针参数指针参数 定义指针变量定义指针变量p,e,动态开辟一个节点空间,动态开辟一个节点空间, 将其将其地址赋值给地址赋值给e。 输输 入入 数数 据据 到到 节节 点点 空空 间间 t=NULL t=e; p=e; p-next=NULL;