全功能版通讯录(c语言) 设计说明概要_c语言课程设计通讯录

2020-02-28 其他范文 下载本文

全功能版通讯录(c语言) 设计说明概要由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“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、抽象数据类型定义: /* **********************存储结构设计**************************** */ /**************节点类型设计***************/ typedef struct{ char group_num[10];//组号 char group_name[20];//组名称 int mem_num;//组内联系人个数 }GroupType;//存放一条组信息 typedef struct{ char mem_num[10];//联系人号 char mem_name[20];//联系人名称 char mem_sex[2];//联系人性别 char mem_phone[20];//联系人电话

char mem_addr[50];//联系人地址

char mem_group_num[10];//联系人所在组的组号 }LinkmanType;/*************线性表存储结构设计**************/ typedef struct groupnote{ GroupType groupdata;//组数据信息 struct groupnote *next;}*GroupNote;//组表节点 typedef struct{ GroupNote head, tail;//分别指向组信息链表的头结点和尾节点 int lenth;//链表中元素个数 }GroupList;typedef struct linkmannote{ LinkmanType linkmandata;struct linkmannote *next;}*LinkmanNote;//联系人表节点 typedef struct{ LinkmanNote head, tail;//分别指向联系人信息链表的头结点和尾节点 int lenth;//链表中元素个数

}LinkmanList;/*************基本操作列表******************/ /*************组管理模块功能函数**************/ ◎void addGroup(;//操作类型号是1 ◎void deleteCroup(;//操作类型号是2 ◎void deleteAllGroup(;//操作类型号是3 ◎void selectGroup(;//操作类型号是4 ◎void printAllGroup(;//操作类型号是5 /*************联系人模块功能函数**************/ ◎void addLinkman(;//操作类型号是6 ◎void updateLinkman(;//操作类型号是7 ◎void deleteLinkman(;//操作类型号是8 ◎void deleteAllLinkman(;//操作类型号是9 ◎void selectMenu(;//操作类型号是10 ○ selectByName(;//查询子菜单下的类型号1 ○ selectByPhone(;//子菜单下的类型号2 ○ selectByGroup(;//子菜单下的类型号3 ◎void printAllLinkman(;//操作类型号是12 /*************系统基本操作**************/

◎ void systemMenu(;//系统菜单

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

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

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

◎GroupNote selectGroupPub(char *name;/*组查询的公共函数*/ ◎LinkmanNote selectLinkmanPub(char *name;/*联系人查询的公共函数*/ ◎void deleteByGroup(char *groupname;/*删除某一组下的所有联系人信息*/◎void printLinkman(LinkmanNote ln;/*输出ln节点里联系人的信息*/

三、详细设计

详细设计中主要用了PDA(问题分析图来进行设计。考虑到链表基本操作书上都有,所以这里凡是涉及到链表的基本操作,都没有给出,只轻轻带过。到代码实现部分再具体实现这些功能。

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

1、系统菜单函数systemMenu(的PAD图: List all menu items Choose the option addGroup(1 3 4 5 6 7 8 9 10 11 0 deleteGroup(deleteAllGroup(selectGroup(printAllGroup(addLinkman(updateLinkman(deleteLinkman(deleteAllLinkman(selectMenu(printAllLinkman(exitSystem(option=

2、查询菜单函数selectMenu(的PDA图: List all menu items Choose the option selectByName(1 2 3 0selectByPhone(selectByGroup(systemMenu(option=

3、加载数据文件函数readFromFile(:加载数据文件时,首先判断数据文件存不存在。如

果不存在,输出相关错误信息并返回主菜单;若存在,则打开数据文件group.dat和linkman.dat。接着,判断数据文件是不是为空。如果为空,则什么都不做;若不为空,则建立两个链表group和linkman,并循环将group.dat和linkman.dat两个数据文件中的每一条记录分别加载到group和linkman两个链表中。注意,每读入一条新纪录,则动态开辟一个存储节点,将记录信息读入这个节点,然后将这个节点采用尾插法插入相应链表中。

对应PDA图如下: Open the files Files exist? return nothing Load the files Files empty? Load the files Build linklist group def Build linklist linkman Until group.dat end Until linkman.dat end Malloc a new note Read current record into the note Insert the note into the linkman Malloc a new note Read current record into the note Insert the note into the group

4、保存数据函数writeToFile(:将group和linkman两个链表中的所有信息分别存储到group.dat和linkman.dat中。每存储进一个节点则将对应的节点删除(头删除法,释放存储空间。由于存储节点时,从链表的首位置依次循环将所有节点都写入数据文件。对应的PAD 图如下: Until the group empty Write current note into group.dat Delete current note from group Until the group empty Write current note into linkman.dat Delete current note from linkman Close the files5、退出系统函数exitSystem(:退出系统,退出时将保存内存中的数据信息。Call the writeToFile(Exit the system6、组查询公共函数selectGroupPub(char *name: /************************组管理功能模块详细设计*************************/

1、添加组函数addGroup(:开辟一个新的结点,提示用户输入要添加的组信息,并判断这

个组是否已经存在。如果存在,返回错误信息;若不存在则将这个节点插入到group链表的尾部。最后判断用户是否要继续添加。如果是,则继续完成上述过程;否则,返回主菜单。

Build the group

Group not exist? While choice Malloc a new note Put in new info Print error info Info already exist? Insert the note into group Put in choice(0/12、修改组函数updateGroup(:首先,提示用户输入所要修改的组的组名称。然后查询,如果组不存在,则输出出错信息并返回主菜单。否则,提示用户输入新的组信息替换原来的组信息。

Put in group_name Error and ruturn Info not exist? Put in the new info2、删除组信息函数deleteGroup(:删除某一个组时,同时将这个组下的所有联系人信息也

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

Put in the group_name

Info not exist? Error and return Are you sure? Return Select from linkman and delete all info belonged to the group note Delete this group note3、删除所有组信息函数deleteAllGroup(:删除所有组信息时,首先删除所有联系人,再删

除所有组。

Delete All Linkman Delete all group Return Are you sure ?

4、组查询函数selectGroup(:因为组信息不多,所以这里只提供一个查询函数,即按组的名称来查询。首先,用户输入组名称,系统在group链表中查询,若存在,则输出该组的信息;否则出错返回。

Put in group_name Select it from group Print the info Find? Return

5、输出所有组信息函数printAllGroup(:这个就是将group链表的所有节点信息输出来。/************************联系人管理功能模块详细设计*************************/ 由于addLinkman(,updateLinkman(,deleteLinkman(,deleteAllLinkman(,printAllLinkman(和组管理模块对应功能是基本相同的,所以这里就不再对它们进行详细设计了。下面主要对查询功能给出详细设计。

1、按名字查询函数selectByName(:首先,用户输入所要查询的联系人姓名。系统按照联

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

Put in mem_name Select it from linkman Print the info Find? Error and return2、按电话号码查询函数selectByPhone(:首先,用户输入所要查询的电话号码。系统按照电话号码在linkman链表中进行查询,找到符合条件的则输出该联系人的所有信息。否则,输出出错信息。

Put in mem_phone Select it from linkman Error and return Find?

Print the info2、按组查询函数selectByGroup(:首先,用户输入所要查询的组的组名称。系统按照组名

称在group 链表中查询,如果该组不存在则出错并返回;否则,取得该组的组号,并按照组号在linkman 链表中进行查询,找到符合条件的则输出该组下所有联系人的信息。否则,输出出错信息。注意:由于一个组下的联系人可能不止一个,所以,系统在查询联系人信息时应该遍历全表,而不能像上两个函数一样,找到符合条件的信息就可以退出查找了。

Put in group_name Select it from linkman by the group_num Error and return Find? Gain the group_num Select it from group Error and return Print the info Find?

《全功能版通讯录(c语言) 设计说明概要.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
全功能版通讯录(c语言) 设计说明概要
点击下载文档
相关专题 c语言课程设计通讯录 设计 概要 通讯录 c语言课程设计通讯录 设计 概要 通讯录
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文