1、(1) 设每个记录有如下数据项:、用户名、地址; (2) 从键盘输入各记录,分别以为关键字建立散列表;(3)采用二次探测再散列法解决冲突;(4)查找并显示给定的记录;(5) 通讯录信息文件保存;(6) 要求人机界面友好,使用图形化界面;课程设计工作进度计划序号起止日期工 作 内 容分工情况12011概要设计王春、赵宗辉22011.6.1 详细代码X擎昱显示语言选单、创建、在通讯录的结尾写入信息;王春查询与修改;赵宗辉删除与显示;杨光退出、文件的操作32011.6.4 需求分析X擎昱42011.6.8 调试与操作说明全体成员5总结与体会6引言教研室审核意见:教研室主任签字: 年 月 日目录格式在
2、做修改,请按照第三组的格式或者模板的格式认证修改!一、引言“课程设计是大学里考查在校学生对本专业所学的知识掌握情况的一种方法,也是对学生对团队合作精神的一种考验。本课程设计的要求是用散列表建立通讯录。其中,散列表主要是运用数据结构中的除留余数发,而处理冲突是运用二次探测法(1)。在通信录的存储中,主要是先用一个数组将其存储,这主要是为了在建立哈希表的时候便于操作。建立哈希表时,用的是将字符型数字转化为整形数据,用的是atoi()函数,在2头文件里。由于这次的课程设计,在通信录中要操作的功能有很多,所以在主函数里用了switch()函数,通过case的选值不同执行不同的操作。由于在现示主界面的时
3、候,要运用Esc键返回主界面,所以用了getch()函数来得到Esc键,而getch()函数实在(3)头文件里。在本次设计中,因为在删除与查找的过程中,要比拟输入的字符串与保存的字符串是否相等,用到了strcmp()函数,它是包含在(4)头文件里。课程设计中,为了使界面效果更好一些,我们使用了清屏函数system(“cls(5)头文件里和得到系统时间的函数,包含在windows.h头文件里。在本次的课程设计中,我们小组的各位同学都全部投入,由于我们是第一次做课程设计,所以在其中含有一些问题,望各位教师批评指正。参考文献标注要用号,不要用()二、需求分析(1)课程设计题目这一组的课程设计题目是用
4、哈希表建立通讯录,并实现语言选单、创建、修改、查询、删除、文件的操作等。(2) 课程设计的目的掌握数据结构的根底技术,学会分析研究计算机加工的数据结构的特性,以便应用涉与的数据选择适当的逻辑结构、存储结构与其相应的算法,应用相关知设计设散列表实现查找系统。(3) 课程设计的要求【根本要求】 设每个记录有如下数据项:从键盘输入各记录,分别以为关键字建立散列表;采用二次探测再散列法解决冲突;查找并显示给定的记录; 通讯录信息文件保存; 要求人机界面友好,使用图形化界面;【选做内容】 系统功能的完善;设计不同的散列函数,比拟冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找
5、长度的变化。 使用汉字显示。(4) 课程设计的主要思想课程设计中,通过不同的选择输入,实现不同的功能。有语言提示,它是通过不同的输入选择不同的语言。在通信录的创建中,把输入的信息保存在一个数组里,通过输入的,将其转化为数据,通过取余,找到它在哈希表的位置,如果位置冲突,就用二次探测处理。在查找中,通过输入的,调用哈希表寻找它在哈希表的位置,并把它输出。同样,修改于删除都是通过同样的的道理找到它在哈希表中的位置。在修改的时候,通过不同的修改选单实现不同的修改,在删除的时候,找到它的位置,在输出的的时候不输出,其实它并没有真正意义的被删除。三、概要设计(1)流程图概括图通过得到不同的字符,实现不同
6、的操作语言选单,并返回主函数创建通讯录,用哈希表实现,并返回主函数查找操作,并返回主函数删除某人的信息,并返回主函数修改某人的信息,并返回主函数显示通讯录中所有的信息,并返回主函数退出整个程序文件的存于读,并返回主函数图 1 概括图创建图 2 创建的流程图查找图 3 查找的流程图修改图4 修改的流程图删除图 5 删除的流程图(2)设计方法与原理主函数里,对不同的子函数,通过的到的不同字符对其进展调用。在建立通讯录中,用了哈希表的建立,在哈希表中,是将字符型数字转化为整形数据,并对哈希表的原有长度取余得到存储的位置,而得到的位置可能已被使用,故有调用了二次哈希,并以最后处理的下标是否为非负,来决
7、定是存储还是不存储。,而在下面的查询、删除、修改中,都是调用哈希表,找到它在哈希表中的位置来进展不同的操作。其中,在删除时,用了一个全局变量来存储要删除的位置的下标,在输出的时候不将其输出,而真正意义上,它并没有从保存的位置删除。在修改中,通过选择不同。来修改不同的信息。这个设计,主要就是对哈希表的调用与冲突的处理。四、详细内容程序代码#includestdlib.hstring.h#include /为了使用getch()方法windows.h#define MAXSIZE 200 /薄记录数量 #define MAX_SIZE 20 /人名的最大长度#define HASHSIZE 67
8、/定义表长 #define LEN sizeof(HashTable)typedef int Status;typedef char FRIMAX_SIZE;int ss = 201; /用于帮助删除typedef struct /记录FRI name; FRI tel; FRI add;Record;typedef struct /哈希表Record *elemHASHSIZE; /数据元素存储基址 int count; /当前数据元素个数 int size; /最大容量HashTable;void SystemTime() /显示系统时间SYSTEMTIME sys;GetLocalTim
9、e( &sys );printf(%4d/%02d/%02dn%02d:%02d:%02d.%03d,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds);void PR1()tt* * * * * * * * * * * * * * * * * * * * * * * *n);SystemTime();ttt通讯录操作的目录nntt* * * * * * * * * * * * * * * * * * * * * * * *nnvoid PR11()tttDirectories
10、operation directorynnvoid PR2()t按a键,显示语言提示选单tt printf(按b键,创建新的通讯录nnt按c键,在通信录的末尾写入新的信息tt按d键,查询某人的信息nnt按e键,修改某人的信息tt按f键,删除某人的信息nnt按g键,显示通讯录中的所有记录tt按h键,退出选单nnt按i键,保存通讯录中的所有记录到指定文件中nnt按j键,从指定文件中读取通讯录中的记录nn友情提示:nt先建立方可进展查找、修改、删除、显示,在从文件读取前,应先存入文件nntvoid PR22()tPressing a key, Language menunntPressing b k
11、ey,Create a new address booknntPressing c key,The end of the munication record to write a new ntinformationnntPressing d key,Inquires the information. SomeonenntPressing e key,Modify someones informationnntPressing f key,Remove someonetPressing g key,All the records show directoriesnntPressing h key
12、,Exit menunntPressing i key,Save all the records to the specified directory filenntPressing j key,Read directories from a specified file record innnnHelpful hints:ntTo create can search, modify, delete, display,in read from the file,ntshould first before deposit filesnnvoid PR3()ntt* * * * * * * * *
13、 * * * * * * * * * * * * * * *nttt创建通讯录nnvoid PR4(int i)ttt查询某人的信息nnvoid PR5()ttt修改某人的信息nnvoid PR6()tttt删除某人的信息nnvoid PR7()ttt 在通信录的末尾写入新的信息nnvoid PR8()ttt通讯录中已存信息nnvoid PR9()ttt从文件中读取结果nnvoid Menu()system(clsint n;nnnnnnnnnttt输入 1汉语、 2英语 选择语言: scanf(%d,&n);if(n = 1)PR1();PR2();if(n = 2)PR11();PR22(
14、);int NUM_BER = 0;int collision(int p,int &c)int a,pp;a = c/2+1;while(a0)return pp;elsepp = (p -2*a)%HASHSIZE;return -1;int HASH(FRI te) /哈希函数int m;long n;n = atoi(te);m = n%HASHSIZE;return m;void Append() /写入后继内容FILE *fp;FRI pa;PR7();if(fp = fopen(D:wo.txt,ab+) =NULL)tFile open erroe!nt输入追加的内容:gets
15、(pa);fwrite(pa,sizeof(FRI),1,fp);fclose(fp);nnntt按 Esc 键,返回主菜单void CreateHash(HashTable *H,Record *a) /以为关键字/SystemTime();int i,c,p = -1,pp;for(i=0;ielempp!=NULL)pp = collision(p,c);if(ppelempp = &(ai);H-count+;nttt建表完成!nntt散列表的容量为 %d ,当前容量为 %d ,HASHSIZE,H-count);void getin(Record *a,HashTable *H) /
16、键盘输入个人的信息PR3();t输入要添加的个数:NUM_BER);int i;ntttt请输入第 %d 个的记录nt输入其某某:fflush(stdin);gets(ai.name);nt输入其:gets(ai.tel);nt输入其地址:gets(ai.add);CreateHash(H,a); /建立散列表存储nnt按 Esc 键,返回主菜单int bj(FRI tel1,FRI tel2) /字符串的比拟if(strcmp(tel1,tel2) = 0)return 1;return 0;void Find(HashTable* H,int &c) /查找PR4(0);FRI tel;i
17、nt p,pp;nt输入要查找的: gets(tel); p = HASH(tel);pp = p;=NULL & bj(tel,H-elempp-tel) = 0)if(H-tel) = 1)nttt查找成功nnt某某: %snnt: %snnt : %sn,H-name,H-tel,H-add);nt此人不存在,失败!nnt按 Esc 键,返回主菜单void Alter(HashTable* H,int &c) /修改PR5();FRI gai;int p,pp,i;nt输入要修改信息的:nt输入1 , 2来选择修改项【1:修改某某,2:修改地址】:i);switch(i)case 1 :
18、nt输入要修改后的某某: gets(gai);strcpy(H-name,gai);break;case 2:nt输入要修改后的地址:add,gai);default:nt输入错误!nnnt按 Esc 键,返回主菜单void Delete(HashTable *&H,int c,Record *a) /删除PR6();nnt输入要删除的:gets(tel);int i = 0; while(strcmp(ai.tel,tel)!=0)i+;ss = i;p = HASH(tel);elempp = NULL;count -; else printf(“nntt对不起,无此人信息!nn);void List(Record *a,HashTable *H) /输出PR8();t
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1