数据结构课程设计模拟手机号码薄管理.doc

上传人:仙人指路1688 文档编号:2394250 上传时间:2023-02-17 格式:DOC 页数:20 大小:196.50KB
返回 下载 相关 举报
数据结构课程设计模拟手机号码薄管理.doc_第1页
第1页 / 共20页
数据结构课程设计模拟手机号码薄管理.doc_第2页
第2页 / 共20页
数据结构课程设计模拟手机号码薄管理.doc_第3页
第3页 / 共20页
数据结构课程设计模拟手机号码薄管理.doc_第4页
第4页 / 共20页
数据结构课程设计模拟手机号码薄管理.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数据结构课程设计模拟手机号码薄管理.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计模拟手机号码薄管理.doc(20页珍藏版)》请在三一办公上搜索。

1、课程设计报告( 20112012年度第2学期)实验名称:数据结构与算法 题 目:模拟手机号码薄管理 院 系:控制与计算机工程学院班 级:信安1102班 学 号:1111290201 学生姓名: 阿克伟 指导教师: 焦润海 设计周数:1周 成 绩: 日期:2012年7月5日一、课程设计的目的与要求1 目的: 应用数据结构和算法来设计相应的程序,培养学生问题求解模块的框架设计和详细设计、相关程序实现和调试能力,完成创新能力和实践能力的训练。2 要求: 用高级程序设计语言C编码,用VC+开发平台调试3 二、设计正文(一) 课程设计题目(二) 需求分析(三) 概要设计(四) 详细设计(五) 调试分析(

2、六) 使用说明三、课程设计总结或结论1 完成的工作2 未完成的工作3 所需做的改进四、参考文献 1 作者1, 作者2. 书名. 出版单位, 版本. 出版日期附录(设计流程图、程序、测试数据等) 一、课程设计题目编写一个程序,模拟手机的电话薄管理系统,电话薄按姓名排序,插入新用户,用折半查找,所有信息用文件保存。二、需求分析 本程序用C语言编写,在VC+开发平台进行调试;采用顺序表完成对电话薄的建立、联系人的查找、删除、修改、插入、及导入联系人等功能。 输入的形式和输入值的范围:菜单中选择功能时需输入功能相应的编号;插入元素时需要输入联系人的姓名,电话号码;删除元素时输入要删除联系人的姓名;查找

3、操作时需要输入联系人姓名,修改联系人信息时需要输入联系人姓名和新的联系人信息,导入联系人信息时需要输入要导入文件的文件名称。在菜单操作中输入都为整数,在其余各项功能操作中输入为字符串; 输出的形式:在所有操作中都显示操作是否成功也可通过显示联系人功能进行检查。其中删除操作后显示删除的联系人的信息,查找操作后显示要找到联系人的信息。 该程序的所达到的功能:完成顺序表的建立、插入、删除、查找,修改操作 测试数据:A 在创建操作中依次输入3、12345,、bbbb、34567、cccc 、23456、aaaa;创建一个号码薄。B 在插入操作中输入dddd、45678;插入号码薄的最后。C 在删除操作

4、中输入cccc,将姓名为cccc的联系人信息删除;再次在该操作中输入hhhh,提示该联系人不存在。D 在修改操作中输入aaaa、gggg、67890;将aaaa的信息更新为gggg、67890。再次在该操作中输入hhhh,提示该联系人不存在。E 在查询操作中输入输入dddd,打印联系人dddd的信息。再次在该操作中输入hhhh,提示该联系人不存在。F 在显示操作中无需输入,显示所有j联系人信息。G 在保存联系人操作中输入lianxiren.txt,将联系人信息保存在文件中。H 在导入联系人操作中输入lianxiren.txt,将保存联系人信息导入顺序表中。再次在该操作中输入a.txt,提示文件

5、不存在或已经损毁。三、概要设计 1)抽象数据类型:ADT sqlist数据对象:D=ai|aielemtype&0in&n0 数据关系:R=|ai,ai+1 D基本操作:Initlist(&sl)操作结果:构造一个空的顺序表; Creatlist(sl) 初始条件:顺序表sl存在;操作结果:在顺序表中输入联系人信息; Insertlist (&sl,i,x)初始条件:顺序表sl已存在;操作结果:将元素x插入到顺序表sl的i位置; Scort(&sl)初始条件:顺序表sl存在;操作结果:将顺序表sl中的联系人按姓名排序;Deletelist (&sl,i,&x)初始条件:顺序表sl已存在;操作结

6、果:将顺序表中i位置的元素删除,若删除成功返回1;Updatelist(sl, i,x)初始条件:顺序表sl存在,有要修改的联系人信息;操作结果:将顺序表sl中i-1位置的联系人信息用x代替; Listempty(&sl)初始条件:顺序表sl存在;操作结果:判断顺序表sl是否为空,若为空返回sl.length=0; Displist(sl)初始条件:顺序表sl存在;操作结果:将顺序表sl中的联系人信息打印出来;Binsearch( sl,a)初始条件:顺序表sl存在操作结果:顺序表sl中查找是否元素a,若存在,返回1并打印联系人信息;若不存在,返回0. Binsearch1( sl,a)初始条

7、件:顺序表sl存在;操作结果:顺序表sl中查找是否元素a,若存在,返回mid+1;若不存在,返回0; Savelist(sl)初始条件:顺序表sl存在;操作结果:将顺序表sl中联系人信息存入文件; Open(sl,fp)初始条件:要导入的文件存在;操作结果:将文件中的联系人信息导入顺序表;Menu()操作结果:在屏幕上显示操作菜单 2)本程序包含14个函数:1. 主函数 main()2. 菜单函数 Menu()3. 初始化顺序表 Initlist(&sl)4. 创建电话薄 Creatlist(sl)5. 按联系人姓名排序 Scort(&sl)6. 查找联系人信息 Binsearch( sl,a

8、)、Binsearch1( sl,a)7. 插入联系人 Insertlist (&sl,i,x)8. 删除联系人信息 Deletelist (&sl,i,&x)9. 修改联系人信息 Updatelist(sl, i,x)10. 判断电话薄是否为空 Listempty(&sl)11. 显示联系人信息 Displist(sl)12. 保存电话薄为文件 Save(sl)13. 导入电话薄信息 Open(sl,fp)3)函数间的调用关系如下:Menu() Save() Deletelist()Bisearch1()Updatelist()Main()Displist()Scort()Creatlist

9、()Initlist()Insertlist()Open()四、详细设计为了实现概要设计中定义的所有的数据类型;对主程序和其他模块写出伪代码算法或者画出流程图; 1) 结点类型和指针类型typedef struct phonechar name20;char no20;phone;typedef struct phone *pho;int length;int listsize;sqlist;2) 主要算法的伪代码或者流程图l 折半查找int Binsearch(sqlist sl,char *a)int low=1,high=sl.length-1,mid;while(low=high)mi

10、d=(low+high)/2;if(strcmp(a,sl.phomid.name)=0)printf(ttt查到的联系人信息如下:nn);printf(ttt姓名tt号码nn);printf(ttt*n);printf(ttt%stt%snn,sl.phomid.name,sl.phomid.no);return 1;else if(strcmp(a,sl.phomid.name)0)high=mid-1;elselow=mid+1;printf(tttt该联系人不存在!nn);return 0;l 插入排序void Scort(sqlist &sl)/插入排序int j;for(int i

11、=2;isl.length;i+)if(strcmp(sl.phoi.name,sl.phoi-1.name)0)sl.pho0=sl.phoi;for(j=i-1;strcmp(sl.pho0.name,sl.phoj.name)0;j-)sl.phoj+1=sl.phoj;sl.phoj+1=sl.pho0;l 导入文件void Open(sqlist &sl,FILE *fp)int i=2;initlist(sl);char fn50;phone pho;printf(请输入要打开的文件名:n);scanf(%s,fn);if(fp=fopen(fn,r)=NULL)printf(文件

12、已损坏或文件不存在!n);exit(0);while(!feof(fp)fscanf(fp,%s%s,pho.name,pho.no);insertlist(sl,i,pho);i+;fclose(fp);五、 调试分析 在将外部磁盘文件导入顺序表的操作中,调用Insertlist()函数将联系人信息插入顺序表,用feof()判断信息是否读完。在生成联系人文件时,文件中有乱码,使用for循环控制写入文件的联系人信息。六、使用说明程序名为phone.exe,运行环境为DOS。程序执行后显示:选择1:创建号码薄,要求输入要输入联系人个数及信息;选择2:插入联系人,输入要插入联系人的信息;选择3:删

13、除联系人,输入要删除联系人的姓名;选择4:修改联系人,输入要修改联系人的姓名及新的联系人信息;选择5:查询联系人,输入要查询联系人的姓名;选择6:显示所有联系人的信息;选择7:保存联系人,输入要保存的文件名称;选择8:导入联系人,输入要打开的文件名称;七、测试结果1、选择功能编号1输入:3、12345,、bbbb、34567、cccc 、23456、aaaa;操作结果: 2、选择功能编号2输入:dddd、45678;操作结果:3、选择功能编号3 输入:cccc; 操作结果:输入:hhhh操作结果: 4、选择功能编号4 输入:aaaa、gggg、67890; 操作结果 输入:hhhh 操作结果:

14、 5、选择功能编号5 输入:dddd; 操作结果: 输入:hhhh 操作结果: 6、选择功能编号6 输入:无需输入; 操作结果: 7、选择功能编号7 输入:lianxiren.txt 操作结果: 8、选择功能8 输入:lianxiren.txt 操作结果: 输入:a.txt 操作结果: 七、 课程设计总结或结论1完成的工作可以建立号码薄,对联系人进行插入、删除、修改、查询、显示、保存、导入等管理操作。 2未完成的工作 本次设计实现了手机上号码薄的基本功能,但是缺少创新。1. 所需做的改进:需要对插入操作进行优化,若有重复的号码则提示号码存在,若同姓名不同号码则说明联系人有两个号码应该都保存。八

15、、 参考文献【1】、郑玲等 ,C语言程序设计,中国电力出版社,第一版,2009 【2】、谭强浩等,数据结构教程,清华大学出版社,第二版,2008附录:程序清单#include #include #include #include #define maxsize 1000typedef struct phonechar name20;char no20;phone;typedef struct phone *pho;int length;int listsize;sqlist;int Initlist(sqlist &sl)sl.pho=(phone*)malloc(maxsize*sizeof

16、(phone);if(!sl.pho)printf(初始化失败!);return 0;sl.length=0;sl.listsize=maxsize;return 1;int Creatlist(sqlist &sl)Initlist(sl);printf(下面创建联系人管理系统请按提示输入数据:n );sl.length=1;int m;printf(您一共要输入联系人个数: n);scanf(%d,&m);for(int i=2;i=m+1;i+)printf(请输入第%d个人的电话:n,i-1);scanf(%s,sl.phoi-1.no);printf(请输入第%d个人的姓名:n,i-

17、1);scanf(%s,sl.phoi-1.name);sl.length+;printf(本次操作您一共输入%d组联系人信息n,m);return 1;int Binsearch(sqlist sl,char *a)int low=1,high=sl.length-1,mid;while(low=high)mid=(low+high)/2;if(strcmp(a,sl.phomid.name)=0)printf(ttt查到的联系人信息如下:nn);printf(ttt姓名tt号码nn);printf(ttt*n);printf(ttt%stt%snn,sl.phomid.name,sl.ph

18、omid.no);return 1;else if(strcmp(a,sl.phomid.name)0)high=mid-1;elselow=mid+1;printf(tttt该联系人不存在!nn);return 0;int Binsearch1(sqlist sl,char *a)int low=1,high=sl.length-1,mid;while(low=high)mid=(low+high)/2;if(strcmp(a,sl.phomid.name)=0)printf(ttt联系人信息如下:nn);printf(ttt姓名tt号码nn);printf(ttt*n);printf(tt

19、t%stt%snn,sl.phomid.name,sl.phomid.no);return mid+1;else if(strcmp(a,sl.phomid.name)0)high=mid-1;elselow=mid+1;printf(tttt该联系人不存在!nn);return 0;void Save(sqlist &sl)FILE *fp;int i;char fn50;printf(请输入要保存的文件名:n);scanf(%s,fn);if(fp=fopen(fn,w)=NULL)printf(文件名为空,不能保存!n);for(i=1;isl.length;i+)fprintf(fp,

20、%s %sn,sl.phoi.name,sl.phoi.no);fclose(fp);printf(文件保存成功!n);int Deletelist(sqlist &sl,int i,phone &x)int j;if(isl.length)printf(您要删除的人不存在,请检查!n);return 0;i-;x=sl.phoi;for(j=i;jsl.length-1;j+)sl.phoj= sl.phoj+1;sl.length-;return 1;void Scort(sqlist &sl)/插入排序int j;for(int i=2;isl.length;i+)if(strcmp(s

21、l.phoi.name,sl.phoi-1.name)0)sl.pho0=sl.phoi;for(j=i-1;strcmp(sl.pho0.name,sl.phoj.name)=sl.listsize) printf(容量不够!n); return 0; for(k=sl.length;k=i;k-) sl.phok=sl.phok-1; sl.phoi-1=x; sl.length=sl.length+1; return 1; void Open(sqlist &sl,FILE *fp)int i=2;Initlist(sl);char fn50;phone pho;printf(请输入要打

22、开的文件名:n);scanf(%s,fn);if(fp=fopen(fn,r)=NULL)printf(文件已损坏或文件不存在!n);exit(0);while(!feof(fp)fscanf(fp,%s%s,pho.name,pho.no);Insertlist(sl,i,pho);i+;fclose(fp);int Updatelist(sqlist sl,int i,phone x)if(sl.length=0)printf(没有数据,无法更新!);return 0;sl.phoi-1=x;return 1;int Listempty(sqlist &sl)return(sl.lengt

23、h=0);void Displist(sqlist &sl)int i;if(Listempty(sl)return;printf(ttt联系人信息如下:nn);printf(tttt姓名tt号码n);printf(ttt*n);for(i=1;isl.length;i+)printf(tttt%stt%s,sl.phoi.name,sl.phoi.no);printf(nn);int Menu()int n;printf(ttt*欢迎使用联系人管理系统*n);printf(ttt* 1、创建联系人数据 *n);printf(ttt* 2、插入联系人数据 *n);printf(ttt* 3、删

24、除联系人数据 *n);printf(ttt* 4、修改联系人数据 *n);printf(ttt* 5、按姓名查询信息 *n);printf(ttt* 6、显示联系人数据 *n);printf(ttt* 7、保存联系人信息 *n);printf(ttt* 8、导入联系人数据 *n);printf(ttt* 0、退出 *n);printf(ttt*n);printf(ttt请选择功能编号(0-8):n);scanf(%d,&n);return n;void main()FILE *fp=NULL;int t=1,n;sqlist sl;char a20;phone s;while(t)n=Menu

25、( );switch(n)case 1: Creatlist(sl);Scort(sl);break;case 2:printf(请输入要插入的联系人姓名,电话:n); scanf(%s%s,s.name,s.no);Insertlist(sl,sl.length,s);break;case 3:printf(请输入要删除的联系人姓名:n);scanf(%s,a);n=Binsearch1(sl,a);Deletelist(sl,n,s);break;case 4:printf(请输入需要更新的联系人姓名:n);scanf(%s,a);n=Binsearch1(sl,a);printf(请输入更新姓名,号码:n);scanf(%s%s,s.name,s.no);Updatelist(sl,n,s);break;case 5:printf(请输入要查找的姓名:n); scanf(%s,a); Binsearch(sl,a);break;case 6: Scort(sl);Displist(sl);break;case 7:Save(sl);break;case 8:Open(sl,fp);break;case 0:t = 0;break;default: printf(输入有误!n);

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号