通讯录管理(3)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
i=c/2+1;
return UNSUCCESS;
}
}
else
{
q=(p-i*i)%HASHSIZE;
c++;
if(q>=0)
return q;
else{
i=c/2+1;
return UNSUCCESS;
}
}
}
return UNSUCCESS;
}
void CreateHash(HashTable *H,Record *a)
(三) 数据结构描述
typedef int Status; typedef char NA[MAX_SIZE]; Status NUM_BER;
typedef struct{ NA name; NA tel; NA add; int flag;
}Record;
typedef struct{ Record *elem[HASHSIZE]; int count; int size;
//并返回模值
Status collision(int p,int c)
{
//冲突处理函数,采用二次探测再散列法解决冲突
int i,q;
i=c/2+1;
while(i<HASHSIZE){
if(c%2==0){
c++;
q=(p+i*i)%HASHSIZE;
if(q>=0){
return q;
}
else{
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方 法和作风。
(二) 问题描述及分析
【问题描述】 设计散列表实现通讯录查找系统。 【基本要求】 (1) 设每个记录 有下列数据项:电话号码、用户名、地址等; (2) 从键盘输入各记录,以“用户名的八位二进制内码为一段,各段内码之和对某个素数求余”
在实验的过程中我还懂得,一个团队的设计不是靠个人的,而是要靠整个团队的力量, 大家要坐在一起讨论,共同想出和设计出一个好的方案,这样我们的程序才能更好,团队 合作是很重要的。每个人都要有团队精神,并且每个人的态度一定要端正,这样才能想出 好的方案。
(八) 参考文献
[1]严蔚敏,吴伟民编著,《数据结构(C 语言版)》,清华大学出版社,2010 [2]谭浩强编著,《C 程序设计》,清华大学出版社,2009 [3] 哈希表 通讯录 CSDN 下载频道: http://search.download.csdn.net/index.php/search_jukuu
{
//建表,以人的姓名为关键字,建立相应的散列表
//若哈希地址冲突,进行冲突处理
int i,p=-1,c,pp;
for(i=0;i<NUM_BER;i++){
c=0;
p=Hash(a[i].name);
pp=p;
while(H->elem[pp]!=NULL && H->elem[pp]->flag==1)
}HashTable;
//每一条电话本记录
//哈希表 //数据元素存储基址
//当前数据元素个数 //当前容量
int Hash(NA str){ long n; int m; n=fold(str); m=n%HASHSIZE; return m;
}
//哈希函数
//先将用户名进行折叠处理 //折叠处理后的数,用除留余数法构造哈希函数
为哈希函数建立散列表; (3) 采用二次探测再散列法解决冲突; (4) 输入某个用户名,查找并显示记录; (5) 通讯录信息,保存到磁盘,并能从磁盘读取; (6) 输入某用户名,能够从表中删除(注意删除不是真正删除,应该加标记,以便以后插入或查找并有冲突
时,能跳过删除记录继续查找) (7) 要求人机界面友好,使用图形化界面; 面; 【问题分析】
本程序通过创建哈希表,实现通讯录的创建,并通过哈希表的插入和查找使通讯录可 以任意进行姓名、电话、地址的添加和查找。采用二次探测再散列法解决冲突。调用 void getin( ) 实 现 新 增 功 能 , 调 用 void insert( ) 实 现 输 入 新 增 电 话 功 能 , 调 用 voidShowInformation( )实现输出通讯录功能,调用 save 函数保存到磁盘。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程 设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达 到以下目的:
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
{
pp=collision(p,c);
if(pp<0){
continue;
}
//无法解决冲突,跳入下一循环
}
H->elem[pp]=&(a[i]);
//求得哈希地址,将信息存入
H->count++;
}
printf("\ncreateHash 建表完成!\n 此哈希表容量为%d,当前表内存储的记录个数
while(fread(&a[count],sizeof(Record),1,fp))
count++;
for(i=0;i<count;i++)
if(strcmp(str,a[i].name)==0)
{
a[i].flag=0;
printf("\n 删除成功!\n\n");
} else
if(i==count) printf("\n 此人不存在!\n"); fclose(fp); fp=fopen("tele_note.txt","wb+"); for(i=0;i<count;i++) fwrite(&a[i],sizeof(Record),1,fp); fclose(fp); } 用 flag 标记已删除的信息,flag=0 是删除程序 结论:将算法实现为程序的时候就需要注意实现语言、结构的选择等。
范新宇
指导教师:
陈利民
2013 年 12 月
(一) 课程设计的目的
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的 关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程, 它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、 系统工程等各种领域。
法如下:
void DeleteHash(HashTable* H,int c)
{
int p,pp,count=0,i,j=0;
//c 用来记录冲突次数
NA str;
Record a[20];
ห้องสมุดไป่ตู้
printf("\n 请输入要删除记录的姓名:\n");
scanf("%s",str);
FILE *fp;
fp=fopen("tele_note.txt","rb+");
(七) 总结
这次的课程设计是对我们进入大学以来学习数据结构程序设计的一次检验。在设计的 过程中,我们需要自己动手,自己发现和解决问题。由此我们可以发现了自己的不足之处。 平时没有掌握好的知识在这次大作业中很好地暴露出来,经过不断思考,不断查阅资料和 上机运行,对出现的问题进行解决。这次课程设计加深了对高级语言基本语言要素和控制 结构的理解,锻炼我们独立思考制作程序的能力。
否
结束
图 4-1 查询流程图
(2)删除流程图
可以根据使用者需要查询用户信息,若用户存在则删除用户信息,若不存在则显示不 存在。(图 4-2 删除流程图)
开始 主菜单
删除 输入删除的姓名
否
判断通讯录中
是否有此人
显示“通讯录中无此人”
是 删除此人信息
是 是否返回主菜单
否
结束
图 4-2 删除流程图
(五) 使用说明
为%d.\n",HASHSIZE,H->count);
}
(四) 主要算法流程描述
(1)查询流程图
可以根据使用者需要查询所需用户,用户存在则显示用户信息,用户不想存在则显示 不存在。(图 4-1 查询流程图)
开始 主菜单
查询
输入查询的姓名
否
判断通讯录中
是
是否有此人
显示“通讯录中无此人”
显示此人信息
是 是否返回主菜单
(1)选择“4”,查找并显示给定用户名的记录,则有下图:
输入要查找的记录姓名,输入“cc”,则有下图:
(2)选择“5”删除用户信息,则有下图:
输入要删除的用户姓名,输入“dx”,则有下图:
(3)选择“0”退出,则有下图:
(六) 调试分析说明
一开始的删除程序删除后虽然不再显示已删除信息,但查找不能跳过已删除信息,解决方
KC021-1
CHANGZHOU INSTITUTE OF TECHNOLOGY
课程设计说明书
课程名:《 数 据 结 构 课 程 设 计 》
题 目:
《通讯录管理》
二级学院: 计 算 机 信 息 工 程 学 院
专 业: 计 算 机 科 学 与 技 术
班 级:
1 2 计算机卓越
学 号:
12030208
姓 名: