大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx

上传人:b****4 文档编号:13542974 上传时间:2022-10-11 格式:DOCX 页数:19 大小:2.18MB
下载 相关 举报
大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx_第1页
第1页 / 共19页
大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx_第2页
第2页 / 共19页
大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx_第3页
第3页 / 共19页
大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx_第4页
第4页 / 共19页
大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx

《大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx》由会员分享,可在线阅读,更多相关《大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

大数据结构课设通讯录系统的设计与实现哈希表文档格式.docx

⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽

象数据类型、编写上机程序和上机调试等假如干步骤完成题目,最终写出完整的报告;

⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;

⑶程序设计语言推荐使用C/C++,程序书写规X,源程序需加必要的注释;

⑷每位同学需提交可独立运行的程序和规X的课程设计报告。

2〕课程设计论文编写要求

⑴理论设计局部以课程设计论文的形式提交,格式必须按照课程设计论文标准格式

进展书写和装订;

⑵课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码

实现、调试分析、课设总结、谢辞、参考文献、附录等;

⑶设计局部应包含系统功能模块图,调试分析应包括运行截图等。

3〕课程设计评分标准:

⑴学习态度:

10分;

⑵系统设计:

20分;

⑶编程调试:

⑷回答如下问题:

⑸论文撰写:

30分。

4〕参考文献:

⑴严蔚敏李冬梅吴伟民著.数据结构(C语言版)[M].

⑵李春葆.数据结构教程上机实验指导[M]

5〕课程设计进度安排

⑴准备阶段〔4学时〕:

选择设计题目、了解设计目的要求、查阅相关资料;

⑵程序模块设计分析阶段〔4学时〕:

程序概要设计、详细设计;

⑶代码编写调试阶段〔8学时〕:

程序模块代码编写、调试、测试;

⑷撰写论文阶段〔4学时〕:

总结课程设计任务和设计内容,撰写课程设计论文。

学生签名:

2016年1月4日

6〕课程设计题目具体要求:

任务:

利用哈希表完成通讯录的一般性管理工作:

(1)添加信息;

(2)显示信息:

可以按照手机或联系人的某某拼音排序显示;

(3)查找:

用名字和手机号分别作为查找的依据,进展查找;

(4)编辑信息;

(5)删除信息;

(6)保存到文件;

要求:

(1)每条记录至少包括某某、手机、、电子、城市、等信息。

(2)界面友好,演示程序以用户和计算机的对话方式进展,可反复操作。

课程设计(论文)评审意见

〔1〕学习态度〔10分〕:

优〔 〕、良〔 〕、中〔 〕、一般〔 〕、差〔 〕;

〔2〕系统设计〔20分〕:

优〔〕、良〔 〕、中〔 〕、一般〔 〕、差〔 〕;

〔3〕编程调试〔20分〕:

〔4〕回答如下问题〔20分〕:

〔5〕论文撰写〔30分〕:

〔6〕格式规X性与考勤是否降等级:

是〔 〕、否〔 〕

评阅人:

职称:

讲师

2016年1月12日

一.设计任务-------------------------------------------------------------------------------1

二.需求分析-------------------------------------------------------------------------------1

三.系统设计-------------------------------------------------------------------------------2

四.编码实现-------------------------------------------------------------------------------6

五.调试分析-------------------------------------------------------------------------------10

六.课设总结-------------------------------------------------------------------------------15

七.谢辞-------------------------------------------------------------------------------------15

八.参考文献--------------------------------------------------------------------------------15

一、设计任务

(1)添加信息;

(2)显示信息:

(3)查找:

(4)编辑信息;

(5)删除信息;

(6)保存到文件;

二、需求分析

本问题的关键和难点在于如何解决散列的问题。

由于结点的个数无法的知,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失〞的问题。

所以采用链地址法散列算法。

采用拉链法,当出现同义词冲突时,使用链表结构把同义词在一起,即同义词的存储地址不是散列表中其他的空地址。

首先,解决的是定义链表结点,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成.name[16]、num[11]和address[20]都是char浮点型,输入输出都只能是浮点型的。

采用拉链法,其中的所有同义词构成一个单链表,再由一个表头结点指向这个单链表的第一个结点。

这些表头结点组成一个一维数组,即哈希表。

数组元素的下标对应由散列函数求出的散列地址。

其次,设计散列函数,本程序需要设计两个散列函数才能解决问题,程序需要分别为以和用户名为关键字建立哈希表。

所以要分别以用户名、为关键字建立两个散列函数,

对于以为关键字的散列函数,是将十一个数字全部相加,然后对20求余。

得到的数作为地址。

对于以用户名为关键字的散列函数,是将所有字母的ASCLL码值相加,然后对20求余。

再次,需要实现添加结点的功能,如此其中必须包括一个输入结点信息、添加结点的函数;

需要实现查找函数,如此必须包括一个查找结点的函数;

需要对文件进展保存,如此必需要包括

保存文件函数。

还需要包括一个主菜单和一个主函数。

三、系统设计

在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链地址法结点结构如图:

name[16]num[11]address[20]next

其中name[16]和num[11]是分别为以和用户名为关键字域,存放关键字;

address[20]

为结点的数据域,用来存储用户的地址。

Next指针是用来指向下一个结点的地址。

主要算法的流程图如下:

初始化散列链表〔1〕并为其动态分配内存空间

初始化散列链表〔2〕并为其动态分配内存空间

Hash:

SASH2:

Apend()

FIND:

首先定义结点结构体类型,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链地址法结点结构如图:

next指针是用来指向下一个结点的地址。

#include<

fstream>

用来输入/输出文件流类包含的文件是fstream。

unsignedint

key和unsignedintkey2由于题目要求分别以和用户名为关键字,所以在此设计两个关键字。

其次,设计两个hash〔〕函数,以为关键字建立哈希函数hash(charnum[11])。

哈希函数的主旨是将的十一位数字全部加起来,然后在对20求余。

将计算出来的数作为该结点的地址赋给key。

以用户名为关键字建立哈希函数hash2(charname[8])。

利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。

将计算出来的数作为该结点的地址赋给key2。

再次,建立结点,并添加结点,利用拉链法解决冲突。

建立结点应包括动态申请内存空间。

向结点中输入信息。

同时将结点中的next指针等于null。

添加结点,首先需要利用哈希函数计算出地址即关键字,其次将该结点插入以关键字为地址的链表后,当然由于分别以用户名和为关键字,所以分两种情况,如果以用户名为关键字如此调用voidhash2(charname[8])函数,并且将结点插入对应的散列链表中,如果以为关键字如此调用voidhash(charnum[11])函数,并且将结点插入对应的散列链表中。

并且,需要两个建立散列链表的函数,分别动态申请一定的空间,用于动态申请散列链表。

voidcreate()用来动态创建以为关键字的链表数组,voidcreate2()用来动态创建以用户名为关键字的链表数组。

同样,需要两个显示链表的函数,利用for循环和while语句将表某某息按要求输出来。

想要实现查找功能,同样需要两个查找函数,无论以用户名还是以为关键字,首先,都需要利用hash函数来计算出地址。

再依次比照,如果是以为关键字,比拟其是否一样,如果一样如此输出该结点的所有信息,如果以用户名为关键字,如此比拟用户名是否一样,如果一样如此输出该结点的所有信息。

如果找不到与之对应一样的,如此输出“无记录〞。

同时需要一个保存文件的函数,利用一个for循环,当用hash函数计算的地址,在链表的动态申请的数组X围之内,如此创建一个文件流对象,并将结点信息保存在该文件中。

最后,需要创建一个主菜单和一个主函数,主菜单便于用户的使用,主函数中,包括所有功能对应的数值,使之和主菜单相吻合。

四、编码实现

iostream>

string>

usingnamespacestd;

 

#defineNULL0

unsignedintkey;

//用来输入/输出文件流类

unsignedintkey2;

//key和key2分别是用做了和某某的关键字

int*p;

structnode//新建节点〔用户某某、地址、、、城市、、、指向下一个结点的指针〕

{

charname[16],address[20],[10],email[20],city[20],PC[6];

charnum[11];

node*next;

};

typedefnode*pnode;

typedefno

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

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1