通讯录课程设计报告完.docx
- 文档编号:29387518
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:148.27KB
通讯录课程设计报告完.docx
《通讯录课程设计报告完.docx》由会员分享,可在线阅读,更多相关《通讯录课程设计报告完.docx(23页珍藏版)》请在冰豆网上搜索。
通讯录课程设计报告完
《C语言课程设计》
课题:
通讯录管理系统
学院:
计算机学院
姓名:
XXX
学号:
20506132
班级:
06计算机
设计时间:
2009年5月
目录
摘要3
一、课程设计目的4
二、课程设计内容4
三、总体设计4
四、详细设计5
(1)数据结构设计5
(2)模块接口设计6
(3)流程图7
五、调试与测试9
(1)调试过程中的主要问题9
(2)测试结果的分析与讨论10
六.实习总结12
注:
13
摘要
日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
一、课程设计目的
1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2、通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容
设计一个实用的通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:
(1)录入:
通讯录信息包括:
编号,姓名,单位,电话,地址,QQ,邮编。
以结构通讯录信息。
(2)更新:
能插入、删除通讯录信息。
.
(3)浏览:
能够查看所有的通讯录信息。
(4)查询:
能实现指定姓名信息查询或指定编号查询功能。
(5)系统以菜单方式工作,界面友好,易于操作。
三、总体设计
1、模块化设计
为实现系统功能,本程序主要分为五个模块。
它们分别为:
输入一个信息、删除一个信息、查询一个信息、插入一个信息、列出所有的信息、退出该程序。
这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
creat函数用于对通讯录中的数据进行读入;
Delete函数用于对通讯录中指定信息的删除;
Find函数用于对通讯录中指定信息的查询;
Insert函数用于在通讯录中插入信息;
print函数用于对通讯录中所有信息进行浏览;
2、模块调用图
四、详细设计
(1)数据结构设计
本程序中,运用了多种数据结构。
首先对于通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,通过指针的后移,把多个数据连成一个链,形成一个链表。
对于主要数据结构的举例如下:
结构数组:
① typedefstruct
{intnum[5];
charname[8];
charunit[30];
charphone[11];
charaddr[30];
charqq[10];
charzip[6];/*zip为zipcode缩写邮编*/
}datatype;
链表:
typedefstructnode{
datatypedata;
structnode*next;
}listnode;
typedeflistnode*linklist;
linklisthead;
listnode*p;
intmenu_select();
linklistcreatelist(void);
voidinsertnode(linklisthead,listnode*p);
listnode*listfind(linklisthead);
voiddelnode(linklisthead);
voidprintlist(linklisthead);
(2)模块接口设计
由于本程序中大部分运用了链表这一数据结构,函数中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。
本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据进行录入。
接下来用switch语句实现对各个函数的调用。
通过对链表的使用,可以使得每一次的函数调用都能得到返回值。
最后,再从main函数中结束整个程序的运行。
(3)流程图
create函数:
Del函数:
Find函数:
Insert函数:
Print函数
五、调试与测试
(1)调试过程中的主要问题
由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务。
对于本程序的调试运行,总体上情况良好。
但是,其中也出现了一些小问题。
我发现的主要问题有:
对于本程序来说不能实现保存,程序在下一次运行的时候便要从新输入。
(2)测试结果的分析与讨论
用户界面
输入信息
查找信息
插入信息
删除信息
浏览信息
六.实习总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。
通过三周的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是通讯录管理系统的课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。
更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。
可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。
无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
注:
本程序可在Tc,winTC和C++任何一个环境下编译,运行。
源码:
#include
#include
#include
typedefstruct{
charnum[5];
charname[8];
charunit[30];
charphone[11];
charaddr[30];
charqq[10];
charzip[6];/*zip为zipcode缩写邮编*/
}datatype;
typedefstructnode{
datatypedata;
structnode*next;
}listnode;
typedeflistnode*linklist;
linklisthead;
listnode*p;
intmenu_select();
linklistcreatelist(void);
voidinsertnode(linklisthead,listnode*p);
listnode*listfind(linklisthead);
voiddelnode(linklisthead);
voidprintlist(linklisthead);
voidmain()
{
for(;;){
switch(menu_select())
{
case1:
printf("*****************************************************************************\n");
printf("*******************************通讯录链表的建立****************************\n");
printf("*****************************************************************************\n");
head=createlist();
break;
case2:
printf("*****************************************************************************\n");
printf("*******************************通讯录信息添加*******************************\n");
printf("*****************************************************************************\n");
printf("**编号(5)姓名(8)单位(30)电话(11)地址(30)QQ(10)邮编(6)**\n");
printf("------------------------------------------------------------------------------\n");
p=(listnode*)malloc(sizeof(listnode));
printf("请输入要添加的信息!
\n");
printf("**编号(5):
");
scanf("%s",p->data.num);
printf("**姓名(8):
");
scanf("%s",p->data.name);
printf("**单位(30):
");
scanf("%s",p->data.unit);
printf("**电话(11):
");
scanf("%s",p->data.phone);
printf("**地址(30):
");
scanf("%s",p->data.addr);
printf("**QQ(10):
");
scanf("%s",p->data.qq);
printf("**邮编(6):
");
scanf("%s",p->data.zip);
printf("----------------------------\n");
insertnode(head,p);
break;
case3:
printf("**************************************************************************\n");
printf("*****************************通讯录信息查询******************************\n");
printf("**************************************************************************\n");
p=listfind(head);
if(p!
=NULL){
printf("----------------------\n");
printf("**编号(5):
");
printf("%s\n",p->data.num);
printf("**姓名(8):
");
printf("%s\n",p->data.name);
printf("**单位(30):
");
printf("%s\n",p->data.unit);
printf("**电话(11):
");
printf("%s\n",p->data.phone);
printf("**地址(30):
");
printf("%s\n",p->data.addr);
printf("**QQ(10):
");
printf("%s\n",p->data.qq);
printf("**邮编(6):
");
printf("%s\n",p->data.zip);
printf("-----------------------");
}
else
printf("没有你要找的人!
\n");
break;
case4:
printf("***************************************************************************\n");
printf("***************************通讯信息的删除*********************************\n");
printf("***************************************************************************\n");
delnode(head);
break;
case5:
printf("***************************************************************************\n");
printf("****************************通讯录链表的输出******************************\n");
printf("***************************************************************************\n");
printlist(head);
break;
case0:
printf("\t∽∽∽∽∽∽∽∽∽∽∽∽谢谢您的使用!
∽∽∽∽∽∽∽∽∽∽∽\n");
return;
}
}
}
intmenu_select()
{
intsn;
/*printf("\n");*/
printf("\n");
printf("\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 通讯录管理系统 ☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("\n");
printf("===========作者:
朱雪芹学院:
成教班级:
06计算机学号:
32========\n");
printf("==============制作时间:
二零零九年五月===============\n");
/*printf("\n");*/
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("**********1.通讯录链表的建立**********\n");
printf("**********2.通讯者结点的插入**********\n");
printf("**********3.通讯录链表的查询**********\n");
printf("**********4.通讯者结点的删除**********\n");
printf("**********5.通讯录链表的输出**********\n");
printf("**********0.退出通讯录管理系统**********\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
/*printf("\n");*/
printf("========欢迎进入通讯录管理系统,请选择您要的操作(0-5)========\n");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>5)
printf("\t输入错误\n");
else
break;
}
returnsn;
}
linklistcreatelist(void)
{
linklisthead=(listnode*)malloc(sizeof(listnode));
listnode*p,*rear;
intflag=1;
rear=head;
while(flag==1)
{
p=(listnode*)malloc(sizeof(listnode));
printf("请输入通讯录信息!
\n");
printf("**编号(5):
");
scanf("%s",p->data.num);
printf("**姓名(8):
");
scanf("%s",p->data.name);
printf("**单位(30):
");
scanf("%s",p->data.unit);
printf("**电话(11):
");
scanf("%s",p->data.phone);
printf("**地址(30):
");
scanf("%s",p->data.addr);
printf("**QQ(10):
");
scanf("%s",p->data.qq);
printf("**邮编(6):
");
scanf("%s",p->data.zip);
printf("----------------------------\n");
rear->next=p;
rear=p;
printf("继续建表吗?
(1.是/0.不):
");
scanf("%d",&flag);
}
if(flag==1)
printf("创建成功!
\n");
rear->next=NULL;
returnhead;
}
voidinsertnode(linklisthead,listnode*p)
{
listnode*p1,*p2;
p1=head;
p2=p1->next;
while(p2!
=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
printf("插入成功!
\n");
}
listnode*listfind(linklisthead)
{
listnode*p;
charnum[6];
charname[10];
intxz;
printf("--------------------\n");
printf("1.编号查询\n");
printf("2.姓名查询\n");
printf("--------------------\n");
printf("请选择:
\n");
p=head->next;
scanf("%d",&xz);
if(xz==1){
printf("请输入要查找的编号:
");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
}
else
if(xz=2){
printf("请输入要查询者的姓名:
");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
}
returnp;
}
voiddelnode(linklisthead)
{
intjx;
listnode*p,*q;
p=listfind(head);
if(p==NULL){
printf("没有要删除的通讯者!
:
\n");
return;
}
printf("真的要删除该结点吗?
(1.是/0.不):
");
scanf("%d",&jx);
if(jx==1){
q=head;
while(q!
=NULL&&q->next!
=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已被删除!
\n");
}
}
voidprintlist(linklisthead)
{
listnode*p;
p=head->next;
while(p!
=NULL)
{
printf("编号:
%s\n",p->data.num);
printf("姓名:
%s\n",p->data.name);
printf("单位:
%s\n",p->data.unit);
printf("电话:
%s\n",p->data.phone);
printf("地址:
%s\n",p->data.addr);
printf("QQ:
%s\n",p->data.qq);
printf("邮编:
%s\n",p->data.zi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 课程设计 报告