C语言实现简单员工工资管理系统

Grizelda ·
更新时间:2024-09-21
· 570 次阅读

本文实例为大家分享了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;     } }



工资管理系统 系统 C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号