课程设计.docx
- 文档编号:26210503
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:21
- 大小:184.44KB
课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
课程设计
课程设计报告
学院:
天津科技大学
专业名称:
软件工程
课程设计科目
C语言课程设计
所在班级:
软件工程6班
学生学号:
9089738
学生姓名:
王明
指导教师:
陈立娜
完成时间:
2012年4月-6月
对课程设计工作过程的简短介绍和自我评价
这是第一次编写课程设计,刚开始的时候感觉很难,不知道从在哪里下手,但随着慢慢的接触,一点一点的成功也带来的无尽的喜悦之情,也不再那么枯燥乏味。
通过一段时间的努力终于完成了,这次课程设计中会遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针等等
学生签名:
2012年6月11日
(以下由评定教师填写)
质量评价指标(在相应栏目给分,优秀20-25分,良好15-20分,中等10-15分,及格5-10分,不及格0-5分)
评价项目
评价质量
优秀
良好
中等
及格
不及格
工作量和态度(25分)
实验、计算可靠性
(25分)
文字和图表质量
(25分)
总体评价
(25分)
评定成绩(百分制)
个人通讯录系统
一、设计任务与目标
编写一个通讯录管理系统。
要求包括通讯录建立、增加号码、删除号码、查询号码、修改号码、号码分类等功能,并设计主控菜单和子菜单供用户选择要执行的操作。
分析:
实现以下功能:
1)添加通讯录信息;
2)修改通讯录信息;
3)删除通讯录信息;
4)查询通讯录信息;
5)显示通讯录信息;
5)按序号排序通讯录信息;
5)退出系统。
创建一个链表,每个节点有姓名和号码以及关系三个信息。
增加号码操作为增加节点,删除号码操作为删除节点,查找号码为链表的遍历。
每个功能以函数的形式出现,由主控菜单控制。
并以文件的形式对号码信息进行保存。
二、方案设计与论证
①:
文件内部指针的操作;
②:
字符或者数据块的对比、判断;
③:
整体设计思路的清晰与否;
④:
遇到用户输入的信息与提示不一致,纠错的时候;
⑤:
具体的细化到函数和模块上:
Main函数:
对所有子函数的调用;
Output函数:
输出的时候对文件内部指针的运用;
Find函数:
用户输入的人物信息和调用文件中的对比过程;
Del函数:
找到要删除的人物信息以后,具体用何种方法实现删除;
Change函数:
查到人物信息以后对修改过程中对文件的操作、以及对用户信息的完整记录、修改;
解决方法:
①:
对于文件内部指针,要掌握好循环的使用次数,以及文件的结束标志;
②:
数据块或字符的对比,用strcmp函数进行比较,因此头文件要用到string.h
③:
整体设计的思路要画好流程图、以及每个功能模块的具体作用;
④:
main函数:
明白每个子函数的作用,然后按用户要求,逐一调用就行;
Add函数:
把数据块按照一定大小直接写在二进制文件末尾;
Output函数:
对文件中的内容读一块然后打屏幕上,然后再读、再打,一直到文件末尾;
Find函数:
对比用strcmp函数,找到后直接打在屏幕上;
Del函数:
找到要删除人物信息后,直接把要删除人物信息以前的人物信息保存到临时文件中;然后再把要删除人物信息以后的人物信息追加到临时文件中,然后删除数据库文件,再建立一个同名数据库文件,然后把临时文件中的内容完全写入建立的数据库文件中,然后再删除数据库文件;
Change函数:
前半部分基本和del函数类似,不过要保存要修改人物的信息,然后进行修改,然后保存以后,直接追加到数据库文件的末尾!
;
三、程序框图或流程图,程序清单与调用关系
Main函数:
实现界面的设计、对子函数的调用、是程序的窗口;
Output函数:
实现数据从文件中的调用,然后输出;
Del函数:
对数据库文件进行相关操作,然后实现数据的删除;
Find函数:
对数据库文件进行相关操作,然后实现人物信息的查找,并输出在屏幕上
Change函数:
对数据库文件进行相关操作,实现人物信息的变更,
Add函数:
对数据库文件进行相关操作,实现人物信息的增加;
四、全部源程序清单
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"
#definePT"序号:
%s姓名:
%s单位:
%s固定电话:
%s移动电话:
%sQQ:
%semail:
%s分类:
%s\n",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort
#defineNsizeof(structstud)
structstud
{
charnum[10];//序号
charname[15];//姓名
charunit[15];//单位
charphone[15];//固定电话
charmphone[15];//移动手机
charQQ[15];//QQ
charemail[15];//email
charsort[12];//分类
structstud*next;
};
structstud*creat(void)
{
structstud*p1,*p2,*head;
inti=1;
charchoice;
head=p2=(structstud*)malloc(N);
printf("★―――――――――――――――――――――――――――――――★\n");
printf("★◆◆◆◆◆◆◆◆◆欢迎使用通讯录管理系统◆◆◆◆◆◆◆◆◆◆◆★\n");
printf("★_______________________________★\n\n\n");
printf("\n");
printf("\n\n\n");
printf("◆◆◆◆◆◆◆信息中间用空格,一组信息结束按回车结束◆◆◆◆◆◆◆\n\n\n");
printf("★———————————————————————————————★\n");
printf("★请输入序号姓名单位固定电话移动电话QQemail分类★\n");
printf("★———————————————————————————————★\n");
head->next=NULL;
choice='y';
for(i=1;choice=='y'||choice=='Y';i++)
{
p1=(structstud*)malloc(N);
scanf("%s%s%s%s%s%s%s%s",p1->num,p1->name,p1->unit,p1->phone,p1->mphone,p1->QQ,p1->email,p1->sort);
p2->next=p1;
p2=p1;
printf("\n是否继续?
(Y/N):
");
choice=getche();
printf("\n");
}
p2->next=NULL;
returnhead;
}
voidinsert(structstud*head)
{
structstud*p;
p=(structstud*)malloc(N);
printf("请输入要插入的序号姓名单位固定电话移动电话QQemail分类\n");
scanf("%s%s%s%s%s%s%s%s",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort);
if(head->next!
=NULL)
{
p->next=head->next;
head->next=p;
}
printf("\n通讯信息插入成功!
按任意键继续!
");
getche();
}
voidmodify(structstud*h)
{
charnumber[10];
structstud*p;
charchoice;
printf("请输入要修改的通讯信息的序号:
");
scanf("%s",number);
for(p=h;strcmp(p->num,number)!
=0;p=p->next);
while
(1)
{
printf("请输入修改后通讯信息:
\n");
printf("请输入要插入的序号姓名单位固定电话移动手机QQemail分类\n");
scanf("%s%s%s%s%s%s%s%s",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort);
printf("修改后通讯信息如下:
\n");
printf("\n序号:
%s姓名:
%s单位:
%s固定电话:
%s移动电话:
%sQQ:
%semail:
%s分类:
%s\n",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort);
printf("\n确认?
是Y否N:
");
choice=getche();
if(choice=='y'||choice=='Y')break;
}
printf("\n修改成功,按任意键继续!
");
getche();
}
voidcut(structstud*p0)
{
charnumber[10];
structstud*p;
charchoice;
if(p0->next==NULL)
{
printf("信息出错!
按任意键退出!
");
getch();
exit
(1);
}
printf("请输入要删除的序号:
");
scanf("%s",number);
for(p=p0->next;strcmp(p->num,number)!
=0;p0=p,p=p->next);
printf("你要删除的通讯信息如下,请确认是否删除:
\n");
printf("\n序号:
%s姓名:
%s单位:
%s固定电话:
%s移动电话:
%sQQ:
%semail:
%ssort:
%s\n",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort);
printf("\n是Y,否N:
");
choice=getche();
if(choice=='Y'||choice=='y')
{
p0->next=p->next;
free(p);
printf("\n文件删除成功!
");
}
printf("\n按任意键结束!
");
getche();
}
voidfind(structstud*h)
{
charnumber[10];
structstud*p;
printf("请输入你要查找的序号:
");
scanf("%s",number);
for(p=h;strcmp(p->num,number)!
=0;p=p->next);
printf("你查找的通讯信息如下:
\n");
printf("\n序号:
%s姓名:
%s单位:
%s固定电话:
%s移动电话:
%sQQ:
%semail:
%ssort:
%s\n",p->num,p->name,p->unit,p->phone,p->mphone,p->QQ,p->email,p->sort);
printf("按任意键继续!
");
getche();
}
voidprint(structstud*p)
{
p=p->next;
while(p!
=NULL)
{
printf(PT);
p=p->next;
}
printf("\n按任意键继续!
");
getche();
}
voidsort(structstud*head)
{
structstud*q,*t,*p;
p=head;
t=NULL;
while(t!
=head->next)
{
p=head;
q=p->next;
while(q->next!
=t)
{
if(strcmp(p->next->num,q->next->num)>0)
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
}
p=p->next;
q=p->next;
}
t=q;
}
printf("通讯信息排序完毕,按任意键继续!
");
getche();
}
//主函数
voidmain()
{
intchoice=1,i;
structstud*head;
head=NULL;
head=creat();
for(i=1;choice!
=0;i++)
{
system("cls");
printf("★◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆★\n");
printf("★◇◇◇◇◇◇◇◇◇☆欢迎使用通讯录管理系统☆◇◇◇◇◇◇◇◇◇★\n");
printf("★◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇★\n");
printf("★◇◇★\n");
printf("★◇◇★\n");
printf("★◇◇★\n");
printf("★◇☆1.添加通讯信息◇★\n");
printf("★◇☆2.修改通讯信息◇★\n");
printf("★◇☆3.删除通讯信息◇★\n");
printf("★◇☆4.查询通讯信息◇★\n");
printf("★◇☆5.显示通讯信息◇★\n");
printf("★◇☆6.按序号排序通讯信息◇★\n");
printf("★◇☆0.退出系统◇★\n");
printf("★◇◇★\n");
printf("★◇◇★\n");
printf("★◇◇★\n");
printf("★◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆★\n");
printf("◆请选择(0-6):
\n");
scanf("%d",&choice);
switch(choice)
{
case1:
insert(head);break;
case2:
modify(head);break;
case3:
cut(head);break;
case4:
find(head);break;
case5:
print(head);break;
case6:
sort(head);break;
case0:
break;
}
}
}
五、程序运行结果测试与分析
1运行程序界面如下所示
②输入序号,成功添加人物信息:
③按“N”键返回主界面:
④成功添加联系人:
⑤成功修改上述添加的联系人:
⑥成功删除添加的联系人:
⑦查询联系人:
⑧显示存储的联系人:
⑨退出系统:
六、结论与心得
通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。
无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
七、参考资料
谭浩强《《C程序设计教程》》北京:
清华大学出版社
刘振安刘燕君单继龙《《C程序设计》》机械工程出版社
八、致谢
对于这次的课程设计是在参考文献和同学的帮助下完成的,在此,向他们表示衷心的感谢。
经过半个多月的时间,期末的课程设计终于画上了一个圆满的句号,为以后的学习打下基础。
同时,希望批改老师对此文的不足给予指导,并提出宝贵的意见和建议。
在此,对关心我的同学参考文献的作者表示由衷的感谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计