




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计与算法综合训练设计报告项目五学号:E11514062 姓名:孙祺 年级: 2015级 专 业:计算机科学与技术项目名称:通讯录查询系统的设计与实现 完成日期:2016年7月4日1需求分析在该部分中根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么?限制条件是什么?1问题描述:为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。2基本要求(1)每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码为关键字建立散列表;(3)采用二次探测再散列法解决冲突;(4)查找并显示给定电话号码的记录;(5)通讯录信息文件保存。(6)按照题意要求独立进行设计,设计结束后按要求写出设计报告。2概要设计说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。 (1) 数据结构 在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链地址法结点结构如图:(2) name16num11address20next(3) 其中name16和num11是分别为以电话号码和用户名为关键字域,存放关键字;address20(4) 为结点的数据域,用来存储用户的地址。Next指针是用来指向下一个结点的地址。主要算法的流程图如下:(5) 初始化散列链表(1)并为其动态分配内存空间(6) 初始化散列链表(2)并为其动态分配内存空间19I开始建立新结点temp把tempnext赋为空输入信息结束开始i=0i20p-phoneinextp!=null输入结点信息p=pnext结束i+开始取整型numi给key从3开始取i值Numi!=0Key=key+(int)numii+Key=key%20结束开始取整型name0给key2从0开始取i值namei!=0Key2+=nameii+Key2=key2%20结束开始申请新的结点newphone newnameNewphone=input()Newname指向 newphone调用HASH函数调用HASH2函数拉链法处理冲突用户名为关键字输入信息结束开始申请新结点q指向phonekeynextq不为空q=qnextq不为空输出记录输出结点信息结束调用HASH函数N(2)程序模块1. 输入节点信息 ,建立结点,并将结点的next指针指空2. 添加节点3.哈希函数4. 在以电话号码为关键字的哈希表中查找用户信息5. 保存用户信息6.主函数(3) 各模块之间的调用关系以及算法设计3. 详细设计首先定义结点结构体类型,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成 name16num11address20next其中name16和num11是分别为以电话号码和用户名为关键字域,存放关键字;address20为结点的数据域,用来存储用户的地址。next指针是用来指向下一个结点的地址。#include 用来输入/输出文件流类包含的文件是fstream。unsigned int key由于题目要求以电话号码为关键字,所以在此设计的关键字。其次,设计hash()函数,以电话号码为关键字建立哈希函数hash(char num11)。哈希函数的主旨是将电话号码的十一位数字全部加起来,然后在对20求余。将计算出来的数作为该结点的地址赋给key。以用户名为关键字建立哈希函数hash2(char name8)。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。再次,建立结点,并添加结点,利用拉链法解决冲突。建立结点应包括动态申请内存空间。向结点中输入信息。同时将结点中的next指针等于null。添加结点,首先需要利用哈希函数计算出地址即关键字,其次将该结点插入以关键字为地址的链表后,以电话号码为关键字调用void hash(char num11)函数,并且将结点插入对应的散列链表中。并且,需要建立散列链表的函数,动态申请一定的空间,用于动态申请散列链表。void create()用来动态创建以电话号码为关键字的链表数组。同样,需要显示链表的函数,利用for循环和while语句将表中信息按要求输出来。想要实现查找功能,同样需要查找函数,以电话号码为关键字,首先,需要利用hash函数来计算出地址。再依次对比,比较其电话号码是否相同。如果找不到与之对应相同的,则输出“无记录”。哈希函数void hash(char num11) int i = 3; key=(int)num2; while(numi!=NULL) key+=(int)numi; i+; key=key%20; void hash2(char name16) int i = 1; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; 查找函数void find(char num11) hash(num); node *q=phonekey-next; while(q!= NULL) if(strcmp(num,q-num)=0) break; q=q-next; if(q) printf(%s,q-name); printf(%s,q-address); printf(%s,q-num); else printf(无此记录n); void find2(char name16) hash2(name); node *q=namkey2-next; while(q!= NULL) if(strcmp(name,q-name)=0) break; q=q-next; if(q) printf(%s,q-name); printf(%s,q-address); printf(%s,q-num); else printf(无此记录n); 保存函数void save() int i; node *p; for(i=0;inext; while(p) fstream iiout(fq, ios:out); iioutname_address_numnext; 读取函数void Load() system(CLS); ifstream inFile; inFile.open(fq); string str; if(inFile.is_open() while(!inFile.eof() getline(inFile, str, n); cout str endl; inFile.close(); getchar();4. 测试与分析5. 总结本次实验存在以下几个问题:1.对于文件的保存和读取存在问题;2,本次实验中,对于文件的保存需要每次保存只能保存一个6. 附录#include #include #include using namespace std;FILE *fq; #define NULL 0 unsigned int key; unsigned int key2;int *p; struct node char name16,address20; char num11; node * next; ; typedef node* pnode; typedef node* mingzi; node *phone; node *nam; node *a; void hash(char num11) int i = 3; key=(int)num2; while(numi!=NULL) key+=(int)numi; i+; key=key%20; void hash2(char name16) int i = 1; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; node* input() node *temp; temp = new node; temp-next=NULL; printf(输入姓名:n); scanf(%s,temp-name);printf(输入地址:n); scanf(%s,temp-address);printf(输入电话:n); scanf(%s,temp-num);return temp; int apend() /添加节点 node *newphone; node *newname; newphone=input(); newname=newphone; newphone-next=NULL; newname-next=NULL; hash(newphone-num); hash2(newname-name); newphone-next = phonekey-next; phonekey-next=newphone; newname-next = namkey2-next; namkey2-next=newname; return 0; void create() int i; phone=new pnode20; for(i=0;inext=NULL; void create2() int i; nam=new mingzi20; for(i=0;inext=NULL; void list() int i; node *p; for(i=0;inext; while(p) printf(%s,p-name); printf(%s,p-address); printf(%s,p-num); p=p-next; void list2() int i; node *p; for(i=0;inext; while(p) printf(%s,p-name); printf(%s,p-address); printf(%s,p-num); p=p-next; void find(char num11) hash(num); node *q=phonekey-next; while(q!= NULL) if(strcmp(num,q-num)=0) break; q=q-next; if(q) printf(%s,q-name); printf(%s,q-address); printf(%s,q-num); else printf(无此记录n); void find2(char name16) hash2(name); node *q=namkey2-next; while(q!= NULL) if(strcmp(name,q-name)=0) break; q=q-next; if(q) printf(%s,q-name); printf(%s,q-address); printf(%s,q-num); else printf(无此记录n); void save() int i; node *p; for(i=0;inext; while(p) fstream iiout(fq, ios:out); iioutname_address_numnext; void Load() system(CLS); ifstream inFile; inFile.open(fq); string str; if(inFile.is_open() while(!inFile.eof() getline(inFile, str, n); cout str endl; inFile.close(); getchar();int main() int n;char num11; char name16; create(); create2(); doprintf(*员工通讯录*n);printf( 1.添加记录n);printf( 2.号码散列n);printf( 3.查找记录n);printf( 4.清空记录n);printf( 5.保存记录n);printf( 6.读取记录n);printf( 7.退出系统n);printf(*n);printf(请输入要进行的操作:);scanf(%d,&n);switch(n)case 1:printf(请输入要添加的内容:n); apend(); break;case 2:printf(姓名散列结果:n);list2();printf(号码散列结果:n);list(); break; case 3:printf(输入 “1 ”姓名查询,输入“2”号码查询n);int a; scanf(%d,&a); if(a=2) printf(请输入电话号码:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能制造工程师面试技巧与答案
- 2025年安全员安全生产法规试题
- 2025年事务局培训管理岗位面试题库答案
- 2025年农村经济管理实务技能考核试卷及答案解析
- 2025年金融业务拓展经理综合能力测验试卷及答案解析
- 2025年安全生产管理技能考试重点及答案
- 2025年职位项目经理招聘面试模拟题及参考答案
- 机电设备维修岗位知识培训课件
- 2025年河道治理工程师专业技能认证考试试卷及答案解析
- 2025年广播主持人综合能力评估试题及答案解析
- 难治性精神分裂症中国专家共识(2025)解读
- 节假日值班人员安排管理制度
- 2024年化工行业典型生产安全事故警示
- (正式版)DB44∕T 2683-2025 《老年肌少症中西医结合健康管理规范》
- 2025年农电招聘面试题目及答案
- 领导小组管理办法
- 01 华为采购管理架构(20P)
- 基孔肯雅热的个案护理
- GA/T 2167-2024移民管理机构对外窗口设置规范
- 拥抱大赛活动方案
- DeepSeek在教育和学术领域的应用场景与案例(上中下合集)
评论
0/150
提交评论