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