利用折半查找和冒泡排序实现个人电话号码查询系统资料.docx
- 文档编号:429227
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:25
- 大小:217.42KB
利用折半查找和冒泡排序实现个人电话号码查询系统资料.docx
《利用折半查找和冒泡排序实现个人电话号码查询系统资料.docx》由会员分享,可在线阅读,更多相关《利用折半查找和冒泡排序实现个人电话号码查询系统资料.docx(25页珍藏版)》请在冰豆网上搜索。
利用折半查找和冒泡排序实现个人电话号码查询系统资料
一、问题描述
人们在日常生活中经常要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含姓名、电话号码、住址等个人基本信息。
用《数据结构》中的链表做数据结构,结合c语言基本知识,编写一个通讯录管理系统,以把所学知识应用到实际软件开发中去。
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力,初步掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能:
提高综合运用所学的理论知识和方法独立分析和解决问题的能力,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、需求分析
要求用到数据结构课上学到的线性表的知识,所以就要充分而清晰的理解关于线性表的知识。
要求实现的基本功能很简单,只有删除和插入,增加功能也不过是加上修改。
这些在数据结构课上已经讲过,只要能够理解关于线性表的几个相关的基本算法就可以了。
问题是将输入的信息保存入文件和从文件输出。
这里基本是自学的内容,而且要考虑到是否要自行选择保存的磁盘。
综上,做这个课题,要具备的知识就是线性表的基本算法,文件的保存和读取算法,必要的C或者C++知识(本次我将使用C实现),以及丰富的程序调适经验。
2.1基本要求
(1)在外存上,用文件保存电话号码信息;
(2)在内存中,设计数据结构存储电话号码信息;
(3)提供查询功能:
根据姓名实现快速查询;
(4)提供其他维护功能,例如插入、删除、修改等;
(5)至少要有1000个电话号码,每个号码至少包括手机、固定电话、电子邮件、姓名等。
2.2输入的数据
姓名:
wang姓名:
li
电话:
1234电话:
5678
Email:
1234Email:
5678
输入qq号:
1234输入qq号:
5678
分组:
1分组:
2
2.3达到的功能
编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含姓名、电话号码、住址等个人基本信息。
三、数据结构设计
structrecord//建立结构体
{
charname[20];
chartel[20];
charemail[20];
charqq[20];
charrela[20];
}student[1000];
//变量定义
typedefstruct
{
intlast;
}recordlist;
staticintnum=0;
FILE*fp;//文件数据结构
intn1=0;
四、算法设计
4.1概要设计
首先由于程序中要有对学生信息的增加和减少,定义一个全局变量n,在此程序的任意的模块中均可以使用。
宏定义,用LEN来代替开辟地址空间,定义一个结构体变量,record,来存储联系人信息
设计实现主要功能的函数有:
1.主菜单函数:
voidmainmenu();
2.查找菜单函数:
voidsearchmenu();
3.新添记录:
voidenter();
4.查找记录:
voidsee();
5.显示所有记录:
voiddisplay();
6.打开文件:
voidload();
7.保存文件:
voidsave();
程序运行中,为了保持屏幕的清楚和美观,时刻进行清屏也是必要的。
4.2软件模块结构图
4.3mainmenu()函数流程图
4.4addinfo函数流程图
addinfo()函数流程图
F
T
4.5显示所有函数display()流程图
显示所有函数流程图
F
T
4.6查询菜单
五、调试分析及测试数据
从上面的算法和调用关系可以看出,这个程序的基本样子已经非常的清楚,但是真正的程序中还要考虑各种限制条件。
例如在查找的过程中,可能不存在要查找的信息,就要给出不存在此信息的提示等。
还有就是涉及到返回值得问题和程序中所要用到的变量的问题。
在调试的过程中所遇到的问题很多,其中最难的两个问题是给出的六个警告错误,在5.0的版本下就是两个使得程序无法运行的错误。
其中五个是因为在变量的声明中因为使用了浮点型和双精度型两种而造成在某些模块中两个变量相互赋值时类型不匹配。
另一个是在查找的子函数中忘记了需要的返回语句。
5.1新添加记录
输入数据:
姓名:
wang姓名:
li
电话:
1234电话:
5678
Email:
1234Email:
5678
输入qq号:
1234输入qq号:
5678
分组:
1分组:
2
5.2保存退出
没有出错,可正常保存退出
5.3查找联系人
5.3.1查找菜单的显示
5.3.2显示所有
正常显示
5.3.3按姓名查找
开始时输入姓名,程序结果一闪而过,后来经过老师的帮助发现是因为在查找时传入了回车,后经改进,利用字符串输入将回车消除,成功运行结果。
输入数据:
li
5.4删除联系人
输入数据:
li
5.5保存退出
保存后程序产生一个txt文件供打开通讯录是调用。
5.6打开通讯录
通讯录中没有保存的信息时的界面:
当有文件保存时的界面:
在调试时的通讯录无法打开上次保存的文件。
一直显示通讯录不存在。
经检查是代码中打开语句时,.txt文件被误以为.bin文件,所以程序无法找到文件
六、心得体会
以前做实验题目的时候总是感觉很难,因为根本就不知道从哪里开始。
这次课程设计让我对编程有了新的认识。
拿到题目的时候也是很困惑,后来看了很多有关的例子,仔细看了书上的线性表部分的知识,觉得就是上课讲到的一些内容,不怎么难,是自己先把自己吓住了。
后来,参照书上的和网上的诸多例子,一个模块一个模块的编写,调试,一个功能一个功能去完善。
发现越做越顺利。
特别要感谢指导老师的指导,当运行程序出现bug时,找遍同学都解决不了的时候,多谢老师得耐心指导,最终帮助我成功的解决问题。
七、参考文献
C语言程序设计教程张磊编著中国铁道出版社
数据结构-用c语言描述耿国华/张同德编著高等教育出版社
数据结构C语言版吴伟民编著清华大学出版社
八、附录源代码
附录、(源代码)
#include
#include
#include
#include
structrecord//建立结构体
{
charname[20];
chartel[20];
charemail[20];
charqq[20];
charrela[20];
}student[1000];
//变量定义
typedefstruct
{
intlast;
}recordlist;
staticintnum=0;
FILE*fp;
intn1=0;
voidmainmenu();
voidsearchmenu();
voidaddinfo();
voiddisplay();
voidload();
voidsave();
voiddelet();
intbinsrch();
voidsee();
intmain()
{
load();
while
(1)
mainmenu();
return0;
}
voidload()
{
if((fp=fopen("student.dat","rb"))==NULL)//以读文本的方式打开文件student.dat,并使fp指向该文件。
{
printf("\n\t\t通讯录文件不存在");//通讯录不存在
if((fp=fopen("student.dat","wb"))==NULL)//以写文本方式打开文件student,并使fp指向该文件。
{
printf("\n\t\t建立失败");//建立失败
exit(0);
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);//将位置指针从文件尾移动0个字符
if(ftell(fp)>0)//流式文件中的指针的当前位置大于零
{
rewind(fp);
for(num=0;!
feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);//在fp所指向文件读入一个数据存储到数组student中直到文件结束
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
voidmainmenu()//主菜单
{
charchoic;
system("cls");//清屏
printf("\n\t\t***************欢迎进入通讯录系统***************");
printf("\n\t\t******************1-新添纪录******************");
printf("\n\t\t******************2-查找联系人****************");
printf("\n\t\t******************3-删除联系人***************");
printf("\n\t\t******************4-保存退出*****************");
printf("\n\t\t******************5-不保存退出***************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
addinfo();break;
case'2':
searchmenu();break;
case'3':
delet();break;
case'4':
save();break;
case'5':
exit(0);
default:
mainmenu();
}/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 折半 查找 冒泡 排序 实现 个人 电话号码 查询 系统 资料