用C++写电话薄实验报告Word文档格式.docx
- 文档编号:16754181
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:35
- 大小:411.83KB
用C++写电话薄实验报告Word文档格式.docx
《用C++写电话薄实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《用C++写电话薄实验报告Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
包括qseek(TELEBOOKt[],intn)这一个函数。
这个模块主现实现输入名字就能立刻查找到该名字对应的相关信息。
在输入待查名字是先输出提示信息:
是否已排序。
然后用二分查找进行对这个名字相关信息的查找。
若找到,则调用print()函数显示记录信息,若找不到,则显示“notfound”的提示信息。
功能模块图如下:
流程图如下:
4、主要内容和步骤
/*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
intenter(TELEBOOKt[])
{inti,n;
/*定义n记录输入的记录数,定义i用于for循环语句*/
char*s;
clrscr();
/*清屏*/
printf("
\npleaseinputnum\n"
);
/*提示信息,提示输入记录数*/
scanf("
%d"
&
n);
/*输入记录数*/
pleaseinputrecord\n"
/*提示输入记录*/
numbernamegrouptelephone\n"
-------------------------------------------------------\n"
/*提示录入记录信息是的格式*/
for(i=0;
i<
n;
i++)/*for循环语句,根据前面输入的记录数决定输入个数*/
{scanf("
%s%s%s%s"
t[i].number,t[i].name,t[i].group,t[i].tele);
/*输入记录*/
printf("
}/*录完一条记录后显示分隔符*/
returnn;
/*返回记录条数*/
}
/*格式化输入数据。
只接受字符型数据,对输入的数据进行检验*/
voidstringinput(char*t,intlens,char*notice)/*t用于保存输入的字符串,所以用指针传递。
lens是输入的字符串要控制的长度。
notice用于保存printf()中输出的提示信息*/
{charn[255];
/*定义一个字符串数组,用于存放输入的信息*/
do{printf(notice);
/*显示notice中所输出的提示信息*/
%s"
n);
/*输入字符串*/
if(strlen(n)>
lens)printf("
\nexceedtherequiredlength!
\n"
/*进行长度校验,若输入的字符串长度超过lens值,则输出提示信息重新输入*/
}while(strlen(n)>
lens);
/*知道长度不超出范围为止*/
strcpy(t,n);
/*将输入的字符串拷贝到字符串t中*/
/*快速查找,参数为结构体数组和记录数,没有返回值*/
voidqseek(TELEBOOKt[],intn)
{chars[20];
/*定义字符串数组存放待查找的姓名信息*/
intl,r,m;
/*定义l为二分查找中设置的左边界,r为二分查找中设置的右边界,m为二分查找中设置的中间位置*/
\nPleasesortbeforeqseek!
\n"
/*输出提示信息,确认在查找之前,记录是否已排序*/
pleaseenternameforqseek\n"
/*提示输入要查找的名字*/
s);
/*输入要查找的姓名*/
l=0;
r=n-1;
/*设置左边界初值为0,,右边界的初值为记录数-1*/
while(l<
=r)/*当左边界<
=右边界时*/
{m=(l+r)/2;
/*计算中间位置*/
if(strcmp(t[m].name,s)==0)/*将输入的带查找姓名与中间结点姓名字段做比较,判断是否相等*/
{print(t[m]);
/*如果相等,则调用print()函数显示与要查找的姓名相关的记录信息*/
return;
/*返回*/
}
if(strcmp(t[m].name,s)<
0)l=m+1;
/*如果中间结点小于待查找姓名,说明待查找姓名在右半部分,修改左边界*/
elser=m-1;
/*否则,中间结点大于待查找姓名,说明待查找姓名在右半部分,修改右边界*/
if(l>
r)/*如果左边界大于右边界,说明直到查找到超出范围也没找到待查找的姓名信息*/
notfound\n"
/*输出提示信息,显示没找到*/
程序调试过程:
图5.1电话簿管理系统主菜单
图5.2输入记录
图5.3显示记录
图5.4查询记录
图5.4查询记录结果显示
图5.5删除记录
图5.6插入记录
图5.7排序记录
图5.8根据名字快速查找
(三)遇到的问题以及解决方法
在输入记录部分中,由于可输入多条记录,所有具体的输入数很难确定。
对于这一问题,我最终决定在输入记录时先输入数num决定输入几条记录。
在快速查找部分,由于用到了二分查找,所以必须在函数使用之前进行排序。
而用户是否会排序是不确定的。
为了解决这个问题,我在快速查找进行之前先输出了提示信息,提醒用户排序。
若没有排序的则调用排序函数先进行排序。
(四)软件使用说明书
初始进入电话簿管理系统,会有一段滚动字幕,
字幕停止后,按回车键进入,提示
,即按任意键进入主菜单界面。
按键操作说明:
0:
进入记录
1:
显示记录
2:
根据名字查找记录
3.删除记录
4.增加记录
5.保存记录
6.从文件中读出记录
7.按序号从文件中显示记录
8.将文件中的记录排序
9.快速查看记录
10.复制记录到新的文本中
11.退出电话簿管理系统
具体说明:
0.输入0增加记录
输入num数决定增加几条记录
1.输入1显示记录
2.输入2查询记录
输入1,2,3选择根据什么属性排序
2.1输入1按姓名查询
查询结果为:
2.2输入2按电话号码查询
2.3输入3按分组查询
3.输入3删除记录
输入1确认删除,输入0返回。
4.输入4插入记录
输入记录后输入姓名选择添加在哪个名字前
插入后显示:
5.输入5保存记录
6.输入7按序号显示记录
选择要显示的记录的编号
显示结果为:
7.输入8排序记录
可输入1,2,3选择属性排序。
例如:
输入1显示结果
8.输入9快速查找
9.输入10复制
10.输入11退出
(五)课设心得
这个课程设计报告介绍了电话系统的设计思路及其编程实现,重点介绍了各功能板块的设计原理和利用数组存储结构实现电话簿管理的过程。
完成这一过程需要熟悉C语言操作,了解信息管理系统的开发原理,并且注意利用选择排序法来实现数组元素排序的特点。
电话簿管理系统的编程过程我认为不是特别复杂,但是需要熟悉掌握很多知识c编程的基础知识,还需要查询各种资料书籍加以辅助。
里面有些程序还是有点难度的,需要小组成员集体的探讨。
在编程过程中遇到了很多困难,发现自己需要多掌握些关于数据结构以及操作系统的知识。
利用该系统可以对通讯录进行日常维护和管理。
在完成这个课程设计报告的过程中发现了自己很多知识的缺失,我需要更加刻苦地练习C语言编程,这是一个艰辛的过程,需要不断地尝试与修改,这样会对今后的学习有很大的帮助。
这个系统还存在漏洞,需要学习和修改,这个设计报告锻炼了我的能力,今后将再接再厉。
而更重要的是,在这项课程中,我更加体会到了团队合作的重要性。
小组中每个成员都应该积极参与。
不仅要对自己负责的部分要竭尽全力,在将所有程序调式的过程中更要努力,而不能松懈依靠他人。
尤其在出现大问题的时候,要每个人都思考解决方法。
团队协作是成功的关键。
(六)参考资料及网站
[1]田祥宏,沈奇,王旭辉,吕艳琳.C语言程序设计[M].陕西:
西安电子科技大学出版社2007.
[2]姜灵芝,余健康.C语言课程设计[M].北京清华大学出版社2008年.
附录:
程序清单
#include"
conio.h"
#include"
stdio.h"
stdlib.h"
string.h"
ctype.h"
#defineM50
typedefstruct
{
charnumber[10];
charname[20];
chargroup[30];
chartele[10];
}TELEBOOK;
/******以下是函数原型*******/
intenter(TELEBOOKt[]);
/*输入记录*/
voidlist(TELEBOOKt[],intn);
/*显示记录*/
voidsearch(TELEBOOKt[],intn);
/*按姓名查找显示记录*/
intdelete(TELEBOOKt[],intn);
/*删除记录*/
intadd(TELEBOOKt[],intn);
/*插入记录*/
voidsave(TELEBOOKt[],intn);
/*记录保存为文件*/
intload(TELEBOOKt[]);
/*从文件中读记录*/
voiddisplay(TELEBOOKt[]);
/*按序号查找显示记录*/
voidsort(TELEBOOKt[],intn);
/*按姓名排序*/
voidqseek(TELEBOOKt[],intn);
/*快速查找记录*/
voidcopy();
/*文件复制*/
voidprint(TELEBOOKtemp);
/*显示单条记录*/
intfind(TELEBOOKt[],intn,char*s);
/*查找函数*/
intmenu_select();
/*主菜单函数*/
/******主函数开始*******/
main()
inti;
TELEBOOKadr[M];
intlength;
intm,k=1;
charstr[80]="
welcometousethetelebook!
"
;
textmode(C80);
window(1,1,80,25);
textcolor(YELLOW);
textbackground(BLACK);
clrscr();
m=1;
while
(1)
{delay(15000);
if(m>
70){m=m%70;
k++;
gotoxy(m,2);
delline();
cprintf("
str);
m++;
if(k>
2)break;
getch();
system("
cls"
for(;
)
{
switch(menu_select())
case0:
length=enter(adr);
break;
case1:
list(adr,length);
case2:
search(adr,length);
case3:
length=delete(adr,length);
case4:
length=add(adr,length);
break;
case5:
save(adr,length);
case6:
length=load(adr);
case7:
display(adr);
case8:
sort(adr,length);
case9:
qseek(adr,length);
case10:
copy();
case11:
exit(0);
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select()
chars[80];
intc;
gotoxy(1,25);
pressanykeyentermenu......\n"
getch();
gotoxy(1,1);
THETELEPHONE-BOOKMANGEMENTSYSTEM\n"
********************MENU*********************\n\n"
0.Enterrecord\n"
1.Listthefile\n"
2.Searchrecordonname\n"
3.Deletearecord\n"
4.addrecord\n"
5.Savethefile\n"
6.Loadthefile\n"
7.displayrecordonorder\n"
8.sorttomakenewfile\n"
9.Quickseekrecord\n"
10.copythefiletonewfile\n"
11.Quit\n"
***********************************************\n"
do{
\nEnteryouchoice(0~11):
c=atoi(s);
}while(c<
0||c>
11);
returnc;
/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
inti,n;
-----------------------------------------------------------------\n"
for(i=0;
i++)
{
------------------------------------------------------------\n"
returnn;
/*显示记录,参数为记录数组和记录条数*/
voidlist(TELEBOOKt[],intn)
\n\n*******************TELEBOOK******************************\n"
numbernamegrouptelephone\n"
-------------------------------------------------------------\n"
%-10s%-10s%-8s%-8s\n"
if((i+1)%10==0)/*判断输出是否达到10条记录*/
Pressanykeycontinue...\n"
************************end*******************\n"
voidstringinput(char*t,intlens,char*notice)
do{
printf(notice);
/*进行长度校验,超过lens值重新输入*/
/*查找记录*/
voidsearch(TELEBOOKt[],intn)
chars[20];
inti,count=0;
intselect;
charsearchinput[20];
intj=0,flag=0;
if(n<
=0)/*若数组为空*/
system("
\n=====>
Notelephonerecord!
getchar();
return;
\n==>
1Searchbyname==>
2Searchbytelephonenumber==>
3Searchbygroup\n"
pleasechoice[1,2,3]:
select);
if(select==1)/*按姓名查询*/
pleasesearchname\n"
/*输入待查找姓名*/
i=find(t,n,s);
/*调用find函数,得到一个整数*/
if(i>
n-1)/*如果整数i值大于n-1,说明没找到*/
else
print(t[i]);
/*找到,调用显示函数显示记录*/
elseif(select==2)
flag=0;
stringinput(searchinput,15,"
inputtheexistingtelephonenumber:
for(j=0;
j<
j++)
if(strcmp(t[j].tele,searchinput)==0)
print(t[j]);
flag=1;
if(flag==0)
elseif(select==3)
inputtheexistinggroup:
if(strcmp(t[j].group,searchinput)==0)
count++;
if(count==1)
\n\n********************************************\n"
------------------------------------------------\n"
%-10s%-20s%-20s%-10s\n"
t[j].number,t[j].name,t[j].group,t[j].tele);
notfound"
error\n"
/*显示指定的一条记录*/
voidp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 电话薄 实验 报告