C语言程序设计小组.docx
《C语言程序设计小组.docx》由会员分享,可在线阅读,更多相关《C语言程序设计小组.docx(23页珍藏版)》请在冰点文库上搜索。
C语言程序设计小组
1.
BeijingInstituteofPetrochemicalTechnology
高级语言(C)课程设计
题目:
小型通讯录设计
院(系、部):
信息工程学院
姓名:
李海霞(52)
孙琳(23)
班级:
电112
指导教师签名:
2012年7月4日·北京
一、任务书*************************************2
二、小组成员情况*******************************2
三、总体设计***********************************2
四、模块划分及功能*****************************3
五、算法说明***********************************4
六、框架图*************************************6
七、流程图*************************************8
八、源程序清单*********************************12
九、程序测试***********************************26
十、结论、体会及建议***************************32
十一、附:
参考文献资料************************33
一、任务书
题目6:
小型通讯录设计
功能:
实现简单的通讯录信息管理,基本信息包括编号、姓名、手机、邮编、地址、关系、性别、生日、QQ、e-mail.
基本要求:
1.设计简单的菜单,能够进行系统功能选择。
2.实现信息的录入功能。
3.在已有信息的基础上添加新的记录。
4.删除指定编号的记录。
5.复制指定编号的记录
6.实现信息的浏览功能
7.按编号查询功能
8.按手机号排序功能
二.小组成员情况
组长:
李海霞学号:
52负责:
文件导出、删除、排序、复制、输出
组员:
孙琳学号:
23负责:
主菜单、添加、查询、保存退出
另外:
主函数,结构体定义,函数声明,文件及实验报告,虽有分工,但是大多数内容是有两人讨论后共同完成的。
期间各自编写函数的过程中遇到的问题均由两人共同商讨,以及询问老师后,一起解决的。
三、总体设计
利用structrecord定义数据结构,用void声明函数,用开关语句switch,case分开事件进行程序,实现系统功能选择,利用if,while语句判断函数,for语句实现循环,利用printf和scanf进行输出与输入,用getch()输入字符串,最终实现通讯录功能。
通讯录中的记录项用结构体record表示,包含10个属性:
id、name、phone、address、postcode、e-mail、relation、QQ、sex、birthday分别代表用户的编号、姓名、电话、地址、邮编、e_mail、关系、QQ、性别、生日。
1、结构体数组:
structrecord讯录中的记录项用结构体record表示,包含10个属性。
2.主菜单:
利用switch语句进行选择所需功能;输入“1”会进入“新添记录”的界面;输入“2”进入“输出记录”的界面;输入“3”会进入“查询菜单”的界面;输入“4”进入“删除记录”的界面;输入“5”进入“记录排序”的界面;输入“7”进入“保存退出”的界面;输入“8”进入“不保存退出”的界面。
3.添加记录:
利用printf()函数和scanf()函数实现按要求输入信息,再利用if()语句实现是否继续添加记录。
4.输出记录:
利用for循环和if语句实现全部输出;
5.查询菜单:
利用switch选择查询方式。
在查询菜单中输入“1”进入“按编号查询”界面;输入“2”进入“按姓名查询”界面;输入“3”进入“按电话查询”
界面;输入“4”进入“主菜单”界面。
6.按编号查询:
利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的编号是否相等,如找到相同的记录,就输出此人的全部信息,如果没有找到就显示“没有此人的信息”。
7.按姓名查询:
利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的姓名是否相等,如找到相同的记录,就输出此人的全部信息,再内嵌一个if语句进行查找相同名字的人的信息,再内嵌一个if语句继续查找,若不继续查找就输出“没有相同姓名的学生纪录按任意键返回主菜单”,如果一开始没有找到就显示“没有此人的信息”。
8.按电话号查询:
利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的电话号码是否相等,如找到相同的记录,就输出此人的全部信息,如果没有找到就显示“没有此人的信”。
9.删除菜单:
利用switch语句进行选择所需功能;输入“1”会进入“删除所有”的界面;输入“2”进入“删除单个”的界面;输入“3”会进入“返回主菜单”的界面。
10.删除所有:
利用if语句进行是否全部删除。
11.删除单个:
利用switch语句选择删除方式,输入“1”进入“按电话号码删除”
界面;输入“2”进入“按姓名删除”界面。
11.按电话号码删除:
利用if语句进行判断是否有记录,再利用for循环进行查找信息,如果找到,就显示所有要删除的信息,再利用if语句进行是否删除,内嵌for循环,把记录前移,内嵌if语句实现是否继续删除。
12.按姓名删除:
利用if语句进行判断是否有记录,再利用for循环进行查找信息,如果找到,就显示所有要删除的信息,再利用if语句进行是否删除,内嵌for循环,把记录前移,内嵌if语句实现是否删除相同姓名的同学信息
13.利用switch语句实现排序选择,输入“1”会进入“按电话排序的界面;输入“2”进入“按姓名排序”的界面;输入“3”会进入“返回主菜单”的界面。
14.按电话号码排序:
利用for循环和if语句以及do….while实现升序,再利用if语句实现是否显示排序后的信息,调用显示函数。
15.按姓名排序排序:
利用for循环和if语句以及do….while实现升序,再利用if语句实现是否显示排序后的信息,调用显示函数。
六、框架图:
七.流程图:
添加新成员
查找search流程图
删除delete流程图
排序list流程图
八、源程序清单
#include<>
#include<>
#include<>d);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:
");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:
");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[num].e_mail);
printf("\n\t\t输入QQ:
");
scanf("%s",&student[num].QQ);
printf("\n\t\t输入性别:
");
scanf("%s",&student[num].sex);
printf("\n\t\t输入生日:
");
scanf("%s",&student[num].birthday);
printf("\n\t\t输入关系:
");
scanf("%s",&student[num].relation);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
newrecord();
return;
}
voidshowall()d);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t关系:
%s",student[i].relation);
printf("\t\t");
if(i+1{
printf("\n\t\t__________________________请按任意键继续");
getch();
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:
");
getch();
return;
}
voidsearchmenu()d,id)==0)d);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t关系:
%s",student[i].relation);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:
");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有此人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
voidsearchbyname()ame,name)==0)d);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t关系:
%s",student[i].relation);
printf("\n\t\t************************************************");
mark++;
if((i+1){
printf("\n\t\t是否继续查找相同名字的人的信息:
(y/n)");
if(getch()=='y')
{
a=i;
continue;hone,phone)==0)
{
printf("\n\t\t**************以下是您查找的信息**********");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t关系:
%s",student[i].relation);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:
");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有此人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
voiddeletemenu()hone,phone)==0)
{
printf("\n\t\t以下是您要删除的纪录:
");
printf("\n\t\t编号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t是否删除?
(y/n)");
if(getch()=='y')
{
for(j=i;j{
printf("\n\t\t以下是您要删除的学生纪录:
");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t编号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\tQQ:
%s",student[i].QQ);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\t生日:
%s",student[i].birthday);
printf("\n\t\t性别:
%s",student[i].sex);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?
(y/n)");
if(getch()=='y')
{
for(j=i;j{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while((strcmp,student[j].phone)<0)&&j>=0);
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?
(y/n)");
if(getch()=='y')
showall();
return;
}
voidlistbyname()ame,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while((strcmp,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?
(y/n)");
if(getch()=='y')
showall();
return;
}
voidcopy()
{charoutfile[20];d,temp[i].name,
temp[i].phone,temp[i].adress,temp[i].postcode,temp[i].e_mail,temp[i].relation,temp[i].QQ,temp[i].sex,temp[i].birthday);d,temp[i].name,
temp[i].phone,temp[i].adress,temp[i].postcode,temp[i].e_mail,temp[i].relation,temp[i].QQ,temp[i].sex,temp[i].birthday
);菜单界面:
2.选择主菜单中“1-新添记录”后的界面:
3.选择主菜单中的“2-输出记录”后的界面:
4.选择主菜单中的“3-查询菜单”后的界面:
5.选择查询菜单中的“1-按编号查询”后的界面:
6.选择主菜单中的“4-删除菜单”后的界面:
7.选择删除菜单中的“1-删除所有”后的界面:
8.选择主菜单中的“5-记录排序”后的界面:
9.选择主菜单中的“6-文件复制”后的界面:
10.选择主菜单中的“7-保存退出”后的界面:
十、结论、体会及建议
李海霞:
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,担任小组长一职,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次C语言编程设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了C语言编程设计等课程。
在这次设计过程中,体现出C语言编程的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢各位老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次C语言设计的每个实验细节和每个数据,都离不开老师的细心指导。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,万分感谢。
孙琳:
通过这次课程设计更深入的了解到了C语言的功能,也进一步的巩固了C语言的算法及编程。
本次课设我负责主体部分,定义变量、函数,设计菜单,还有各种修改、完善程序。
从选题到编程,从理论到实践,真的是苦大于甜,将近两个星期的时间,经过我和李海霞同学的努力终于编出了小型通讯录管理系统。
当然有好大一部分是老师给出的案例中的,但这次编程真的是受益匪浅。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握一门技能,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在各位老师的辛勤指导下,终于游逆而解。
附:
参考文献资料
C程序设计(第四版)谭浩强著
C程序设计(第四版)学习辅导谭浩强编著
教育在线的例题
互联网上查阅的相关资料