全功能版通讯录c语言 设计说明.docx

上传人:b****0 文档编号:10136341 上传时间:2023-05-23 格式:DOCX 页数:12 大小:346.69KB
下载 相关 举报
全功能版通讯录c语言 设计说明.docx_第1页
第1页 / 共12页
全功能版通讯录c语言 设计说明.docx_第2页
第2页 / 共12页
全功能版通讯录c语言 设计说明.docx_第3页
第3页 / 共12页
全功能版通讯录c语言 设计说明.docx_第4页
第4页 / 共12页
全功能版通讯录c语言 设计说明.docx_第5页
第5页 / 共12页
全功能版通讯录c语言 设计说明.docx_第6页
第6页 / 共12页
全功能版通讯录c语言 设计说明.docx_第7页
第7页 / 共12页
全功能版通讯录c语言 设计说明.docx_第8页
第8页 / 共12页
全功能版通讯录c语言 设计说明.docx_第9页
第9页 / 共12页
全功能版通讯录c语言 设计说明.docx_第10页
第10页 / 共12页
全功能版通讯录c语言 设计说明.docx_第11页
第11页 / 共12页
全功能版通讯录c语言 设计说明.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

全功能版通讯录c语言 设计说明.docx

《全功能版通讯录c语言 设计说明.docx》由会员分享,可在线阅读,更多相关《全功能版通讯录c语言 设计说明.docx(12页珍藏版)》请在冰点文库上搜索。

全功能版通讯录c语言 设计说明.docx

全功能版通讯录c语言设计说明

通讯录管理系统设计说明书

一、需求分析

本通讯录是一款具有基本通讯信息管理功能的系统。

包括基本添加,修改,删除,查询和输出等功能。

其中联系组是为了更好地管理联系人信息,如常用的组有亲戚,家人,朋友,同学等。

用户添加的信息存储到文件当中,本系统的数据存储文件包括group.dat和linkman.dat,其中group.dat存储组信息;而linkman.dat则存储联系人的信息。

用户登陆系统后,根据需要,选择操作类型。

系统一启动,便将相关数据文件装载进内存,如果数据文件不存在,系统将会创建新的数据文件。

并将数据文件内的记录存放在链表数据结构类型中,接下来用户所有的操作,都是对链表的操作。

当用户退出系统时,系统将自动将链表的信息存进数据文件。

本系统中包含两个链表:

group链表和linkman链表,分别对应group,dat

和linkman,dat两个数据文件。

1、组信息管理模块:

◎添加新组信息:

当用户添加一个新组时,这个新组将被添加到group.dat文件的末尾,如果添加的组已存在则返回出错信息。

◎修改已有组信息:

用户首先输入所要修改的联系组,然后系统查询该联系组存不存在。

若存在,则要求用户输入新的信息,并进行替换;若不存在,则返回错误信息。

◎删除已有组:

用户首先输入所要删除的组,然后系统查询该组存不存在。

如果存在,则先删除该组下的所有联系人的信息,再删除该组;如果所要删除的信息不存在,则返回错误信息。

◎删除所有已有组信息:

该操作没有输入值。

如果原来group.dat文件中没有联系组,返回错误信息;否则,删除所有联系组,同时删除各个组下的联系人信息。

◎组查询功能:

按用户输入的查询条件,在group.dat文件中查询相关信息。

若存在

符合条件的组,则输出相应的组信息;若不存在,则返回出错信息。

◎输出所有组信息:

将group.dat中所有组全部输出来。

 

2、联系人信息管理模块:

◎添加联系人:

当用户添加一个新联系人时,这个联系人的信息将被添加到group.dat文件的末尾,若添加的联系人已存在,则返回出错信息。

添加一个联系人时,他所属的组成员个数同时增加1。

◎修改联系人:

用户首先输入所要修改的联系人,然后系统查询该联系人存不存在。

若存在,则要求用户输入新的信息,并进行替换;若不存在,则返回错误信息。

◎删除联系人:

用户首先输入所要删除的联系人,然后系统查询该联系人存不存在。

如果存在,则删除,并返回相关信息;如果所要删除的信息不存在,则返回错误信息。

删除一个联系人时,他所属的组成员个数同时减少1。

◎删除所有联系人:

该操作没有输入值。

如果原来linkman.dat文件中没有联系联系人,返回错误信息;否则,删除所有联系人信息。

◎联系人查询功能:

按用户输入的查询条件,在linkman.dat文件中查询相关信息。

若存在符合条件的联系人,则输出相应的联系人信息;若不存在,则返回出错信息。

而且提供不同种类的查询,如:

按联系人姓名来查询,按联系人电话来查询,按联系人所在的组来查询。

◎输出所有联系人信息:

将所有联系人信息输出。

 

二、概要设计

1、抽象数据类型定义:

/***********************存储结构设计*****************************/

/**************节点类型设计***************/

typedefstruct{

chargroup_num[10];//组号

chargroup_name[20];//组名称

intmem_num;//组内联系人个数

}GroupType;//存放一条组信息

typedefstruct{

charmem_num[10];//联系人号

charmem_name[20];//联系人名称

charmem_sex[2];//联系人性别

charmem_phone[20];//联系人电话

charmem_addr[50];//联系人地址

charmem_group_num[10];//联系人所在组的组号

}LinkmanType;

/*************线性表存储结构设计**************/

typedefstructgroupnote{

GroupTypegroupdata;//组数据信息

structgroupnote*next;

}*GroupNote;//组表节点

typedefstruct{

GroupNotehead,tail;//分别指向组信息链表的头结点和尾节点

intlenth;//链表中元素个数

}GroupList;

typedefstructlinkmannote{

LinkmanTypelinkmandata;

structlinkmannote*next;

}*LinkmanNote;//联系人表节点

typedefstruct{

LinkmanNotehead,tail;//分别指向联系人信息链表的头结点和尾节点

intlenth;//链表中元素个数

}LinkmanList;

/*************基本操作列表******************/

/*************组管理模块功能函数**************/

◎voidaddGroup();//操作类型号是1

◎voiddeleteCroup();//操作类型号是2

◎voiddeleteAllGroup();//操作类型号是3

◎voidselectGroup();//操作类型号是4

◎voidprintAllGroup();//操作类型号是5

/*************联系人模块功能函数**************/

◎voidaddLinkman();//操作类型号是6

◎voidupdateLinkman();//操作类型号是7

◎voiddeleteLinkman();//操作类型号是8

◎voiddeleteAllLinkman();//操作类型号是9

◎voidselectMenu();//操作类型号是10

○selectByName();//查询子菜单下的类型号1

○selectByPhone();//子菜单下的类型号2

○selectByGroup();//子菜单下的类型号3

◎voidprintAllLinkman();//操作类型号是12

/*************系统基本操作**************/

◎voidsystemMenu();//系统菜单

◎voidreadFromFile();//将数据文件导入内存并存储在单链表中,系统一开始运行时,就将数据文件读入内存。

◎voidwriteToFile();//将内存单链表中的数据写入数据文件

◎voidexitSystem();//退出并保存,操作类型号是0,退出系统时自动将链表中的数据写入数据文件。

◎GroupNoteselectGroupPub(char*name);/*组查询的公共函数*/

◎LinkmanNoteselectLinkmanPub(char*name);/*联系人查询的公共函数*/

◎voiddeleteByGroup(char*groupname);/*删除某一组下的所有联系人信息*/

◎voidprintLinkman(LinkmanNoteln);/*输出ln节点里联系人的信息*/

三、详细设计

详细设计中主要用了PDA(问题分析图)来进行设计。

考虑到链表基本操作书上都有,所以这里凡是涉及到链表的基本操作,都没有给出,只轻轻带过。

到代码实现部分再具体实现这些功能。

/************************系统功能模块详细设计*************************/

1、系统菜单函数systemMenu()的PAD图:

2、查询菜单函数selectMenu()的PDA图:

3、加载数据文件函数readFromFile():

加载数据文件时,首先判断数据文件存不存在。

如果不存在,输出相关错误信息并返回主菜单;若存在,则打开数据文件group.dat和linkman.dat。

接着,判断数据文件是不是为空。

如果为空,则什么都不做;若不为空,则建立两个链表group和linkman,并循环将group.dat和linkman.dat两个数据文件中的每一条记录分别加载到group和linkman两个链表中。

注意,每读入一条新纪录,则动态开辟一个存储节点,将记录信息读入这个节点,然后将这个节点采用尾插法插入相应链表中。

对应PDA图如下:

4、保存数据函数writeToFile():

将group和linkman两个链表中的所有信息分别存储到group.dat和linkman.dat中。

每存储进一个节点则将对应的节点删除(头删除法),释放存储空间。

由于存储节点时,从链表的首位置依次循环将所有节点都写入数据文件。

对应的PAD图如下:

5、退出系统函数exitSystem():

退出系统,退出时将保存内存中的数据信息。

6、组查询公共函数selectGroupPub(char*name):

/************************组管理功能模块详细设计*************************/

1、添加组函数addGroup():

开辟一个新的结点,提示用户输入要添加的组信息,并判断这个组是否已经存在。

如果存在,返回错误信息;若不存在则将这个节点插入到group链表的尾部。

最后判断用户是否要继续添加。

如果是,则继续完成上述过程;否则,返回主菜单。

2、修改组函数updateGroup():

首先,提示用户输入所要修改的组的组名称。

然后查询,如果组不存在,则输出出错信息并返回主菜单。

否则,提示用户输入新的组信息替换原来的组信息。

2、删除组信息函数deleteGroup():

删除某一个组时,同时将这个组下的所有联系人信息也一并删除,所以进行操作之前,必须要求用户确认。

首先,提示用户输入所要删除的组的组名称。

判断该组存不存在,若不存在,出错并返回;否则,要求用户确认操作,若用户取消操作,则退出;否则,首先在linkman链表中查找该组下的所有联系人,并一一将它们删除,最后从group链表中删除该组。

3、删除所有组信息函数deleteAllGroup():

删除所有组信息时,首先删除所有联系人,再删除所有组。

4、组查询函数selectGroup():

因为组信息不多,所以这里只提供一个查询函数,即按组的名称来查询。

首先,用户输入组名称,系统在group链表中查询,若存在,则输出该组的信息;否则出错返回。

5、输出所有组信息函数printAllGroup():

这个就是将group链表的所有节点信息输出来。

/************************联系人管理功能模块详细设计*************************/

由于addLinkman(),updateLinkman(),deleteLinkman(),deleteAllLinkman(),printAllLinkman()和组管理模块对应功能是基本相同的,所以这里就不再对它们进行详细设计了。

下面主要对查询功能给出详细设计。

1、按名字查询函数selectByName():

首先,用户输入所要查询的联系人姓名。

系统按照联系人姓名在linkman链表中进行查询,找到符合条件的则输出该联系人的所有信息。

否则,输出出错信息。

2、按电话号码查询函数selectByPhone():

首先,用户输入所要查询的电话号码。

系统按照电话号码在linkman链表中进行查询,找到符合条件的则输出该联系人的所有信息。

否则,输出出错信息。

2、按组查询函数selectByGroup():

首先,用户输入所要查询的组的组名称。

系统按照组名称在group链表中查询,如果该组不存在则出错并返回;否则,取得该组的组号,并按照组号在linkman链表中进行查询,找到符合条件的则输出该组下所有联系人的信息。

否则,输出出错信息。

注意:

由于一个组下的联系人可能不止一个,所以,系统在查询联系人信息时应该遍历全表,而不能像上两个函数一样,找到符合条件的信息就可以退出查找了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2