电话簿管理系统课程设计Word下载.docx
《电话簿管理系统课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《电话簿管理系统课程设计Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
.
(2)浏览:
能够查看所有的电话簿信息。
(3)查询:
能实现指定姓名信息查询。
(4)修改:
能修改指定的电话簿信息。
(5)添加:
可以添加想要的信息。
(6)保存和打印:
能保存和打印电话簿信息。
(7)退出:
可以随意退出程序。
三、总体设计
1、模块化设计
为实现系统功能,本程序主要分为九个模块。
它们分别为:
输入一个信息、删除一个信息、查询一个信息、读取查找插入一个信息、查找、添加,修改一个信息,列出所有的信息、退出该程序。
这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用电话簿的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
(1)create建立电话簿
(2)delete删除电话号码
(3)print打印电话簿
(4)save保存电话簿
(5)load读取电话簿文件
(6)search查找电话号码
(7)append添加新的电话号码
(8)modify修改电话号码
(9)exit退出电话号码簿
2、模块调用图
四、详细设计
(1)数据结构设计
本程序中,运用了多种数据结构。
首先对于通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,通过指针的后移,把多个数据连成一个链,形成一个链表。
对于主要数据结构的举例如下:
结构数组:
struttel{
charname[10];
chartel[11];
chars[11];
};
链表:
ID*next;
ID*creat()
{
ID*head,*p1,*p2;
voidsave(ID*head);
ID*temp;
ID*deleter(ID*head);
ID*append(ID*head);
ID*modify(ID*head);
(2)模块接口设计
由于本程序中大部分运用了链表这一数据结构,函数中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。
本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据进行录入。
接下来用switch语句实现对各个函数的调用。
通过对链表的使用,可以使得每一次的函数调用都能得到返回值。
最后,再从main函数中结束整个程序的运行。
(3)部分函数细节
print函数,功能:
打印用户已经输入过的电话信息,系统若无法读取原信息,则给用户相关提示:
“当前链表为空,请先创建新的链表或者加载文件”。
voidprint(ID*head)
ID*temp;
temp=head;
system("
cls"
);
printf("
姓名:
\t电话号码:
\n"
if(head==NULL)
{
当前链表为空,请先创建新的链表或者加载文件\n"
}
else
while(temp!
=NULL)
%s\t%s\n"
temp->
name,temp->
tel);
temp=temp->
next;
}
search函数,用户通过提示输入待查姓名的首字母,系统会根据用户输入内容做判断,并给出相应的提示:
"
对不起,未能找到符合条件的记录”,或"
查找完毕,是否重新查询?
voidsearch(ID*head)
欢迎使用查找功能,只需要输入待查姓名的首字母:
ID*p;
intflag,searchflag=1;
charc,choice;
while(searchflag)
flag=0;
请输入需要查找姓名的首字母:
scanf("
%c"
&
c);
getchar();
p=head;
while(p!
if(p->
name[0]==c)
%s\t电话号码:
%s\n"
p->
name,p->
flag=1;
p=p->
if(flag==0)
对不起,未能找到符合条件的记录\n"
Y/N?
%s"
choice);
if(choice=='
Y'
||choice=='
y'
)
searchflag=1;
searchflag=0;
五、调试与测试
(1)调试过程中的主要问题
由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务。
对于本程序的调试运行,总体上情况良好。
但是,其中也出现了一些小问题。
我发现的主要问题有:
对于本程序来说不能实现保存,程序在下一次运行的时候便要从新输入。
(2)测试结果的分析与讨论
用户界面:
共九个函数,用户根据数字提示进行操作。
图5-1
创建电话簿
图5-2
打印电话簿
图5-3
保存电话簿
图5-4
读取电话簿
图5-5
删除电话号码
图5-6
插入新号码
图5-7
查找电话号码
图5-8
修改电话号码
图5-9
六.实习总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。
通过三周的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是通讯录管理系统的课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。
更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。
可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。
无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
参考文献
[1]郭有强,《C语言程序设计》,清华大学出版社。
[2]谭浩强,《C程序设计》,清华大学出版社。
[3]刘振安,孙忱,刘燕君,《C程序设计课程设计》,机械工业出版社。
[4]汪诗林,《数据结构算法与应用》,机械工业出版社。
致谢辞
在这次课程设计的撰写过程中,我得到了很多人的帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次课程设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。
同时也感谢学院为我提供良好的做毕业设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学!
源程序代码
#include<
stdio.h>
stdlib.h>
string.h>
ctype.h>
mem.h>
conio.h>
#defineIDstructtel
structtel
ID*next;
};
inttotal=0;
charsaveflag;
head=p1=p2=NULL;
欢迎使用\n"
while
(1)
p1=(ID*)malloc(sizeof(ID));
请输入姓名,以#作为结束标志\n"
p1->
name);
if(strcmp(p1->
name,"
#"
)==0)
if(total==0)
{
您输入了0条记录,单链表没有创建\n"
free(p1);
return(head);
break;
请输入电话号码:
head=p1;
p2=p1;
p2->
next=p1;
total++;
next=NULL;
新建电话簿成功,共有%d个联系人,是否存盘?
Y/N"
total);
saveflag);
if(saveflag=='
||saveflag=='
save(head);
请在推出程序之前,保存当前的工作!
returnhead;
voidprint(ID*head)
voidsave(ID*head)
FILE*fp;
ID*t;
if((fp=fopen("
tel.txt"
"
w"
))==NULL)
文件打开失败!
getch();
exit
(1);
正在保存文件,请稍后...\n"
t=head;
while(t!
fwrite(t,sizeof(ID),1,fp);
t=t->
fclose(fp);
文件保存成功!
ID*load()
ID*t1,*t2,*head=NULL;
charch;
r"
没有该文件\n"
//exit
(1);
ch=fgetc(fp);
if(ch==EOF)
文件为空,请重新建立一个电话簿\n"
return(head);
文件正在读取中...\n"
rewind(fp);
t1=(ID*)malloc(sizeof(ID));
head=t1;
while(!
feof(fp))
if(fread(t1,sizeof(ID),1,fp)!
=1)
t1->
next=(ID*)malloc(sizeof(ID));
t2=t1;
t1=t1->
t2->
文件读取完毕\n"
ID*deleter(ID*head)
ID*p,*q;
chars[11],choice;
请输入要删除的电话号码:
s);
q=p=head;
while(strcmp(p->
tel,s)&
&
p!
q=p;
if(p==NULL)
\n对不起,记录中没有电话号码:
姓名:
%s\t电话号码:
是否删除?
按任意键删除...\n"
if(p==head)
head=p->
q->
next=p->
free(p);
\n已经删除了电话号码:
请保存文件!
(按4保存文件)\n"
ID*append(ID*head)
{
ID*temp,*p1,*p2;
插入操作开始!
!
temp=(ID*)malloc(sizeof(ID));
请输入姓名:
请输入电话号码:
if(head==NULL)
head=temp;
temp->
}
else
p1=head;
while(p1!
=NULL)
p1=p1->
next=temp;
插入成功"
}
ID*modify(ID*head)
ID*p1,*p2;
intmode;
charstr[10];
请输入要修改记录的姓名:
str);
while(p1!
name,str)==0)
1.姓名:
%s\t2.电话号码:
name,p1->
请选择要修改选项:
%d"
mode);
if(mode==1)
请输入修改后的姓名\n"
elseif(mode==2)
请输入修改后的电话号码\n"
输入有误!
if(p1==NULL)
未找到符合要求的记录!
intmain()
ID*head=NULL;
intchoice;
\t*************电话簿管理系统*************\n"
\t**\t1create建立新的电话簿**\n"
\t**\t2deleter删除电话号码**\n"
\t**\t3print打印电话簿**\n"
\t**\t4save保存电话簿**\n"
\t**\t5load读取电话簿文件**\n"
\t**\t6search查找电话号码**\n"
\t**\t7append添加新的电话号码**\n"
\t**\t8modify修改电话号码**\n"
\t**\t9exit退出电话号码簿**\n"
\t\t请选择1-9之间的操作:
switch(choice)
case1:
head=creat();
break;
case2:
head=deleter(head);
case3:
print(head);
case4:
case5:
head=load();
case6:
search(head);
case7:
head=append(head);
case8:
head=modify(head);
case9:
exit(0);
default:
printf("
选择错误,请输入1-9之间的数字进行选择\n"
return0;
蚌埠学院本科学生课程设计任务书
题 目
电话簿管理
1、课程设计的目的
利用单链表实现电话簿管理,,掌握C语言中的结构体、链表,指针、函数(系统函数,自定义函数)等C语言知识。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
一、用C实现一个电话簿管理小程序。
具有加入、删除、显示