职工工作量统计系统报告Word文件下载.docx

上传人:b****3 文档编号:7749480 上传时间:2023-05-09 格式:DOCX 页数:40 大小:277.50KB
下载 相关 举报
职工工作量统计系统报告Word文件下载.docx_第1页
第1页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第2页
第2页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第3页
第3页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第4页
第4页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第5页
第5页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第6页
第6页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第7页
第7页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第8页
第8页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第9页
第9页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第10页
第10页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第11页
第11页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第12页
第12页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第13页
第13页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第14页
第14页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第15页
第15页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第16页
第16页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第17页
第17页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第18页
第18页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第19页
第19页 / 共40页
职工工作量统计系统报告Word文件下载.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

职工工作量统计系统报告Word文件下载.docx

《职工工作量统计系统报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《职工工作量统计系统报告Word文件下载.docx(40页珍藏版)》请在冰点文库上搜索。

职工工作量统计系统报告Word文件下载.docx

增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。

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

  本次职工工作量统计系统是通过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不支持中文输出功能,故采用纯英文进展设计编写。

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

先输出工号和完成的数量,最后输出查找的结果

输入(1~5)

随机生成职工号、职工完成工作量

欢迎界面

开场

先排序排名次,最后输出最终要求的输出结果

先输出工号和职工完成的数量,再删除给定的职工信息最后输出最终要求的结果

Ch=12

Ch=52

先按工作量排序,再输出排序后的工号和完成的数量,最后输出最终要求的结果

Ch=42

Ch=32

Ch=22

先输出工号和完成的产量,再插入一个信息,最后输出最终的结果

完毕

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

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

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

2.2.1随机生成职工号函数

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

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

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

将m的值存入*(p+i)

第i个和第j个工号相等

i>

i<

n

=n

输出员工工号

m==0

使用随机函数给m赋值m=rand()%100;

定义三个变量i=0,j,m

使用当前时间种子

示意图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个员工的数量信息,其图示如下:

i<

*(q+j)

用rand()函数赋值得到数量信息Pa[j].ftotal[i],累计得到Pa[j].quantity;

i++;

j++;

定义i=0,j=0,k使用srand()函数使用当前时间作种子

用rand()函数得到数据赋给*(q+i),*(q+i)=rand();

*(q+i)>

5

用rand()函数重新给*(q+i)赋值,

*〔q+i)=rand();

i>

i=0

j<

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

2.2.3排序函数

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

   使用冒泡法进展排序,先定义一个构造体arr,两个变量i和j,其中j用来计算已经完成的职工个数,i表示尚未比较个数,从j=0开场,当j<

n时,执行循环,从i=0开场,比较一次后,使i++,比较(n-j)次,当i>

(n-j)时,第一轮比较完毕,使j++,进入下一轮,……当j>

=n时,表示第n轮比较完毕,此时排序完成。

函数示意图〔3〕如下:

Pa[i].quantity<

Pa[i+1].quantity

交换第i个和第i+1个构造体中对应位置的元素信息;

i++

n-j

i=0,j=0

j++;

输出排序后的结果

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

2.2.4查找函数

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

   从序号为0的构造体数组开场访问,如果该构造体数组中元素的工号项Pa[i].number与num不等,那么使i自加1,指向下一个构造体数组,访问该数组元素,直到该数组元素的工号等于num时,输出该构造体数组元素的元素,并返回该数组元素的位置i,如果i>

n时还未找到要查找的元素,那么表示该元素不存在,输出“theemployeehasn'

tbeenfound!

!

\n〞并返回空。

其示意图如下:

从主函数输入得到工号num

输出没有找到,返回空

输出查找信息,返回查找到的位置i

i=0

Pa[i].number==num

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

2.2.5插入函数

intInsert(SqListPa[],intn,intnum)

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

得到要插入的位置,再将Pa[s]所在的构造体中的数据元素位置全部空出,即当i>

=s时,将Pa[i]中的数据全部对

输出输入错误

Pa[s].ftotal[i]=rand()%100;

累计得到总数量Pa[s].quantity

输出插入错误,返回n的原值

得到插入的工号

查找工号位置,并将返回值给s

Srand((unsigned)time(NULL))

S<

0||s==NULL

i=n-1

将第i个位置信息移到第i+1个位置

i--;

=s

输入次数total

Total<

i=0;

随机得到一个不为0且不与其它工号一样的工号赋给Pa[s].number,初始化其它数据

n=n+1;

返回n的值

完毕

应地移到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<

n时〔假设i<

=j〕,判断Pa[i].quantity和Pa[j].quantity是否相等,如果相等,那么将序号为j的名次变为与序号为i的员工名次一样,j++,并且每增多一个名次一样的员工,那么将其员工名次一样的个数信息加1,即Pa[i].count++;

否那么i的序号为j的下一个构造体元素j-1,再使i和j自加1,即i++,j++,直到i<

n时完毕。

2.2.8输出最终结果函数

voidPrint_All(SqListPa[],intn)

  功能:

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

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

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

为此,我在输出之前调用Count_order(SqListPa[],intn)函数,对未完成赋值的元素赋值;

然后,当i<

n时,从0号构造体数组元素开场,先输出员工的名次、完成产品的数量、同名次的人数,再判断序号为i的名次数据依次与其后的第j个名次数据元素相比较,如果不一样,那么直接输出Pa[i].number;

否那么,输出Pa[i].count个名次为Pa[i].order的工号;

再使i=i+Pa[i].count-1;

j=i+1;

直到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();

pleasechoose(1~5):

choose);

switch(choose)

{

case1:

Paixu_quantity(Pa,n,q);

/*降序排序后输出工号和其完成产品的总数量*/

Print_NumQU(Pa,n);

Print_All(Pa,n);

break;

case2:

Print_NumQU(Pa,n);

Pleaseinputthenumberlocatedtobesearched:

"

num);

Search_Number(Pa,n,num);

/*根据给定的工号查找该职工信息*/

case3:

n=Insert(Pa,n,num);

/*在给定的职工工号位置插入一个职工信息*/

Paixu_quantity(Pa,n,q);

case4:

Pleaseinputthenumberlocatedtobedeleted:

n=Delete(Pa,n,q,num);

/*将给定的职工工号将其信息删除*/

case5:

Print_All(Pa,n);

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条件语句后,多加了一个“;

〞,这个发现真是让我又气又恨。

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

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

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

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

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

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

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

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

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

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

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

这同时也暴露出了自己知识的溃乏、经历的缺乏。

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

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

   本次课程设计即将完毕了,

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2