职工工作量统计系统报告.docx

上传人:b****1 文档编号:12482441 上传时间:2023-04-19 格式:DOCX 页数:39 大小:408.82KB
下载 相关 举报
职工工作量统计系统报告.docx_第1页
第1页 / 共39页
职工工作量统计系统报告.docx_第2页
第2页 / 共39页
职工工作量统计系统报告.docx_第3页
第3页 / 共39页
职工工作量统计系统报告.docx_第4页
第4页 / 共39页
职工工作量统计系统报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

职工工作量统计系统报告.docx

《职工工作量统计系统报告.docx》由会员分享,可在线阅读,更多相关《职工工作量统计系统报告.docx(39页珍藏版)》请在冰豆网上搜索。

职工工作量统计系统报告.docx

职工工作量统计系统报告

课程设计成果

 

设计题目:

____职工工作量统计____

学院:

_____计算机工程________

班级:

11软件(本)三班

******

学号:

*************

设计地点:

______A5-101_____

完成日期:

2013年01月12日

 

指导老师评语:

__________________________________________________________________________________________________________________________________________

成绩(五级记分制):

教师签名:

摘要

  数据结构主要是一门研究非数值计算的程序设计问题中的计算机操作对象以及它们之间的关系和操作等的学科。

数据结构在计算机科学与技术中是一门综合性的专业基础课,其研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着更密切的关系。

不论是编译程序过程还是操作系统都涉及到数据元素在存储器中的分配问题。

在计算机科学与技术中,数据结构不仅是一般程序性的基础,而且也是其他系统程序和大型程序的重要基础。

  在社会生产日益群体合作化,生产模式日益企业化的今天,企业的管理工作越来越受到企业经营者的重视,而在员工的流动、管理和工作报酬的分配中,职工的报酬是根据员工的工作量进行分配的。

因此,职工的工作量,就成了企业经营者关注的信息。

  然而,对于现在的企业来说,人员数量多,工作量又复杂,通过普通的人工方式已经难以满足现代化企业的核算要求。

  怎样进行大量员工的工作量的管理工作呢?

设计一个职工工作量统计系统,就能够满足大多数现代化企业的需求了。

课程设计的目的和意义是:

通过课程设计的实践环节的教学,可以加深对课堂所学基础知识的掌握与理解,提高所学内容的综合运用能力;同时也可以通过查询相关资料,培养学生自学能力、接受新知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。

“理论与实践”相结合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。

  本次职工工作量统计系统是通过C语言来设计的,也是由本人独立完成的。

   

关键字:

数据结构、课程设计、职工工作量

 

第一章项目概述

1.1问题描述

问题描述及分析:

采用随机函数产生职工的工号和他所完成产品个数的数据信息,对同一职工多次完成的产品个数进行累计,最后按以下格式输出;职工完成产品数量的名次、该名次每位职工完成的产品数量、职工人数和职工号要求:

1)输出统计结果,如下所示:

Orderquantitycountnumber

13753102021

4256235

620019

2)每一个函数要有必要的注释,在课程设计论文中有流程图。

1.2问题分析

问题中包含有职工工号、职工多次完成的产品数量、职工完成的产品总数量、按完成产品数量个数的名次、职工相同名次的人数。

因此,设置结构体为:

  typedefstruct

  {

  intorder;

  intcount;

  intftotal[5];

  intquantity;

  intnumber;

  }SqList;

  SqListPa[MAX]={0};

职工的信息应包含排序、查找、插入、删除等功能;每个职工都包含以上结构体中的数据,因此,该问题的设计思想是:

采用结构体数组来存储职工信息,然后对各职工的信息进行排序、查找、插入、删除等操作。

第二章项目设计

   系统在win-TC中运行,由于win-TC不支持中文输出功能,故采用纯英文进行设计编写。

这样能作出美观的界面,并且制作出详细的菜单。

2.1系统程序的功能示意图如下:

示意图1,系统函数功能示意图

2.2功能函数设计思想及说明

2.2.1随机生成职工号函数

   voidSandNumber(SqListPa[],intn,int*p)

   先定义了全局数组NUM[MAX]={0}和指针*p,并且让指针指向该数组,用来保存职工的工号信息,再使用系统函数srand()、rand()生成n个员工的工号,工号为不为零的两位数,且这n个员工的工号各不相同。

在生成完后,再依次输出这n个员工的工号,其图示如下:

示意图2,随机生成职工号函数示意图

2.2.2随机生成职工完成的产品数量

   voidSandQuantity(SqListPa[],intn,int*q)

   先定义了全局数组QU[MAX]={0}和指针*q,并且让指针指向该数组,用来保存职工完成产品的次数信息,再使用系统函数srand()、rand()生成n个员工的数量信息Pa[i].quantity,其中该信息为各个员工(最多有5个小于100)的信息Pa[i].ftotal[j]之和,在生成完后,再依次输出这n个员工的数量信息,其图示如下:

示意图3,随机生成职工数据信息函数示意图

 

2.2.3排序函数

intPaixu_quantity(SqListPa[],intn,int*q)

   使用冒泡法进行排序,先定义一个结构体arr,两个变量i和j,其中j用来计算已经完成的职工个数,i表示尚未比较个数,从j=0开始,当j(n-j)时,第一轮比较结束,使j++,进入下一轮,……当j>=n时,表示第n轮比较结束,此时排序完成。

函数示意图(3)如下:

   

示意图4,排序功能函数示意图

 

2.2.4查找函数

   intSearch_Number(SqListPa[],intn,intnum),根据给定的职工号查找该职工的信息。

   从序号为0的结构体数组开始访问,如果该结构体数组中元素的工号项Pa[i].number与num不等,则使i自加1,指向下一个结构体数组,访问该数组元素,直到该数组元素的工号等于num时,输出该结构体数组元素的元素,并返回该数组元素的位置i,如果i>n时还未找到要查找的元素,则表示该元素不存在,输出“theemployeehasn'tbeenfound\n”并返回空。

其示意图如下:

示意图5,查找函数功能示意图

2.2.5插入函数

intInsert(SqListPa[],intn,intnum)

要插入一个员工的信息,就得先得到员工的位置,先调用查找函数,将给定员工工号所在的位置当作查找函数的返回值返回给s,s=Search_Number(Pa,n,num);得到要插入的位

置,再将Pa[s]所在的结构体中的数据元素位置全部空出,即当i>=s时,将Pa[i]中的数据全部对应地移到Pa[i+1]处,将数组的个数n加1,即n=n+1;再将数据插入到Pa[s]的位置。

示意图如下:

示意图6,插入函数示意图

2.2.6 删除函数

intDelete(SqListPa[],intn,int*q,intnum

   要删除一个员工信息,得先知道员工的位置,先调用查找函数根据所给的员工的工号查找到该员工所在的位置,并将其返回值赋给s,即s=Search_Number(Pa,n,num);得到要删除的位置。

如果s=NULL或i>n时,则输出”Deleteiswrong\n”;否则,如果当Pa[i]==Pa[s]时,先将Pa[i]位置的数据信息保存在结构体str中,再将Pa[i+1]位置的数据信息前移到Pa[i]位置中,循环直到i>n时,将结构体的个数减1,最后输出被删除的信息,程序执行结束。

2.2.7按职工完成的产品数量排名次函数

voidCount_order(SqListPa[],intn)功能:

给各职工排名次和赋count数据项的值。

要给职工按完成的产品数量排名次,则要求先对各职工的信息进行排完成产品数量排序,即在排名次函数中又调用了按职工完成产品数量排序函数进行排序。

排序完成后,先对这n个员工按序号排名次,即Pa[0],Pa[i],……Pa[n-1]的名次依次为1,2,3……,n;然后当j

2.2.8输出最终结果函数

voidPrint_All(SqListPa[],intn)

  功能:

输出所有员工的名次、完成数量、同名次人数以及各自的工号。

由于每个员工信息都包含5个数据元素,而其中有三个(number、quantity\ftotal)都已经由随机函数自动生成。

因此,在输出之前,必须要给各个员工的其它两个数据元素(order、count)赋值。

为此,我在输出之前调用Count_order(SqListPa[],intn)函数,对未完成赋值的元素赋值;然后,当i=n时,输出完毕,程序结束。

(注:

由于voidPrint_All(SqListPa[],intn)函数中调用了Count_order(SqListPa[],intn)函数,而Count_order(SqListPa[],intn)函数中又调用了intPaixu_quantity(SqListPa[],intn,int*q)排序函数,故此程序中实际上包含有三个函数的嵌套调用。

2.2.9main()函数

先输出输入职工人数信息,再调用随机函数随机生成职工号和职工数量信息,再初始化未生成的数据信息,接着输出欢迎界面及功能菜单,并提示选择功能,功能分为五个,分别是排序、查找、插入、删除和最终结果,使用Switch(choose)分支,由于问题要求输出最终结果,因此,在每个分支中,都有调用最终结果输出函数,输出最终所有职工的名次、职工完成的数量、相同名次的人数和他们对应的工号。

其中:

1号菜单的功能是:

先输出排序前的工号和完成的产品数量,再进行排序,再输出排序后的职工工号和完成的产品数量信息,最后输出所有的职工的最终要求的结果,由于该项菜单中先调用并执行排序函数功能,再调用排名次函数,最后执行最终结果的输出,而排名次函数中又调用了排序函数,排序函数中有排序后的信息输出,故1号功能会产生两次排序后的信息输出;

2号菜单的功能是:

先输出职工的全部工号和全部完成的产品数量信息,再根据输入的工号信息查找该职工信息,最后输出要求的最终结果;

3号菜单的功能是:

先输出职工的全部工号和全部完成的产品数量信息,再根据输出的职工工号,在该位置中插入一个职工信息,然后再进行排序,最后输出要求的最终结果;

4号菜单的功能是:

先输出职工的各部工号和全部完成的产品数量信息,再根据输出的职工工号,将该职工的信息删除,最后输出要求的最终结果;

5号菜单的功能是:

输出问题要求的职工信息;

voidmain()

{

inti,j,n,choose;

intnum;

printf("pleaseinputthequantityoftheemployee:

\n");

scanf("%d",&n);

ChushiHua(Pa,n,q);

SandNumber(Pa,n,p);/*随机赋职工工号*/

SandQuantity(Pa,n,q);/*随机赋职工完成产品信息*/

WelcomeScreen();

printf("pleasechoose(1~5):

\n");

scanf("%d",&choose);

switch(choose)

{

case1:

Paixu_quantity(Pa,n,q);/*降序排序后输出工号和其完成产品的总数量*/

Print_NumQU(Pa,n);

Print_All(Pa,n);

break;

case2:

Print_NumQU(Pa,n);

printf("Pleaseinputthenumberlocatedtobesearched:

");

scanf("%d",&num);

Search_Number(Pa,n,num);

Print_All(Pa,n);/*根据给定的工号查找该职工信息*/

break;

case3:

Print_NumQU(Pa,n);

printf("Pleaseinputthenumberlocatedtobesearched:

");

scanf("%d",&num);

n=Insert(Pa,n,num);/*在给定的职工工号位置插入一个职工信息*/

Paixu_quantity(Pa,n,q);

Print_All(Pa,n);

break;

case4:

Print_NumQU(Pa,n);

printf("Pleaseinputthenumberlocatedtobedeleted:

");

scanf("%d",&num);

n=Delete(Pa,n,q,num);/*将给定的职工工号将其信息删除*/

Print_All(Pa,n);

break;

case5:

Print_All(Pa,n);

break;

default:

break;

}

getch();

}

第三章程序调试

3.1调试程序遇到的问题及解决

通过清屏函数放在不同位置使得到不同的要求输出的内容,而清除不需要的内容,利于比较功能函数运行前后的变化,再使用输出语句输出需要知道的信息进行对比,然后进行分析。

1)使用冒泡法排序测试排序函数时,排序命令没有执行,功能没有实现(如图3)。

原因是:

在使用冒泡法排序中,在if条件后误加了一个”;’,导致排序时,移动命令没能执行。

过去一直以为功能没有实现,是由于形参和实参之间的数据传递的问题,但我将参数全部改为指针之后,发现仍然没有响应。

长时间的查找之后,只能逐条指令进行分析,最后欣慰地发现,原来在if语句之后,不应该有的”;”,多了起来,才恍然大悟地明白并解决了问题(如图4)。

2)最终结果输出函数输出时,名次相同的重复输出(如图10)。

原因是:

在输出时,只考虑使相同名次的人数自加Pa[i].count++,却忘记了同时还要使表示输出结构体位置的i也要同时变化为i=i+Pa[i].count-1;在对比不同数据输出情况之后,找到了错误,并改正之后,重新运行后获得了成功(如图7)。

3)测试插入函数功能时,发现执行插入函数功能时,并没有插入成功,员工人数没有增加,但也没有提示插入错误(如图10)。

原因是:

我在插入函数中虽然使n=n+1;并返回了n的值,但没有将职工人数的返回值重新赋给n,使n的值并没有真正地改变,所以在输出时,少了一个员工的信息。

在比较多次的运行输出的情况与输出自动生成的数据之后,发现插入的位置的数据有新插入的数据生成,但最后一个数据丢失,最后找到了错误的原因。

改正并运行之后,插入功能运行获得了成功(如图11)。

4)测试删除函数时,当未查找到员工号时,输出结果(如图12)。

经查找后,原因是在输出时员工的人数通过删除操作带回的返回值重新赋值,而当未删除的位置不存在时,删除函数中没有返回值,导致输出是系统随机的值。

当删除位置不存在时,修改为带回n的原值,运行成功(如图13)。

 

3.2程序调试结果

3.2.1随机生成职工号和随机生成职工完成产品数量信息结果(如图1)

图1,输出随机生成的职工号和职工完成产品数量

3.2.2欢迎界面(如图2)

图2,欢迎界面和菜单

3.3.3功能1排序函数(出现错误的如图3,正确的如图4)

图3,排序功能未实现

图4,排序功能实现

3.3.4排名次函数(如图5)

图5,排名次函数

3.3.5输出职工工号和完成产品数量函数(如图5)

图5中有输出

3.3.6功能1排序函数(如图6)

图6,排序函数

3.3.7功能2查找函数(如图7和图8)

图7,未找到时的查找界面图

图8,查找到所给职工的界面图

3.3.8功能3插入函数(如图9、图10和图11)

图9,插入位置错的界面

图10,插入出错的界面

图11插入正确的界面

3.3.9功能4删除函数(如图12)

图12,删除位置不存在时细节出错,删除后输出结果

图13,修改后,删除结果

图14,当给定职工号存在时,删除结果

3.3.10功能5输出函数(如图15)

图15,最终结果输出函数

第四章设计总结与心得

   两个星期的课程设计实践时间很快过去了,我的课程设计也终于结束了。

回忆起这两个星期的生活,还真是百感交集却难言。

   准确地说我是在老师宣布可以准备做课程设计时,就已经做准备了。

不过,当时我以为是让自己挑选其中的一个去做。

而我是去分析了第一个。

到真正开始时,我才不得不重新来分析新课题——职工工作量统计系统。

   刚开始时,由于连随机函数是什么?

我都还没听说过,刚开始还以为是随意写一个生成职工工号和完成产品数量的信息。

知道随机函数是一个系统函数是在一次无意中听到同学提起,我才到网上查找,才明白的。

在知道随机函数是一个系统函数后,由于对什么是随机函数一无所知,仅仅查资料就花了我近两天时间,不过还是似懂非懂,只能通过模仿来调试,渐渐地才会使用它。

   在编写函数的过程中,由于时间比较紧,我没有提前设计算法,而是直接上机编写、调试。

这暴露了许多的问题:

其一,是积累的知识太少,好多知识在运用的时候却印象不深,只能停下来去查资料;其二,是对所学知识掌握不牢,编写程序的过程中,由于没有把握,不敢冒然写下去,也只能去查资料确认;其三,实践得太少,很容易发现的错误,却在实践中,花费了大量的时间去查找,其中这点,让我印象尤其深刻,在编写排序函数后进行调试时,发现排序功能没有达到目的,而在我惯性思维中,它可能是因为参数传递出错,因此,盲目地将传递的数组参数改为指针,花费了时间不说,竟然还是没有达到目的。

从七号晚上开始查找,直到九号晚上十点多才在无意中发现if条件语句后,多加了一个“;”,这个发现真是让我又气又恨。

要是在平时,可能这对于任意一个学习软件的学生都知道它有错,而我却忽略了。

这个教训是深刻的,它使我明白,认真和仔细对于一个人,去做一件事来说,是多么地重要而自己是多么地粗心。

其次,对于知识的理解,我发现自己始终停留在一知半解甚至是表面上懂,却一无所知的境地。

在函数编写完成后,表面上看似没有问题了,不过一调试才发现,问题好多就都出来了。

同时,我也深刻地体会到:

科学是严密的,不容有半点地大意,一个人对工作的态度往往决定了其工作的成败。

   准确地说,这是我的第一次课程设计实践。

从这次课程设计中,我真正地体验到了课程设计的过程,也真正地体验到了程序设计的乐趣。

在近半个月的程序设计和调试过程中,获得的知识是很多的。

   通过此次课程设计,使我巩固了所学的有关课程设计的知识,学会真正地去分析问题,思考问题,并且学会怎样去思考解决问题。

在设计的过程中,我曾遇到过许多的问题,但经过反复地思考之后,终于找出了原因并使问题得以解决。

这同时也暴露出了自己知识的溃乏、经验的不足。

实践出真知,这一次,真正地有了深刻的体会:

不断实践,不断发现自己的不足,不断地改正,不断地领悟,不断地总结,是获取真知的必然选择。

   本次课程设计即将结束了,由于我们小组事先的设计分工没有做好,我只能独立地完成本次设计任务,这也使我学会了独立思考。

错过了交流思想的机会,这是个遗憾。

不过同时,我也明白了,做课程设计之前的准备工作是多么地重要,而我此次正是像经历了一场“无头仗”。

   总之,此次课程设计实践让我收获很多。

完成此次课程设计后,让我产生了很强的成就感,充满了快乐感,同时也让我对程序设计产生了喜爱。

第五章参考文献

[1]李素若.《数据结构》.北京:

化学工业出版社,2009.

[2]朱蓉,《数据结构实验指导书》

[3]严蔚敏吴伟民,.数据结构(C语言版),1999,清华大学出版社;

附录

程序代码:

#include

#include

#include/*使用当前时钟做种子*/

#defineMAX100

typedefstruct

{

intorder;

intcount;

intftotal[5];

intquantity;

intnumber;

}SqList,*Sq;

SqListPa[MAX]={0};

intNUM[MAX]={0},QU[MAX]={0};/*NUM[]数组用来保存随机生成的职工号,QU[]用来保存职工完成总数量的次数*/

int*p=NUM,*q=QU;

 

voidSandNumber(SqListPa[],intn,int*p)/*随机产生职工的工号并输出其工号信息*/

{

inti,j,m;

srand((unsigned)time(NULL));/*设置随机数种子*/

for(i=0;i

{

m=rand()%100;/*产生工号互不相同的不为0的两位数工号*/

while(m==0)

m=rand()%100;

*(p+i)=m;

if(i>0)/*如果产生的工号相同,则重新生成新的随机数直到不同为止作为职工号*/

{

for(j=0;j

if(*(p+i)==*(p+j))

{

m=rand()%100;

while(m==0)

m=rand()%100;

*(p+i)=m;

}

}

}

for(i=0;i

{

Pa[i].number=*(p+i);

printf("Pa[%d].number=%2d\n",i,Pa[i].number);

}

printf("\n");

}

voidSandQuantity(SqListPa[],intn,int*q)/*随机生成职工各次完成的工作量,并累计各职工的总完成产品数量*/

{

inti,j,k;

srand((unsigned)time(NULL));/*设置随机数种子*/

for(i=0;i

{

*(q+i)=rand()%10

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1