本文实例为大家分享了C语言实现简单员工工资管理系统的具体代码,供大家参考,具体内容如下
1、公司主要有经理、技术员、销售员、销售经理4类岗位人员,他们都有基本信息:职工号、姓名、性别、部门、岗位、工龄、当月工资等。一个部门最多只能有一个销售经理,一个部门可以有多个销售员,一个部门可以有若干个经理和若干技术员。
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种岗位的员工信息。注意:无需分页显示。
4、根据工号或者姓名查询员工信息。
排序:
1、所有员工信息按当月工资从高到低排序并显示。注意:无需分页显示。
2、某个岗位的员工信息按当月工资从高到低排序并显示。注意:无需分页显示。
统计:
1、统计并显示某个部门的平均工资、最低工资、最高工资。
2、统计并显示某个部门超出平均工资的人数与员工信息。注意:无需分页显示。
3、统计并显示所有员工中的最低工资和最高工资员工的信息。
4、统计并显示所有员工超出平均工资的人数与员工信息。注意:无需分页显示。
1、员工用结构体表示,全体员工用一个链表来表示。某一岗位的员工,可以只使用员工结构体的部分成员,比如:经理只使用基本信息成员,而不使用销售额成员、工作时间成员。
2、必须用文件来存储员工信息:开始运行程序时从文件中读取员工信息到链表,退出程序时将员工信息保存到文件中。
3、主菜单有一个菜单项能够将员工信息保存到文件。
4、数据约束:
1)、职工号:整型、不能重复、从1开始依次递增、由软件自动计算产生,不能修改。
2)、岗位:枚举类型,分别表示经理、技术员、销售员、销售经理。
3)、员工的其他信息不能为空。
4)、其他:至少有两层菜单。
#include <stdio.h> #include <stdlib.h> #include <string.h> 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->next=NULL; ?? ?rare=import(list,&num); ?? ?if(num==0) ?? ??? ?increase(list,&num); ?? ?salary(list); ?? ?while(1) ?? ?{ ?? ??? ?begin:printf("菜单:添加数据:1 ?修改数据:2 ? 删除数据:3 ? 查询数据:4 ? 保存数据:5 ? 统计数据:6 ? 数据排序:7 ? 退出:0\n"); ?? ??? ?scanf("%d",&flag); ?? ??? ?if(flag==0){ ?? ??? ??? ?save(list); ?? ??? ??? ?exit(0);} ?? ??? ?switch(flag){ ?? ??? ??? ?case 1:increase(rare,&num);salary(list);save(list);break; ?? ??? ??? ?case 2:printf("修改基本信息:1 修改工资信息:2 返回:0\n");scanf("%d",&a); ?? ??? ??? ??? ?switch(a){ ?? ??? ??? ??? ?case 0:goto begin;break; ?? ??? ??? ??? ?case 1:printf("请输入要修改的工号\n");scanf("%d",&NUM);change(list,NUM);break;?? ? ?? ??? ??? ??? ?case 2:printf("请输入要修改的工号\n");scanf("%d",&NUM);changesalary(list,NUM);break;?? ? ?? ??? ??? ??? ?}break; ?? ??? ??? ?case 3:printf("删除基本信息:1 删除工资信息:2 返回:0\n");scanf("%d",&a); ?? ??? ??? ??? ?switch(a){ ?? ??? ??? ??? ?case 0:goto begin;break; ?? ??? ??? ??? ?case 1:printf("请输入要删除的工号\n");scanf("%d",&NUM);Delete(list,NUM);break;?? ? ?? ??? ??? ??? ?case 2:printf("请输入要删除的工号\n");scanf("%d",&NUM);DeleteSalary(list,NUM);break;?? ? ?? ??? ??? ??? ?}break; ?? ??? ??? ?case 4:printf("查询基本信息:1 查询工资信息:2 ?查询全部信息:3 ?查询部门信息:4 ?查询各个岗位信息:5 ?工号查询信息:6 ?姓名查询信息:7 返回:0\n");scanf("%d",&a); ?? ??? ??? ??? ?switch(a){ ?? ??? ??? ??? ?case 0:goto begin;break; ?? ??? ??? ??? ?case 1:printf("请输入要查询的工号\n");scanf("%d",&NUM);querybasic(list,NUM);break;?? ? ?? ??? ??? ??? ?case 2:printf("请输入要查询的工号\n");scanf("%d",&NUM);querysalary(list,NUM);break; ?? ??? ??? ??? ?case 3:queryAll(list);break;?? ? ?? ??? ??? ??? ?case 4:printf("请输入要查询的部门号\n");scanf("%d",&NUM);querydepart(list,NUM);break; ?? ??? ??? ??? ?case 5:querypost(list);break; ?? ??? ??? ??? ?case 6:printf("请输入要查询的工号\n");scanf("%d",&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",&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,&sex,&department,&post,&lengthservice,&hour,&hoursalary,&sales,&basicsalary); ?? ?while(hour!=-1) ?? ?{ ?? ??? ?num++; ?? ??? ?p=(employee *)malloc(sizeof(employee)); ?? ??? ?strcpy(p->name,name); ?? ??? ?p->num=*num; ?? ??? ?p->sex=sex; ?? ??? ?p->department=department; ?? ??? ?p->post=post; ?? ??? ?p->lengthservice=lengthservice; ?? ??? ?p->hour=hour; ?? ??? ?p->hoursalary=hoursalary; ?? ??? ?p->sales=sales; ?? ??? ?p->basicsalary=basicsalary; ?? ??? ?if(*num==1) ?? ??? ??? ?rare->next=p; ?? ??? ?else ?? ??? ??? ?q->next=p; ?? ??? ?q=p; ?? ??? ?p->next=NULL; ?? ??? ?scanf("%s%d%d%d%d%d%d%d%d",name,&sex,&department,&post,&lengthservice,&hour,&hoursalary,&sales,&basicsalary); ?? ?} ?? ?return *num; } void salary(employee *list)//计算工资 { ?? ?employee *p=list->next,*q=list->next; ?? ?int sales=0; ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(p->hour==-1)p=p->next; ?? ??? ?if(p->post==3) ?? ??? ??? ?p->salary=p->sales*4/100+35*p->lengthservice; ?? ??? ?else if(p->post==2) ?? ??? ??? ?p->salary=100*p->hour+35*p->lengthservice; ?? ??? ?else if(p->post==1) ?? ??? ??? ?p->salary=8000+p->lengthservice*35; ?? ??? ?else if(p->post==4){ ?? ??? ??? ?while(q!=NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(q->post==3&&q->department==p->department) ?? ??? ??? ??? ??? ?sales+=q->sales; ?? ??? ??? ??? ?q=q->next; ?? ??? ??? ?} ?? ??? ??? ?p->salary=sales*5/1000+8000+p->lengthservice*35; ?? ??? ??? ?q=list->next;} ?? ??? ?p=p->next; ?? ?} } void querybasic(employee *list,int num)//查询基本信息 { ?? ?employee *p; ?? ?p=list->next; ?? ?while(p->num!=num&&p!=NULL) ?? ??? ?p=p->next; ?? ?if(p->num==num){ ?? ??? ?printf("工号 名字 性别 部门 职位 工龄\n"); ?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice);} ?? ?if(p==NULL) ?? ??? ?printf("该工号不存在\n"); } void querysalary(employee *list,int num)//查询工资信息 { ?? ?employee *p; ?? ?p=list->next; ?? ?while(p->num!=num&&p!=NULL) ?? ??? ?p=p->next; ?? ?if(p->num==num){ ?? ??? ?printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n"); ?? ??? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);} ?? ?if(p==NULL) ?? ??? ?printf("该工号不存在\n"); } void Delete(employee *list,int num)//删除基本信息 { ?? ?employee *p,*q; ?? ?p=list->next; ?? ?q=p->next; ?? ?while(p->next->num!=num) ?? ?{ ?? ??? ?p=p->next; ?? ??? ?q=p->next; ?? ?} ?? ?if(q->num==num) ?? ??? ?p->next=q->next; ?? ?else printf("职工号在范围外"); ?? ?q=q->next; ?? ?while(q!=NULL) ?? ?{ ?? ??? ?q->num--; ?? ??? ?q=q->next; ?? ?} ? } void DeleteSalary(employee *list,int num)//删除工资信息 { ?? ?employee *p; ?? ?p=list->next; ?? ?while(p->num!=num) ?? ??? ?p=p->next; ?? ?if(p->num==num){ ?? ??? ?p->hour=-1; ?? ??? ?p->hoursalary=-1; ?? ??? ?p->sales=-1; ?? ??? ?p->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(&stu,sizeof(struct Employee),1,fp))!=1)break; ?? ??? ??? ?*num=*num+1; ?? ??? ??? ?p=(employee *)malloc(sizeof(employee)); ?? ??? ??? ?strcpy(p->name,stu.name); ?? ??? ??? ?p->num=*num; ?? ??? ??? ?p->sex=stu.sex; ?? ??? ??? ?p->department=stu.department; ?? ??? ??? ?p->post=stu.post; ?? ??? ??? ?p->lengthservice=stu.lengthservice; ?? ??? ??? ?p->hour=stu.hour; ?? ??? ??? ?p->hoursalary=stu.hoursalary; ?? ??? ??? ?p->sales=stu.sales; ?? ??? ??? ?p->basicsalary=stu.basicsalary; ?? ??? ??? ?p->salary=stu.salary; ?? ??? ??? ?if(*num==1) ?? ??? ??? ??? ?list->next=p; ?? ??? ??? ?else ?? ??? ??? ??? ?q->next=p; ?? ??? ??? ?q=p; ?? ??? ??? ?p->next=NULL; ?? ??? ?} ?? ?fclose(fp); ?? ?return q; } void save(employee *list)//存储到文件 { ?? ?struct Employee stu; ?? ?FILE *fp; ?? ?employee *p; ?? ?p=list->next; ?? ?if((fp=fopen("employee.dat","wb"))==NULL){ ?? ??? ?printf("error"); ?? ??? ?exit(0);} ?? ?while(p!=NULL) ?? ?{ ?? ??? ?stu.num=p->num; ?? ??? ? ?? ??? ?strcpy(stu.name,p->name); ?? ??? ?stu.sex=p->sex; ?? ??? ?stu.department=p->department; ?? ??? ?stu.post=p->post; ?? ??? ?stu.lengthservice=p->lengthservice; ?? ??? ?stu.hour=p->hour; ?? ??? ?stu.hoursalary=p->hoursalary; ?? ??? ?stu.sales=p->sales; ?? ??? ?stu.basicsalary=p->basicsalary; ?? ??? ?stu.salary=p->salary; ?? ??? ?if((fwrite(&stu,sizeof(struct Employee),1,fp))!=1)printf("error"); ?? ??? ?p=p->next; ?? ?} ?? ?fclose(fp); } void change(employee *list,int num)//改变基本数据 { ?? ?char name[20]; ?? ?int sex,department,post,lengthservice; ?? ?employee *p=list->next; ?? ?while(p->num!=num&&p->next!=NULL) ?? ??? ?p=p->next; ?? ?if(p->num==num){ ?? ??? ?printf("请输入修改后的姓名 性别 部门 岗位 工龄\n"); ?? ??? ?scanf("%s%d%d%d%d",name,&sex,&department,&post,&lengthservice); ?? ??? ?strcpy(p->name,name); ?? ??? ?p->sex=sex; ?? ??? ?p->department=department; ?? ??? ?p->post=post; ?? ??? ?p->lengthservice=lengthservice;} ?? ?else printf("职工号超出范围"); } void changesalary(employee *list,int num)//改变工资数据 { ?? ?int hour,hoursalary,sales,basicsalary; ?? ?employee *p=list->next; ?? ?while(p->num!=num) ?? ??? ?p=p->next; ?? ?if(p->num==num){ ?? ??? ?printf("请输入修改后的工作时间 小时工资 销售额 底薪 \n"); ?? ??? ?scanf("%d%d%d%d",&hour,&hoursalary,&sales,&basicsalary); ?? ??? ?p->hour=hour; ?? ??? ?p->hoursalary=hoursalary; ?? ??? ?p->sales=sales; ?? ??? ?p->basicsalary=basicsalary;} ?? ?else printf("职工号超出范围"); } void queryAll(employee *list)//分页查询所有信息 { ?? ?employee *p,*page[100]; ?? ?int n,i,top=0,flag=0,max; ?? ?p=list->next; ?? ?while(p!=NULL) ?? ?{ ?? ??? ?page[++top]=p; ?? ??? ?i=1; ?? ??? ?while(i<=10) ?? ??? ?{ ?? ??? ??? ?i++; ?? ??? ??? ?p=p->next; ?? ??? ??? ?if(p==NULL)break; ?? ??? ?} ?? ?} ?? ?max=top; ?? ?top=0; ?? ?p=page[++top]; ?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ?while(1) ?? ?{ ?? ??? ?i=1; ?? ??? ?while(i<=10) ?? ??? ?{ ?? ??? ??? ?i++; ?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ?? ??? ??? ?p=p->next; ?? ??? ??? ?if(p==NULL)break; ?? ??? ?} ?? ??? ?begin:printf("当前页码%d ? 首页->1 ?上一页->2 ?下一页->3 ?尾页->4 ?退出->0\n",top); ?? ??? ?scanf("%d",&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->next; ?? ?printf("%d部门的全部员工信息为:\n",num); ?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(p->department==num) ?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ?? ??? ?p=p->next; ?? ?} } void querypost(employee *list)//分类显示四个岗位的员工信息 { ?? ?employee *p; ?? ?int i=0; ?? ?while(i<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->next; ?? ??? ?i++; ?? ??? ?while(p!=NULL) ?? ??? ?{ ?? ??? ??? ?if(p->post==i) ?? ??? ??? ??? ?printf("%d %s %d %d %d %d %d %d %d %d %d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ?? ??? ??? ?p=p->next; ?? ??? ?} ?? ?} } void querynum(employee *list,int num)//工号查询个人全部信息 { ?? ?employee *p; ?? ?p=list->next; ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(p->num==num) ?? ??? ??? ?break; ?? ??? ?p=p->next; ?? ?} ?? ?if(p->num==num){ ?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);} ?? ?else printf("工号超出范围"); } void queryname(employee *list,char name[20])//用姓名查询数据 { ?? ?employee *p; ?? ?p=list->next; ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(strcmp(p->name,name)==0) ?? ??? ??? ?break; ?? ??? ?p=p->next; ?? ?} ?? ?if(strcmp(p->name,name)==0){ ?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);} ?? ?else printf("该姓名不存在"); } void Statistics(employee *list) { ?? ?employee *p=list->next,*q=list->next,*max=list->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",&department); ? ? ? //提取所要统计的部门的成员 ? ? while(p) ? ? ?{? ? ? ? ? ?if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ?p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ? ? ? ? ? ? ?} ? ? ? ? ?if(department==p->department) ? ? ? ? ?{ ? ? ? ? ? ? q=(employee *)malloc(sizeof(employee)); ? ? ? ? ? ? *q=*p; ? ? ? ? ? ? q->next=NULL; ? ? ? ? ? ? if(!headis) ? ? ? ? ? ? ? headis=q; ? ? ? ? ? ? ?? ? ? ? ? ? ? else? ? ? ? ? ? ? k->next=q; ? ? ? ? ? ? ?k=q; ? ?? ? ? ? ? ?} ? ? ? ? ?p=p->next; ? ? ? } ? ? ? //计算最大、最小和平均值 ? ? ? ? p=headis; ? ? ? ? q=headis; ? ? ? ? Max=headis; ? ? ? ? Min=headis; ? ? ? ? while(p) ? ? ? ? { ? ? ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ?? ? ? ? ? ?} ? ? ? ? ? ? if(p->salary>Max->salary) ? ? ? ? ? ? ? ? Max=p; ? ? ? ? ? ? else if(p->salary<Min->salary) ? ? ? ? ? ? ? ? Min=p; ? ? ? ? ? ? sum+=p->salary ; ? ? ? ? ? p=p->next; ? ? ? ? ? i++; ? ? ? ? ?} ? ? ? ? ? avar=sum/i; ? ? ? ? printf("部门:%d\n",department); ? ? ? ? printf("平均工资:%d\n",avar); ? ? ? ? printf("最低工资:%d\n",Min->salary); ? ? ? ? printf("最高工资:%d\n",Max->salary); } void Statistics2(employee *list) { ? ? ? employee *p=list->next,*q=list->next,*max=list->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",&department); ? ? ? //提取所要统计的部门的成员 ? ? while(p!=NULL) ? ? ?{? ?? ??? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ?? ? ? ? ? ?} ? ? ? ? ?if(department==p->department) ? ? ? ? ?{ ? ? ? ? ? ? ?j++; ? ? ? ? ? ? q=(employee*)malloc(sizeof(employee)); ? ? ? ? ? ? *q=*p; ? ? ? ? ? ? q->next=NULL; ? ? ? ? ? ? if(!headis) ? ? ? ? ? ? ? headis=q; ? ? ? ? ? ? else? ? ? ? ? ? ? k->next=q; ? ? ? ? ? ?k=q; ? ? ? ? ?} ? ? ? ? ?p=p->next; ? ? ? } ? ? ? //计算最大、最小和平均值 ? ? ? ? p=headis; ? ? ? ? q=headis; ? ? ? ?? ? ? ? ? while(p!=NULL) ? ? ? ? { ? ? ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? sum+=p->salary ; ? ? ? ? ? ? p=p->next; ? ? ? ? } ? ? ? ? avar=sum/j; ? ? ? ? ? p=q; ? ? ? ? headis=0; ? ? //提取超过平均工资的部门的成员 ? ? while(p!=NULL) ? ? ?{? ? ? ? ? ?if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ?? ? ? ? ? ?} ? ? ? ? ?if((p->salary)>avar) ? ? ? ? ?{? ? ? ? ? ? ? ?i++; ? ? ? ? ? ? q=(employee *)malloc(sizeof(employee)); ? ? ? ? ? ? *q=*p; ? ? ? ? ? ? q->next=NULL; ? ? ? ? ? ? if(!headis) ? ? ? ? ? ? ? headis=q; ? ? ? ? ? ? ?? ? ? ? ? ? ? else? ? ? ? ? ? ? k->next=q; ? ? ? ? ? ? ?k=q; ? ?? ? ? ? ? ?} ? ? ? ? ?p=p->next; ? ? ? } ? ? ? ? ? p=headis; ? ? ? ? printf("部门:%d\n",department); ? ? ? ? printf("超出平均工资的人数为:%d\n",i); ?? ??? ?if(i!=0){ ? ? ? ? printf("这些成员的信息如下:\n"); ? ? ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n"); ? ? ? ?while(p!=NULL) ? ? ? { ? ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ?} ? ? ? ? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ? ? ? ? ? ? ? ?p=p->next ; ?? ? ? }} } void Statistics3(employee *list) { ? ? employee *Max,*Min; ? ? ? ? ? ? ? ? ? ? ? //指向最大和最小值的成员 ? ? employee*p=list->next; ? ? ? ? ? ? ? ? ? ? ? //p作为循环指针 ? ? Max=list->next; ? ? Min=list->next; ? ? while(p) ? ? { ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ? p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ?? ? ? ? ? ?} ? ? if(p->salary >Max->salary ) ? ? ? ? Max=p; ? ? if(p->salary <Min->salary) ? ? ? ? Min=p; ? ? ? p=p->next; ? ?? ? ? } ? ? ? p=Min; ? ? printf("在所有员工中:"); ? ? printf("最低工资的员工信息:\n"); ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n"); ?? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ? ? p=Max; ? ? printf("最高工资的员工信息:\n"); ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n"); ? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ? } void Statistics4(employee *list) { ? ? employee *p=list->next,*q=list->next,*k; ? ? ? ? ? ? //p,q作为循环指针 ? ? employee *headis=0; ? ? ? ? ? ? ? ? ? ? ?//用来保存工资超过平均工资的成员 ? ? int i=0; ? ? ? ? ? ? ? ? ? ? ? ? ?//用i来计算人数 ? ? double sum=0,avar=0; ? ? ? ? ? ? ?//总值,平均值 ? ? ? //求平均值 ? ? while(p) ? ? { ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ?p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ?} ? ? ? i++; ? ? ? sum+=p->salary ; ? ? ? p=p->next; ? ? } ? ? avar=sum/i; ? ? ?? //提取出超过平均工资的成员,并且计算人数 ? ? i=0; ? ? p=list; ? ? while(p) ? ? { ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ?p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ? ? ? ? ? ? ? ?} ? ? if(p->salary >avar) ? ? ? { ? ? ? ? ?i++; ? ? ? ? ? q=(employee *)malloc(sizeof(employee)); ? ? ? ? ? ? *q=*p; ? ? ? ? ? ? q->next=NULL; ? ? ? ? ? ? if(!headis) ? ? ? ? ? ? ? headis=q; ? ? ? ? ? ? ?? ? ? ? ? ? ? else? ? ? ? ? ? ? k->next=q; ? ? ? ? ? ? ?k=q; ? ?? ? ? ? ?} ? ?? ? ? p=p->next; ? ? } ? ? p=headis; ?? ?printf("超出平均工资的人数:%d\n",i); ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n"); ? ? while(p) ? ? { ? ? ? ? if(p->num==-1) ? ? ? ? ?{ ? ? ? ? ? ? ?p=p->next; ? ? ? ? ? ? ?continue; ? ? ? ? ?} ? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary); ? ? p=p->next; ? ? } } void DecendOrder(employee *list) { ?? ?employee *p,*q,*a,*b,*s; ?? ?int j=0; ?? ?p=list->next; ?? ?q=p->next; ?? ?a=list; ?? ?b=a->next; ?? ?while(q!=NULL) ?? ?{ ?? ??? ?a=list; ?? ??? ?b=a->next; ?? ??? ?j=0; ?? ??? ?while(a!=p) ?? ??? ?{ ?? ??? ??? ?if(q->salary>b->salary) ?? ??? ??? ?{ ?? ??? ??? ??? ?p->next=q->next; ?? ??? ??? ??? ?q->next=b; ?? ??? ??? ??? ?a->next=q; ?? ??? ??? ??? ?j=1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?a=b; ?? ??? ??? ?b=b->next; ?? ??? ?} ?? ??? ?if(j==1) ?? ??? ??? ?q=p->next; ?? ??? ?else{ ?? ??? ??? ?p=q; ?? ??? ??? ?q=q->next;} ?? ?} ?? ?s=list->next; ?? ?while(s!=NULL){ ?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s->num,s->name,s->sex,s->department,s->post,s->lengthservice,s->hour,s->hoursalary,s->sales,s->basicsalary,s->salary); ?? ??? ?s=s->next; ?? ?} } void DecendOrder2(employee *list) { ?? ?employee *p,*q,*a,*b,*s,*z,*x=NULL,*v,*head; ?? ?int j=0,post; ?? ?printf("请输入岗位\n"); ?? ?scanf("%d",&post); ?? ?p=list->next; ?? ?head=(employee *)malloc(sizeof(employee)); ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(p->post==post){ ?? ??? ??? ?z=(employee *)malloc(sizeof(employee)); ?? ??? ??? ?*z=*p; ?? ??? ??? ?z->next=NULL; ?? ??? ??? ?if(x==NULL) ?? ??? ??? ??? ?x=z; ?? ??? ??? ?else ?? ??? ??? ??? ?v->next=z; ?? ??? ??? ?v=z;} ?? ??? ?p=p->next; ?? ?} ?? ?head->next=x; ?? ?p=x; ?? ?q=p->next; ?? ?while(q!=NULL) ?? ?{ ?? ??? ?a=head; ?? ??? ?b=a->next; ?? ??? ?j=0; ?? ??? ?while(a!=p) ?? ??? ?{ ?? ??? ??? ?if(q->salary>b->salary) ?? ??? ??? ?{ ?? ??? ??? ??? ?p->next=q->next; ?? ??? ??? ??? ?q->next=b; ?? ??? ??? ??? ?a->next=q; ?? ??? ??? ??? ?j=1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?a=b; ?? ??? ??? ?b=b->next; ?? ??? ?} ?? ??? ?if(j==1) ?? ??? ??? ?q=p->next; ?? ??? ?else{ ?? ??? ??? ?p=q; ?? ??? ??? ?q=q->next;} ?? ?} ?? ?s=head->next; ?? ?while(s!=NULL){ ?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n"); ?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s->num,s->name,s->sex,s->department,s->post,s->lengthservice,s->hour,s->hoursalary,s->sales,s->basicsalary,s->salary); ?? ??? ?s=s->next; ?? ?} }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。
热门源码