《C程序课程设计(大作业)报告.doc》由会员分享,可在线阅读,更多相关《C程序课程设计(大作业)报告.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计(大作业)报告课程名称: 程序设计基础课程设计 设计题目: 职工工作量统计系统设计 院 系: 班 级: 设 计 者: 学 号: 指导教师: 设计时间: 2012.6.252012.6.29 课程设计(大作业)任务书姓 名:院(系):专 业:学 号:任务起止日期:2012.6.252012.6.29课程设计题目:职工工作量统计系统设计课程设计要求:编写有一个职工工作量统计程序,信息包括职工工号和完成的产品数量。具体功能1.系统以菜单方式工作2.输入职工工号和完成的产品数量(允许同一职工有多次输入)并以磁盘文件保存;3.对每个职工完成的产品数量实现累计。4.按完成数量对职工排序,并确定他们
2、的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。5.查询职工完成的产品信息。(1)按职工号查询2)按名次查询工作计划及安排:由于我们设计的题目是:职工工作量统计系统设计所以我们对我们的课程有以下安排:2012年6月25日上午:我们先分析了我们课程需要的要求,对题目所要求的作出一个安排,对设计所要求的做出一个全面的规划,选定我们所要用的数据和函数,在计算机上操作先写出我们所需要的头文件,然后在写出我们的菜单方式的格式;2012年六月25日下午:按照我们早上所写出的菜单格式开始写我们的主程序:写一个函数输入职工工号和职工所完成的产品数量(允
3、许同一职工有多次输入)并写出所需要函数的作用和用途;写一个函数和磁盘文件用来存放每个职工的信息;2012年6月26日上午:按照先前完成程序,写一个函数对完成数量的职工排序,并确定他们的名次。按完成的产品数量由多到少的顺序,并且输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出);2012年6月26日上午:按照先前完成的程序写一个对职工信息的查询,按职工号查询;按名次查询;2012年6月27日上午下午:调整程序,使程序更加美观,优化程序。还加入了一个将数据从磁盘读出的小函数,方便进行程序的操作和运行。2012年6月28日上午:进一步理解程序,为答辩做准备。剩余的时间对程序进行修改和撰
4、写程序实验报告。并且通过总体设计和详细设计将程序分解开,并进行详细说明。指导教师签字 年 月 日 课程设计(大作业)成绩学号: 姓名: 指导教师:课程设计题目:职工工作量统计系统设计总结:通过这次的课程设计,我收获了许多。从以前的不喜欢程序设计到现在对程序慢慢产生兴趣,从不知道该如何下手到慢慢有了思路和框架结构,以前觉得编程很难、很繁杂没有思路,现在我知道只要构思出大体的框架、写出总体的设计思路,编程就已经成功一半了,在编程的过程中在逐步细分、多次上机调试。程序就基本完成了。在这次设计中,我们也遇到了许多问题,例如:将数据写入磁盘,在从磁盘中取数据;将个职工完成的产品总数排序得出名次,并将产品
5、总数相同的职工按工号由小到大输出;还有按职工号和名次来查询职工信息等。遇到问题时,我们先进行同组的同学讨论并在课本中查找,如果还没解决,就请教其他同学。遇到的问题太复杂,我们无法解决时就向老师请教。就这样一点一滴的积累,一点一点的修改,最终完成了课程设计。在这个过程中,有困惑、有烦恼、也有喜悦。对于我个人来说,在这次实训中遇到的问题有: 1、对文件的操作不熟悉,如用fopen函数打开数据文件,对“wb”和“rb”的区别和如何使用混淆了。通过查找资料,我知道了“wb”只以写的方式从磁盘打开文件,而“rb”是以读的方式从磁盘读出数据;2、将各职工的产品数累加时,我用了全局变量的结构体数组stui.
6、count来存放职工产品数stui.productj累计后的的总和,但是用stui.count来存放时,stui.count没有初始化,导致输出的数总是随机数;3、在写按职工号和名次查询的函数时,没有用到判断语句,导致查找时总是出错。在遇到这些问题时,虽然调试了很多次还是出错,但最后还是通过和小组成员讨论,请教老师、同学,最终把这些问题都解决了。 这次设计使我受益匪浅,在今后的学习中,我将以更加饱满的激情,更加积极的态度来面对程序设计这门课程,也要将这份激情延续到其它的课程中。指导教师评语:成绩:填表时间:指导教师签名:课程设计(大作业)报告目录课程设计(大作业)报告- 1 -课程设计(大作业
7、)任务书- 2 -一、课程设计目的与要求- 5 -1.课程设计目的- 5 -2. 课程设计要求- 5 -二、总体设计- 5 -三、详细设计- 6 -1、数据结构设计- 6 -2函数说明- 6 -3函数设计- 7 -四、程序清单和执行结果- 7 -1.头文件- 7 -2.主函数源程序代码与运行结果- 8 -3各小函数运行结果.- 10 -五、调试与测试- 13 -六、结语- 14 -一、课程设计目的与要求1.课程设计目的(1) 综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。(2) 充分体现和体会函数在程序设计中的必要性和实用性,并
8、反映主函数main()在程序设计中的实现思路和方法。2. 课程设计要求编写有一个职工工作量统计程序,信息包括职工工号和完成的产品数量。具体功能:1.系统以菜单方式工作2.输入职工工号和完成的产品数量(允许同一职工有多次输入)并以磁盘文件保存;3.对每个职工完成的产品数量实现累计。4.按完成数量对职工排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。5.查询职工完成的产品信息(1)按职工号查询(2)按名次查询二、总体设计对程序的操作退出对职工排名的查询对职工号的查询对职工完成的产品排序职工信息的读出职工信息的保存统计职工的工
9、作量职工信息的录入职工工作量统计程序根据系统的要求,系统总体设计如图1 三、详细设计1、数据结构设计#define N 100 /定义常数表示职工数int h=0,m=0; /定义全局变量表示总的职工人数struct workstation /定义数据结构体int no; /职工号int productN; /职工完成的产品数量int rank; /职工完成产品量的排名int count; /每个职工完成的总产品量stuN;2函数说明(1) 主函数main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。(2) 其他各功能函数包括函数名功能void menu_selec
10、t() 输出程序功能菜单void enter() 键盘输入职工数据(职工号和完成产品数)void count1() 将各职工的产品数累计 void save() 将职工数据写入磁盘保存 void read1()将职工数据从磁盘读出 void rank1() 用各职工的产品总数排序并且输出名次 void search() 按职工号查询职工信息 void lookfor() 按名次查询职工信息void over() 退出程序3函数设计(1)主菜单函数menu_select()功能:输出菜单选项void menu_select(void) /输出程序功能主菜单,代表所选的菜单项printf(*n);
11、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#define N 100 /定义常数表示职工数int h=0,m=0; /定义全局变量表示总的职工人
12、数struct workstation /定义数据结构体int no; /职工号int productN; /职工完成的产品数量int rank; /职工完成产品量的排名int count; /每个职工完成的总产品量stuN;int main () /允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能char b=Y,c;void menu_select(void); / 主菜单函数 void enter(void); /输入职工信息记录void save(void); /保存职工信息记录void read1(void); /读出职工信息记录void count1(void)
13、; /统计职工工作量void rank1(void); /对完成产品数量的排序 void search(void); /按职工号查询职工完成的产品信息void lookfor(void); /按职工名次查询职工完成的产品信息void over(void); /退出程序2.主函数源程序代码与运行结果#include#include#include#define N 100 /定义常数表示职工数int h=0,m=0; /定义全局变量表示总的职工人数struct workstation /定义数据结构体int no; /职工号int productN; /职工完成的产品数量int rank; /职
14、工完成产品量的排名int count; /每个职工完成的总产品量stuN;int main () /允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能char b=Y,c;void menu_select(void); / 主菜单函数 void enter(void); /输入职工信息记录void save(void); /保存职工信息记录void read1(void); /读出职工信息记录void count1(void); /统计职工工作量void rank1(void); /对完成产品数量的排序 void search(void); /按职工号查询职工完成的产品信息v
15、oid lookfor(void); /按职工名次查询职工完成的产品信息void over(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:return 0;p
16、rintf(继续输入请输Y,结束输入N 或 n:); getchar();b=getchar(); /把printf输出的字符送回for循环 getchar();return 0;void menu_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.按职工名次查
17、询职工完成的产品信息n); printf(7.退出程序n);printf(*n);printf(*n);(1)主菜单运行结果:3各小函数运行结果. (1)void count1(void) /统计职工工作量 int i,j;for(i=0;ih;i+)stui.count=0;for(j=0;stui.productj!=-1;j+)stui.count+=stui.productj; /累加每个职工的产品(2)void read1(void) /读出职工信息记录FILE *fp; /定义指向FILE类型文件的指针变量int i;if(fp=fopen(E:qusi.txt,rb)=NULL)
18、 /以读的方式打开磁盘printf(文件错误!);exit(0);for(i=0;!feof(fp);i+) if(fread(&stui,sizeof(struct workstation),1,fp)!=1) /把磁盘中的数据读到stui数组中 return;elseprintf(%-4d%5dn,stui.no,stui.count); /输出读入磁盘的信息fclose(fp); / /关闭磁盘(3)、void search(void) /按职工号查询职工完成的产品信息FILE *fp;int i,j=0,n;if(fp=fopen(E:qusi.txt,rb)=NULL)printf(
19、文件为空!);exit(0);for(i=0;!feof(fp);i+)if(fread(&stui,sizeof(struct workstation),1,fp)!=1)break;m+; /统计读了多少次,多少次就代表多少个职工fclose(fp);printf(输入你所要查找的职工号:n);scanf(%d,&n); /输入一个查找职工号for(i=0;im;i+)if(stui.no=n) /判断所输入的工号printf(%3d%5dn,stui.no,stui.count);j=1;if(j=0) printf(查找的数据不存在:n);(4) 函数void over() 功能:结束
20、程序void over()五、调试与测试所谓程序调试是对我们在写程序的出现的错误进行查错和排错。对此程序我们进行了以步骤:人工检查,即静态检查。此过程我们对于写好的程序进行了排查,并且在有错误的地方进行了注释,还有对我们所遇到的错误进行了分析并且改正。上机调试。通过上机调试发现的错误为动态检查,这时我们发现了我们在写程序过程中出现许多的错误和警告,我们根据提示逐一改正。运行程序。这一步骤我们逐一检查每个菜单是否运行正常与正确,在这个过程中我们出现了许多格式和函数调用不正确,例如我们在上机调试的时候我们的程序就出现了很多困难,在我们的菜单选项中我们的选项2是“统计职工工作量”我们用结构体stui
21、.count来进行累加,我们在写程序的时候用结构体no代表职工号,用结构体product来代表职工所完成的产品量,我们选项3是“对完成产品数量的排序”在输入的时候要求按照职工完成的产品数量从大到小排序,但是我们在输出的时候把结构体product输出来代表职工的所有产品量,但是我们的调试总是出现错误,职工的排序总是输出错误,后来经过我们细心查找才发现我们输出出现错误了,我们使用结构体stui.count来对职工产品进行累加的,所以我们的输出应该用stui.count来输出职工的产品数,经过我们的修改最终找出了错误,我们在排序输出名次的时候,第一名总是以第0名输出,后来经过我们的查找我们才发现我们
22、用来记录名次的数是从0开始的后来我们把它改从1开始就对了,我们在对职工信息的查询是也出现了点问题,但是经过我们的查询和调试我们还是改正了那些出现的错误和警告。具体调试过程如下:(1)统计职工工作量void count1(void) int i,j;for(i=0;ih;i+)for(j=0;ih;j+)stui.count+=stui.productj; /累加每个职工的产品修改为:void count1(void) int i,j;for(i=0;ih;i+)stui.count=0;for(j=0;stui.productj!=-1;j+) /在写void enter(void)时,写了一
23、条命令“在是否继续输入职工产品数后加了一条stui.productj=-1”stui.count+=stui.productj; /累加每个职工的产品(2)按职工号查询时 int i,n;for(i=0;im;i+) /m记录有多少个职工if(stui.no=n) /判断所输入的工号printf(%3d%5dn,stui.no,stui.count);else printf(查找的数据不存在:n);修改为:int i,j=0,n;for(i=0;im;i+) /m记录有多少个职工if(stui.no=n) /判断所输入的工号printf(%3d%5dn,stui.no,stui.count);
24、j=1;if(j=0) printf(查找的数据不存在:n);总之,在我们对程序进行了细心的调试和测试之后,我们的程序正常运行了,但是其中还是有很多不足的地方。比如我们在从磁盘读出数据的时候就有数据的遗失,但是经过我们的修改之后就变得完善了,在我们对职工信息的查询的时候也遇到不少问题,但是我们还是根据调试的不正确而加也修改正确了。六、结语通过这几天的C程序课程设计,我们小组既发现了许多不足,又学到了很多我们上课没有掌握的只是,也学到了许多以前不懂的知识。使我们对这门课程有了更深一步的理解,并且也对它产生了一定的兴趣,对我们以后的学习有了重要的作用。其中,老师对我们的帮助也是其到了极大的作用,我们有不明白或者是模糊的地方就像老师请教,以后我们还将对此进行深入了解,增加我们的知识,为我们以后的学习打好基础,在此我们小组成员对对老师给予我们的帮助表示感谢!