C语言课程设计职工工作量统计系统.docx
《C语言课程设计职工工作量统计系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计职工工作量统计系统.docx(31页珍藏版)》请在冰豆网上搜索。
![C语言课程设计职工工作量统计系统.docx](https://file1.bdocx.com/fileroot1/2023-2/25/32266a77-04c6-416e-9a86-08aceaf29865/32266a77-04c6-416e-9a86-08aceaf298651.gif)
C语言课程设计职工工作量统计系统
湖北师范学院计科院
C语言课程设计报告
题目:
职工工作量统计系统
完成人:
赵天宇、梁可
学号:
20
20
批阅人:
夏端峰
2014年6月15日
一、课程设计的目的与意义
作为一门课程,通过课程设计的实践环节的教学,可以加深对课堂所学基础知识的掌握与理解,提高所学内容的综合运用能力;同时也可以通过查询相关资料,培养学生自学能力、接受新知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。
“理论与实践”相结合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。
作为学生,我们可以通过查阅相关资料,编写相关程序来增加自己的编程经验,强化自己的自主学习能力,强化自身的编程实践能力,掌握一定的软件开发流程。
二、总体设计思路
设计框图如下:
三、详细设计
1、模块功能介绍
(1)、菜单设计
菜单界面大致设计为:
职工工作量统计系统
1、职工基本信息录入;
2、工作量累加;
3、按照量化得分排序;
4、删除某职工信息;
5、浏览所有员工信息表;
6、查询莫员工信息;
7、修改某员工信息;
8、结束程序,将数据写入文件。
(2)、输入职工基本信息
设计框图如下:
是
否
(3)、工作量输入并累加
设计框图如下:
(4)、职工按照量化得分排序
设计框图如下:
(5)、查询、修改或删除某工号人员信息
具体的设计框图如下:
(6)、信息浏览功能
设计框图如下:
(7)、信息查询功能详细
设计框图如下:
(8)、信息修改功能详细
设计框图如下:
(9)、信息删除功能
设计框图如下:
四、各功能实现后的展示
1、菜单界面:
2、职工信息输入界面
3、职工信息浏览界面
4、按量化得分排序后界面
5、查询职工信息功能界面
6、修改职工信息界面
7、删除职工信息功能界面
可见相比较于刚才,删去了4号职工张亮。
8、工作量累加界面
可以看到2号职工赵天宇的工作量直接累加上了
五、附录一
1、程序清单
2、#include<>
3、#include<>
4、#include<>
5、#defineFILENAME"d:
\\"
6、#defineN100
7、structworker
8、{
9、intempnum;/*工号*/
10、charname[20];/*姓名*/
11、charsex[5];/*性别*/
12、charbirthday[30];/*生日*/
13、charDep[20];/*系别*/
14、intage;/*年龄*/
15、doubleTeachworkload;/*教育工作量*/
16、doubleScientficworkload;/*科研工作量*/
17、doubleQscore;/*量化得分*/
18、intgrade;/*该员工的排名名次*/
19、charPosition[30];/*职称*/
20、};
21、/*******************************************************
22、定义
23、*******************************************************/
24、voidxinxi()
25、{
26、printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
27、printf("+职工工作量统计系统+\n");
28、printf("++\n");
29、printf("+1.职工基本信息输入+\n");
30、printf("++\n");
31、printf("+2.工作量累加+\n");
32、printf("++\n");
33、printf("+3.按照量化得分排序+\n");
34、printf("++\n");
35、printf("+4.删除某职工信息+\n");
36、printf("++\n");
37、printf("+5.浏览所有员工信息表+\n");
38、printf("++\n");
39、printf("+6.查询某员工信息+\n");
40、printf("++\n");
41、printf("+7.修改某员工信息+\n");
42、printf("++\n");
43、printf("+8.结束程序,将数据写入文件+\n");
44、printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
45、}
46、/*******************************************************
47、显示菜单
48、*******************************************************/
49、voidQscore1(structworkerw[],intlength)
50、{
51、inti=0,sum1=0,sum2=0;
52、for(i=0;i53、{
54、sum1+=w[i].Teachworkload;
55、sum2+=w[i].Scientficworkload;
56、}
57、score=(w[j].Scientficworkload/sum2)*(1/2)+(w[j].Teachworkload/sum1)*(1/2);
58、for(i=0;i59、{
60、w[i].Qscore=w[i].Scientficworkload/sum2*+w[i].Teachworkload/sum1*;
61、}
62、}
63、/******************************************************
64、计算量化得分
65、*******************************************************/
66、intreadFromFile(structworkerw[])
67、{
68、FILE*fp=NULL;
69、inti=0;/*i用来循环判断人数*/
70、
71、fp=fopen(FILENAME,"rb");/*打开文件,文件指针指向内部数据*/
72、
73、if(fp!
=NULL)
74、{
75、
76、while(!
feof(fp))/*从文件中读入工作人员*/
77、{
78、
79、if(i>=N)/*如果溢出,则跳出文件*/
80、break;
81、if(fread(w+i,sizeof(worker),1,fp)==1)
82、i++;
83、}
84、
85、fclose(fp);/*关闭文件*/
86、}
87、returni;
88、}
89、/*******************************************************
90、信息显示到屏幕
91、*******************************************************/
92、intf(structworkerw[],intlength)
93、{
94、inti=length,j=0,flag=1;/*i用来表示已经录入过信息的人数*/
95、while(i96、{
97、printf("第%d个职工\n",i+1);/*显示下一个需要输入信息的员工是第几个员工*/
98、printf("\n");
99、printf("请你输入工号(以职工号为0结束输入):
\n)");/*输入职工号信息*/
100、scanf("%d",&w[i].empnum);
101、if(w[i].empnum==0)break;
102、printf("\n");
103、printf("\n");
104、for(j=0;j105、{
106、if(w[j].empnum==w[i].empnum)
107、{
108、flag=0;
109、printf("该职工号人员已经存在,请重新输入");
110、}
111、}
112、if(flag==0)break;/*如果职工已经存在那么跳出程序*/
113、printf("请你输入该员工的姓名:
\n");/*开始输入该员工的各类基本信息*/
114、scanf("%s",&w[i].name);
115、printf("请你输入该员工的性别:
\n");
116、scanf("%s",&w[i].sex);
117、printf("请输入该员工的年龄:
\n");
118、scanf("%d",&w[i].age);
119、printf("请输入该员工的出生年月日(格式1995/03/23):
\n");
120、scanf("%s",&w[i].birthday);
121、printf("请输入该员工的系别:
\n");
122、scanf("%s",&w[i].Dep);
123、printf("请你输入该员工的教育工作量(单位:
小时):
\n");
124、scanf("%lf",&w[i].Teachworkload);
125、printf("\n");
126、printf("请你输入该员工的科研工作量(单位:
小时):
\n");
127、scanf("%lf",&w[i].Scientficworkload);
128、score);
129、score);
130、printf("请你输入该员工的职位:
\n");
131、scanf("%s",&w[i].Position);
132、printf("\n");
133、i++;
134、}
135、Qscore1(w,length);
136、returni;
137、}
138、/*******************************************************
139、功能:
输入职工基本信息
140、*******************************************************/
141、voidinput(structworkerw[],intlength)
142、{
143、inti=1,empnum;/*i用来寻找需要累加工作量的员工*/
144、doubleScientficworkload,Teachworkload;
145、printf("请输入工号:
\n");/*用来查找某位工人*/
146、scanf("%d",&empnum);
147、if(empnum==0)
148、{
149、printf("输入错误请重新输入");
150、getchar();
151、scanf("%d",&empnum);
152、}
153、else
154、{
155、printf("请输入新完成教育工作量(单位:
小时,无增加请填0):
\n");/*输入各类新增工作量*/
156、getchar();
157、scanf("%lf",&Teachworkload);
158、printf("请输入新完成的科研工作量(单位:
小时,无增加请填0):
\n");
159、getchar();
160、scanf("%lf",&Scientficworkload);
161、mpnum==empnum)/*找到该员工存在,则累加新增工作量*/
162、{
163、w[i].Scientficworkload+=Scientficworkload;
164、w[i].Teachworkload+=Teachworkload;
165、break;
166、}
167、}
168、if(i>=length)/*如果员工不存在,提示重新输入工号*/
169、{
170、printf("工号不存在:
\n");
171、printf("请输入工号:
\n");
172、scanf("%d",&empnum);
173、}
174、Qscore1(w,length);
175、}
176、}
177、/*******************************************************
178、功能:
工作量输入并累加
179、*******************************************************/
180、voidsortQscore(structworkerw[],intlength)/*选择法对量化得分进行排序*/
181、{
182、inti=0,j=0,k=0;
183、structworkers;/*结构体temp转换变量*/
184、for(i=0;i185、{
186、k=i;
187、for(j=i+1;j188、{
189、if(w[j].Qscore>w[k].Qscore)k=j;
190、}
191、/*交换w[i]andw[k]*/
192、s=w[k];
193、w[k]=w[i];
194、w[i]=s;
195、}
196、if(length>0)w[0].grade=1;
197、for(i=1;i198、{
199、if(w[i].Qscore==w[i-1].Qscore)w[i].grade=w[i-1].grade;
200、elsew[i].grade=w[i-1].grade+1;
201、}
202、printf("名次工号姓名年龄性别生日系别职称教育工作量科研工作量量化得分\n");/*输出表头*/
203、for(i=0;i204、{
205、Qscore1(w,length);
206、printf("%d\t",w[i].grade);
207、printf("%d\t",w[i].empnum);
208、printf("%s\t",w[i].name);
209、printf("%d\t",w[i].age);
210、printf("%s\t",w[i].sex);
211、printf("%s\t",w[i].birthday);
212、printf("%s\t",w[i].Dep);
213、printf("%s\t",w[i].Position);
214、printf("%\t",w[i].Teachworkload);
215、printf("%\t",w[i].Scientficworkload);
216、printf("%\t",w[i].Qscore);
217、printf("\n");
218、printf("\n");
219、}
220、}
221、/*******************************************************
222、按量化得分从大到小排序并标上名次并且输出排序结果
223、*******************************************************/
224、intdelet(structworkerw[],intlength)
225、{
226、inti=0,j=0;
227、charchoice;/*给用户来判断是否删除*/
228、intempnum;/*所需要删除职工信息的工号*/
229、printf("请输入需要删除的员工职工号:
\n");
230、scanf("%d",&empnum);/*输入所需要删除的职工号*/
231、for(i=0;i232、{
233、if(w[i].empnum==empnum)
234、{
235、printf("想删除的职工号为:
");
236、printf("%d\n",w[i].empnum);
237、break;
238、}
239、}
240、if(i241、{
242、printf("你却定要删除这个职工信息吗(Y/N)\n");/*输出让用户确实是否删除*/
243、getchar();
244、scanf("%c",&choice);
245、if(choice=='Y'||choice=='y')
246、{
247、for(j=i;j248、{
249、w[j]=w[j+1];
250、}
251、length--;/*删除之后总人数减一*/
252、printf("删除成功");
253、}
254、}
255、elseprintf("\n指定员工不存在\n");
256、returnlength;
257、}
258、/********************************************************
259、按职工号删除职工信息
260、********************************************************/
261、voidwriteToFile(structworkerw[],intlength)/*数据写入文件的功能函数*/
262、{
263、FILE*fp=NULL;/*设置文件指针*/
264、inti=0;
265、fp=fopen(FILENAME,"wb");/*打开文件*/
266、if(fp==NULL)/*打开失败*/
267、{
268、printf("打开文件出错!
\n");
269、exit(0);
270、}
271、for(i=0;i272、fwrite(w+i,sizeof(worker),1,fp);/*写入每个结构体数据*/
273、fclose(fp);/*关闭文件*/
274、
275、}
276、/********************************************************
277、结构体数组中的职工信息输出到文件
278、********************************************************/
279、voidviewworker(structworkerw[],intlength)
280、{
281、inti;
282、Qscore1(w,length);
283、mpnum);
284、printf("%s\t",w[i].name);
285、printf("%d\t",w[i].age);
286、printf("%s\t",w[i].sex);
287、printf("%s\t",w[i].birthday);
288、printf("%s\t",w[i].Dep);
289、printf("%s\t",w[i].Position);
290、printf("%\t",w[i].Teachworkload);
291、printf("%\t",w[i].Scientficworkload);
292、printf("%\t",w[i].Qscore);
293、printf("\n");
294、printf("\n");
295、}
296、}
297、voidSeek(structworkerw[],intlength)
298、{
299、inti;
300、charDep[20];
301、printf("请输入你想要查询信息职工的系别或者职称:
\n");
302、scanf("%s",&Dep);
303、/*if(empnum==0)
304、{
305、printf("输入错误,请重新输入:
\n");
306、scanf("%d",&empnum);
307、}*/
308、for(i=0;i309、{
310、if(strcmp(w[i].Dep,Dep)==0)
311、{
312、printf("该系别员工的信息如下:
\n");
313、for(i=0;i314、{
315、if(strcmp(w[i].Dep,Dep)==0)/