电话簿管理系统课程设计.doc
《电话簿管理系统课程设计.doc》由会员分享,可在线阅读,更多相关《电话簿管理系统课程设计.doc(26页珍藏版)》请在冰豆网上搜索。
目录
摘要 2
一、课程设计目的 3
二、课程设计内容 3
三、总体设计 3
四、详细设计 5
(1)数据结构设计 5
(2)模块接口设计 5
(3)部分函数细节 6
五、调试与测试 9
(1)调试过程中的主要问题 9
(2)测试结果的分析与讨论 9
12
六.实习总结 14
参考文献 15
致谢辞 16
附录:
源程序代码 17
摘要
日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以电话簿能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的电话簿管理系统,用户可以方便的通过自己电脑的电话簿管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
电话簿管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
关键字:
信息(Information)
电话簿管理系统(TheManagementofTelephoneBook)
一、课程设计目的
通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容
设计一个实用的电话簿管理系统,能以简便高效的方式对电话簿进行管理,具体要示:
电话簿信息包括:
姓名,电话。
(1)更新:
能插入、删除电话簿信息。
.
(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)
{
printf("当前链表为空,请先创建新的链表或者加载文件\n");
}
else
while(temp!
=NULL)
{
printf("%s\t%s\n",temp->name,temp->tel);
temp=temp->next;
}
}
search函数,用户通过提示输入待查姓名的首字母,系统会根据用户输入内容做判断,并给出相应的提示:
"对不起,未能找到符合条件的记录”,或"查找完毕,是否重新查询?
voidsearch(ID*head)
{
printf("欢迎使用查找功能,只需要输入待查姓名的首字母:
\n");
ID*p;
intflag,searchflag=1;
charc,choice;
while(searchflag)
{
flag=0;
printf("请输入需要查找姓名的首字母:
\n");
scanf("%c",&c);
getchar();
p=head;
while(p!
=NULL)
{
if(p->name[0]==c)
{
printf("姓名:
%s\t电话号码:
%s\n",p->name,p->tel);
flag=1;
}
p=p->next;
}
if(flag==0)
printf("对不起,未能找到符合条件的记录\n");
printf("查找完毕,是否重新查询?
Y/N?
");
scanf("%s",&choice);
getchar();
if(choice=='Y'||choice=='y')
{
searchflag=1;
}
else
{
searchflag=0;
system("cls");
}
}
}
五、调试与测试
(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
#include
#include
#include
#include
#include
#defineIDstructtel
structtel
{
charname[10];
chartel[11];
ID*next;
};
inttotal=0;
ID*creat()
{
ID*head,*p1,*p2;
voidsave(ID*head);
charsaveflag;
head=p1=p2=NULL;
printf("欢迎使用\n");
while
(1)
{
p1=(ID*)malloc(sizeof(ID));
printf("请输入姓名,以#作为结束标志\n");
scanf("%s",p1->name);
if(strcmp(p1->name,"#")==0)
{
if(total==0)
{
printf("您输入了0条记录,单链表没有创建\n");
free(p1);
return(head);
}
else
{
break;
}
}
printf("请输入电话号码:
\n");
scanf("%s",p1->tel);
if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
total++;
}
p2->next=NULL;
free(p1);
printf("新建电话簿成功,共有%d个联系人,是否存盘?
Y/N",total);
getchar();
scanf("%c",&saveflag);
if(saveflag=='y'||saveflag=='Y')
save(head);
else
printf("请在推出程序之前,保存当前的工作!
\n");
returnhead;
}
voidprint(ID*head)
{
ID*temp;
temp=head;
system("cls");
printf("姓名:
\t电话号码:
\n");
if(head==NULL)
{
printf("当前链表为空,请先创建新的链表或者加载文件\n");
}
else
while(temp!
=NULL)
{
printf("%s\t%s\n",temp->name,temp->tel);
temp=temp->next;
}
}
voidsave(ID*head)
{
FILE*fp;
ID*t;
if((fp=fopen("tel.txt","w"))==NULL)
{
printf("文件打开失败!
\n");
getch();
exit
(1);
}
printf("正在保存文件,请稍后...\n");
t=head;
while(t!
=NULL)
{
fwrite(t,sizeof(ID),1,fp);
t=t->next;
}
fclose(fp);
printf("文件保存成功!
\n");
}
ID*load()
{
FILE*fp;
ID*t1,*t2,*head=NULL;
charch;
if((fp=fopen("tel.txt","r"))==NULL)
{
printf("文件打开失败!
没有该文件\n");
getch();
//exit
(1);
return(head);
}
ch=fgetc(fp);
if(ch==EOF)
{
printf("文件为空,请重新建立一个电话簿\n");
return(head);
}
else
{
printf("文件正在读取中...\n");rewind(fp);
}
t1=(ID*)malloc(sizeof(ID));
head=t1;
while(!
feof(fp))
{
if(fread(t1,sizeof(ID),1,fp)!
=1)
break;
t1->next=(ID*)malloc(sizeof(ID));
t2=t1;
t1=t1->next;
}
t2->next=NULL;
fclose(fp);
printf("文件读取完毕\n");
returnhead;
}
voidsearch(ID*head)
{
printf("欢迎使用查找功能,只需要输入待查姓名的首字母:
\n");
ID*p;
intflag,searchflag=1;
charc,choice;
while(searchflag)
{
flag=0;
printf("请输入需要查找姓名的首字母:
\n");
scanf("%c",&c);
getchar();
p=head;
while(p!
=NULL)
{
if(p->name[0]==c)
{
printf("姓名:
%s\t电话号码:
%s\n",p->name,p->tel);
flag=1;
}
p=p->next;
}
if(flag==0)
printf("对不起,未能找到符合条件的记录\n");
printf("查找完毕,是否重新查询?
Y/N?
");
scanf("%s",&choice);
getchar();
if(choice=='Y'||choice=='y')
{
searchflag=1;
}
else
{
searchflag=0;
system("cls");
}
}
}
ID*deleter(ID*head)
{
ID*p,*q;
chars[11],choice;
system("cls");
printf("请输入要删除的电话号码:
\n");
scanf("%s",s);
q=p=head;
while(strcmp(p->tel,s)&&p!
=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("\n对不起,记录中没有电话号码:
%s\n",s);
else
{
printf("姓名:
%s\t电话号码:
%s\n",p->name,p->tel);
printf("是否删除?
Y/N");
scanf("%s",&choice);
getchar();
if(choice=='Y'||choice=='y')
{
printf("按任意键删除...\n");
getch();
if(p==head)
head=p->next;
else
q->next=p->next;
free(p);
printf("\n已经删除了电话号码:
%s\n",s);
printf("请保存文件!
(按4保存文件)\n");
}
else
system("cls");
}
return(head);
}
ID*append(ID*head)
{
ID*temp,*p1,*p2;
printf("插入操作开始!
!
!
\n");
temp=(ID*)malloc(sizeof(ID));
printf("请输入姓名:
\n");
scanf("%s",temp->name);
getchar();
printf("请输入电话号码:
\n");
scanf("%s",temp->tel);
getchar();
if(head==NULL)
{
head=temp;
temp->next=NULL;
}
else
{
p1=head;
while(p1!
=NULL)
{
p2=p1;
p1=p1->next;
}
p2->next=temp;
temp->next=p1;
}
printf