您好,欢迎访问三七文档
1课程设计报告课程名称:数据结构与算法设计题目:用散列表建立通讯录系别:专业:组别:起止日期:指导教师:计算机科学与技术系二○一一年制2课程设计任务书课程设计题目建立通讯录组长学号班级系别专业组员指导教师课程设计目的(1)熟练掌握C语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。课程设计所需环境MicrosoftVisualC++6.0课程设计任务要求(1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码为关键字建立散列表;(3)采用二次探测再散列法解决冲突;(4)查找并显示给定电话号码的记录;(5)通讯录信息文件保存;(6)要求人机界面友好,使用图形化界面;课程设计工作进度计划序号起止日期工作内容分工情况12调试与操作说明3需求分析4详细代码5引言6总结与体会教研室审核意见:教研室主任签字:年月日3一、引言二、需求分析(1)课程设计题目这一组的课程设计题目是《用哈希表建立通讯录》,并实现语言选单、创建、修改、查询、删除、文件的操作等。(2)课程设计的目的掌握数据结构的基础技术,学会分析研究计算机加工的数据结构的特性,以便应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,应用相关知设计设散列表实现电话号码查找系统。(3)课程设计的要求【基本要求】○1设每个记录有下列数据项:电话号码、用户名、地址;○2从键盘输入各记录,分别以电话号码为关键字建立散列表;○3采用二次探测再散列法解决冲突;○4查找并显示给定电话号码的记录;○5通讯录信息文件保存;○6要求人机界面友好,使用图形化界面;【选做内容】○1系统功能的完善;○2设计不同的散列函数,比较冲突率;○3在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。○4使用汉字显示。(4)课程设计的主要思想课程设计中,通过不同的选择输入,实现不同的功能。有语言提示,它是通过不同的输入选择不同的语言。在通信录的创建中,把输入的信息保存在一个数组里,通过输入的电话号码,将其转化为数据,通过取余,找到它在哈希表的位置,如果位置冲突,就用二次探测处理。在查找中,通过输入的电话号码,调用哈希表寻找它在哈希表的位置,并把它输出。同样,修改于删除都是通过同样的的道理找到它在哈希表中的位置。在修改的时候,通过不同的修改选单实现不同的修改,在删除的时候,找到它的位置,在输出的的时候不输出,其实它并没有真正意义的被删除。三、概要设计(1)流程图4○1概括图图1概括图○2创建图2创建的流程图开始字符转化为数字在哈希表中位置地址冲突保存二次哈希非负通过得到不同的字符,实现不同的操作语言选单,并返回主函数创建通讯录,用哈希表实现,并返回主函数查找操作,并返回主函数删除某人的信息,并返回主函数修改某人的信息,并返回主函数显示通讯录中所有的信息,并返回主函数退出整个程序文件的存于读,并返回主函数结束5○3查找图3查找的流程图开始输入要找的号码,并转化为数字在哈希表中的位置及号码比较二次哈希找到下标非负,号码比较结束6○4修改结束开始输入修改后的信息输入要修改的号码,并转化为数字二次哈希找到,并选择修改项下标非负,号码比较在哈希表中的位置及比较修改成功7图4修改的流程图○5删除图5删除的流程图(2)设计方法及原理主函数里,对不同的子函数,通过的到的不同字符对其进行调用。在建立通讯录中,用了哈输入要删除的号码,并转化为数字二次哈希开始下标非负,号码比较在哈希表中位置及比较找到,删除结束8希表的建立,在哈希表中,是将字符型数字转化为整形数据,并对哈希表的原有长度取余得到存储的位置,而得到的位置可能已被使用,故有调用了二次哈希,并以最后处理的下标是否为非负,来决定是存储还是不存储。,而在下面的查询、删除、修改中,都是调用哈希表,找到它在哈希表中的位置来进行不同的操作。其中,在删除时,用了一个全局变量来存储要删除的位置的下标,在输出的时候不将其输出,而真正意义上,它并没有从保存的位置删除。在修改中,通过选择不同。来修改不同的信息。这个设计,主要就是对哈希表的调用与冲突的处理。四、详细内容程序代码#includestdio.h#includestdlib.h#includestring.h#includeconio.h//为了使用getch()方法#includewindows.h#defineMAXSIZE200//电话薄记录数量#defineMAX_SIZE20//人名的最大长度#defineHASHSIZE67//定义表长#defineLENsizeof(HashTable)typedefintStatus;typedefcharFRI[MAX_SIZE];intss=201;//用于帮助删除typedefstruct{//记录FRIname;FRItel;FRIadd;}Record;typedefstruct{//哈希表Record*elem[HASHSIZE];//数据元素存储基址intcount;//当前数据元素个数intsize;//最大容量}HashTable;voidSystemTime()//显示系统时间{SYSTEMTIMEsys;GetLocalTime(&sys);printf(%4d/%02d/%02d\n%02d:%02d:%02d.%03d,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds);}voidPR1(){printf(\t\t************************\n);SystemTime();printf(\t\t\t通讯录操作的目录\n\n);9printf(\t\t************************\n\n);}voidPR11(){printf(\t\t************************\n\n);printf(\t\t\tDirectoriesoperationdirectory\n\n);printf(\t\t************************\n\n);}voidPR2(){printf(\t按a键,显示语言提示选单\t\t);printf(按b键,创建新的通讯录\n\n);printf(\t按c键,在通信录的末尾写入新的信息\t\t);printf(按d键,查询某人的信息\n\n);printf(\t按e键,修改某人的信息\t\t);printf(按f键,删除某人的信息\n\n);printf(\t按g键,显示通讯录中的所有记录\t\t);printf(按h键,退出选单\n\n);printf(\t按i键,保存通讯录中的所有记录到指定文件中\n\n);printf(\t按j键,从指定文件中读取通讯录中的记录\n);printf(\n友情提示:\n\t先建立方可进行查找、修改、删除、显示,在从文件读取前,应先存入文件\n\n);printf(\t);}voidPR22(){printf(\tPressingakey,Languagemenu\n\n);printf(\tPressingbkey,Createanewaddressbook\n\n);printf(\tPressingckey,Theendofthecommunicationrecordtowriteanew\n\tinformation\n\n);printf(\tPressingdkey,Inquirestheinformation.Someone\n\n);printf(\tPressingekey,Modifysomeone'sinformation\n\n);printf(\tPressingfkey,Removesomeone'sinformation\n\n);printf(\tPressinggkey,Alltherecordsshowdirectories\n\n);printf(\tPressinghkey,Exitmenu\n\n);printf(\tPressingikey,Savealltherecordstothespecifieddirectoryfile\n\n);printf(\tPressingjkey,Readdirectoriesfromaspecifiedfilerecordin\n\n);printf(\nHelpfulhints:\n\tTocreatecansearch,modify,delete,display,inreadfromthefile,);printf(\n\tshouldfirstbeforedepositfiles\n\n);printf(\t);}voidPR3()10{printf(\n\t\t************************\n);SystemTime();printf(\t\t\t创建通讯录\n\n);printf(\t\t************************\n\n);}voidPR4(inti){printf(\n\t\t************************\n);SystemTime();printf(\t\t\t查询某人的信息\n\n);printf(\t\t************************\n\n);}voidPR5(){printf(\n\t\t************************\n);SystemTime();printf(\t\t\t修改某人的信息\n\n);printf(\t\t************************\n\n);}voidPR6(){printf(\n\t\t************************\n);SystemTime();printf(\t\t\t\t删除某人的信息\n\n);printf(\t\t************************\n\n);}voidPR7(){printf(\n\t\t************************\n);SystemTime();printf(\t\t\t在通信录的末尾写入新的信息\n\n);printf(\t\t************************\n\n);}voidPR8(){printf(\n\t\t************************\n);SystemTime();printf(\t\t\t通讯录中已存信息\n\n);printf(\t\t************************\n\n);}voidPR9(){printf(\n\t\t************************\n);11SystemTime();printf(\t\t\t从文件中读取结果\n\n);printf(\t\t************************\n\n);}voidMenu(){system(cls);intn;printf(\n\n\n\n\n\n\n\n\n\t\t\t输入1(汉语)、2(英语)选择语言:);scanf(%d,&n);system(cls);if(n==1){PR1();PR2();}if(n==2){PR11();PR22();}}intNUM_BER=0;intcollision(intp,int&c){inta,pp;a=c/2+1;while(aHASHSIZE){if(a%2==0){c++;pp=(p+2*a)%HASHSIZE;if(pp0)returnpp;elsea=c/2+1;}else{pp=(p-2*a)%HASHSIZE;c++;if(pp0)returnpp;12elsea=c/2+1;}}return-
本文标题:用C++编写通讯录
链接地址:https://www.777doc.com/doc-7028751 .html