《电话号码查找系统》

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《数据结构》课程设计课程名称数据结构课题名称电话号码查找系统专业电子信息科学与技术班级姓名(学号)姓名(学号)2017年6月3日电话号码查找系统摘要:电话号码的查找系统软件是现在很实用工具,随着时代的发展,信息化得发展,手机是人们的必备工具,基于目前的现况,有必要开发出一款具有含量的电话号码管理系统,满足人们的需求,需要包含添加、删除、查找、显示、存储、修改等操作,并具备存储文件功能。该篇基于C++语言在VC6.0平台用散列表设计实现电话号码的查找系统,根据数据结构设计算法并实现算法,程序多次运用了函数的调用,自定义个操作的函数,包括添加操作、查找操作、查询操作、显示操作、清除操作、保存操作由主函数调用每次操作均有主函数依次调用,从基本上实现姓名电话地址的存储和应用。关键词:电话号码查找系统;C++;VC6.0;数据结构1、引言(绪论)1.1、C++语言简介在C的基础上,一九八三年又由贝尔实验室的BjarneStrou-strup推出了C++。C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++目前流行的最新版本是BorlandC++4.5,SymantecC++6.1,和MicrosoftVisualC++2.0。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。1.2、开发背景随着科学技术的不断发展,计算机科学日渐成熟,电话号码使用的广泛性、简洁性日易为人们所接受采用。电话号码管理系统已是人们必不可少的系统软件工具,用于满足人们对电话的各种操作,包括添加、删除、修改、查询、保存使电话号系统更加简洁方便,基于这种市况需求,我们有必要开发一款能满足人们这种操作需求的管理系统。1.3、开发环境本文所采用的开发环境主要是基于C++环境的信息技术极大地扩展了全人类教育的时空界限,空前地提高了人们学习的兴趣、效率和主动性,已经成为开发人类能力的创造性工具。在计算机科学中,《数据结构》不仅是一般应用程序设计的基础,而且也是操作系统、数据库系统、网络系统设计及其它大型计算机应用工程重要的实施基础。在编程实现操作系统是基于VC6.0之上实现,按照了C++语言设计的基本内容。2、需求分析2.1、系统需求分析设计散列表实现电话号码查找系统。基本要求:(1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;(3)采用一定的方法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户名的记录该电话号码查找系统包括了用户的输入查找保存删除操作。2.2、系统总体设计系统用到的数据类型有:1、基本数据类型:整型、字符型;2、构造数据类型:数组、结构系统有一个main函数、多个标准库函数和九个自定义函数组成。函数apend、hash、create、list、find、save、menu由主函数main调用。首先进入程序需要用户输入通讯信息,输入包括姓名电话地址保存在新建的通讯录中,由用户输入0-5分别调用各个函数以满足需求,完成后按0退出程序。2.3、系统设计目标数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风3、总体设计3.1开发设计思想基于以上系统设计目标,本文在设计散列表实现电话号码查找系统遵循了以下开发设计思想:●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。●尽量达到操作过程中的直观、方便、实用、安全等要求。●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。3.2系统功能模块设计电话管理系统要整个系统的主要分为两大模块如功能模块图2-1可以清楚的看到,录入模块和查询模块。录入模块可根据系统提示的信息填写信,,填完相应的信息,可按回车储存。以姓名和电话号码为关键字,分别用Hash函数运算出一个相对应的值,把这个值作为结点的存储地址,分别存入姓名散列表和电话号码散列表的对应位置。查询模块分为两部分,姓名查询和号码查询,姓名查询可有一个姓名查到多个记录号码查询是一一映射。查找时,通过所要寻找的关键字用同样的Hash函数计算地址,判断存的内容是否跟关键字是否一样,若一样则记录找到则可找到录入子系统查询子系统姓名地址号码姓名查找号码查询电话号码管理系统系统整体功能模块图2-1程序结点设计图2-2你要查找的内容。否则无此记录。哈希表散列方法:电话散列计算key值是从第三个数字开始相加得到一个总和,用总和除以20取余数得到其散列地址。同样对于姓名的存储利用姓名的ASSIC值对应相加。开始进入录入系统获得关键字key用Hash(key)计算地址赋予指针q比较num的值是否和关键字相等输出记录q=q-next继续与num比较是否相等结束比较num的值是否和关键字相等未找到记录查找系统流程图2-34、调试分析4.1测试数据选择姓名地址电话4.2测试结果分析输入以上测试信息、操作各项运行如下略5、总结(结束语、总结与展望)在今后的工作、学习中我将认真总结经验教训,努力使自己成为一名技术过硬、工作严谨、思维活跃的工程人员,为提高人们的生活质量做出更大的贡献。程序采用C++语言编写,继承C++一贯的简洁,程序通俗易懂,注释也很明了,利于日后的修改。自定义函数层次清晰明了,函数的调用关系简而易懂。操作时的步骤简单快捷,易于操作。由于变成使用的是C++,相比C语言来说效率比较低,没有C语言的运行效率高,时间复杂度较高,程序的健壮性也不好,很容易出现死循环,但是由于自己的知识不够好在短时间内得不到解决,就程序本身而言,包括输入添加操作、查找操作、查看号码和姓名的散列结果、删除操作、清空操作、保存操作但是程序本身没有修改操作、所以不能满足用户的修改操作,程序最后的选择操作,不具有健壮性,一旦用户输入错误,就会长生死循环。通过对电话号码查找系统的课程设计,认识到自己对程序的无知,需要进一步的学习包括自定义函数、哈希表、以及哈希表的冲突处理方法、指针的运用也不是很灵活,有待提高。参考文献:[1]谭浩强C程序设计(第三版).北京:清华大学出版社.2004[2]皮德常C++程序设计教程.北京:机械工业出版社2009.03[3]崔淼,陈明非.VisualC#2005程序设计教程.北京:机械工业出版社.2007.1[4]严蔚敏吴伟民.数据结构(C语言版).北京:清华大学计算机系列教材.2007附录代码:#includestdio.h#includestdlib.h#includeiostream#includestring.h#includefstream#defineNULL0unsignedintkey;unsignedintkey1;unsignedintkey2;int*p;structnode//建节点{charname[8],address[20];charnum[11];node*next;};typedefnode*pnode;typedefnode*mingzi;node**phone;node**nam;node*a;usingnamespacestd;//使用名称空间hash(charnum[11])//建表,以人的电话号码为关键字,建立相应的散列表若哈希地址发生冲突,进行冲突处理。{inti=3,j;key1=(int)num[2];while(num[i]!=NULL){key1+=(int)num[i];i++;}key1=key1%20;for(j=0;j20;j++)//线性探测法解决冲突{key=(key1+j)%20;if(phone[key]-num==)break;}return(key);}hash2(charname[8])//建表,以人的姓名为关键字,建立相应的散列表//若哈希地址发生冲突,进行冲突处理{inti=1,j;key2=(int)name[0];while(name[i]!=NULL){key2+=(int)name[i];i++;}key2=key2%20;for(j=0;j20;j++)//线性探测法解决冲突{key=(key2+j)%20;if(phone[key]-name==)break;}return(key);}node*input()//输入节点{node*temp;temp=newnode;temp-next=NULL;cout输入姓名:endl;cintemp-name;cout输入地址:endl;cintemp-address;cout输入电话:endl;cintemp-num;returntemp;}intapend()//添加节点{node*newphone;node*newname;newphone=input();newname=newphone;newphone-next=NULL;newname-next=NULL;newphone-next=phone[hash(newphone-num)]-next;phone[hash(newphone-num)]-next=newphone;newname-next=nam[hash2(newname-name)]-next;nam[hash2(newname-name)]-next=newname;return0;}voidcreate()//新建电话号码数组{inti;phone=newpnode[20];for(i=0;i20;i++){phone[i]=newnode;phone[i]-next=NULL;}}voidcreate2()//新建姓名数组{inti;nam=newmingzi[20];for(i=0;i20;i++){nam[i]=newnode;nam[i]-next=NULL;}}voidlist()//显示列表(号码散列){inti;node*p;for(i=0;i20;i++){p=phone[i]-next;while(p){coutp-name'_'p-address'_'p-numendl;p=p-next;}}}voidlist2()//显示列表(姓名散列){inti;node*p;for(i=0;i20;i++){p=nam[i]-next;while(p){coutp-name'_'p-address'_'p-numendl;p=p-next;}}}voidfind(charnum[11])//查找用户信息(号码查找){inti,j=0;node*p;for(i=0;i20;i++){p=phone[i]-next;while(p){if(strcmp(num,p-num)==0){coutp-name'_'p-address'_'p

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功