哈希表实现电话号码查询系统.docx
《哈希表实现电话号码查询系统.docx》由会员分享,可在线阅读,更多相关《哈希表实现电话号码查询系统.docx(13页珍藏版)》请在冰豆网上搜索。
![哈希表实现电话号码查询系统.docx](https://file1.bdocx.com/fileroot1/2023-1/29/0f1b70e4-10f1-49a1-9a93-b3f1ded08438/0f1b70e4-10f1-49a1-9a93-b3f1ded084381.gif)
哈希表实现电话号码查询系统
设计性综合性实验
实验课题名称:
院系:
计算机科学与技术学院专业:
计算机科学与技术
课程:
数据结构教师:
学号:
姓名:
(组长)
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
学号:
姓名:
至学年度学期
实验名称:
哈希表实现电话号码查询系统
实验性质:
设计性(*) 综合性(*)
实验器材:
PC机并装有VC++6.0环境
实验目的:
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。
通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
一、目的
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。
通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
二、需求分析
1、 程序的功能
1.1录入姓名、电话、住址
1.2查找功能
1.3散列方式
1.4清空记录
1.5保存成TXT格式
1.6退出
三、程序设计
3.1定义结构体
structnode//建节点
{
charname[8],address[20];
charnum[11];
node*next;
};
3.1函数列表和功能说明
不同的函数来比较冲突
voidhash(charnum[11])//哈希函数
voidhash2(charname[8])//哈希函数
不同的散列方式
voidfind(charnum[11])//查找用户信息
voidfind2(charname[8])//查找用户信息
voidsave()//保存用户信息
voidmenu()//菜单
intmain()
四、输出形式
4.1数据文件“old.txt”存放原始电话号码数据。
4.2查找到相关信息时显示姓名、地址、电话号码。
五、调试结果
调试界面图如下
录入的联系人姓名、地址、联系电话截图如下
程序如下已通过上机调试
//#include"iostream.h"
#include
#include"string.h"
#include"fstream"
#defineNULL0
unsignedintkey;
unsignedintkey2;
int*p;
structnode//建节点
{
charname[8],address[20];
charnum[11];
node*next;
};
typedefnode*pnode;
typedefnode*mingzi;
node**phone;
node**nam;
node*a;
usingnamespacestd;//使用名称空间
voidhash(charnum[11])//哈希函数
{
inti=3;
key=(int)num[2];
while(num[i]!
=NULL)
{
key+=(int)num[i];
i++;
}
key=key%20;
}
voidhash2(charname[8])//哈希函数
{
inti=1;
key2=(int)name[0];
while(name[i]!
=NULL)
{
key2+=(int)name[i];
i++;
}
key2=key2%20;
}
node*input()//输入节点
{
node*temp;
temp=newnode;
temp->next=NULL;
cout<<"输入姓名:
"<cin>>temp->name;
cout<<"输入地址:
"<cin>>temp->address;
cout<<"输入电话:
"<cin>>temp->num;
returntemp;
}
intapend()//添加节点
{
node*newphone;
node*newname;
newphone=input();
newname=newphone;
newphone->next=NULL;
newname->next=NULL;
hash(newphone->num);
hash2(newname->name);
newphone->next=phone[key]->next;
phone[key]->next=newphone;
newname->next=nam[key2]->next;
nam[key2]->next=newname;
return0;
}
voidcreate()//新建节点
{
inti;
phone=newpnode[20];
for(i=0;i<20;i++)
{
phone[i]=newnode;
phone[i]->next=NULL;
}
}
voidcreate2()//新建节点
{
inti;
nam=newmingzi[20];
for(i=0;i<20;i++)
{
nam[i]=newnode;
nam[i]->next=NULL;
}
}
voidlist()//显示列表
{
inti;
node*p;
for(i=0;i<20;i++)
{
p=phone[i]->next;
while(p)
{
cout<name<<'_'<address<<'_'<num<p=p->next;
}
}
}
voidlist2()//显示列表
{
inti;
node*p;
for(i=0;i<20;i++)
{
p=nam[i]->next;
while(p)
{
cout<name<<'_'<address<<'_'<num<p=p->next;
}
}
}
voidfind(charnum[11])//查找用户信息
{
hash(num);
node*q=phone[key]->next;
while(q!
=NULL)
{
if(strcmp(num,q->num)==0)
break;
q=q->next;
}
if(q)
cout<name<<"_"<address<<"_"<num<elsecout<<"无此记录"<}
voidfind2(charname[8])//查找用户信息
{
hash2(name);
node*q=nam[key2]->next;
while(q!
=NULL)
{
if(strcmp(name,q->name)==0)
break;
q=q->next;
}
if(q)
cout<name<<"_"<address<<"_"<num<elsecout<<"无此记录"<}
voidsave()//保存用户信息
{
inti;
node*p;
for(i=0;i<20;i++)
{
p=phone[i]->next;
while(p)
{
fstreamiiout("out.txt",ios:
:
out);
iiout<name<<"_"<address<<"_"<num<p=p->next;
}
}
}
voidmenu()//菜单
{cout<<"\t\t"<cout<<"\t\t"<cout<<"\t\t"<cout<<"**************个人电话号码查询系统*******************\t\t"<cout<<"\t\t0.请添加联系人记录!
"<cout<<"\t\t1.查找联系人记录"<cout<<"\t\t2.联系人姓名散列"<cout<<"\t\t3.联系人号码散列"<cout<<"\t\t4.清空联系人记录"<cout<<"\t\t5.保存到指定文件夹"<cout<<"\t\t6.退出系统"<cout<<"*****************************************************\t\t"<}
intmain()
{
charnum[11];
charname[8];
create();
create2();
intsel;
while
(1)
{
menu();
cin>>sel;
if(sel==1)
{cout<<"7按号码查询,8按姓名查询"<intb;
cin>>b;
if(b==7)
{cout<<"请输入电话号码:
"<cin>>num;
cout<<"输出查找的信息:
"<find(num);
}
else
{cout<<"请输入姓名:
"<cin>>name;
cout<<"输出查找的信息:
"<find2(name);}
}
if(sel==2)
{cout<<"姓名散列结果:
"<list2();
}
if(sel==0)
{cout<<"请输入要添加的内容:
"<apend();
}
if(sel==3)
{cout<<"号码散列结果:
"<list();
}
if(sel==4)
{cout<<"列表已清空:
"<create();
create2();
}
if(sel==5)
{cout<<"通信录已保存:
"<save();
}
if(sel==6)return0;
}
return0;
}
实验成绩
学号
姓名
课题小组自评分数
最后得分