C程序课程设计大作业报告.docx
- 文档编号:9114466
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:111.27KB
C程序课程设计大作业报告.docx
《C程序课程设计大作业报告.docx》由会员分享,可在线阅读,更多相关《C程序课程设计大作业报告.docx(19页珍藏版)》请在冰豆网上搜索。
C程序课程设计大作业报告
C程序课程设计(大作业)报告
课程设计(大作业)报告
课程名称:
程序设计基础课程设计
设计题目:
职工工作量统计系统设计
院系:
班级:
设计者:
学号:
指导教师:
设计时间:
2012.6.25~2012.6.29
课程设计(大作业)任务书
姓名:
院(系):
专业:
学号:
任务起止日期:
2012.6.25~2012.6.29
课程设计题目:
职工工作量统计系统设计
课程设计要求:
编写有一个职工工作量统计程序,信息包括职工工号和完成的产品数量。
具体功能
1.系统以菜单方式工作
2.输入职工工号和完成的产品数量(允许同一职工有多次输入)并以磁盘文件保存;
3.对每个职工完成的产品数量实现累计。
4.按完成数量对职工排序,并确定他们的名次。
按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。
5.查询职工完成的产品信息。
(1)按职工号查询
2)按名次查询
工作计划及安排:
由于我们设计的题目是:
职工工作量统计系统设计所以我们对我们的课程有以下安排:
2012年6月25日上午:
我们先分析了我们课程需要的要求,对题目所要求的作出一个安排,对设计所要求的做出一个全面的规划,选定我们所要用的数据和函数,在计算机上操作先写出我们所需要的头文件,然后在写出我们的菜单方式的格式;
2012年六月25日下午:
按照我们早上所写出的菜单格式开始写我们的主程序:
⑴写一个函数输入职工工号和职工所完成的产品数量(允许同一职工有多次输入)并写出所需要函数的作用和用途;
⑵写一个函数和磁盘文件用来存放每个职工的信息;
2012年6月26日上午:
按照先前完成程序,写一个函数对完成数量的职工排序,并确定他们的名次。
按完成的产品数量由多到少的顺序,并且输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出);
2012年6月26日上午:
按照先前完成的程序写一个对职工信息的查询,①按职工号查询;②按名次查询;
2012年6月27日上午~下午:
调整程序,使程序更加美观,优化程序。
还加入了一个将数据从磁盘读出的小函数,方便进行程序的操作和运行。
2012年6月28日上午:
进一步理解程序,为答辩做准备。
剩余的时间对程序进行修改和撰写程序实验报告。
并且通过总体设计和详细设计将程序分解开,并进行详细说明。
指导教师签字
年月日
课程设计(大作业)成绩
学号:
姓名:
指导教师:
课程设计题目:
职工工作量统计系统设计
总结:
通过这次的课程设计,我收获了许多。
从以前的不喜欢程序设计到现在对程序慢慢产生兴趣,从不知道该如何下手到慢慢有了思路和框架结构,以前觉得编程很难、很繁杂没有思路,现在我知道只要构思出大体的框架、写出总体的设计思路,编程就已经成功一半了,在编程的过程中在逐步细分、多次上机调试。
程序就基本完成了。
在这次设计中,我们也遇到了许多问题,例如:
将数据写入磁盘,在从磁盘中取数据;将个职工完成的产品总数排序得出名次,并将产品总数相同的职工按工号由小到大输出;还有按职工号和名次来查询职工信息等。
遇到问题时,我们先进行同组的同学讨论并在课本中查找,如果还没解决,就请教其他同学。
遇到的问题太复杂,我们无法解决时就向老师请教。
就这样一点一滴的积累,一点一点的修改,最终完成了课程设计。
在这个过程中,有困惑、有烦恼、也有喜悦。
对于我个人来说,在这次实训中遇到的问题有:
1、对文件的操作不熟悉,如用fopen函数打开数据文件,对“wb”和“rb”的区别和如何使用混淆了。
通过查找资料,我知道了“wb”只以写的方式从磁盘打开文件,而“rb”是以读的方式从磁盘读出数据;2、将各职工的产品数累加时,我用了全局变量的结构体数组stu[i].count来存放职工产品数stu[i].product[j]累计后的的总和,但是用stu[i].count来存放时,stu[i].count没有初始化,导致输出的数总是随机数;3、在写按职工号和名次查询的函数时,没有用到判断语句,导致查找时总是出错。
在遇到这些问题时,虽然调试了很多次还是出错,但最后还是通过和小组成员讨论,请教老师、同学,最终把这些问题都解决了。
这次设计使我受益匪浅,在今后的学习中,我将以更加饱满的激情,更加积极的态度来面对程序设计这门课程,也要将这份激情延续到其它的课程中。
指导教师评语:
成绩:
填表时间:
指导教师签名:
课程设计(大作业)报告
一、课程设计目的与要求
1.课程设计目的
(1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。
(2)充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在程序设计中的实现思路和方法。
2.课程设计要求
编写有一个职工工作量统计程序,信息包括职工工号和完成的产品数量。
具体功能:
1.系统以菜单方式工作
2.输入职工工号和完成的产品数量(允许同一职工有多次输入)并以磁盘文件保存;
3.对每个职工完成的产品数量实现累计。
4.按完成数量对职工排序,并确定他们的名次。
按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。
5.查询职工完成的产品信息
(1)按职工号查询
(2)按名次查询
二、总体设计
根据系统的要求,系统总体设计如图1
三、详细设计
1、数据结构设计
#defineN100//定义常数表示职工数
inth=0,m=0;//定义全局变量表示总的职工人数
structworkstation//定义数据结构体
{
intno;//职工号
intproduct[N];//职工完成的产品数量
intrank;//职工完成产品量的排名
intcount;//每个职工完成的总产品量
}stu[N];
2.函数说明
(1)主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。
(2)其他各功能函数包括
函数名
功能
voidmenu_select()
输出程序功能菜单
voidenter()
键盘输入职工数据(职工号和完成产品数)
voidcount1()
将各职工的产品数累计
voidsave()
将职工数据写入磁盘保存
voidread1()
将职工数据从磁盘读出
voidrank1()
用各职工的产品总数排序并且输出名次
voidsearch()
按职工号查询职工信息
voidlookfor()
按名次查询职工信息
voidover()
退出程序
3.函数设计
(1)主菜单函数menu_select()
功能:
输出菜单选项
voidmenu_select(void)//输出程序功能主菜单,代表所选的菜单项
{
printf("***********************\n");
printf("**********菜单**********\n");
printf("0.输入职工信息记录\n");
printf("1.统计职工工作量\n");
printf("2.保存职工信息\n");
printf("3.读出职工信息记录\n");
printf("4.对完成产品数量的排序\n");
printf("5.按职工号查询职工完成的产品信息\n");
printf("6.按职工名次查询职工完成的产品信息\n");
printf("7.退出程序\n");
printf("***********************\n");
printf("***********************\n");
}
}
四、程序清单和执行结果
1.头文件
#include
#include
#include
#defineN100//定义常数表示职工数
inth=0,m=0;//定义全局变量表示总的职工人数
structworkstation//定义数据结构体
{
intno;//职工号
intproduct[N];//职工完成的产品数量
intrank;//职工完成产品量的排名
intcount;//每个职工完成的总产品量
}stu[N];
intmain()//允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能
charb='Y',c;
voidmenu_select(void);//主菜单函数
voidenter(void);//输入职工信息记录
voidsave(void);//保存职工信息记录
voidread1(void);//读出职工信息记录
voidcount1(void);//统计职工工作量
voidrank1(void);//对完成产品数量的排序
voidsearch(void);//按职工号查询职工完成的产品信息
voidlookfor(void);//按职工名次查询职工完成的产品信息
voidover(void);//退出程序
2.主函数源程序代码与运行结果
#include
#include
#include
#defineN100//定义常数表示职工数
inth=0,m=0;//定义全局变量表示总的职工人数
structworkstation//定义数据结构体
{
intno;//职工号
intproduct[N];//职工完成的产品数量
intrank;//职工完成产品量的排名
intcount;//每个职工完成的总产品量
}stu[N];
intmain()//允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能
{
charb='Y',c;
voidmenu_select(void);//主菜单函数
voidenter(void);//输入职工信息记录
voidsave(void);//保存职工信息记录
voidread1(void);//读出职工信息记录
voidcount1(void);//统计职工工作量
voidrank1(void);//对完成产品数量的排序
voidsearch(void);//按职工号查询职工完成的产品信息
voidlookfor(void);//按职工名次查询职工完成的产品信息
voidover(void);//退出程序
menu_select();
for(;b!
='N'&&b!
='n';)
{
printf("输入你的选项0-7:
\n");
scanf("%c",&c);
switch(c)
{
case'0':
enter();break;
case'1':
count1();break;
case'2':
save();break;
case'3':
read1();break;
case'4':
rank1();break;
case'5':
search();break;
case'6':
lookfor();break;
case'7':
return0;
}
printf("继续输入请输Y,结束输入N或n:
");
getchar();
b=getchar();//把printf输出的字符送回for循环
getchar();
}
return0;
}
voidmenu_select(void)//输出程序功能主菜单,代表所选的菜单项
{
printf("***********************\n");
printf("**********菜单**********\n");
printf("0.输入职工信息记录\n");
printf("1.统计职工工作量\n");
printf("2.保存职工信息\n");
printf("3.读出职工信息记录\n");
printf("4.对完成产品数量的排序\n");
printf("5.按职工号查询职工完成的产品信息\n");
printf("6.按职工名次查询职工完成的产品信息\n");
printf("7.退出程序\n");
printf("***********************\n");
printf("***********************\n");
}
(1)主菜单运行结果:
3各小函数运行结果.
(1)voidcount1(void)//统计职工工作量
{
inti,j;
for(i=0;i { stu[i].count=0; for(j=0;stu[i].product[j]! =-1;j++) { stu[i].count+=stu[i].product[j];//累加每个职工的产品 } } } (2)voidread1(void)//读出职工信息记录 { FILE*fp;//定义指向FILE类型文件的指针变量 inti; if((fp=fopen("E: \\qusi.txt","rb"))==NULL)//以读的方式打开磁盘 { printf("文件错误! "); exit(0); } for(i=0;! feof(fp);i++) { if(fread(&stu[i],sizeof(structworkstation),1,fp)! =1)//把磁盘中的数据读到stu[i]数组中 { return; } else { printf("%-4d%5d\n",stu[i].no,stu[i].count);//输出读入磁盘的信息 } } fclose(fp);////关闭磁盘 } (3)、voidsearch(void)//按职工号查询职工完成的产品信息 { FILE*fp; inti,j=0,n; if((fp=fopen("E: \\qusi.txt","rb"))==NULL) { printf("文件为空! "); exit(0); } for(i=0;! feof(fp);i++) { if(fread(&stu[i],sizeof(structworkstation),1,fp)! =1) { break; } m++;//统计读了多少次,多少次就代表多少个职工 } fclose(fp); printf("输入你所要查找的职工号: \n"); scanf("%d",&n);//输入一个查找职工号 for(i=0;i { if(stu[i].no==n)//判断所输入的工号 { printf("%3d%5d\n",stu[i].no,stu[i].count); j=1; } } if(j==0) { printf("查找的数据不存在: \n"); } } (4)函数voidover()功能: 结束程序 voidover() 五、调试与测试 所谓程序调试是对我们在写程序的出现的错误进行查错和排错。 对此程序我们进行了以步骤: 人工检查,即静态检查。 此过程我们对于写好的程序进行了排查,并且在有错误的地方进行了注释,还有对我们所遇到的错误进行了分析并且改正。 上机调试。 通过上机调试发现的错误为动态检查,这时我们发现了我们在写程序过程中出现许多的错误和警告,我们根据提示逐一改正。 运行程序。 这一步骤我们逐一检查每个菜单是否运行正常与正确,在这个过程中我们出现了许多格式和函数调用不正确,例如我们在上机调试的时候我们的程序就出现了很多困难,在我们的菜单选项中我们的选项2是“统计职工工作量”我们用结构体stu[i].count来进行累加,我们在写程序的时候用结构体no代表职工号,用结构体product来代表职工所完成的产品量,我们选项3是“对完成产品数量的排序”在输入的时候要求按照职工完成的产品数量从大到小排序,但是我们在输出的时候把结构体product输出来代表职工的所有产品量,但是我们的调试总是出现错误,职工的排序总是输出错误,后来经过我们细心查找才发现我们输出出现错误了,我们使用结构体stu[i].count来对职工产品进行累加的,所以我们的输出应该用stu[i].count来输出职工的产品数,经过我们的修改最终找出了错误,我们在排序输出名次的时候,第一名总是以第0名输出,后来经过我们的查找我们才发现我们用来记录名次的数是从0开始的后来我们把它改从1开始就对了,我们在对职工信息的查询是也出现了点问题,但是经过我们的查询和调试我们还是改正了那些出现的错误和警告。 具体调试过程如下: (1)统计职工工作量 voidcount1(void) { inti,j; for(i=0;i { for(j=0;i { stu[i].count+=stu[i].product[j];//累加每个职工的产品 } } } 修改为: voidcount1(void) { inti,j; for(i=0;i { stu[i].count=0; for(j=0;stu[i].product[j]! =-1;j++)//在写voidenter(void)时,写了一条命令“在是否继续输入职工产品数后加了一条stu[i].product[j]=-1” { stu[i].count+=stu[i].product[j];//累加每个职工的产品 } } } (2)按职工号查询时 inti,n; for(i=0;i { if(stu[i].no==n)//判断所输入的工号 printf("%3d%5d\n",stu[i].no,stu[i].count); else printf("查找的数据不存在: \n"); } 修改为: inti,j=0,n; for(i=0;i { if(stu[i].no==n)//判断所输入的工号 { printf("%3d%5d\n",stu[i].no,stu[i].count); j=1; } } if(j==0) { printf("查找的数据不存在: \n"); } } 总之,在我们对程序进行了细心的调试和测试之后,我们的程序正常运行了,但是其中还是有很多不足的地方。 比如我们在从磁盘读出数据的时候就有数据的遗失,但是经过我们的修改之后就变得完善了,在我们对职工信息的查询的时候也遇到不少问题,但是我们还是根据调试的不正确而加也修改正确了。 六、结语 通过这几天的C程序课程设计,我们小组既发现了许多不足,又学到了很多我们上课没有掌握的只是,也学到了许多以前不懂的知识。 使我们对这门课程有了更深一步的理解,并且也对它产生了一定的兴趣,对我们以后的学习有了重要的作用。 其中,老师对我们的帮助也是其到了极大的作用,我们有不明白或者是模糊的地方就像老师请教,以后我们还将对此进行深入了解,增加我们的知识,为我们以后的学习打好基础,在此我们小组成员对对老师给予我们的帮助表示感谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 课程设计 作业 报告