当前位置:文档之家› 职工工作量统计系统报告

职工工作量统计系统报告

课程设计成果设计题目:____职工工作量统计____ 学 院:_____计算机工程________ 班 级: 11软件(本)三班 姓 名: 王 志 成 学 号: 06设计地点:______A5-101 _____完成日期: 2013年 01 月 12 日指导老师评语:__________________________________________________________________________________________________________________________________________成绩(五级记分制):JINGCHU UNIVERSITY OF TECHNOLOGY教师签名:目录摘要 (1)第一章项目概述 (2)1.1问题描述 (2)1.2问题分析 (2)第二章项目设计 (2)2.1 系统程序的功能示意图如下: (3)2.2 功能函数设计思想及说明 (4)2.2.1 随机生成职工号函数 (4)2.2.2 随机生成职工完成的产品数量 (5)2.2.3 排序函数 (6)2.2.4 查找函数 (7)2.2.5 插入函数 (7)2.2.6 删除函数 (9)2.2.7 按职工完成的产品数量排名次函数 (9)2.2.8 输出最终结果函数 (9)2.2.9 main()函数 (9)第三章程序调试 (11)3.1 调试程序遇到的问题及解决 (11)3.2 程序调试结果 (12)3.2.1 随机生成职工号和随机生成职工完成产品数量信息结果(如图1) (12)3.2.2 欢迎界面(如图2) (12)3.3.3 功能1排序函数(出现错误的如图3,正确的如图4) (13)3.3.4 排名次函数(如图5) (14)3.3.5 输出职工工号和完成产品数量函数(如图5) (14)3.3.6 功能1排序函数(如图6) (14)3.3.7 功能2查找函数(如图7和图8) (15)3.3.8 功能3插入函数(如图9、图10和图11) (15)3.3.9 功能4删除函数(如图12) (16)3.3.10 功能5输出函数(如图15) (18)第四章设计总结与心得 (18)第五章参考文献 (19)附录 (20)摘要数据结构主要是一门研究非数值计算的程序设计问题中的计算机操作对象以及它们之间的关系和操作等的学科。

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

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

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

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

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

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

怎样进行大量员工的工作量的管理工作呢?设计一个职工工作量统计系统,就能够满足大多数现代化企业的需求了。

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

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

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

关键字:数据结构、课程设计、职工工作量第一章项目概述1.1问题描述问题描述及分析: 采用随机函数产生职工的工号和他所完成产品个数的数据信息,对同一职工多次完成的产品个数进行累计,最后按以下格式输出;职工完成产品数量的名次、该名次每位职工完成的产品数量、职工人数和职工号要求:1)输出统计结果,如下所示:Order quantity count number1 375 3 10 20 214 256 2 3 56 200 1 92)每一个函数要有必要的注释,在课程设计论文中有流程图。

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

因此,设置结构体为:typedef struct{int order;int count;int ftotal[5];int quantity;int number;}SqList;SqList Pa[MAX]={0};职工的信息应包含排序、查找、插入、删除等功能;每个职工都包含以上结构体中的数据,因此,该问题的设计思想是:采用结构体数组来存储职工信息,然后对各职工的信息进行排序、查找、插入、删除等操作。

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

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

2.1 系统程序的功能示意图如下:2.2 功能函数设计思想及说明2.2.1 随机生成职工号函数void SandNumber(SqList Pa[],int n,int *p)先定义了全局数组NUM[MAX]={0}和指针*p,并且让指针指向该数组,用来保存职工的工号信息,再使用系统函数srand()、rand()生成n个员工的工号,工号为不为零的两位数,且这n个员工的工号各不相同。

在生成完后,再依次输出这n个员工的工号,其图示如下:示意图2,随机生成职工号函数示意图2.2.2 随机生成职工完成的产品数量void SandQuantity(SqList Pa[],int n,int *q)先定义了全局数组QU[MAX]={0}和指针*q,并且让指针指向该数组,用来保存职工完成产品的次数信息,再使用系统函数srand()、rand()生成n个员工的数量信息Pa[i].quantity,其中该信息为各个员工(最多有5个小于100)的信息Pa[i].ftotal[j]之和,在生成完后,再依次输出这n个员工的数量信息,其图示如下:示意图3,随机生成职工数据信息函数示意图2.2.3 排序函数int Paixu_quantity(SqList Pa[],int n,int *q)使用冒泡法进行排序,先定义一个结构体arr,两个变量i和j,其中j用来计算已经完成的职工个数,i表示尚未比较个数,从j=0开始,当j<n时,执行循环,从i=0开始,比较一次后,使i++,比较(n-j)次,当i>(n-j)时,第一轮比较结束,使j++,进入下一轮,……当j>=n时,表示第n轮比较结束,此时排序完成。

函数示意图(3)如下:示意图4,排序功能函数示意图2.2.4 查找函数int Search_Number(SqList Pa[],int n,int num),根据给定的职工号查找该职工的信息。

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

其示意图如下:2.2.5 插入函数int Insert(SqList Pa[],int n,int num)要插入一个员工的信息,就得先得到员工的位置,先调用查找函数,将给定员工工号示意图6,插入函数示意图2.2.6 删除函数int Delete(SqList Pa[],int n,int *q,int num要删除一个员工信息,得先知道员工的位置,先调用查找函数根据所给的员工的工号查找到该员工所在的位置,并将其返回值赋给s,即s=Search_Number(Pa,n,num);得到要删除的位置。

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

2.2.7 按职工完成的产品数量排名次函数void Count_order(SqList Pa[],int n) 功能:给各职工排名次和赋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 输出最终结果函数void Print_All(SqList Pa[],int n)功能:输出所有员工的名次、完成数量、同名次人数以及各自的工号。

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

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

为此,我在输出之前调用Count_order(SqList Pa[],int n) 函数,对未完成赋值的元素赋值;然后,当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时,输出完毕,程序结束。

(注:由于void Print_All(SqList Pa[],int n)函数中调用了Count_order(SqList Pa[],int n) 函数,而Count_order(SqList Pa[],int n) 函数中又调用了int Paixu_quantity(SqList Pa[],int n,int *q)排序函数,故此程序中实际上包含有三个函数的嵌套调用。

相关主题