1、哈希表实现电话号码查询系统设计性综合性实验实验课题名称: 院系:计算机科学与技术学院 专业:计算机科学与技术 课程: 数据结构 教师: 学号: 姓名: (组长) 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 至 学年度 学期实验名称:哈希表实现电话号码查询系统实验性质:设计性(*)综合性(*)实验器材:PC机并装有VC+6.0环境实验目的:利用数据结构课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C+语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的
2、分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。一、目的利用数据结构课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C+语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。二、需求分析1、程序的功能1.1录入姓名、电话、住址1.2查找功能1.3散列方式1.4清空记录1.5保存成TXT格式
3、1.6退出三、程序设计3.1定义结构体struct node /建节点 char name8,address20; char num11; node * next; ; 3.1函数列表和功能说明不同的函数来比较冲突void hash(char num11) /哈希函数 void hash2(char name8) /哈希函数不同的散列方式void find(char num11) /查找用户信息 void find2(char name8) /查找用户信息 void save() /保存用户信息 void menu() /菜单 int main() 四、 输出形式 4.1数据文件“old.tx
4、t”存放原始电话号码数据。 4.2查找到相关信息时显示姓名、地址、电话号码。五、调试结果调试界面图如下录入的联系人姓名、地址、联系电话截图如下程序如下已通过上机调试/#include iostream.h #include #include string.h #include fstream #define NULL 0 unsigned int key; unsigned int key2; int *p; struct node /建节点 char name8,address20; char num11; node * next; ; typedef node* pnode; typede
5、f node* mingzi; node *phone; node *nam; node *a; using namespace std; /使用名称空间 void hash(char num11) /哈希函数 int i = 3; key=(int)num2; while(numi!=NULL) key+=(int)numi; i+; key=key%20; void hash2(char name8) /哈希函数 int i = 1; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; node*
6、input() /输入节点 node *temp; temp = new node; temp-next=NULL; cout输入姓名:temp-name; cout输入地址:temp-address; cout输入电话: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); n
7、ewphone-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; whil
8、e(p) coutname_address_numnext; void list2() /显示列表 int i; node *p; for(i=0;inext; while(p) coutname_address_numnext; 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) coutname_ address_numendl; else cout无此记录next; while(q!= N
9、ULL) if(strcmp(name,q-name)=0) break; q=q-next; if(q) coutname_ address_numendl; else cout无此记录endl; void save() /保存用户信息 int i; node *p; for(i=0;inext; while(p) fstream iiout(out.txt, ios:out); iioutname_address_numnext; void menu() /菜单 coutttendl; coutttendl; coutttendl; cout*个人电话号码查询系统*ttendl; cout
10、tt0.请添加联系人记录!endl; couttt1.查找联系人记录endl; couttt2.联系人姓名散列endl; couttt3.联系人号码散列endl; couttt4.清空联系人记录endl; couttt5.保存到指定文件夹endl; couttt6.退出系统endl; cout*ttsel; if(sel=1) cout7按号码查询,8按姓名查询b; if(b=7) cout请输入电话号码:num; cout输出查找的信息:endl; find(num); else cout请输入姓名:name; cout输出查找的信息:endl; find2(name); if(sel=2) cout姓名散列结果:endl; list2(); if(sel=0) cout请输入要添加的内容:endl; apend(); if(sel=3) cout号码散列结果:endl; list(); if(sel=4) cout列表已清空:endl; create(); create2(); if(sel=5) cout通信录已保存:endl; save(); if(sel=6) return 0; return 0; 实验成绩学 号 姓 名课题小组自评分数最后得分
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1