设计哈希表实现电话号码查询系统C语言版(课程设计报告)
设计哈希表实现电话号码查询系统
一 目的
通过课程设计,巩固和加深对结构体、文件、哈希表等理论知识的理解掌握现实复杂问题的分析建模和解决方法,掌握包括问题描述、系统分析、设计建模、代码实现、结果分析等的方法;提高利用计算机分析解决综合性实际问题的基本能力锻炼个人动手能力历练自身素质。
哈希表实现电话号码查询系统是利用哈希表实现电话系统的快速查询程序实现哈希表建表和查表并实现对没有查找到的内容进行记录。掌握哈希表的工作原理熟悉建立哈希表、对哈希表冲突处理、哈希表查找等功能的实现回顾文件读取、写入,回顾随机函数的作用。
二需求分析
1.输入的形式和输入值的范围
数据输入分两种模式一种是将原有数据记录在old。  t文档中 由程序读入另一种是由程序随机生成,并储存在nw。 txt文档中。数据的格式为:姓名、 电话号码、家庭住址.
用户使用时显示菜单,用户输入菜单选项完成操作。
2.输出的形式
查找的结果显示在屏幕上。未被查找到的内容输出到u 。 tx文档中。在用户需要时,将哈希表显示在屏幕上。
3.程序所能达到的功能
根据用户的选择从原有文档读入数据或随机生成数据,分别以姓名和电话号码做为关键字生成哈希表。生成哈希表后用户可以根据相应关键字进行数据的查找,若查找到对应的数据则将数据输出到屏幕,若没有查找到对应的数据则将用户输入的查找内容输出到ou 。 txt文档.在用户选择显示哈希表时,显示完整的哈希表。
程序使用文字菜单的友好界面在数据输入时对输入内容进行范围控制。
4。初步测试计划
在 d.tt文档中输入 条记录令程序读入并分别以姓名和电话号码做为关键字生成哈希表查找记录中原有的记录查看输出数据,查找记录中没有的记录查看回馈,查看整个哈希表的数据.
令程序随机生成记录,查看n.tx文档分别以姓名和电话号码做为关键字生
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
成哈希表查看整个哈希表的数据,分别查找原有和没有的记录查看回馈。
三概要设计
 。数据类型
定义结构体类型存储每条记录struc  D a
{
char  me s ize na me ;
  ar phon size on 
chr address   i eaddres s]
ol used;
}hahd ata;
2各种函数说明int   _a ke(char* s  r,it s lct  获得关键字vod so(int i //显示每条信息vod Stoec har str/在没有找到时输出未找到的记录打开文件u  xt并将记录储存在文档中v d Allsow( /输出哈希表中的记录void Auof l(  随机生成数据并将数据保存在 。 txvo id uild_H s(int Ha sTp  //建立哈希表vid Findame( /根据姓名查找哈希表中的记录vi F indhone   //根据电话号码查找哈希表中的记录
四详细设计
 。头文件及定义结构体类型
in lu d e< im 。 h〉
inc ude 〈stdi 。 h>
 clud  tr ng 〉
#in lde<s dli 。 h〉
设计哈希表实现电话号码查询系统C语言版(课程设计报告)struc t ata
  tring name;//st ng phn 
   i  ddre s  ;
 ; Dat hah_aa
2。定义长度
define sizehash1 0
define s  ename 20
d   e sizephone15
#d   e sizeadde  s 4
 .获取关键字函数int ge _hahke char s  ,int selec  
in Key0,ReKe,m
  ar tmp[10]
for  nt =0;  〈str  en   t  ;i++
{
 Key+str i ;
y%=sizehash
  f ha s_dta e u e d
 
m=Key;
 Key— 
 if s  ect==1
{
设计哈希表实现电话号码查询系统C语言版(课程设计报告) o  =0 i0 i+)
{
eKe(+Ai]%siea ;
 if  !ah_aa Reey].sed
 
  KeyReKy
b re ak
}
   se  f(  e  e ==2)
{
 Ke=m
  r(i= ;i<100; ++
  ReKe=eKy+1;
 ReKy=ReKy iz ah;
     hash_ata eKey u ed)
 {
  KeReey
 b re ak;
}
}
etu K 
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
4。产生ha 表
oid Bu d_H h     H sTye) {
fo int i0  〈siehas;   s_ ta i .u ed=fa  eFLE* re   rfoe(DataF ile ” ");
i re ade ==NULL
{
rint ( 读取失败\n”,D ataF il);
 fc ose(r dr)
x t(1 ;
ch   1 0
  a sps 
   r *nae  ar p ho ne car*adre  s;
 n ashKey;whi    !  o f(read  
{
 gets s 1 0  ae r
if s   len s)>0
 nstrtk(s sep s);
hon=strtok L,  p s
add s  trt (NL,     );
   f  hy ==1
{
Hashyg askey ae Hasp); }e  e   Hashype=2
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
{
ashKe=et_ashkey(phone HshTy    }
  f ahey=-  
 
print f( ”哈希表过小或哈希碰撞过多" ;
fc lo  red  
ex  1);
   se 
strcy hs h_dta[H hK e y]。 n,na mes  rcp y hahata as hKe]。 p  e p hoe ;
s  c  h  _d a[H s hKy。 ad  s s, dre s s a _dat Hase use= rue;
}
  l  e    d   ;
}
 在没有找到时输出未找到的记录打开文件ou  xt并将记录储存在文档中vod St e  har *str)/将查找失败记录添加到ou 。 tx文件末尾
 LE  =fop en(”ot txt” ”wa )  以追加的方式写入   (p==NLL)/判断文件是否打开成功
 
p nf "创建ut。 tx失败n )
 f los p)
ex t(1 ;
设计哈希表实现电话号码查询系统C语言版(课程设计报告)}
fsaf p,”s  ,     ;
fc  os pf)
6。输出哈希表中的记录
oidAl  sho  
{
 r(int i= ;  izeash +
 
  f( shda  i].used)
{
sho i
 
}
p ntf(”nn");
7。随机生成数据并将数据保存在ew ttvo id Auo_f le )
FLE p=o en("ew t  " ”w”)
writer。 open("ne.t  ”)
iffp=NULL)
pritf ”创ä¡ä建¡§n tx失º¡ì败㨹  \n )  lo e(f);
设计哈希表实现电话号码查询系统C语言版(课程设计报告) ex t  1 ;
chr s 100]={ };
    k= ;
sran t ime 0) ;
fr it  ; <   i++)
 
meset s,0, 0 );
=0;
//随?机¨²产¨²生¦¨²用®?户¡ì名
 or(int j=0;j8 j++ k++
s k ='a’rnd     
//随机¨²产¨²生¦¨²电Ì话¡ã号码?
s k+ \t ;
 f  (j=0;j<12 ++,+)
{
s[k]=’   ran(%10
}
//随?机¨²产¨²生¦¨²地Ì址¡¤
s[k++ ='\t’  
设计哈希表实现电话号码查询系统C语言版(课程设计报告)fr(j=0;j<20 j+ k+
 
s  =  ’+rnd( 2 
}
fpr ntff  "s",  )
if(i  =49
    nt (p,  \n 
}fcls(fp ;
}
 .根据姓名查找哈希表中的记录in Fnd_y_nme s  r ng nam 
{
i  =0;
in 1
intky;chr* ;for(ey ,p=nam 0];p +)
ey=key+ 
keyky%  
whi  (  
{
 if(  ig k  == 0’&ey 〈=  
 ky+;j++ if as h_ata[e].nme==nme
 reu  k e y
 e   e
欧路云 主要运行弹性云服务器,可自由定制配置,可选加拿大的480G超高防系列,也可以选择美国(200G高防)系列,也有速度直逼内地的香港CN2系列。所有配置都可以在下单的时候自行根据项目 需求来定制自由升级降级 (降级按天数配置费用 退款回预存款)。由专业人员提供一系列的技术支持!官方网站:https://www.oulucloud.com/云服务器(主机测评专属优惠)全场8折 优惠码:zhuji...
				  iON Cloud怎么样?iON Cloud升级了新加坡CN2 VPS的带宽和流量最低配的原先带宽5M现在升级为10M,流量也从原先的150G升级为250G。注意,流量也仅计算出站方向。iON Cloud是Krypt旗下的云服务器品牌,成立于2019年,是美国老牌机房(1998~)krypt旗下的VPS云服务器品牌,主打国外VPS云服务器业务,均采用KVM架构,整体性能配置较高,云服务器产品质量靠...
				  80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...