《数据结构课设.doc》由会员分享,可在线阅读,更多相关《数据结构课设.doc(15页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上 南通大学计算机科学 与技术学院 数据结构课程设计 班 级:软件外包111 学 号: 姓 名:张 艳 娇 专心-专注-专业通讯录管理系统的设计与实现班级:软外111 学号: 姓名:张艳娇一 需求分析通讯录是用来记载和查询联系人通讯信息的工具。电子通讯录已成为手机、电子词典等电子设备中不可缺少的工具软件!请设计一个能够满足这种话需求的软件。(1)设计要求:设计通讯录数据的逻辑结构和物理结构通讯录至少包括下列数据信息:姓名、电话、单位完成输入,显示,查找,插入,删除,保存,读入,排序,修改,移动,退出等基本功能软件易用,操作简单根据自己使用通讯录的体会,扩充其他功能,如按
2、姓名查找,按号码查找,按序号删除等设计足够多的测试用例(2)案例设计:合理的设计:ID 姓名 单位 住址 电话1张三计001 2-102 2李四计002 3-103 3王五计003 2-204 4陈六计001 3-303 不合理的设计:6 钱八 软002 3-201 二 概要设计(1)功能划分与定义,功能结构图退出输入修改显示查找插入删除保存读入排序移动主程序菜单选择结束(2)数据的逻辑设计、抽象的数据类型描述struct tchar ID3; char Name8;/姓名char Depart20;/单位char Address30;/住址 char TEL12;/电话;三 详细设计(1)
3、存储设计:0 1 2 3 4 5 . i . N(2) 界面设计: 数据的输入输出均从文本中实现数据的输入读取:数据的输出保存(实现添加操作后的输出):(3) 各功能的算法描述: 输入读取数据:int Input(t*pt)/从文本中读取数据cout*正在读取文件信息,请稍后 *n; int i; ifstream in(info.txt); if(!in)/打开不成功coutpt-IDpt-Namept-Departpt-Addresspt-TEL;in.close();cout* 数据读入成功 ! *n;cout-n; return i-1;/顺便统计读入的数据个数输出保存数据:int O
4、utput(t*pt,int Size)/把数据写入文件 ofstream out(out.txt);if(!out)/打开不成功coutfailed to open out.txt!n;exit(1); for(int i=0;iSize;i+,pt+)/打开成功,依次写入文件outIDtNametDeparttAddresstTELendl;out.close();return 1; 插入信息:int Insert(t*pt,int Size)/往文件中插入数据int i,size;coutsize;for(i=0;isize;i+)/从键盘输入数据在写入文件 coutptSize+i.I
5、DptSize+i.NameptSize+i.DepartptSize+i.AddressptSize+i.TEL;if(Output(pt,Size+size)/判断数据写入是否成功cout* 恭喜!数据插入成功 *n;elsecout * 操作失败,请稍后再试 !*n;return Size+size;删除信息:void Delete(t*pt,int Size)/按序号删除信息char id3,choice;int i=0;cout- 请输入要删除信息的ID: -n;coutid;while(iID,id)/同查找,找到后跳出 pt+; i+; if(!strcmp(pt-ID,id)/
6、找到了,删除信息!cout您要删除的信息为:n;coutIDtNametDeparttAddresstTEL;coutchoice;switch(choice)case y:pt-ID0=0;pt-Name0=0;pt-Depart0=0;pt-TEL0=0;pt-Address0=0;if(Output(pt,Size)/将新信息写入文件cout- 恭喜 ! 信息删除成功! -n;cout-n;elsecout- 操作失败,请稍后再试 ! -n;cout-n;case n:break;default:cout选择有误!n;break;else cout- 抱歉,没有找到相关信息 ! -n;c
7、out-n; 按姓名查找:void Search_name(t*pt,int Size)/按姓名查找信息int i=0;char name8;cout- 请输入要查询信息的姓名: -n;coutname;while(iName,name)/同上,查找pt+;i+;if(!strcmp(pt-Name,name)/找到后输出 cout- 查到的信息为: n; cout-n; coutIDt姓名t单位t住址t电话n; cout-n; coutIDtNametDeparttAddresstTELendl; cout-n;else cout- 抱歉,没有找到相关数据 -n;cout-n;按电话查找:v
8、oid Search_tel(t*pt,int Size)/按电话查找信息 int i=0; char tel12; cout- 请输入要查询信息的电话: -n; couttel;while(iTEL,tel)/同上,查找 pt+; i+;if(!strcmp(pt-TEL,tel)/找到后输出cout- 查到的信息为: n;cout-n;coutIDt姓名t单位t住址t电话n;cout-n;coutIDtNametDeparttAddresstTELendl;cout-n;else cout- 抱歉,没有找到相关数据 -n;cout-n;显示信息:void Display(t*pt,int
9、Size)/显示信息int i;coutIDt姓名t单位t住址t电话n;cout-n;for(i=0;iSize;i+,pt+)/依次输出文件中的信息coutIDtNametDeparttAddresstTELendl;cout-n;修改信息:void Change(t*pt,int Size)/修改数据void Display();int i=0;char id3;char name8;char depart20; char tel12;char address30;cout- 输入要修改信息的姓名: -n;coutname;while(iName,name)/遍历数组,查找数据,若查到跳出
10、循环 pt+; i+;if(!strcmp(pt-Name,name)/如果找到,则开始修改 coutidnamedepartaddresstel; strcpy(pt-ID,id);strcpy(pt-Name,name);strcpy(pt-Depart,depart);strcpy(pt-Address,address); strcpy(pt-TEL,tel);if(Output(pt,Size)/将修改信息写入文件,并判断是否写入成功cout- 恭喜! 信息修改成功 ! -n;cout-n;elsecout- 操作失败,请稍后再试 ! -n;cout-n;else cout- 抱歉,没
11、有找到相关信息 ! -n;cout-n;按电话索引排序:void Sort_tel(t*pt,int Size)/按电话排序cout按号码排序为:n;coutIDt姓名t单位t住址t电话n;cout-n;for(int i=0;iSize;i+) for(int j=0;j0)t m=ptj;ptj=ptj+1;ptj+1=m;for(i=0;iSize;i+,pt+)coutIDtNametDeparttAddresstTELendl;cout-n;按姓名索引排序:void Sort_name(t*pt,int Size)/按姓名排序cout按姓名排序为:n;coutIDt姓名t单位t住址t
12、电话n;cout-n;for(int i=0;iSize;i+) for(int j=0;j0)t m=ptj;ptj=ptj+1;ptj+1=m;for(i=0;iSize;i+,pt+)coutIDtNametDeparttAddresstTELendl;cout-n;四 调试、测试、分析1:软件使用说明及测试案例的运行情况的记录(1)软件使用说明:主菜单选择:根据软件提示,选择08之间任意一个数,进入功能选择界面。1-插入信息 输入插入信息的ID,姓名,单位,住址,电话2-删除信息 输入要删除的信息的ID,询问是否确认删除(y/n) 【确认删除y】 (1)输入的ID存在:恭喜 ! 信息删
13、除成功!(2)输入的ID不存在:操作失败,请稍后再试 !【不删除n】 退出此菜单,进入主菜单【输入的不是y或n】 选择有误3-按姓名查找 请输入要查询信息的姓名 【输入姓名正确】 输出查到的信息 【输入姓名不正确】 输出:抱歉,没有找到相关数据 4-按电话查找请输入要查询信息的ID 【输入ID正确】 输出查到的信息 【输入ID不正确】 输出:抱歉,没有找到相关数据 5-显示信息 依次输出文件中的信息 6-修改信息输入要修改信息的姓名:【找到该姓名】 输入修改后的ID、姓名、单位、住址、电话,修改信息写入文件则输出:恭喜! 信息修改成功 !否则输出:操作失败,请稍后再试 !【找不到该姓名】 抱歉
14、,没有找到相关信息 ! 7-按电话排序 按电话号码的大小进行冒泡排序并输出比较结果8-按姓名排序按姓名的大小进行冒泡排序并输出比较结果0-选择退出程序 输出谢谢使用!再见!如果输入的操作选择不是0-8,则输出:输入数字有误,请重新输入。2:测试案例运行记录:进入主菜单: (1)显示信息的输出:(2)插入信息的输入输出:(3)按姓名查找的输入输出:存在此人时:不存在此人时:(4)按电话查找的输入输出:存在此电话时:不存在此电话时:(5)修改信息的输入输出:(6)按号码排序的输入输出:(7)按姓名的输入输出:(8)删除信息:输入的ID正确:输入ID不正确:3:对主要算法进行复杂度分析插入算法:在顺
15、序表中进行插入,时间复杂度为O(n)删除算法:在顺序表中进行删除,时间复杂度为O(n)按姓名查找信息:顺序查找,时间复杂度为O(n)按电话查找信息:顺序查找,时间复杂度为O(n)显示信息:主要操作为输出,时间复杂度为O(n)按电话排序:使用的是冒泡排序,所以时间复杂度为O(n2)按姓名排序:使用的是冒泡排序,所以时间复杂度为O(n2)五 总结和体会这次数据结构课程设计终于顺利完成了,在设计中遇到了很多问题,一开始手足无措,但经过老师的一步步教导,从设计功能模块图开始,到设计逻辑结构、存储结构,然后是各种功能的算法设计与实现,尤其每解决一个bug的时候会有欣喜的感觉!在数据结构的课程设计过程中,
16、我们不断调试运行,发现错误,不断改正,不断领悟,不断获取。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!我认为,在这学期的数据结构的课程设计中,不仅培养了独立思考、动手的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了将理论付诸实践的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。