快快鹅鹅鹅 2022-06-01 08:06 采纳率: 25%
浏览 52

工资管理管理系统:用c语言编写

题目要求:输入职工信息(至少10条记录),提供新增,删除,修改,和显示功能

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-06-01 08:51
    关注
    
    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #define N 100
    struct GongZi
    {
        int num;      //员工工号; 
        char name[20];        //员工姓名; 
        float jbgz;            //基本工资; 
        float jt;            //津贴; 
        float gt;            //岗贴; 
        float bt;            //补贴; 
        float ft;            //房贴; 
        float jtbt;            //交通补贴; 
        float sfgz;            //实发工资; 
        float sh;            //税收; 
        float zzgz;            //最终工资; 
    }Yuan,yuan[N];
    
    char filename[100]={"员工工资管理.txt"};     //储存员工的信息; 
    FILE *fp;                            //文件指针; 
    void Gongz();    //职工个人所得税计算模块; 
    void Tianj();        //添加职工的工资信息模块; 
    void Chax();        //职工工资查询模块; 
    void Xiug();        //职工工资修改模块; 
    void Tongji();        //职工工资统计模块; 
    void Try_again();    //输入错误重试模块; 
    void Menu();        //主菜单; 
    void zhuijia();        //追加添加职工信息;
    void Shanchu();     //删除职工的信息; 
    int main(void)
    {
        Menu();
        return 0;
    }
    void Menu()                //主菜单; 
    {
        printf("=====================================\n");
        printf("|     (1)职工个人所得税的计算       |\n");
        printf("|     (2)职工工资录入               |\n");
        printf("|     (3)添加职工信息               |\n"); 
        printf("|     (4)职工工资查询               |\n");
        printf("|     (5)删除职工信息               |\n");
        printf("|     (6)职工工资修改               |\n");
        printf("|     (7)职工工资统计               |\n");
        printf("|     (0)退出程序                   |\n");
        printf("=====================================\n");
        
        
        int n;
        scanf("%d",&n);
        switch(n)
        {
            case 0: exit(0);
            case 1: Gongz();   break;
            case 2: Tianj();   break;
            case 3: zhuijia();  break;
            case 4: Chax();    break;
            case 5: Shanchu(); break;
            case 6: Xiug();    break;
            case 7: Tongji();    break;
            default: Try_again(); break;
        } 
    }
    
    void Tianj()                    //信息录入; 
    {
        int select;
        fp=fopen(filename,"wb+");
        if(fp==NULL)
        {
            printf("打开文件夹失败:\n");
            exit(1);
        } 
        printf("******************请输入员工信息*******************\n");
        printf("输入员工编号:");
        scanf("%d",&Yuan.num);
        printf("输入员工姓名:");
        scanf("%s",Yuan.name);
        printf("输入员工的基本工资:"); 
        scanf("%f",&Yuan.jbgz);
        printf("津贴:");
        scanf("%f",&Yuan.jt);
        printf("岗贴:");
        scanf("%f",&Yuan.gt); 
        printf("房贴:");
        scanf("%f",&Yuan.ft);
        printf("补贴:");
        scanf("%f",&Yuan.bt);
        printf("交通补贴:");
        scanf("%f",&Yuan.jtbt);
        Yuan.sfgz=Yuan.jbgz+Yuan.jt+Yuan.gt+Yuan.ft+Yuan.bt+Yuan.ft;
        printf("实发工资:%f",Yuan.sfgz);
        printf("\n");
        fwrite(&Yuan,sizeof(struct GongZi),1,fp); 
        
        printf("*****(1)继续录入*****(2)主菜单**********\n");            //在这里进行选择,是否进行录入还是选择返回主菜单; 
        printf("请输入你的选择[ ]\b\b");    
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp);
                system("cls"); 
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                zhuijia();
            }
            else
            {
                printf("输入错误,请重新输入[ ]\b\b");
                scanf("%d",&select);
            }    
        } 
    }
    /*添加职工信息,跟功能2唯一区别,该功能是从利用文件追加进行输入*/ 
    void zhuijia()
    {
        int select;
        fp=fopen(filename,"ab+");
        if(fp==NULL)
        {
            printf("打开文件夹失败:\n");
            exit(1);
        } 
        printf("******************请输入员工信息*******************\n");
        printf("输入员工编号:");
        scanf("%d",&Yuan.num);
        printf("输入员工姓名:");
        scanf("%s",Yuan.name);
        printf("输入员工的基本工资:"); 
        scanf("%f",&Yuan.jbgz);
        printf("津贴:");
        scanf("%f",&Yuan.jt);
        printf("岗贴:");
        scanf("%f",&Yuan.gt); 
        printf("房贴:");
        scanf("%f",&Yuan.ft);
        printf("补贴:");
        scanf("%f",&Yuan.bt); 
        printf("交通补贴:");
        scanf("%f",&Yuan.jtbt);
        Yuan.sfgz=Yuan.jbgz+Yuan.jt+Yuan.gt+Yuan.ft+Yuan.bt+Yuan.ft;
        printf("实发工资:%f",Yuan.sfgz);
        
        printf("\n");
        fwrite(&Yuan,sizeof(struct GongZi),1,fp); 
        
        printf("*****(1)继续录入*****(2)主菜单**********\n");
        printf("请输入你的选择[ ]\b\b");
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp); 
                system("cls");
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                zhuijia();
            }
            else
            {
                printf("输入错误,请重新输入[ ]\b\b");
                scanf("%d",&select);
            }
        }
        
    }
    
    /*实发工资如果在5000以内则税收为实发工资的5%;
        5000~10000则超过5000的部分乘以10%;剩下的按5%计算;
        10000以上则超过10000的按15%计算,5000~10000部分则按10%计算,5000部分则按5%计算;*/ 
    
    void Gongz()
    {
        int n,y=0,select;
        printf("请输入员工的编号:");
        scanf("%d",&n);
        fp=fopen(filename,"ab+"); 
        if(fp==NULL)
        {
            printf("打开文件夹失败:\n");
            exit(1);
        } 
        while(fread(&Yuan,sizeof(struct GongZi),1,fp))
        {
            if(n==Yuan.num)
            {
                if(Yuan.sfgz<5000)
                {
                    Yuan.sh=Yuan.sfgz*0.05;
                    Yuan.zzgz=Yuan.sfgz-Yuan.sh;
                }
                else if(Yuan.sfgz>5000&&Yuan.sfgz<10000)
                {
                    Yuan.sh=(Yuan.sfgz-5000)*0.1+5000*0.05;
                    Yuan.zzgz=Yuan.sfgz-Yuan.sh;
                }
                else 
                {
                    Yuan.sh=(Yuan.sfgz-10000)*0.15+5000*0.1+5000*0.05;
                    Yuan.zzgz=Yuan.sfgz-Yuan.sh;
                }
                y=1;
                break;
            }
        }
        if(y==1)
        {
            printf("员工编号:%d 员工姓名:%s  税收:%0.2f  最终工资:%0.2f\n",Yuan.num,Yuan.name,Yuan.sh,Yuan.zzgz);        
        }
        else
        {        
            printf("查无此人!!!\n");
            
        }
        printf("*****(1)继续查询*****(2)主菜单**********\n");
        printf("请输入你的选择[ ]\b\b");
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp);
                system("cls"); 
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                Gongz();
            }
            else
            {
                printf("输入错误,请重新输入[ ]\b\b");
                scanf("%d",&select);
            }
            
        
        }
        
     
         
    }
    /*查询职工信息,通过职工编号遍历寻找*/ 
    void Chax()
    {
            int n,y=0,select;
        printf("请输入员工的编号:");
        scanf("%d",&n);
        fp=fopen(filename,"ab+"); 
        if(fp==NULL)
        {
            printf("打开文件夹失败:\n");
            exit(1);
        } 
        while(fread(&Yuan,sizeof(struct GongZi),1,fp))
        {
            if(n==Yuan.num)
            {
                
                printf("员工编号:%07d 姓名:%s 基本工资:%0.2f 津贴:%0.2f 岗贴:%0.2f 补贴:%0.2f 房贴:%0.2f 交通补贴:%0.2f 实发工资:%0.2f\n\n",
                Yuan.num,Yuan.name,Yuan.jbgz,Yuan.jt,Yuan.gt,Yuan.bt,Yuan.ft,Yuan.jtbt,Yuan.sfgz); 
                y=1; 
                break;
            }
        }
        if(y!=1)
        {
            printf("查无此人!!!\n");
        }
                
        printf("*****(1)继续查询*****(2)主菜单**********\n");
        printf("请输入你的选择[ ]\b\b");
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp);
                system("cls"); 
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                Chax();
            }
            else
                scanf("%d",&select);
        
        }
        
    }
    
    //修改员工的信息; 
    void Xiug()
    {
        int i=0,j,k,numb,y=0,select;
        fp=fopen(filename,"rb+");
        
        if(fp==NULL)
        {
            printf("打开文件失败\n");
            exit(1);
        }
        
        while(fread(&Yuan,sizeof(struct GongZi),1,fp))            //用结构体数组储存文件中的员工信息 
        {
            yuan[i++]=Yuan;
        }
        for(j=0;j<i-1;j++)                                        //按员工的编号从小到大排序 
        {
            for(k=j+1;k<i;k++)
            {
                if(yuan[j].num>yuan[k].num)
                {
                    Yuan=yuan[j];
                    yuan[j]=yuan[k];
                    yuan[k]=Yuan;
                    
                } 
            }
        }
        
        printf("请输入您要修改的员工编号:");                    //输入要修改的编号 
        scanf("%d",&numb);
        for(j=0;j<i;j++)                                        //通过遍历寻找到目标编号; 
        {
            if(numb==yuan[j].num)
            {
                printf("员工编号:%07d 姓名:%s 基本工资:%0.2f 津贴:%0.2f 岗贴:%0.2f 补贴:%0.2f 房贴:%0.2f 交通补贴:%0.2f 实发工资:%0.2f",yuan[j].num,
                    yuan[j].name,yuan[j].jbgz,yuan[j].jt,yuan[j].gt,yuan[j].bt,yuan[j].ft,yuan[j].jtbt,yuan[j].sfgz);
                printf("\n\n"); 
                printf("******************请输入你要修改的员工信息*******************\n");
                printf("输入员工姓名:");
                scanf("%s",yuan[j].name);
                printf("输入员工的基本工资:"); 
                scanf("%f",&yuan[j].jbgz);
                printf("津贴:");
                scanf("%f",&yuan[j].jt);
                printf("岗贴:");
                scanf("%f",&yuan[j].gt); 
                printf("房贴:");
                scanf("%f",&yuan[j].ft);
                printf("补贴:");
                scanf("%f",&yuan[j].bt);
                printf("交通补贴:");
                scanf("%f",&yuan[j].jtbt);
                yuan[j].sfgz=yuan[j].jbgz+Yuan.jt+yuan[j].gt+yuan[j].ft+yuan[j].bt+yuan[j].ft;
                printf("实发工资:%f",yuan[j].sfgz);
                printf("\n");
                y=1;
            } 
        }
        if(y==1)                                            //通过y的值来判断是否修改成功; 
            printf("修改成功!\n\n");
        else
            printf("查无此人!!!\n\n");
            
            
        rewind(fp);                                //把文件指针指向开头 
        for(j=0;j<i;j++)                        //重新把结构体数组写进文件; 
        {
            fwrite(&yuan[j],sizeof(struct GongZi),1,fp);
        }
        
        
                    
        printf("*****(1)继续修改*****(2)主菜单**********\n");
        printf("请输入你的选择[ ]\b\b");
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp);
                system("cls"); 
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                Xiug();
            }
            else
                scanf("%d",&select);
        
        }
        
    }
    
    void Tongji()
    {
        int i=0,j,k;   //统计人数; 
        float sfzgz=0,dsr=0,zsr=0,gsr=0;            //统实发总工资、低收入,中收入,高收入; 
        fp=fopen(filename,"rb+");
        
        if(fp==NULL)
        {
            printf("打开文件失败\n");
            exit(1);
        }
         
        
        printf("员工编号   姓名   基本工资  津贴   岗贴   补贴   房贴   交通补贴  实发工资\n"); 
        
        while(fread(&Yuan,sizeof(struct GongZi),1,fp))
        {
            yuan[i++]=Yuan;
        }
        for(j=0;j<i-1;j++)
        {
            for(k=j+1;k<i;k++)
            {
                if(yuan[j].num>yuan[k].num)
                {    
                    Yuan=yuan[j];
                    yuan[j]=yuan[k];
                    yuan[k]=Yuan;
                    
                } 
            }
        }
        for(j=0;j<i;j++)
        {
            if(yuan[j].sfgz<5000)
                dsr++;
            else if(yuan[j].sfgz>5000&&yuan[j].sfgz<10000)
                    zsr++;
            else
                gsr++;
                
            sfzgz+=yuan[j].sfgz;    
            
            printf("%07d   %s  %5.2f   %4.2f  %4.2f  %4.2f  %4.2f  %4.2f  %4.2f",yuan[j].num,
            yuan[j].name,yuan[j].jbgz,yuan[j].jt,yuan[j].gt,yuan[j].bt,yuan[j].ft,yuan[j].jtbt,yuan[j].sfgz);
            printf("\n\n");    
        }
        printf("员工总人数:%d 实发总工资:%0.2f\n\n",i,sfzgz);
        printf("低收入人群占比%0.2f%%\n\n",(dsr/i)*100);
        printf("中等收入人群占比%0.2f%%\n\n",(zsr/i)*100);
        printf("高收入人群占比%0.2f%%\n\n",(gsr/i)*100);
        fclose(fp);
        printf("按任意键返回主菜单\n"); 
        system("pause");
        system("cls");
        Menu();
        
    }
    
    /*删除职工信息,把员工的信息删除后,后面的数据会替代前面的数据,达到删除的功能*/ 
    void Shanchu()
    {
        int numb,i=0,j,k,select,y=0,t;
        fp=fopen(filename,"rb+");
        if(fp==NULL)
        {
            printf("打开文件失败\n");
            exit(1);
        }
        while(fread(&Yuan,sizeof(struct GongZi),1,fp))            //用结构体数组储存文件中的员工信息 
        {
            yuan[i++]=Yuan;
        }
        for(j=0;j<i-1;j++)                                        //按员工的编号从小到大排序 
        {
            for(k=j+1;k<i;k++)
            {
                if(yuan[j].num>yuan[k].num)
                {
                    Yuan=yuan[j];
                    yuan[j]=yuan[k];
                    yuan[k]=Yuan;
                    
                } 
            }
        }
        
        printf("请输入你要删除的员工编号:");
        scanf("%d",&numb); 
        for(j=0;j<i;j++)
        {
            if(yuan[j].num==numb)
            {
                printf("员工编号:%07d 姓名:%s 基本工资:%0.2f 津贴:%0.2f 岗贴:%0.2f 补贴:%0.2f 房贴:%0.2f 交通补贴:%0.2f 实发工资:%0.2f\n\n",
                yuan[j].num,yuan[j].name,yuan[j].jbgz,yuan[j].jt,yuan[j].gt,yuan[j].bt,yuan[j].ft,yuan[j].jtbt,yuan[j].sfgz); 
                
                
                printf("按 1 删除,按其他数字键取消删除\n\n");
                
                scanf("%d",&t);
                if(t!=1)
                {
                    system("cls"); 
                    Menu();
                    break;
                }
                for(k=j;k<i;k++)            //后面的结构体往前面移动;                                
                {
                    yuan[k]=yuan[k+1];
                }
                y++; 
            }
        
        }
        if(y==0)
            printf("查无此人!!!\n");
        else
            printf("删除成功!\n\n");
                
        fclose(fp);                            //这里选择先将文件关闭,再重新用 wb 从头开始写进去 
        fp=fopen(filename,"wb+");
        if(fp==NULL)
        {
            printf("打开文件失败\n");
            exit(1);
        }
                                    
        for(j=0;j<i-y;j++)                        //重新把结构体数组写进文件,这里要减掉删除的那个数; 
        {
            fwrite(&yuan[j],sizeof(struct GongZi),1,fp);
        }            
        
        printf("*****(1)继续删除*****(2)主菜单**********\n");
        printf("请输入你的选择[ ]\b\b");
        scanf("%d",&select);
        while(1)
        {
            if(select==2)
            {
                fclose(fp);
                system("cls"); 
                Menu();
            }
            else if(select==1) 
            {    
                fclose(fp);
                system("cls");
                Shanchu();
            }
            else
                scanf("%d",&select);
        
        }
     } 
    
    /*当用户输出其他数字时,无法进行其他操作,可以利用此函数让用户重新输入*/ 
    void Try_again()
    {
        int n;
        printf("输入错误:请重新输入!!!\n");
        printf("请再次输入您的选择[ ]\b\b");
        scanf("%d",&n);
        switch(n)
        {
            case 0: exit(0);
            case 1: Gongz();   break;
            case 2: Tianj();   break;
            case 3: zhuijia();  break;
            case 4: Chax();    break;
            case 5: Shanchu(); break;
            case 6: Xiug();    break;
            case 7: Tongji();    break;
            default: Try_again(); break;
        } 
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月1日

悬赏问题

  • ¥15 skynet MySQL ProtocolBuffers
  • ¥15 浏览器关闭事件有时没执行怎么回事
  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?