运维开发网

c语言实现工资管理系统方法

运维开发网 https://www.qedev.com 2022-05-20 16:59 出处:网络
这篇文章主要为大家详细介绍了C语言实现简单员工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这篇文章主要为大家详细介绍了C语言实现简单员工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文分享用C语言实现一个简单的员工工资管理系统的具体代码,供大家参考。具体内容如下

(一)公司现状分析

1.公司主要有经理、技术员、业务员、销售经理四种岗位人员。都有基本信息:员工号、姓名、性别、部门、岗位、工龄、月薪等。一个部门最多只能有一个销售经理,一个部门可以有几个业务员,一个部门可以有几个经理和技术人员。

2.员工数据包括基础数据和薪资数据。员工基本数据包括员工编号、姓名、性别、部门、职位、工龄;员工工资数据包括工作时间、时薪、销售额、底薪、月薪。

3.员工月薪的计算方法。

A.经理:底薪(8000)+年资倍;35;

B.技术员:工作时间次;小时工资(每小时100元)+工龄次数;35;

C.业务员:销售次数;4%提成+资历倍;35;

D.销售经理:底薪(8000)+所辖部门销售总额乘以;0.5%+资历倍;35。

现在有必要开发一个公司员工薪酬管理系统来有效地管理员工的薪酬。

(二)系统的功能要求

数据维护和管理:要求对员工的基础数据和薪资数据分别进行管理。基础数据的维护和管理功能包括增加(批量、单个)、修改、删除、查询等。薪资数据的维护和管理功能包括输入(批量、单个)、修改、删除、查询等。

A.基础数据的维护和管理

(1).增加:(批量,单个)增加员工基础数据。基本数据包括员工编号、姓名、性别、部门、职位和工龄。

(2)修改:根据员工编号修改除员工编号以外的任何员工的其他基础数据。

(3).删除:根据员工编号删除员工。

(4)查询:根据员工编号查询员工的基本数据。

B.工资数据的维护和管理

(1).输入:输入员工薪资数据(批量或单个)。工资数据根据员工类型不同,相关数据输入也应该不同。注意:当月工资是计算项目,不能输入。

(2).修改:根据员工编号修改任意员工的相关薪资数据(注:不同类别员工的相关数据不同)。

(3).删除:根据员工编号删除一个员工(不能删除,只需将相关数据项设置为-1)。

(4).查询:根据员工编号查询员工的薪资数据。

(5).计算:批量计算所有技术员、业务员、销售经理的月薪。注:①销售经理所辖部门的总销售额是该部门所有销售人员当月销售额的总和。②只有当所有数据都有效时(-1无效),才能进行计算。

查询数据

1.所有员工的信息都显示在页面中。分页功能:每页显示10条员工信息,具有上一页、下一页、首页、末页功能。
2。按部门显示该部门的所有员工信息。注意:不需要在单独的页面中显示。
3。四个岗位的员工信息分类显示。注意:不需要在单独的页面中显示。
4。根据工号或姓名查询员工信息。

排序:

1.所有员工信息按照月薪从高到低排序显示。注意:不需要在单独的页面中显示。
2。某个岗位的员工信息按照当月工资排序显示。注意:不需要在单独的页面中显示。

统计数据:

1.统计并显示某个部门的平均工资、最低工资和最高工资。
2。统计并显示某部门超过平均工资的人数和员工的信息。注意:不需要在单独的页面中显示。
3。统计并显示所有员工中工资最低和工资最高的员工的信息。
4。统计并显示超过平均工资的员工人数和员工信息。注意:不需要在单独的页面中显示。

(三)系统的实现技术要求

1.雇员由结构表示,所有雇员由一个链表表示。某个岗位的员工只能使用员工结构中的部分成员,比如经理只使用基本信息成员,不使用销售成员和工时成员。
2。员工信息必须存储在一个文件中:在开始运行程序时,将员工信息从文件读取到链表中,在退出程序时,将员工信息保存到文件中。
3。主菜单中有一个菜单项可以将员工信息保存到文件中。
4。数据约束:
1),员工号:整数,不可重复,从1开始递增,由软件自动计算,不可修改。
2)、职位:枚举类型,分别代表经理、技术员、业务员、销售经理。
3)员工其他信息不能空。
4)、其他:至少有两层菜单。

#include lt;stdio.hgt;#include lt;stdlib.hgt;#include lt;string.hgt;typedef struct employee{?? ?int num;?? ??? ??? ?/* 工号 ?*/?? ?char name[20];?? ??? ?/* 姓名 ?*/?? ?int sex;?? ??? ??? ?/* 性别 1 man 2 madam*/?? ?int department;?? ??? ?/* 部门 ?*/?? ?int post;?? ??? ??? ?/* 1为经理、2为技术员、3为销售员、4为销售经理 ?*/?? ?int lengthservice;?? ?/* 工龄 ?*/?? ?int hour; ? ? ? ? ? /* 工作时间 */?? ?int hoursalary;?? ??? ?/* 时薪*/?? ?int sales;?? ??? ??? ?/* 销售额*/?? ?int basicsalary;?? ?/* 底薪*/?? ?int salary;?? ??? ??? ?/* 工资总数*/?? ?struct employee *next;}employee;struct Employee{?? ?int num;?? ?char name[20];?? ??? ?/* 姓名 ?*/?? ?int sex;?? ??? ??? ?/* 性别 1 man 2 madam*/?? ?int department;?? ??? ?/* 部门 ?*/?? ?int post;?? ??? ??? ?/* 1为经理、2为技术员、3为销售员、4为销售经理 ?*/?? ?int lengthservice;?? ?/* 工龄 ?*/?? ?int hour; ? ? ? ? ? /* 工作时间 */?? ?int hoursalary;?? ??? ?/* 时薪*/?? ?int sales;?? ??? ??? ?/* 销售额*/?? ?int basicsalary;?? ?/* 底薪*/?? ?int salary;?? ??? ??? ?/* 工资总数*/};void main(){?? ?int num=0,flag,a,NUM;?? ?char name[20];?? ?employee *list,*rare;//头节点list无数据 尾指针rare有数据?? ?int increase(employee *rare,int *num);?? ?void DecendOrder(employee *list);?? ?void Statistics(employee *list);?? ?void queryAll(employee *list);?? ?void querybasic(employee *list,int num);?? ?void Delete(employee *list,int num);?? ?void DeleteSalary(employee *list,int num);?? ?void querysalary(employee *list,int num);?? ?void change(employee *list,int num);?? ?void changesalary(employee *list,int num);?? ?void Statistics2(employee *list);?? ?void querynum(employee *list,int num);?? ?employee *import(employee *list,int *num);?? ?void salary(employee *list);?? ?void Statistics3(employee *list);?? ?void Statistics4(employee *list);?? ?void save(employee *list);?? ?void queryname(employee *list,char name[20]);?? ?void querydepart(employee *list,int num);?? ?void querypost(employee *list);?? ?void DecendOrder2(employee *list);?? ?list=(employee *)malloc(sizeof(employee));?? ?list-gt;next=NULL;?? ?rare=import(list,amp;num);?? ?if(num==0)?? ??? ?increase(list,amp;num);?? ?salary(list);?? ?while(1)?? ?{?? ??? ?begin:printf("菜单:添加数据:1 ?修改数据:2 ? 删除数据:3 ? 查询数据:4 ? 保存数据:5 ? 统计数据:6 ? 数据排序:7 ? 退出:0\n");?? ??? ?scanf("%d",amp;flag);?? ??? ?if(flag==0){?? ??? ??? ?save(list);?? ??? ??? ?exit(0);}?? ??? ?switch(flag){?? ??? ??? ?case 1:increase(rare,amp;num);salary(list);save(list);break;?? ??? ??? ?case 2:printf("修改基本信息:1 修改工资信息:2 返回:0\n");scanf("%d",amp;a);?? ??? ??? ??? ?switch(a){?? ??? ??? ??? ?case 0:goto begin;break;?? ??? ??? ??? ?case 1:printf("请输入要修改的工号\n");scanf("%d",amp;NUM);change(list,NUM);break;?? ??? ??? ??? ??? ?case 2:printf("请输入要修改的工号\n");scanf("%d",amp;NUM);changesalary(list,NUM);break;?? ??? ??? ??? ??? ?}break;?? ??? ??? ?case 3:printf("删除基本信息:1 删除工资信息:2 返回:0\n");scanf("%d",amp;a);?? ??? ??? ??? ?switch(a){?? ??? ??? ??? ?case 0:goto begin;break;?? ??? ??? ??? ?case 1:printf("请输入要删除的工号\n");scanf("%d",amp;NUM);Delete(list,NUM);break;?? ??? ??? ??? ??? ?case 2:printf("请输入要删除的工号\n");scanf("%d",amp;NUM);DeleteSalary(list,NUM);break;?? ??? ??? ??? ??? ?}break;?? ??? ??? ?case 4:printf("查询基本信息:1 查询工资信息:2 ?查询全部信息:3 ?查询部门信息:4 ?查询各个岗位信息:5 ?工号查询信息:6 ?姓名查询信息:7 返回:0\n");scanf("%d",amp;a);?? ??? ??? ??? ?switch(a){?? ??? ??? ??? ?case 0:goto begin;break;?? ??? ??? ??? ?case 1:printf("请输入要查询的工号\n");scanf("%d",amp;NUM);querybasic(list,NUM);break;?? ??? ??? ??? ??? ?case 2:printf("请输入要查询的工号\n");scanf("%d",amp;NUM);querysalary(list,NUM);break;?? ??? ??? ??? ?case 3:queryAll(list);break;?? ??? ??? ??? ??? ?case 4:printf("请输入要查询的部门号\n");scanf("%d",amp;NUM);querydepart(list,NUM);break;?? ??? ??? ??? ?case 5:querypost(list);break;?? ??? ??? ??? ?case 6:printf("请输入要查询的工号\n");scanf("%d",amp;NUM);querynum(list,NUM);break;?? ??? ??? ??? ?case 7:printf("请输入想查询的姓名\n");scanf("%s",name);queryname(list,name);break;?? ??? ??? ??? ?}break;?? ??? ??? ?case 5:save(list);break;?? ??? ??? ?case 6:printf("统计部门平均工资,最低,最高工资:1 ? ? ? ? ? ?统计部门超过平均工资的人数与员工信息:2\n统计所有员工最低工资和最高工资员工的信息:3 ?统计所有员工超出平均工资的人数与员工信息:4\n 返回:0\n");scanf("%d",amp;a);?? ??? ??? ??? ?switch(a){?? ??? ??? ??? ?case 0:goto begin;break;?? ??? ??? ??? ?case 1:Statistics(list);break;?? ??? ??? ??? ?case 2:Statistics2(list);break;?? ??? ??? ??? ?case 3:Statistics3(list);break;?? ??? ??? ??? ?case 4:Statistics4(list);break;?? ??? ??? ??? ?}break;?? ??? ??? ?case 7:DecendOrder2(list);break;?? ??? ??? ?default:printf("输入错误");goto begin;}}?}int increase(employee *rare,int *num)//添加数据{?? ?employee *p,*q;?? ?char name[20];?? ?int sex,department,post,lengthservice,hour,hoursalary,sales,basicsalary;?? ?q=rare;?? ?printf("请输入姓名,性别(1为男,2为女),部门,职位(1为经理、2为技术员、3为销售员、4为销售经理),工龄,工作时间,时薪,销售额,底薪:(工时为-1时停止输入)\n");?? ?scanf("%s%d%d%d%d%d%d%d%d",name,amp;sex,amp;department,amp;post,amp;lengthservice,amp;hour,amp;hoursalary,amp;sales,amp;basicsalary);?? ?while(hour!=-1)?? ?{?? ??? ?num++;?? ??? ?p=(employee *)malloc(sizeof(employee));?? ??? ?strcpy(p-gt;name,name);?? ??? ?p-gt;num=*num;?? ??? ?p-gt;sex=sex;?? ??? ?p-gt;department=department;?? ??? ?p-gt;post=post;?? ??? ?p-gt;lengthservice=lengthservice;?? ??? ?p-gt;hour=hour;?? ??? ?p-gt;hoursalary=hoursalary;?? ??? ?p-gt;sales=sales;?? ??? ?p-gt;basicsalary=basicsalary;?? ??? ?if(*num==1)?? ??? ??? ?rare-gt;next=p;?? ??? ?else?? ??? ??? ?q-gt;next=p;?? ??? ?q=p;?? ??? ?p-gt;next=NULL;?? ??? ?scanf("%s%d%d%d%d%d%d%d%d",name,amp;sex,amp;department,amp;post,amp;lengthservice,amp;hour,amp;hoursalary,amp;sales,amp;basicsalary);?? ?}?? ?return *num;}void salary(employee *list)//计算工资{?? ?employee *p=list-gt;next,*q=list-gt;next;?? ?int sales=0;?? ?while(p!=NULL)?? ?{?? ??? ?if(p-gt;hour==-1)p=p-gt;next;?? ??? ?if(p-gt;post==3)?? ??? ??? ?p-gt;salary=p-gt;sales*4/100+35*p-gt;lengthservice;?? ??? ?else if(p-gt;post==2)?? ??? ??? ?p-gt;salary=100*p-gt;hour+35*p-gt;lengthservice;?? ??? ?else if(p-gt;post==1)?? ??? ??? ?p-gt;salary=8000+p-gt;lengthservice*35;?? ??? ?else if(p-gt;post==4){?? ??? ??? ?while(q!=NULL)?? ??? ??? ?{?? ??? ??? ??? ?if(q-gt;post==3amp;amp;q-gt;department==p-gt;department)?? ??? ??? ??? ??? ?sales+=q-gt;sales;?? ??? ??? ??? ?q=q-gt;next;?? ??? ??? ?}?? ??? ??? ?p-gt;salary=sales*5/1000+8000+p-gt;lengthservice*35;?? ??? ??? ?q=list-gt;next;}?? ??? ?p=p-gt;next;?? ?}}void querybasic(employee *list,int num)//查询基本信息{?? ?employee *p;?? ?p=list-gt;next;?? ?while(p-gt;num!=numamp;amp;p!=NULL)?? ??? ?p=p-gt;next;?? ?if(p-gt;num==num){?? ??? ?printf("工号 名字 性别 部门 职位 工龄\n");?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice);}?? ?if(p==NULL)?? ??? ?printf("该工号不存在\n");}void querysalary(employee *list,int num)//查询工资信息{?? ?employee *p;?? ?p=list-gt;next;?? ?while(p-gt;num!=numamp;amp;p!=NULL)?? ??? ?p=p-gt;next;?? ?if(p-gt;num==num){?? ??? ?printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");?? ??? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p-gt;num,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);}?? ?if(p==NULL)?? ??? ?printf("该工号不存在\n");}void Delete(employee *list,int num)//删除基本信息{?? ?employee *p,*q;?? ?p=list-gt;next;?? ?q=p-gt;next;?? ?while(p-gt;next-gt;num!=num)?? ?{?? ??? ?p=p-gt;next;?? ??? ?q=p-gt;next;?? ?}?? ?if(q-gt;num==num)?? ??? ?p-gt;next=q-gt;next;?? ?else printf("职工号在范围外");?? ?q=q-gt;next;?? ?while(q!=NULL)?? ?{?? ??? ?q-gt;num--;?? ??? ?q=q-gt;next;?? ?}?}void DeleteSalary(employee *list,int num)//删除工资信息{?? ?employee *p;?? ?p=list-gt;next;?? ?while(p-gt;num!=num)?? ??? ?p=p-gt;next;?? ?if(p-gt;num==num){?? ??? ?p-gt;hour=-1;?? ??? ?p-gt;hoursalary=-1;?? ??? ?p-gt;sales=-1;?? ??? ?p-gt;basicsalary=-1;}?? ?else printf("该工号超出范围");}employee *import(employee *list,int *num)//读取文件{??? ??? ?FILE *fp;?? ?struct Employee stu;?? ?employee *q,*p;?? ?if((fp=fopen("employee.dat","rb"))==NULL){?? ??? ?printf("文件不存在,输入数据以建立一个文件存储信息\n");?? ??? ?return 0;}?? ?q=(employee *)malloc(sizeof(employee));?? ??? ?while(!feof(fp))?? ??? ?{?? ??? ??? ?if((fread(amp;stu,sizeof(struct Employee),1,fp))!=1)break;?? ??? ??? ?*num=*num+1;?? ??? ??? ?p=(employee *)malloc(sizeof(employee));?? ??? ??? ?strcpy(p-gt;name,stu.name);?? ??? ??? ?p-gt;num=*num;?? ??? ??? ?p-gt;sex=stu.sex;?? ??? ??? ?p-gt;department=stu.department;?? ??? ??? ?p-gt;post=stu.post;?? ??? ??? ?p-gt;lengthservice=stu.lengthservice;?? ??? ??? ?p-gt;hour=stu.hour;?? ??? ??? ?p-gt;hoursalary=stu.hoursalary;?? ??? ??? ?p-gt;sales=stu.sales;?? ??? ??? ?p-gt;basicsalary=stu.basicsalary;?? ??? ??? ?p-gt;salary=stu.salary;?? ??? ??? ?if(*num==1)?? ??? ??? ??? ?list-gt;next=p;?? ??? ??? ?else?? ??? ??? ??? ?q-gt;next=p;?? ??? ??? ?q=p;?? ??? ??? ?p-gt;next=NULL;?? ??? ?}?? ?fclose(fp);?? ?return q;}void save(employee *list)//存储到文件{?? ?struct Employee stu;?? ?FILE *fp;?? ?employee *p;?? ?p=list-gt;next;?? ?if((fp=fopen("employee.dat","wb"))==NULL){?? ??? ?printf("error");?? ??? ?exit(0);}?? ?while(p!=NULL)?? ?{?? ??? ?stu.num=p-gt;num;?? ??? ??? ??? ?strcpy(stu.name,p-gt;name);?? ??? ?stu.sex=p-gt;sex;?? ??? ?stu.department=p-gt;department;?? ??? ?stu.post=p-gt;post;?? ??? ?stu.lengthservice=p-gt;lengthservice;?? ??? ?stu.hour=p-gt;hour;?? ??? ?stu.hoursalary=p-gt;hoursalary;?? ??? ?stu.sales=p-gt;sales;?? ??? ?stu.basicsalary=p-gt;basicsalary;?? ??? ?stu.salary=p-gt;salary;?? ??? ?if((fwrite(amp;stu,sizeof(struct Employee),1,fp))!=1)printf("error");?? ??? ?p=p-gt;next;?? ?}?? ?fclose(fp);}void change(employee *list,int num)//改变基本数据{?? ?char name[20];?? ?int sex,department,post,lengthservice;?? ?employee *p=list-gt;next;?? ?while(p-gt;num!=numamp;amp;p-gt;next!=NULL)?? ??? ?p=p-gt;next;?? ?if(p-gt;num==num){?? ??? ?printf("请输入修改后的姓名 性别 部门 岗位 工龄\n");?? ??? ?scanf("%s%d%d%d%d",name,amp;sex,amp;department,amp;post,amp;lengthservice);?? ??? ?strcpy(p-gt;name,name);?? ??? ?p-gt;sex=sex;?? ??? ?p-gt;department=department;?? ??? ?p-gt;post=post;?? ??? ?p-gt;lengthservice=lengthservice;}?? ?else printf("职工号超出范围");}void changesalary(employee *list,int num)//改变工资数据{?? ?int hour,hoursalary,sales,basicsalary;?? ?employee *p=list-gt;next;?? ?while(p-gt;num!=num)?? ??? ?p=p-gt;next;?? ?if(p-gt;num==num){?? ??? ?printf("请输入修改后的工作时间 小时工资 销售额 底薪 \n");?? ??? ?scanf("%d%d%d%d",amp;hour,amp;hoursalary,amp;sales,amp;basicsalary);?? ??? ?p-gt;hour=hour;?? ??? ?p-gt;hoursalary=hoursalary;?? ??? ?p-gt;sales=sales;?? ??? ?p-gt;basicsalary=basicsalary;}?? ?else printf("职工号超出范围");}void queryAll(employee *list)//分页查询所有信息{?? ?employee *p,*page[100];?? ?int n,i,top=0,flag=0,max;?? ?p=list-gt;next;?? ?while(p!=NULL)?? ?{?? ??? ?page[++top]=p;?? ??? ?i=1;?? ??? ?while(ilt;=10)?? ??? ?{?? ??? ??? ?i++;?? ??? ??? ?p=p-gt;next;?? ??? ??? ?if(p==NULL)break;?? ??? ?}?? ?}?? ?max=top;?? ?top=0;?? ?p=page[++top];?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ?while(1)?? ?{?? ??? ?i=1;?? ??? ?while(ilt;=10)?? ??? ?{?? ??? ??? ?i++;?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);?? ??? ??? ?p=p-gt;next;?? ??? ??? ?if(p==NULL)break;?? ??? ?}?? ??? ?begin:printf("当前页码%d ? 首页-gt;1 ?上一页-gt;2 ?下一页-gt;3 ?尾页-gt;4 ?退出-gt;0\n",top);?? ??? ?scanf("%d",amp;n);??? ??? ?if(n==0)break;?? ??? ?else if(n==1)top=1,p=page[1];?? ??? ?else if(n==2){?? ??? ??? ?if(top==1){?? ??? ??? ??? ?printf("当前已经是第一页\n");?? ??? ??? ??? ?goto begin;}?? ??? ??? ?else p=page[--top];}?? ??? ?else if(n==3){?? ??? ??? ?if(top==max){?? ??? ??? ??? ?printf("当前已经是最后一页\n");?? ??? ??? ??? ?goto begin;}?? ??? ??? ?else p=page[++top];}?? ??? ?else if(n==4)top=max,p=page[max];?? ??? ?else goto begin;?? ?}}void querydepart(employee *list,int num)//输出该部门全部员工信息{?? ?employee *p=list-gt;next;?? ?printf("%d部门的全部员工信息为:\n",num);?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ?while(p!=NULL)?? ?{?? ??? ?if(p-gt;department==num)?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);?? ??? ?p=p-gt;next;?? ?}}void querypost(employee *list)//分类显示四个岗位的员工信息{?? ?employee *p;?? ?int i=0;?? ?while(ilt;4)?? ?{?? ??? ?switch(i){?? ??? ?case 0:printf("经理岗位的信息为(若为空则无):\n");break;?? ??? ?case 1:printf("技术员岗位的信息为(若为空则无):\n");break;?? ??? ?case 2:printf("销售员岗位的信息为(若为空则无):\n");break;?? ??? ?case 3:printf("销售经理岗位的信息为(若为空则无):\n");break;?? ??? ?}?? ??? ?p=list-gt;next;?? ??? ?i++;?? ??? ?while(p!=NULL)?? ??? ?{?? ??? ??? ?if(p-gt;post==i)?? ??? ??? ??? ?printf("%d %s %d %d %d %d %d %d %d %d %d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);?? ??? ??? ?p=p-gt;next;?? ??? ?}?? ?}}void querynum(employee *list,int num)//工号查询个人全部信息{?? ?employee *p;?? ?p=list-gt;next;?? ?while(p!=NULL)?? ?{?? ??? ?if(p-gt;num==num)?? ??? ??? ?break;?? ??? ?p=p-gt;next;?? ?}?? ?if(p-gt;num==num){?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);}?? ?else printf("工号超出范围");}void queryname(employee *list,char name[20])//用姓名查询数据{?? ?employee *p;?? ?p=list-gt;next;?? ?while(p!=NULL)?? ?{?? ??? ?if(strcmp(p-gt;name,name)==0)?? ??? ??? ?break;?? ??? ?p=p-gt;next;?? ?}?? ?if(strcmp(p-gt;name,name)==0){?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p-gt;num,p-gt;name,p-gt;sex,p-gt;department,p-gt;post,p-gt;lengthservice,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);}?? ?else printf("该姓名不存在");}void Statistics(employee *list){?? ?employee *p=list-gt;next,*q=list-gt;next,*max=list-gt;next,*k; ? //p,q作为循环指针,max指针指向最大的?? ?employee *headis=NULL; ? ? ? ? ? ? ? ? ? ? ?//用来保存部门的信息? ? employee *Max,*Min; ? ? ? ? ? ? ? ? ? ? ? //最大和最小值的成员? ? int i=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//计算部门的人数;? ? int sum=0,avar=0; ? ? ? ? ? ? ? ? ?//总值,平均值? ? int department; ? ? ? ? ? ? //用来接收想要统计的部门? ? printf("请输入你想要统计的部门:\n");? ? scanf("%d",amp;department);?? ? //提取所要统计的部门的成员? ? while(p)? ? ?{?? ? ? ? ?if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ?p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ? ?? ? ? ? ?}? ? ? ? ?if(department==p-gt;department)? ? ? ? ?{? ? ? ? ? ? q=(employee *)malloc(sizeof(employee));? ? ? ? ? ? *q=*p;? ? ? ? ? ? q-gt;next=NULL;? ? ? ? ? ? if(!headis)? ? ? ? ? ? ? headis=q;? ? ? ? ? ? ??? ? ? ? ? ? else?? ? ? ? ? ? k-gt;next=q;?? ? ? ? ? ?k=q;? ??? ? ? ? ?}? ? ? ? ?p=p-gt;next;? ? ? }?? ? //计算最大、最小和平均值? ? ? ? p=headis;? ? ? ? q=headis;? ? ? ? Max=headis;? ? ? ? Min=headis;? ? ? ? while(p)? ? ? ? {? ? ? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ??? ? ? ? ?}? ? ? ? ? ? if(p-gt;salarygt;Max-gt;salary)? ? ? ? ? ? ? ? Max=p;? ? ? ? ? ? else if(p-gt;salarylt;Min-gt;salary)? ? ? ? ? ? ? ? Min=p;? ? ? ? ? ? sum+=p-gt;salary ;? ? ? ? ? p=p-gt;next;? ? ? ? ? i++;? ? ? ? ?}?? ? ? ? avar=sum/i;? ? ? ? printf("部门:%d\n",department);? ? ? ? printf("平均工资:%d\n",avar);? ? ? ? printf("最低工资:%d\n",Min-gt;salary);? ? ? ? printf("最高工资:%d\n",Max-gt;salary);}void Statistics2(employee *list){?? ? employee *p=list-gt;next,*q=list-gt;next,*max=list-gt;next,*k; ? //p,q作为循环指针,max指针指向最大的? ? employee *headis=NULL; ? ? ? ? ? ? ? ? ? ? ?//用来保存部门的信息? ? int j=0,i=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//用j来计算人数,i计算工资大于平均工资的人数? ? int sum=0,avar=0; ? ? ? ? ? ? ? ? ? ? ?//平均值? ? int department; ? ? ? ? ? ? //用来接收想要统计的部门? ? printf("请输入你想要统计的部门:\n");? ? scanf("%d",amp;department);?? ? //提取所要统计的部门的成员? ? while(p!=NULL)? ? ?{??? ??? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ??? ? ? ? ?}? ? ? ? ?if(department==p-gt;department)? ? ? ? ?{? ? ? ? ? ? ?j++;? ? ? ? ? ? q=(employee*)malloc(sizeof(employee));? ? ? ? ? ? *q=*p;? ? ? ? ? ? q-gt;next=NULL;? ? ? ? ? ? if(!headis)? ? ? ? ? ? ? headis=q;? ? ? ? ? ? else?? ? ? ? ? ? k-gt;next=q;? ? ? ? ? ?k=q;? ? ? ? ?}? ? ? ? ?p=p-gt;next;? ? ? }?? ? //计算最大、最小和平均值? ? ? ? p=headis;? ? ? ? q=headis;? ? ? ??? ? ? ? while(p!=NULL)? ? ? ? {? ? ? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ? ?? ? ? ? ?}? ? ? ? ? ? sum+=p-gt;salary ;? ? ? ? ? ? p=p-gt;next;? ? ? ? }? ? ? ? avar=sum/j;?? ? ? ? p=q;? ? ? ? headis=0;? ? //提取超过平均工资的部门的成员? ? while(p!=NULL)? ? ?{?? ? ? ? ?if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ??? ? ? ? ?}? ? ? ? ?if((p-gt;salary)gt;avar)? ? ? ? ?{?? ? ? ? ? ? ?i++;? ? ? ? ? ? q=(employee *)malloc(sizeof(employee));? ? ? ? ? ? *q=*p;? ? ? ? ? ? q-gt;next=NULL;? ? ? ? ? ? if(!headis)? ? ? ? ? ? ? headis=q;? ? ? ? ? ? ??? ? ? ? ? ? else?? ? ? ? ? ? k-gt;next=q;?? ? ? ? ? ?k=q;? ??? ? ? ? ?}? ? ? ? ?p=p-gt;next;? ? ? }?? ? ? ? p=headis;? ? ? ? printf("部门:%d\n",department);? ? ? ? printf("超出平均工资的人数为:%d\n",i);?? ??? ?if(i!=0){? ? ? ? printf("这些成员的信息如下:\n");? ? ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");? ? ? ?while(p!=NULL)? ? ? {? ? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ?}? ? ? ? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p-gt;num,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);??? ? ? ? ? ?p=p-gt;next ;?? ? ? }}}void Statistics3(employee *list){? ? employee *Max,*Min; ? ? ? ? ? ? ? ? ? ? ? //指向最大和最小值的成员? ? employee*p=list-gt;next; ? ? ? ? ? ? ? ? ? ? ? //p作为循环指针? ? Max=list-gt;next;? ? Min=list-gt;next;? ? while(p)? ? {? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ? p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ??? ? ? ? ?}? ? if(p-gt;salary gt;Max-gt;salary )? ? ? ? Max=p;? ? if(p-gt;salary lt;Min-gt;salary)? ? ? ? Min=p;?? ? p=p-gt;next;? ??? ? }?? ? p=Min;? ? printf("在所有员工中:");? ? printf("最低工资的员工信息:\n");? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");?? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p-gt;num,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);? ? p=Max;? ? printf("最高工资的员工信息:\n");? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p-gt;num,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);?}void Statistics4(employee *list){? ? employee *p=list-gt;next,*q=list-gt;next,*k; ? ? ? ? ? ? //p,q作为循环指针? ? employee *headis=0; ? ? ? ? ? ? ? ? ? ? ?//用来保存工资超过平均工资的成员? ? int i=0; ? ? ? ? ? ? ? ? ? ? ? ? ?//用i来计算人数? ? double sum=0,avar=0; ? ? ? ? ? ? ?//总值,平均值?? ? //求平均值? ? while(p)? ? {? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ?p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ?}? ? ? i++;? ? ? sum+=p-gt;salary ;? ? ? p=p-gt;next;? ? }? ? avar=sum/i;?? ??//提取出超过平均工资的成员,并且计算人数? ? i=0;? ? p=list;? ? while(p)? ? {? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ?p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ? ? ?? ? ? ? ?}? ? if(p-gt;salary gt;avar)? ? ? {? ? ? ? ?i++;? ? ? ? ? q=(employee *)malloc(sizeof(employee));? ? ? ? ? ? *q=*p;? ? ? ? ? ? q-gt;next=NULL;? ? ? ? ? ? if(!headis)? ? ? ? ? ? ? headis=q;? ? ? ? ? ? ??? ? ? ? ? ? else?? ? ? ? ? ? k-gt;next=q;?? ? ? ? ? ?k=q;? ??? ? ? ?}? ??? ? p=p-gt;next;? ? }? ? p=headis;?? ?printf("超出平均工资的人数:%d\n",i);? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");? ? while(p)? ? {? ? ? ? if(p-gt;num==-1)? ? ? ? ?{? ? ? ? ? ? ?p=p-gt;next;? ? ? ? ? ? ?continue;? ? ? ? ?}? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p-gt;num,p-gt;hour,p-gt;hoursalary,p-gt;sales,p-gt;basicsalary,p-gt;salary);? ? p=p-gt;next;? ? }}void DecendOrder(employee *list){?? ?employee *p,*q,*a,*b,*s;?? ?int j=0;?? ?p=list-gt;next;?? ?q=p-gt;next;?? ?a=list;?? ?b=a-gt;next;?? ?while(q!=NULL)?? ?{?? ??? ?a=list;?? ??? ?b=a-gt;next;?? ??? ?j=0;?? ??? ?while(a!=p)?? ??? ?{?? ??? ??? ?if(q-gt;salarygt;b-gt;salary)?? ??? ??? ?{?? ??? ??? ??? ?p-gt;next=q-gt;next;?? ??? ??? ??? ?q-gt;next=b;?? ??? ??? ??? ?a-gt;next=q;?? ??? ??? ??? ?j=1;?? ??? ??? ??? ?break;?? ??? ??? ?}?? ??? ??? ?a=b;?? ??? ??? ?b=b-gt;next;?? ??? ?}?? ??? ?if(j==1)?? ??? ??? ?q=p-gt;next;?? ??? ?else{?? ??? ??? ?p=q;?? ??? ??? ?q=q-gt;next;}?? ?}?? ?s=list-gt;next;?? ?while(s!=NULL){?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s-gt;num,s-gt;name,s-gt;sex,s-gt;department,s-gt;post,s-gt;lengthservice,s-gt;hour,s-gt;hoursalary,s-gt;sales,s-gt;basicsalary,s-gt;salary);?? ??? ?s=s-gt;next;?? ?}}void DecendOrder2(employee *list){?? ?employee *p,*q,*a,*b,*s,*z,*x=NULL,*v,*head;?? ?int j=0,post;?? ?printf("请输入岗位\n");?? ?scanf("%d",amp;post);?? ?p=list-gt;next;?? ?head=(employee *)malloc(sizeof(employee));?? ?while(p!=NULL)?? ?{?? ??? ?if(p-gt;post==post){?? ??? ??? ?z=(employee *)malloc(sizeof(employee));?? ??? ??? ?*z=*p;?? ??? ??? ?z-gt;next=NULL;?? ??? ??? ?if(x==NULL)?? ??? ??? ??? ?x=z;?? ??? ??? ?else?? ??? ??? ??? ?v-gt;next=z;?? ??? ??? ?v=z;}?? ??? ?p=p-gt;next;?? ?}?? ?head-gt;next=x;?? ?p=x;?? ?q=p-gt;next;?? ?while(q!=NULL)?? ?{?? ??? ?a=head;?? ??? ?b=a-gt;next;?? ??? ?j=0;?? ??? ?while(a!=p)?? ??? ?{?? ??? ??? ?if(q-gt;salarygt;b-gt;salary)?? ??? ??? ?{?? ??? ??? ??? ?p-gt;next=q-gt;next;?? ??? ??? ??? ?q-gt;next=b;?? ??? ??? ??? ?a-gt;next=q;?? ??? ??? ??? ?j=1;?? ??? ??? ??? ?break;?? ??? ??? ?}?? ??? ??? ?a=b;?? ??? ??? ?b=b-gt;next;?? ??? ?}?? ??? ?if(j==1)?? ??? ??? ?q=p-gt;next;?? ??? ?else{?? ??? ??? ?p=q;?? ??? ??? ?q=q-gt;next;}?? ?}?? ?s=head-gt;next;?? ?while(s!=NULL){?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s-gt;num,s-gt;name,s-gt;sex,s-gt;department,s-gt;post,s-gt;lengthservice,s-gt;hour,s-gt;hoursalary,s-gt;sales,s-gt;basicsalary,s-gt;salary);?? ??? ?s=s-gt;next;?? ?}}

这就是本文的全部内容。

0

精彩评论

暂无评论...
验证码 换一张
取 消