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

本文实例为大家分享了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为无效数据),才能计算。

查询数据

分页显示全部员工的信息。分页功能:每页显示10条员工的信息,有上一页、下一页、首页和最后一页的功能。
按部门显示本部门全部员工信息。注意:无需分页显示。
分类显示4种岗位的员工信息。注意:无需分页显示。
根据工号或者姓名查询员工信息。

排序:

所有员工信息按当月工资从高到低排序并显示。注意:无需分页显示。
某个岗位的员工信息按当月工资从高到低排序并显示。注意:无需分页显示。

统计:

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;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现小型工资管理系统

    本文实例为大家分享了C语言实现小型工资管理系统的具体代码,供大家参考,具体内容如下 课程大作业目的 通过该大作业,考察学生分析.解决复杂问题的能力,考察学生编写较大程序的能力,检验和评价<程序设计基础>课程的学习效果 大作业内容 编写一个小型工资管理系统,用来管理职工的个人基本信息及工资薪酬等数据 基本要求 1.每个职工的数据应包括:工号.姓名.性别.部门.基本工资.绩效工资.奖金.应发工资(应发工资=基本工资+绩效工资+奖金).职工数据要求采用结构体数据类型. 2.菜单显示:显示系统的一级功

  • C语言实现职工工资管理系统

    本文实例为大家分享了C语言实现职工工资管理系统的具体代码,供大家参考,具体内容如下 设计要求: 模拟并设计一个企业的职工工资管理系统,职工信息包括工号.姓名.基本工资.津贴,设职工人数不超过500人,以菜单选项的方式完成相应的功能,主要功能需求如下: 1.建立工资表: 2.职工扣税和实发工资: 3.按实发工资从高到低的顺序显示工资明细表: 4.修改职工的工资信息: 5.按工号查询职工工资信息: 6.职工工资统计分析: 7.退出系统. 基本思路: 将职工工资管理系统的职工信息录入功能.数据处理并存

  • C语言链表实现工资管理系统

    本文实例为大家分享了C语言链表实现工资管理系统的具体代码,供大家参考,具体内容如下 自己的作业,分享一下,自己为了调试方便,又多加入了一些功能 题目:建立工资管理系统,对职工工资的相关信息进行管理.职工工资相关信息包括职工工号,职工姓名,月份,每月工资和年度总工资等,具体要求如下; 1.建立该系统的存储结构2.录入职工某个月的工资3.查找某个职工某个月的工资4.修改某个职工某个月的工资5.删除每个职工的工资相关信息6.统计某个职工年度总工资7.对职工的月工资或年度总工资进行排名 源码 #incl

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

    本文实例为大家分享了C语言实现员工工资管理系统的具体代码,供大家参考,具体内容如下 看点: 1. 枚举类型的使用(录入与输出) 2. 文件的使用:用文件来存储员工信息,开始运行程序时从文件中读取员工信息到链表退出程序时将员工信息保存到文件中. 2_1. 存储结构体这样的数据块所使用的文件操作函数: 2_2. feof()函数作为循环条件的正确使用方法: 3. 链表的相关操作 3_1. 结构体中char类型的数据写入方式 4. while循环下实现的菜单与子菜单 注:部分功能还没有实现,涉及到单链

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

    本文实例为大家分享了C语言实现简单员工工资管理系统的具体代码,供大家参考,具体内容如下 (一)公司现状分析 1.公司主要有经理.技术员.销售员.销售经理4类岗位人员,他们都有基本信息:职工号.姓名.性别.部门.岗位.工龄.当月工资等.一个部门最多只能有一个销售经理,一个部门可以有多个销售员,一个部门可以有若干个经理和若干技术员. 2.员工数据包括基本资料数据和工资数据两部分,员工基本资料数据包括职工号.姓名.性别.部门.岗位.工龄:员工工资数据包括工作时间.小时工资.销售额.底薪.当月工资. 3

  • java实现员工工资管理系统

    本文实例为大家分享了java实现员工工资管理系统的具体代码,供大家参考,具体内容如下 一.题目要求 设计员工工资管理系统,实现以下功能: (1)输入5名员工姓名.工号.月工资:(2)统计每人的年收入及收入最高和最低的员工,计算他们的平均工资:(3)按月工资高低降序排序:(4)统计高于平均工资和低于平均工资的员工:(5)输入工号名称查询员工的姓名和月工资. 二.源代码 import java.util.Scanner; import java.io.BufferedReader; public c

  • 基于C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.系统主要功能 1.密码登录2.输入数据3.查询成绩4.修改成绩5.输出所有学生成绩6.退出系统 二.代码实现 #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 struct student {     char num[10];     char name[20];     int ol

  • C语言实现简单的图书管理系统

    本文实例为大家分享了C语言实现简单图书管理系统的具体代码,供大家参考,具体内容如下 代码: /* 课程设计项目名称:图书查询系统 作者:施瑞文 时间:2018.3.4 */ #include<stdio.h> #include<string.h> #include<windows.h> #include<conio.h> #include<stdlib.h> #define N sizeof(struct BOOK) struct BOOK //

  • C语言实现简单的停车场管理系统

    本文实例为大家分享了C语言实现简单停车场管理系统的具体代码,供大家参考,具体内容如下 1.问题描述 1)有一个两层的停车场,每层有6个车位,当第一层车位停满后才允 许使用第二层(停车场可用一个二维数组实现),每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算:2)假设停车场初始状态为第一层空.第二层已经有四辆车,其车位号依次为第二层的1-4号,停车时间依次为20,15,10,5:3)停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先

  • C语言实现简单班级成绩管理系统

    前言: 有朋友最近在做c语言课设,要求写一个班级成绩管理系统,便写份简单的代码来玩.代码原创,未参考任何其他人的代码 程序要求 说明 本程序主要采用结构体数组 本文件采用多文件编写,由于程序规模小,故未采用编写头文件的方式 使用 #pragma once 来防止头文件重复包含 代码 怎么使用本程序看看注释应该就知道了.run main.c 就行.其他各文件作用: def.c 定义了一些常量和全局变量,结构体 myIO.c 实现了成绩录入和成绩打印输出 file.c 实现了将成绩保存为文件 men

  • C语言实现简单的通讯录管理系统

    本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下 要实现一个通讯录管理系统,需要用到结构体.指针.文件操作.动态管理等内容. 效果展示: 实现思路 通讯录中的联系人包括姓名.年龄.性别.电话.住址,因此可以定义一个结构体PeoInfo来存储这些信息. 同时,由于通讯录需要记录当前的大小,以此来方便我们对通讯录realloc进行扩容,所以需要定义通讯录结构体Contact来保存这些信息,其中该结构体中可以嵌套一个PeoInfo类型的指针. 当定义完结构体以后,就可以

  • C语言实现简单职工信息管理系统

    本文实例为大家分享了C语言实现职工信息管理系统的具体代码,供大家参考,具体内容如下 代码实现如下: #include <stdio.h>//输入.输出指令 #include <malloc.h>//在内存中动态的分配size字节的存储区 #include <string.h>//字符串相关操作指令 #include <stdlib.h>//五种类型.一些宏和通用工具函数 #include<conio.h>//通过键盘产生的对应操作 #includ

  • C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

随机推荐