亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C語言實現簡單員工工資管理系統

發布時間:2022-03-22 13:35:46 來源:億速云 閱讀:213 作者:小新 欄目:開發技術

小編給大家分享一下如何使用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;
    }
}

看完了這篇文章,相信你對“如何使用C語言實現簡單員工工資管理系統”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸暨市| 寿阳县| 突泉县| 柯坪县| 嘉禾县| 河津市| 贺兰县| 那曲县| 富源县| 神农架林区| 平远县| 泗水县| 木里| 永福县| 阿鲁科尔沁旗| 花莲市| 靖安县| 金坛市| 雷州市| 繁峙县| 太谷县| 嘉兴市| 泸定县| 宝鸡市| 西宁市| 澜沧| 碌曲县| 合水县| 亚东县| 双柏县| 沙田区| 河西区| 化隆| 泾阳县| 尼木县| 高要市| 普兰店市| 灵丘县| 镇康县| 尚志市| 张掖市|