用C编写通讯录.docx

上传人:b****2 文档编号:17758538 上传时间:2023-08-03 格式:DOCX 页数:20 大小:327.77KB
下载 相关 举报
用C编写通讯录.docx_第1页
第1页 / 共20页
用C编写通讯录.docx_第2页
第2页 / 共20页
用C编写通讯录.docx_第3页
第3页 / 共20页
用C编写通讯录.docx_第4页
第4页 / 共20页
用C编写通讯录.docx_第5页
第5页 / 共20页
用C编写通讯录.docx_第6页
第6页 / 共20页
用C编写通讯录.docx_第7页
第7页 / 共20页
用C编写通讯录.docx_第8页
第8页 / 共20页
用C编写通讯录.docx_第9页
第9页 / 共20页
用C编写通讯录.docx_第10页
第10页 / 共20页
用C编写通讯录.docx_第11页
第11页 / 共20页
用C编写通讯录.docx_第12页
第12页 / 共20页
用C编写通讯录.docx_第13页
第13页 / 共20页
用C编写通讯录.docx_第14页
第14页 / 共20页
用C编写通讯录.docx_第15页
第15页 / 共20页
用C编写通讯录.docx_第16页
第16页 / 共20页
用C编写通讯录.docx_第17页
第17页 / 共20页
用C编写通讯录.docx_第18页
第18页 / 共20页
用C编写通讯录.docx_第19页
第19页 / 共20页
用C编写通讯录.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用C编写通讯录.docx

《用C编写通讯录.docx》由会员分享,可在线阅读,更多相关《用C编写通讯录.docx(20页珍藏版)》请在冰点文库上搜索。

用C编写通讯录.docx

用C编写通讯录

 

用C编写通讯录

 

课程设计报告

 

课程名称:

数据结构与算法

设计题目:

用散列表建立通讯录

系别:

专业:

组别:

起止日期:

指导教师:

 

计算机科学与技术系二○一一年制

课程设计任务书

课程设计题目

建立通讯录

组长

学号

班级

系别

专业

组员

指导教师

课程设计目的

(1)熟练掌握C语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。

课程设计所需环境

MicrosoftVisualC++

课程设计任务要求

(1)设每个记录有下列数据项:

电话号码、用户名、地址;

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

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

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

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

(6)要求人机界面友好,使用图形化界面;

课程设计工作进度计划

序号

起止日期

工作内容

分工情况

1

2

调试与操作说明

3

需求分析

4

详细代码

5

引言

6

总结与体会

教研室审核意见:

 

教研室主任签字:

年月日

 

一、引言

二、需求分析

(1)课程设计题目

这一组的课程设计题目是《用哈希表建立通讯录》,并实现语言选单、创建、修改、查询、删除、文件的操作等。

(2)课程设计的目的

掌握数据结构的基础技术,学会分析研究计算机加工的数据结构的特性,以便

应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,应用相关知

设计设散列表实现电话号码查找系统。

(3)课程设计的要求

【基本要求】

设每个记录有下列数据项:

电话号码、用户名、地址;

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

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

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

通讯录信息文件保存;

要求人机界面友好,使用图形化界面;

【选做内容】

系统功能的完善;

设计不同的散列函数,比较冲突率;

在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。

使用汉字显示。

(4)课程设计的主要思想

课程设计中,通过不同的选择输入,实现不同的功能。

有语言提示,它是通过不同的输入选择不同的语言。

在通信录的创建中,把输入的信息保存在一个数组里,通过输入的电话号码,将其转化为数据,通过取余,找到它在哈希表的位置,如果位置冲突,就用二次探测处理。

在查找中,通过输入的电话号码,调用哈希表寻找它在哈希表的位置,并把它输出。

同样,修改于删除都是通过同样的的道理找到它在哈希表中的位置。

在修改的时候,通过不同的修改选单实现不同的修改,在删除的时候,找到它的位置,在输出的的时候不输出,其实它并没有真正意义的被删除。

三、概要设计

(1)流程图

 

概括图

图1概括图

创建

图2创建的流程图

 

查找

图3查找的流程图

 

修改

图4修改的流程图

删除

图5删除的流程图

(2)设计方法及原理

主函数里,对不同的子函数,通过的到的不同字符对其进行调用。

在建立通讯录中,用了哈希表的建立,在哈希表中,是将字符型数字转化为整形数据,并对哈希表的原有长度取余得到存储的位置,而得到的位置可能已被使用,故有调用了二次哈希,并以最后处理的下标是否为非负,来决定是存储还是不存储。

,而在下面的查询、删除、修改中,都是调用哈希表,找到它在哈希表中的位置来进行不同的操作。

其中,在删除时,用了一个全局变量来存储要删除的位置的下标,在输出的时候不将其输出,而真正意义上,它并没有从保存的位置删除。

在修改中,通过选择不同。

来修改不同的信息。

这个设计,主要就是对哈希表的调用与冲突的处理。

四、详细内容

程序代码

#include<>

#include<>

#include<>

#include<>03d",,,,,,,;

}

voidPR1()

{

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

SystemTime();

printf("\t\t\t通讯录操作的目录\n\n");

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

}

voidPR11()

{

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

printf("\t\t\tDirectoriesoperationdirectory\n\n");

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

}

voidPR2()

{

printf("\t按a键,显示语言提示选单\t\t");

printf("按b键,创建新的通讯录\n\n");

printf("\t按c键,在通信录的末尾写入新的信息\t\t");

printf("按d键,查询某人的信息\n\n");

printf("\t按e键,修改某人的信息\t\t");

printf("按f键,删除某人的信息\n\n");

printf("\t按g键,显示通讯录中的所有记录\t\t");

printf("按h键,退出选单\n\n");

printf("\t按i键,保存通讯录中的所有记录到指定文件中\n\n");

printf("\t按j键,从指定文件中读取通讯录中的记录\n");

printf("\n友情提示:

\n\t先建立方可进行查找、修改、删除、显示,在从文件读取前,应先存入文件\n\n");

printf("\t");

}

voidPR22()

{

printf("\tPressingakey,Languagemenu\n\n");

printf("\tPressingbkey,Createanewaddressbook\n\n");

printf("\tPressingckey,Theendofthecommunicationrecordtowriteanew\n\tinformation\n\n");

printf("\tPressingdkey,Inquirestheinformation.Someone\n\n");

printf("\tPressingekey,Modifysomeone'sinformation\n\n");

printf("\tPressingfkey,Removesomeone'sinformation\n\n");

printf("\tPressinggkey,Alltherecordsshowdirectories\n\n");

printf("\tPressinghkey,Exitmenu\n\n");

printf("\tPressingikey,Savealltherecordstothespecifieddirectoryfile\n\n");

printf("\tPressingjkey,Readdirectoriesfromaspecifiedfilerecordin\n\n");

printf("\nHelpfulhints:

\n\tTocreatecansearch,modify,delete,display,inreadfromthefile,");

printf("\n\tshouldfirstbeforedepositfiles\n\n");

printf("\t");

}

voidPR3()

{

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

SystemTime();

printf("\t\t\t创建通讯录\n\n");

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

}

voidPR4(inti)

{

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

SystemTime();

printf("\t\t\t查询某人的信息\n\n");

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

}

voidPR5()

{

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

SystemTime();

printf("\t\t\t修改某人的信息\n\n");

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

}

voidPR6()

{

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

SystemTime();

printf("\t\t\t\t删除某人的信息\n\n");

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

}

voidPR7()

{

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

SystemTime();

printf("\t\t\t在通信录的末尾写入新的信息\n\n");

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

}

voidPR8()

{

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

SystemTime();

printf("\t\t\t通讯录中已存信息\n\n");

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

}

voidPR9()

{

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

SystemTime();

printf("\t\t\t从文件中读取结果\n\n");

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

}

voidMenu()

{

system("cls");

intn;

printf("\n\n\n\n\n\n\n\n\n\t\t\t输入1(汉语)、2(英语)选择语言:

");

scanf("%d",&n);

system("cls");

if(n==1)

{

PR1();

PR2();

}

if(n==2)

{

PR11();

PR22();

}

}

intNUM_BER=0;

intcollision(intp,int&c)

{

inta,pp;

a=c/2+1;

while(a

{

if(a%2==0)

{

c++;

pp=(p+2*a)%HASHSIZE;

if(pp>0)

returnpp;

else

a=c/2+1;

}

else

{

pp=(p-2*a)%HASHSIZE;

c++;

if(pp>0)

returnpp;

else

a=c/2+1;

}

}

return-1;

}

intHASH(FRIte)el);

pp=p;

while(H->elem[pp]!

=NULL)

{

pp=collision(p,c);

if(pp<0)

{

printf("\t第%d记录无法解决冲突",i+1);

continue;

}

}

H->elem[pp]=&(a[i]);

H->count++;

}

printf("\n\t\t\t建表完成!

\n\n\t\t散列表的容量为%d,当前容量为%d",HASHSIZE,H->count);

}

voidgetin(Record*a,HashTable*H)ame);

printf("\n\t输入其电话号码:

");

fflush(stdin);

gets(a[i].tel);

printf("\n\t输入其地址:

");

fflush(stdin);

gets(a[i].add);

}

CreateHash(H,a);el,tel)!

=0)

i++;

ss=i;

intp,pp;

p=HASH(tel);

pp=p;

while(H->elem[pp]!

=NULL&&bj(tel,H->elem[pp]->tel)==0)

pp=collision(p,c);

if(H->elem[pp]!

=NULL&&bj(tel,H->elem[pp]->tel)==1)

{

H->elem[pp]=NULL;

H->count--;

}

printf("\n\t按Esc键,返回主菜单");

}

voidList(Record*a,HashTable*H)ame,a[i].tel,a[i].add);

printf("\n\n\t\t\t按Esc键,返回主菜单");

}

voidSave(Record*a)

通过先对程序设计的步骤有了更深刻的了解。

2.对哈希表的建立与处理有了清楚的了解。

3.最大的收获是知道如何在C中实现子程序的调用。

4认识到团队合作的重要性。

不足:

这次的设计中还有一些不足之处。

例如,在删除的时候,并没有将其删除,这造成了内存的浪费,在查找的时候,只能用号码查找,如果用别的信息无法查找。

还有一些潜在的问题待于发现。

七、致谢

谢谢老师给的建议。

虽然功能还不是很强大,但以后会对其作修改,希望它的功能更较强大。

另外很感谢组员的团结与配合。

八、参考文献

1、《数据结构》胡学钢主编高等教育出版社2008年1月第1版

2、《C语言程序设计》何钦铭、颜辉主编高等教育出版社2008年1月第1版

3、、

指导教师评语:

 

指导教师签名:

年月日

成绩

教研室审核意见:

 

教研室主任签字:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2