数据结构课程设计-通讯录查询系统的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通讯录查询系统的设计与实现

一、需求分析

1、问题描述

为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。

2、基本要求

a.每个记录有下列数据项:电话号码、用户名、地址;

b.从键盘输入各记录,分别以电话号码为关键字建立散列表;

c.采用二次探测再散列法解决冲突;

d.查找并显示给定电话号码的记录;

e.通讯录信息文件保存。

二、概要设计

1.数据结构

本程序需要用到两个结构体,分别为通讯录message以及哈希表HxList

2.程序模块

本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。

系统子程序及功能设计

本系统共有三个子程序,分别是:

int Hx(long long key,int data)//哈希函数

void BulidHx(HxList &L)//建立通讯录

int Search(HxList &L)//查找

3.各模块之间的调用关系以及算法设计

主函数调用BulidHx以及Search函数。

函数BulidHx调用函数Hx。

三、详细设计

1.数据类型定义

typedef struct

{

char *name;

char *add;

long long phonenumber;

}message;

typedef struct

{

message *list;

int number;//记录数

}HxList;

2.系统主要子程序详细设计

a. 建立通讯录

void BulidHx(HxList &L)//建立通讯录

{

FILE *f = fopen("E:\\tongxunlu.txt", "w");

char buf[20]={0},str[20]={0};

long long key;

cout<<"输入要建立的记录数:";

cin>>L.number;

L.number+=1;

L.list=new message[L.number];//分配哈希表的存储空间for(int i=0;i

{

L.list[i].phonenumber=-1;

}

L.list[L.number-1].name=NULL;

L.list[L.number-1].add=NULL;

cout<<"输入记录信息(电话号码用户名地址)"<

{

cin>>key>>buf>>str;

int pose=Hx(key,L.number);//获取理论上的存储位置if(L.list[pose].phonenumber==-1)

{

}

else

{

//用二次探测再散列法解决冲突

//1^2 -1^2 2^2 -2^2

int di,count=1;

xunhuan: if(count%2==0)

di=-(count/2)*(count/2);

else

di=((count/2)+1)*((count/2)+1);

int site=Hx(key+di,L.number);

if(site>=0)

{

if(L.list[site].phonenumber==-1)

{

pose=site;

}

else

{

count++;

goto xunhuan;

}

}

else

{

site=L.number-abs(site);

if(L.list[site].phonenumber==-1)

{

pose=site;

}

else

{

count++;

goto xunhuan;

}

}

}

L.list[pose].phonenumber=key;

fprintf(f,"%lld",key);

fprintf(f," ");

L.list[pose].name=new char[strlen(buf)+1];

strcpy(L.list[pose].name,buf);

fprintf(f,"%s",buf);

fprintf(f," ");

L.list[pose].add=new char[strlen(str)+1];

strcpy(L.list[pose].add,str);

fprintf(f,"%s",str);

fprintf(f,"\n");

}

}

b.查找

int Search(HxList &L)//查找

{

long long key;

cout<<"输入要查找记录的关键字(电话号码):";

cin>>key;

int pose=Hx(key,L.number);//计算理论上的位置

if(L.list[pose].phonenumber==key)

{

}

else

{

相关文档
最新文档