ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:99.14KB ,
资源ID:6513923      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6513923.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计通讯录.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计通讯录.docx

1、数据结构课程设计通讯录 淮阴工学院数据结构课程设计报告选题名称: 通讯录 系(院): 计算机工程学院 专 业: 计算机科学与技术 班 级: 计算机1091 姓 名: 宋可 学 号: 1091301117 指导教师: 张亚红 周海岩 学年学期: 2010 2011 学年 第 1 学期 2010 年 12 月 30 日设计任务书课题名称通讯录设计目的利用链表以及其他数据结构存储、编辑、删除、添加、显示联系人等等操,从而实现通讯录功能的模拟!主要可以加深对数据结构尤其是链表,数组结构的认识!实验环境Windows2000以上操作系统Visual C+6.0以上编译环境任务要求1 查阅资料,完成通讯录

2、数据结构的设计!2 撰写PPT文件与课程设计报告;3 参加答辩。工作进度计划序号起止日期工 作 内 容12010.12.27理论辅导,搜集资料22010.12.282010.12.29编写代码,上机调试32010.12.30撰写课程设计报告及ppt42010.12.31答辩指导教师:张亚红 周海岩 2010 年 01月 3 日 目 录1 需求分析 31.1 课题要求及思想 31.2 运行环境及开发工具 32 概要设计 32.1 功能结构 32.2 数据结构的设计 42.3 设计的原理 53 详细设计和实现 53.1 总体框架 53.2 各个模块及功能 53.3 算法实现及流程图 64 调试与操

3、作说明 15总 结 17致 谢 18参 考 文 献 191 需求分析1.1 课题要求及思想 本次课题是建通讯录,它主要包含九个模块,希望建立一个主函数main(), 利用它来调用各个函数,比如创建一个通讯录,删除一个人的信息,添加一个人的信息。1.2 运行环境及开发工具 这次课程设计的运行环境为Windows2000以上操作系统和开发Microsoft Visual C+ 6.0,下面主要介绍一下Microsoft Visual C+ 6.0。 Visual C+(简称VC)是Microsoft公司推出的目前使用极为广泛的Windows平台的C+可视化开发环境。Visual C+ 6.0提供的

4、控制台应用程序对学习和掌握标准C+内容非常有利。“可视”的资源编辑器与MFC类以及应用程序向导,为快速高效地开发出功能强大的Windows应用程序提供了极大的方便。利用Visual C+ 6.0进行Internet和数据库及多媒体等多方面的程序开发也很容易。 本课程设计采用了C+。C+语言是在C语言的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法 ,改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程。 C+语言代表着对以往语言之精华的发展和提炼,并能很好的与C语言兼容既支持面向对象的程序设计,也支持结构化的程序设计。它修补了C语言中的一些漏

5、洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字,出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。 函数重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。提供了模板机制。摸板包括类摸板和函数模板两种,它们将数据类型作为参数。对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。2 概要设计2.1 功能结构本次课题是建通讯录,它主要包含九个模块如下:第一个模块主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块Menu()的

6、功能是:显示英文提示选单。 第三个模块Quit()的功能是:退出选单。 第四个模块Create()的功能是:创建新的通讯录。 第五个模块Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。 第六个模块Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。 第七个模块Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。 第八个模块Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。 第九个模块List()的功能是:

7、显示通讯录中的所有记录。2.2 数据结构的设计 1、数组存储姓名的首字母和联系人链表的头指针!数组结点:struct addlist_arrynod char letter; MyContactsNode*head; ;2、 联系人链表结点: struct MyContactsNode char*name; enum sexM,W personsex; char*phonenum_m; char*phonenum_gd; char*address; ;2.3 设计的原理 这次课程设计运用了单链表和顺序数组以及它的操作,如单链表的删除,插入,搜索,修改等等,因此设计了一个AddList_arry

8、数组类,自定义了数组结点addlist_arrynod结构,包括两个数据域:一个用来存储姓名的首字母,另一个用来存储联系人单链表的头指针!自定义联系人链表的结点MyContactsNode结构!3 详细设计和实现3.1 总体框架 图3.1 总体框架3.2 各个模块及功能3.21 主要模块(1)主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。(2)Menu()的功能是:显示英文提示选单。 (3)Quit()的功能是:退出选单。(4)Create()的功能是:创建新的通讯录。(5)Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。 (6)SearchAndLis

9、t的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。(7)AlterByName()的功能是:根据用户输入的姓名修改该人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。否则显示输入新的联系人信息!(8)DeleteByName ()的功能是:根据用户输入的姓名,删除该人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。(9)ListAll()的功能是:显示通讯录中的所有记录。 其中(2)Menu(),(3)Quit(),(4)Create(),(5)Add()(6)Find()(7)Alt

10、er(),(8)Delete(),(9)List()(1)main()3.22 辅助模块(1)bool Examine_name(char*name_in);/检测输入的姓名是否正确!(2)bool Examine_sex(int sexnum);/检测输入的性别是否正确!(3)bool Examine_phm(char*phm);/检测输入的移动电话号码是否正确!(4)bool Examine_phgd(char*phgd);/检测输入的固定的电话号码是否正确!(5)bool Examine_add(char*add);/检测输入的地址是否正确!3.3 算法实现及流程图 (1)Examine

11、_name ()函数bool AddList_arry:Examine_name(char*name_in) char temp=*name_in; int count=0; while(temp!=0) count+; name_in+; temp=*name_in; if(count10) return false; else return true;(2) Examine_phgd ()函数bool AddList_arry:Examine_phgd(char*phgd) char temp_phgd=*phgd; int count=0; while(temp_phgd!=0) cou

12、nt+; if(temp_phgd9) return false; phgd+; temp_phgd=*phgd; if(count12) return false; else return true;(3) Search ()函数算法实现:MyContactsNode* AddList_arry:Search(char*nm_q) MyContactsNode*resultnod_search=FindByName(nm_q)-next; while(resultnod_search!=NULL)/ if(strcmp(resultnod_search-name,nm_q)=0) retur

13、n resultnod_search; resultnod_search=resultnod_search-next;/向后移动一个指针的位置! return NULL;/没有找到,返回NULL! (4)AlterByName ()函数 算法实现:bool AddList_arry:AlterByName(char*nm_al) MyContactsNode*resultnod_alter=Search(nm_al);/查找相应的结点,没找到则返回NULL! if(resultnod_alter=NULL) return false;/输入的要更改的结点未找到! cout请输入新的信息!nam

14、e) resultnod_alter-ReplaceNode(resultnod_new);/替换结点! return true;/更改成功了! else if(DeleteByName(nm_al) MyContactsNode*resultnodofhead_new=FindByName(resultnod_new-name); if(resultnodofhead_new-InsertHeadRear(resultnod_new) return true; return false; (5)DeleteByName ()函数 算法实现: bool AddList_arry:DeleteB

15、yName(char*nm_del) MyContactsNode*resultnod_del=Search(nm_del); MyContactsNode*resultnodhead_del=FindByName(nm_del); int end=0;/指示没有被删除的! while(resultnodhead_del!=NULL&resultnod_del!=NULL) if(resultnodhead_del-next=resultnod_del) MyContactsNode*del=resultnod_del;/保存需要删除的结点! resultnodhead_del-next=re

16、sultnod_del-next;/把需要删除的结点的后继结点重新连接上! delete del;/释放需要删除的结点! end=1;/指示有被删除的了! resultnodhead_del=resultnodhead_del-next;/指针后移! if(end=1) return true; else return false;(6)ListAll ()函数算法实现:void AddList_arry:ListAll() MyContactsNode*temp;/链表结点指针! for(int i=0;inext;/获得数组中存放的头指针! while(temp!=NULL) temp-L

17、istNode();/打印结点的信息! temp=temp-next;/temp向后移动! /就是因为这一句,才使得输出为空格的! /coutendl; (7)main()主函数算法实现: ShowMenue_Main();/显示主窗体! /实例化一个通讯录数组! AddList_arry mycontactslist; /下面用户进行选择,并执行对应的操作! /用户输入的姓名(全称)! char *nm_case2in=new char10; memset(nm_case2in,0,sizeof(char)*10); /用户输入得需要删除的姓名! char *nm_case6del=new

18、char10; memset(nm_case6del,0,sizeof(char)*10); /供用户选择是否要显示通讯录中的所有的信息的! int choice_case3alter=1;/默认情况下是显示所有的结点信息的! /根据用户输入的姓名确定更改谁的信息! char*nm_case3alter=new char10; memset(nm_case3alter,0,sizeof(char)*10); /程序始终在执行着,直到用户输入7为止! while(1) /获取用户的编号的函数! int menuechoice=GetMenuSelct(); /根据用户的选择执行不同的操作! sw

19、itch(menuechoice) case 1: /调用list方法显示所有的联系人的信息! mycontactslist.ListAll();/显示所有的联系人的信息! cout信息显示完毕!endl; ClearP(); break; /于2010年12月18号早上1:30测试完成! case 2: /调用FindByName方法查找联系人的信息,并打印出来! /nm_case2in=new char10;/申请十个字符空间的数组! cout请输入要查找人的姓名(全名)!nm_case2in;/输入要查找的人姓名! mycontactslist.SearchAndList(nm_case

20、2in); ClearP(); break; case 3: /调用Alter函数更改联系人的信息!并保存到通讯录结构中去! cout若您已经知道确切的姓名请选择0,否则选择1,以便显示所有联系人功能选择!choice_case3alter; if(choice_case3alter=1) mycontactslist.ListAll();/显示所有的联系人信息! coutnm_case3alter; if(mycontactslist.AlterByName(nm_case3alter) cout恭喜您更改成功!endl; else cout对不起,您输入的联系人未找到,更改未成功!请确认姓

21、名是否正确!endl; ClearP(); break; case 4: cout-请输入您想添加的联系人的信息!endl; /调用Add函数添加联系人的信息到通讯录结构中! mycontactslist.Add(); ClearP(); break; case 5: ShowMenue_Main(); break; case 6: /调用delete方法删除指定的结点! cout请输入要删除的姓名!(全称)nm_case6del;/总是忘记了对字符串进行输入! if(mycontactslist.DeleteByName(nm_case6del) cout删除成功!endl; else co

22、ut很抱歉,未删除成功!endl; ClearP(); break; case 7: exit(0); break; default: cout您输入的编号有误,请确保在17的范围内!endl; ClearP(); break; /while循环循环一次!/主函数结束! 4 调试与操作说明运行程序,显示如下主菜单: 图4.1 主菜单选择3,查询信息,显示如下:图4.2 查询信息的界面 选择4,修改信息,显示如下:图4.3 修改信息界面 选择5,删除信息,显示如下:图4.4 删除信息界面总 结 这次的课程设计来的正是时候,给自己敲了个警钟,课本上的知识固然重要但是没有实际的动手编程基础,想要编出

23、好的程序来是不可能的!同时还让我认识到软件开发并不可怕,编写代码也不是高不可攀的,认认真真地把之前的逻辑设计、数据结构设计以及总体的框架搞清楚,并写成文档的形式才是最难得的,这也是程序设计的关键所在!虽然简单,但还是发现了几个可以完善的地方:(1)存储结构里本身设计就有问题,对于是二级汉字的姓名无法正确的存储!(2)删除某个联系人的信息时,当有很多相同名字的我时候无法一起删除,而是只能删除其中最近添加进去的那一个人,这也是不足的地方;(3)在查询的时候,如果要查询的人的名字在通讯录中同时有几个,由于该程序在查询的时候只是利用姓名是否相同来判断的,所以输出的信息就不会很准确,因此我们可以在姓名相

24、同的情况下,再去判断电话号码是否相同,在电话号码又相同的情况下去判断地址是否相同,这样就可以输出正确的信息了。这些地方都可以进一步完善。优点之处在于不用把所有的联系人信息结点都放在一个单链表中,而且查询的效率也是比较的高的,还可以通过姓名的首字母进行检索,这是很有突破和符合实际的! 课程设计是一次锻炼我的实际操作的过程。我想对于每一次课程设计都要认真对待,这对于我的实际操作能力有很大的帮助。我相信通过以后认真的学习和坚持不懈的实践,我必将获得很大的收获。致 谢 这次课程设计之所以能成功的完成,我要感谢淮阴工学院,计算机工程系提供的实践机会,是你们让你们给我一次表现自己,测试自己编程能力,发现自

25、己不足之处的机会。还要感谢实验室人员提供了良好的实验环境,不仅是提供了课程设计所需要的机器,而且还有空调,让我们在炎热夏季中感到丝丝凉爽。 在实习中我遇到了许多困难,还好有几位老师及时指点我,告诉我哪里出了错误,该怎么去解决错误,不会因为几个问题浪费很多时间,是你们让我不再迷茫,在此我要感谢我的几位指导老师:张亚红老师,周海岩老师,周礼清老师,真的很感谢你们。当然还要感谢我的队友,我们遇到困难总是相互讨论,当我快放弃的时候,谢谢你给我支持。还要感谢我的同学,不管是认不认识的同学,只要在我需要他们的帮助的时候,他们都会伸出他们的双手,帮助我解决难题。我要感谢你们,我的同学,你们再一次让我认识到朋

26、友的重要性,和团结就是力量的这句话的重要性。 最后我要感谢参考文献的原作者,是你们的帮助,让我能够顺利的完成这一次的实践,要不是你们的辛勤的劳动的成果及时指引了我,让我找到编写程序的方向,我可能再怎么努力,也不可能顺利完成这次实验。 以上所有的人,正是因为有了你们的帮助,我才能够从这次课程设计中学到新的知识,真正的提高了自身的水平,让我的知识得以充实,最后,再次感谢所有在这次课程设计中给予过我帮助和支持的人,谢谢!参 考 文 献1 殷人昆 .数据结构.清华大学出版社,2007.62 郑阿奇,丁有和,郑进.周怡君.Visual C+实用教程(第3版).电子工业出版社,2008053徐孝凯.数据结构实验.中央广播电视大学出版社,20014 郑莉,傅仕星.C+面向对象程序设计.清华大学出版社,2003.95 蔡子经,施伯乐. 数据结构教程. 复旦大学出版社,19846揣锦华.面向对象程序设计与VC+实践.西安电子科技大学出版社,2006

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1