不少人邮件问我无法运行,首先,这个需要在c++的环境下运行,虽然是用c语言写的。然后我又自己运行了一次,发现好好的,如果你无法运行,请附上报错的截图。

1 .需求分析

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

1.基本要求

•          (1)每个记录有下列数据项:电话号码、用户名、地址;

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

•          (3)采用二次探测再散列法解决冲突;

•          (4)查找并显示给定电话号码的记录;

•          (5)通讯录信息文件保存。

•          2.重点、难点

•          重点:

•          (1)通过实验深入理解哈希表既是一种存储形式,又是一种查找方法;

•          (2)哈希表的构造;

•          (3)哈希冲突方案的设计。

•          难点:哈希表的构造与哈希冲突方案的设计

(1) 输入的形式和输入值的范围;

(2) 输入三个字符串:

分别是电话号码,姓名,地址,每行一个数据

字符串长度适当

如:

15545871414

小明

安徽合肥

(3) 输出的形式;

输入联系人信息,每行包括一个联系人的姓名电话地址

如:

某某 15574157841 安徽合肥

(4) 程序所能达到的功能。

1:

输入联系人,支持多组输入;

并且通过电话号码为关键字,用二次再散列法寻找地址储存在哈希表中。

2:

查找联系人信息,可以通过电话号码,姓名,地址三种方式为关键字进行查找。

3:

删除联系人

4:

修改联系人信息。

5:显示通讯录

6:把通讯录写入文件储存。

2. 概要设计

(1) 数据结构

用结构体存储每个联系人的信息

struct list

{

char a[12];

char name[15];

char add[15];

intf=0;

};

f为储存标志,若为1,表示该联系人存在哈希表中

用连续的内存空间构建哈希表

struct sqstack

{

struct list *base;

inti;

};

(2)程序模块

1:

构建二次再散列:

int i;

for(i=1;i<25;i++)

d[2*i]=-1*i*i;

for(i=1;i<25;i++)/*构造二次再散列*/

d[i+i-1]=i*i;

2:主菜单:

void interface()

{

inti;

printf("********************\n");

printf("*  请输入操作指令\n*\n* 1:输入通讯录\n*  2:显示通讯录\n*  3:查找联系人\n*  4:删除联系人\n*  5:修改联系人信息\n*  6:保存到文件\n*  0:结束程序\n");

printf("********************\n");

scanf("%d",&i);

switch(i)

{

case 0:return ;break;

case 1:shuru();break;

case 2:print();break;

case 3:seach();break;

case 4:del();break;

case 5:change();break;

case 6:write();break;

};

}

3:输入

void shuru()

4:存入哈希表,采用二次探测再散列法解决冲突;

void store(char *a,char *name,char *add)

5:查找联系人,支持姓名电话地址三个关键字的查找

void seach();

6:修改联系人信息

void change()

7:删除联系人

Void del();

8:将联系人信息写入文件储存;

void write()

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<string.h>
using namespace std;
int d[50];/*再散列*/
struct list
{char a[12];char name[15];char add[15];int f=0;
};
struct sqstack
{struct list *base;int i;
};
struct sqstack S;
void store(char *a,char *name,char *add)
{int key;key=int(a[0])+int(a[3])+int(a[7]);/*以电话号码的第1,4,8位作为关键字构造哈希函数*/S.i=key%20;int j=1;while(true){if((S.base+S.i)->f==0){strcpy((S.base+S.i)->a,a);strcpy((S.base+S.i)->name,name);strcpy((S.base+S.i)->add,add);(S.base+S.i)->f=1;break;}S.i=(key%20+d[j])%20;j++;}}
void shuru()
{
void interface();cout<<"请输入:\n例如:\n15556931615\n小王\n安徽省合肥市\n输入0结束\n";char a[12];char name[15];char add[15];while(true){scanf("%s",a);if(a[0]=='0')break;scanf("%s",name);scanf("%s",add);printf("%s已保存\n",name);store(a,name,add);/*将输入保存到哈希表*/}interface();
}
void print()
{void interface();int i;printf("姓名   电话号码     地址\n");for(i=0;i<20;i++){if((S.base+i)->f==1){printf("%s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);}}interface();
}
void seach()
{void interface();int i;int ff=0;int b;char a[15];printf("输入1按电话号码查找,输入2按姓名查找,输入3按地址查找\n");scanf("%d",&b);switch(b){case 1:printf("请输入电话号码\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->a)==0){printf("%s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;case 2:printf("请输入姓名\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->name)==0){printf("%s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;case 3:printf("请输入地址\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->add)==0){printf("%s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();
}
void del()
{void interface();int i;int ff=0;int b;char a[15];printf("输入1按电话号码删除,输入2按姓名删除,输入3按地址删除\n");scanf("%d",&b);switch(b){case 1:printf("请输入电话号码\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->a)==0){(S.base+i)->f=0;printf("已删除:  %s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;case 2:printf("请输入姓名\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->name)==0){(S.base+i)->f=0;printf("已删除:  %s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;case 3:printf("请输入地址\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->add)==0){(S.base+i)->f=0;printf("已删除:  %s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();
}
void change()
{void interface();int i;int ff=0;int b;char a[15];printf("请输入姓名\n");scanf("%s",a);for(i=0;i<20;i++)if(strcmp(a,(S.base+i)->name)==0){printf("您要修改的是:  %s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);printf("请输入新信息\n");scanf("%s",(S.base+i)->a);scanf("%s",(S.base+i)->name);scanf("%s",(S.base+i)->add);printf("已修改成:  %s %s %s\n",(S.base+i)->name,(S.base+i)->a,(S.base+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");interface();
}
void write()
{void interface();int i=0;FILE *fp;if((fp=fopen("通讯录.txt","wb"))==NULL)
{
printf("open file error\n");
exit(1);
}for(i=0;i<=20;i++){int ch=32;if((S.base+i)->f==1){fprintf(fp,"%s",(S.base+i)->name);fputc(ch,fp);fprintf(fp,"%s",(S.base+i)->a);fputc(ch,fp);ch=10;fprintf(fp,"%s",(S.base+i)->add);fputc(ch,fp);}}fclose(fp);interface();
}
void interface()
{int i;printf("********************\n");printf("*  请输入操作指令\n*\n*  1:输入通讯录\n*  2:显示通讯录\n*  3:查找联系人\n*  4:删除联系人\n*  5:修改联系人信息\n*  6:保存到文件\n*  0:结束程序\n");printf("********************\n");scanf("%d",&i);switch(i){case 0:return ;break;case 1:shuru();break;case 2:print();break;case 3:seach();break;case 4:del();break;case 5:change();break;case 6:write();break;};
}
int main()
{system("color 70"); //可以写成 red 调出颜色组S.base=(struct list *)malloc(20*sizeof(struct list));printf("      ****************欢迎使用通讯录查询系统*********************\n\n");system("date /T");system("TIME /T");int i;for(i=1;i<25;i++)d[2*i]=-1*i*i;for(i=1;i<25;i++)/*构造二次再散列*/d[i+i-1]=i*i;interface();
}

运行环境:codeblocks cpp

主界面

输入联系人,支持批量输入

构建哈希表,允许电话号码重复

显示联系人信息:

可以再增加新的联系人:

查找联系人信息:

可以支持姓名,电话,地址三个关键字的查找

删除联系人

可以按照电话姓名地址删除

修改联系人信息::

写文件:

创建文件通讯录.txt

并且将联系人存入

如图:

数据结构通讯录查询系统相关推荐

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

    [实验目的] 掌握哈希表的创建方法 学会使用二次探测再散列法解决冲突 练习文件写入操作 [实验原理] 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数 ...

  2. 通讯录查询系统(完整代码,直接运行)

    1.问题描述和要求 问题描述:为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址.设计散列表存储,设计并实现通讯录查找系统. 基本要求: (1)每个记录有下列数据项:电话号码.用 ...

  3. 数据结构个人电话号码查询系统实验报告

    实验目的及要求 目的:通过设计一个<个人电话号码查询系统>,进一步熟悉一些二叉树的概念.以及基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题.实现根据用户输入的信息 ...

  4. 数据结构课程设计大作业——江大公交路线查询系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 代码 总结 前言 参考资料[C++期末大作业]数据结构课设 | 智能公交车查询系统_米莱虾的博客-CSDN博客_c++期末大 ...

  5. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)

    1 课程设计介绍 1 . 1 课程设计项目简介 家谱就是一种以表谱形式 , 记载一个以血缘关系为主体得 家族世系繁衍与重要人物事迹得特殊图书载体.家谱就是中国特 有得文化遗产,就是中华民族得三大文献之 ...

  6. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...

    数据结构课程设计(家族关系查询系统). 1 课程设计介绍 1.1课程设计项目简介 家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化遗产,是 ...

  7. 家族关系查询系统程序设计算法思路_数据结构课程设计方案(家族关系查询系统)...

    家族关系查询系统 1 1 课程设计介绍 1.1 课程设计项目简介 家谱是一种以表谱形式, 记载一个以血缘关系为主体的家族世 系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化 遗产,是中华民族的 ...

  8. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统).....

    家族关系查询系统 1 1 课程设计介绍 1.1 课程设计项目简介 家谱是一种以表谱形式, 记载一个以血缘关系为主体的家族世 系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化 遗产,是中华民族的 ...

  9. 家族关系查询系统程序设计算法思路_数据结构课程设计--

    数据结构课程设计-- 家族关系查询系统 课 程 设 计 任 务 书 题目题目 家族关系查询系统家族关系查询系统 主要内容.基本要求.主要参考资料等主要内容.基本要求.主要参考资料等 主要内容主要内容 ...

最新文章

  1. 学习Spring Boot:(十一) 自定义装配参数
  2. 极光推送指定用户推送_App用户都睡着了?是时候用推送和活动唤醒一波了!
  3. 所有的物理引擎演示程序
  4. 一步一步学solr:什么是solr?
  5. 这只拒绝内卷的 AI 狼火了!高智商却自暴自弃,不想抓羊只想躺
  6. 互联网创业的重重风险
  7. 关于WPF的MVVM模式的吐槽
  8. 双曲调频信号matlab仿真,matlab 实现线性调频信号以及分析处理
  9. python编程和excel_Excel Vs. Python?为Excel正名
  10. Python 爬虫--网站下载器
  11. java 乱码怎么是繁体字_win7繁体字乱码怎么办?win7繁体字显示乱码解决方法
  12. 口红游戏 插口红游戏 h5页面开发
  13. Android音视频开发之,全网疯传
  14. 开关数字方格哥德巴赫猜想自我数积木
  15. 计算机信息教学,高中计算机信息教学随笔(2)
  16. ide编辑器 android,从 IDE 到终端 + 文本编辑器
  17. DataLoader的num_workers设置引起卡死/堵塞/报错,第一个epoch前几个iteration就卡住了,没有报错,内存不释放,GPU利用率为0
  18. 2020年11月windows7安装使用nodejs
  19. java,定义类(手机),调用(手机的各种方法)演示
  20. jar文件运行时 Failed to load Main-Class manifest attribute from

热门文章

  1. mysql之binlog日志
  2. 指挥计算机工作的程序集,主互操作程序集(PIA)是否要求在计算机中安装Microsoft Office才能工作...
  3. python安装第三方库方法_Python安装第三方库的4种方法
  4. unity3d 手游端一些优化技巧
  5. 适用于Linux的5种开源赛车和飞行游戏
  6. 微信小程序(一)_APPID_的作用
  7. 美国历史最大10宗破产保护
  8. vue文本框中禁止输入空格和使用enter键
  9. 01前端学习之HTML5
  10. 我与兼阅万,有个美丽的邂逅