天津科大数据结构课程设计通讯录系统课程设计实验报告Word下载.docx
《天津科大数据结构课程设计通讯录系统课程设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《天津科大数据结构课程设计通讯录系统课程设计实验报告Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
![天津科大数据结构课程设计通讯录系统课程设计实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/4/016ecc09-4e87-4b3b-9db2-36c935cc3adf/016ecc09-4e87-4b3b-9db2-36c935cc3adf1.gif)
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.课程设计内容
设计散列表实现通讯录查找系统,完成相应的建表和查表程序。
(1)设每个记录有下列数据项:
用户名、电话号码、地址;
(2)从键盘输入各记录,分别以姓名为关键字建立散列表;
(3)人名可以采用汉语拼音形式。
人名字符串转化为数字的方式自行决定。
(4)哈希函数用除留余数法构造,采用二次探测再散列法解决冲突;
(5)根据姓名查找,找到显示给定记录的电话号码和地址;
找不到提示通讯录无此人。
(6)通讯录信息保存到文件。
三、需求分析
这个系统一共有6个模块,分别是添加用户信息,显示给定记录的信息,以姓名为关键字建立散列表,查找并显示给定记录的信息,保存通讯录信息,退出系统。
1.添加用户信息
从键盘输入用户的信息,包括用户名、电话号码、地址。
2.显示给定记录的信息
显示出添加用户的信息,包括用户名、电话号码、地址。
3.以姓名为关键字建立散列表
从键盘输入用户的信息,以姓名为关键字建立散列表
4.查找并显示给定记录的信息
根据姓名查找,找到显示给定记录的电话号码和地址。
5.保存通讯录信息
把通讯录信息保存到文件。
6.退出系统
这个程序执行完毕,退出系统。
4、概要设计
1.程序功能方框图
2.程序主要功能函数
getin()数据输入函数,通过键盘录入数据的各个内容
ShowInformation()显示函数,对输入的数据以表格形式输出
CreateHash1()建立散列表函数,以用户名为关键字建立散列表
SearchHash1()查找函数,以用户名为关键字在建立的散列表中查找
Save()保存函数,对输入的数据保存
main()主函数
3.函数流程图
五、详细设计
1、函数头文件
#include<
stdio.h>
stdlib.h>
string.h>
windows.h>
2、全局变量定义
#defineMAXSIZE20//电话薄记录数量
#defineHASHSIZE53//定义哈希表长
intN,M,K;
HashTable*H;
//哈希表
Recorda[MAXSIZE];
//结构体数据
intNUM_BER;
//记录的个数
3、数据结构体定义
typedefstructdianhua
{
charname[10];
//用户名
chartel[20];
//电话号码
charadd[20];
//地址
}Record;
结构体用来记录数据。
4、哈希表定义
typedefstruct
Record*elem[HASHSIZE];
//数据元素存储基址
intcount;
//当前数据元素个数
intsize;
//当前容量
}HashTable;
5、函数说明
(1)光标定位函数
voidgotoxy(intx,inty)
说明:
定位光标,通过改变x,y的值可以使光标在期望的位置输出,这样可以使最终做出的效果更好。
(2)数据输入函数
voidgetin(Record*a)
说明:
从键盘输入数据,输入用户给定数量的数据个数,数据(包括用户名、电话号码、地址)以结构体形式保存。
(3)显示函数
voidShowInformation(Record*a)
显示用户输入的数据,以表格形式输出。
(4)以用户名为关键字建立哈希表函数
voidCreateHash1(HashTable*H,Record*a)
以用户名为关键字建立哈希表,若数据有哈希地址冲突,进行冲突处理。
longfold(char*s)//用户名处理
(5)以电话号码为关键字建立哈希表函数
voidCreateHash2(HashTable*H,Record*a)
建表,以电话号码为关键字,建立相应的散列表,若哈希地址冲突,进行冲突处理。
思想同以用户名为关键字建立哈希表函数。
其中p=Hash2(a[i].tel);
调用电话号码处理函数。
intHash2(char*str)
{
intn;
intm;
n=atoi(str);
//把字符串转换成整型数.
m=n%HASHSIZE;
//用除哈希表长取余数法构造哈希函数
returnm;
//返回模值
}
(6)以用户名为关键字查找函数
voidSearchHash1(HashTable*H)
(7)以电话号码为关键字查找函数
voidSearchHash2(HashTable*H)
在通讯录里查找电话号码关键字,若查找成功,显示信息。
思想完全同以用户名为关键字查找函数。
(8)保存函数
voidSave(Record*a)
新建并打开“dianhua.txt”文件用以存储数据,将所输入的数据保存到文件中。
(9)主函数
intmain()
system("
color3f"
);
为系统背景及字体颜色代码命令(3为背景颜色,f为字体颜色,效果见后面的程序运行效果图),这样可以使界面不是黑白色那么单调。
fflush(stdin);
为停屏函数。
getchar();
为任意输入一个字符继续。
cls"
为清屏函数,让屏幕变得更清晰。
H=(HashTable*)malloc(sizeof(HashTable));
动态申请哈希表的存储单元。
然后打印主菜单界面,让用户根据主菜单选择不同的功能键。
用switch语句来选择实现功能,用户输入不同的数字来调用相应的功能函数。
用do-while语句使实行完各个功能函数后返回主菜单。
六.实验结果与分析
进行调试分析:
1.运行程序后,进入通讯录系统的主界面。
2.输入1后,系统提示添加记录的个数,输入3,然后输入3个数据项,分别包括用户名、电话号码、地址。
3.输入2,读取出通讯录信息。
4.输入3,分别以姓名zhu,zhang,wang为关键字建立散列表。
5.输入5,根据姓名查找,输入姓名zhu,找到显示zhu的电话号码和地址。
6.输入8,把通讯录信息保存到文件
进入通讯录系统主界面:
输入要添加的用户信息:
显示出通讯录信息
分别以姓名chen,xue,ping为关键字建立散列表
输入姓名chen,找到显示chen的电话号码和地址
把通讯录信息保存到文件
七.总结:
(保存在word文档中)总结可以包括:
课程设计过程的收获、遇到的问题、解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容
一周的软件课程设计结束了,这一周我完成了用散列表来实现电话号码的查找系统。
刚拿到题目时觉得很简单,任务书上给的要求很简单,只要求输入数据后分2种建表和查找,就先用链表做了一个程序,后来仔细阅读题目才发现,原来是要用散列表来做,散列表也就是哈希表。
我翻看上课笔记,发现老师上课只讲了哈希表的思想,没有给出哈希表的函数,于是我通过上网和到图书馆借书查看资料,终于找到了哈希函数的建立,以及哈希函数的查找,再对照任务书要求编写相应的程序代码,编号后仍有很多错误,最后经过修改及同学的帮助终于实现了用散列表来完成电话号码的查找系统。
由于我的水平有限以及设计时间的有限,我做的课程设计只完成了任务书的基本要求,但我还是在这次的课程设计中知道了在理论学习的基础上,要想成功地设计某个东西,必须要系统的知识,无论在哪方面都要有明白的概念,只有这样才不至于在设计过程中摸不着头脑,知道哪些是需要查的资料。
在这次课程设计的整个过程中,我做了一个全面、规范的设计练习,全面的温习了以前学习的知识,同时在设计的过程中发现了自己的不足之处,对以前学过的知识理解得不够深刻,掌握得不够牢靠,今后必须在这方面多加练习。
回顾起此次课程设计至今我们仍感慨颇多的确自从拿到题目到完成整个编程从理论到实践在整整半个多月的日子里可以学到很多很多的东西同时不仅可以巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的只有理论知识是远远不够的只有把所学的理论知识与实践相结合起来从理论中得出结论才能真正为社会服务从而提高自己的实际动手能力和独立思考的能力。
学习这么多专业知识需要很大的努力不过如果心中有一个梦想那么再难的目标也能实现。
“千里之行始于足下”尤其是在迈出了程序的第一步之后你实际上已经走进了软件开发尤其是程序设计开发的大门前面的世界是美丽多彩而又充满挑战的。
同时在程序设计的过程中发现了很多的不足和缺陷出现了许多的问题和困难但在各位老师的详细指导下改正了不足与缺陷解决了一个个问题和困难。
所以在此感谢感谢曲朝阳老师、郭晓利、张秋实老师、刘志颖老师的指导与帮