- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1引言
通讯录是用来记载、查询联系人通讯信息的工具。电子通讯录已成为手机、电子词典等电子设备中不可缺少的工具软件。通讯录管理系统能有效地管理通讯录相关信息,包括输入、查询、添加、修改、删除等功能,该软件给用户提供了一个简单的人机界面,用户可以根据提示信进行各种操作。
本设计使用的编程语言是C语言。
2问题分析
(1) 本题目主要涉及线性表的基本操作。
(2) 通讯录中的记录通常按记载顺序先后有序,因此选用线性表;如果考虑到很少删除联系人,并且新增联系人又添加在表尾,则可采用顺序表;但是如果考虑到在任何位置插入或删除操作,因涉及经常性的插入和删除,则应优先考虑采用链表。
通过上述分析,我选择单链表存储结构,通讯录存储结构如下:
typedef struct { //通讯录结点类型
char num[5]; //编号
char name[9]; //姓名
char phone[13]; //电话
char email[30]; //邮箱号
char kind[16]; //类别
} DataType;
typedef struct node { //结点类型定义
DataType data; //结点数据域
struct node *next; //结点指针域
} ListNode;
3总体设计
该通讯录系统是采用链表结构来实现其新建联系人列表、插入、修改、删除、查询功能的。首先通过尾插法建立链表,并依次输入联系人的姓名、联系电话、邮箱号类别等相关信息。再编写插入、查找、修改、删除、输出等函数,分别对链表中的结点实行以上操作。其系统模块结构图如下图所示:
通讯录管理系统信息插入
通讯录管理系统
信息插入
退出
信息查询
信息修改
信息删除
输入
图3-1 系统模块结构图
输入:记录的录入。
显示;通讯录显示。
查找:按指定方式,输入关键字,查找指定记录。
插入:实现记录的添加或在指定位置插入新记录。
删除:提供指定记录的删除功能。
修改:提供修改某条记录的功能。
退出:结束程序运行。
总体流程图如下:
开始功能选择
开始
功能选择
输入
信息插入
信息查询
信息修改
信息删除
退出
结束
图3-2 系统模块功能图
4详细设计
该通讯录管理系统可以划分为录入模块、查询模块、修改模块、删除模块、输出模块等。使用链表优化了插入操作,通过比较和指针移动来实现其修改和删除功能,而大大减少了元素的移动。在录入模块里,需要通过新建链表来录入联系人的相关信息,并判断录入的有关信息是否合法;插入操作是通过在链表里添加结点来实现的;查询模块可以实现按编号或姓名来查询链表里已有的联系人并输出其相关信息;修改模块是先调用查找函数在链表中找到记录并确认修改后,重新输入联系人的信息来达到修改的目的的;同样,删除模块也是通过调用查找函数查找到相关记录并确认删除后,来执行删除操作并释放该结点的;输出模块是通过调用函数来输出链表里的记录的。因此,对该通讯录系统实现的操作函数有:
LinkList CreateList(void);
void InsertNode(LinkList head,ListNode *p);
ListNode *ListFind(LinkList head);
void DelNode(LinkList head);
void PrintList(LinkList head);
void ChangeNode(LinkList head);
4.1 录入模块
录入联系人的信息。
4.1.1设计思路
(1) 添加联系人函数LinkList CreateList(void);
(2) 定义指向结构体变量的指针;
(3) 移动指针,找到插入结点;
(4) 在要插入的结点输入信息。
4.1.2流程图
结束 新建链表继续添加
结束
新建链表
继续添加
n
y
输入编号
输入姓名
输入电话
输入邮箱号
输入类别
录入是否重复
输入的类别是否合法
此联系人已存在
无该分组
y
y
n
n
开始
结束
返回主菜单
图4-1 录入模块功能图
4.2 查询模块
查找联系人的信息。
4.21设计思路为:
(1) 定义查找联系人函数ListNode *ListFind(LinkList head);
(2) 定义指向结构体变量的指针;
(3) 移动指针,找到待查找结点;
(4) 输出待查找联系人的相关信息。
4.22流程图
按编号查询查询按何种方式查询
按编号查询
查询
按何种方式查询
查找成功
查找失败
查找失败
查找成功
aa
b
该联系人不存在
输出该联系人的记录
开始
按姓名查询
结束
图4-2
文档评论(0)