• 职工工资管理系统 --C语言


    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define NUM 1000
    void enter();
    void search_num();
    void dele_num();
    void modi_num();
    void browse();
    void count();
    void load();
    void add();
    void menu(); 
    int n;   //员工的总数
    struct emploee  //职工数据结构
    {
     char no[5];
     char name[8];
     char sex[3];
     int age;
     float wage1;      //员工的基本工资
     float wage2;      //员工的职务工资
     float funds;      //员工的住房公积金
     float WATERfee;   //员工的水电费
     float TAXfee;     //员工的个人所得税
     float wage3;      //员工的实发工资
    }emp[NUM],newemp;
    void main()
    {
     menu();
    }
    
    void menu()//主界面
    {  int n,w1;
       
       do
       { system("cls");  
          printf("************* 职工工资管理系统 **************
    ");
          printf("*            1-----输入职工信息                     *
    ");
          printf("*            2-----查询职工信息                     *
    ");
          printf("*            3-----根据职工ID号修改              *
    ");
          printf("*            4-----根据职工ID号删除              *
    ");
          printf("*            5-----据工资统计并浏览              *
    ");
          printf("*            6-----从文件载入信息                 *
    ");
          printf("*            7-----浏览全部职工                    *
    ");
          printf("*            8-----追加职工信息                    *
    ");
          printf("*            9-----退出程序                           *
    ");
          printf("***************************************************
    ");
      printf("       输入您的选择(1-9):[ ]");
      scanf("%d",&n);
      if(n<1||n>9)                                    //对选择的数字作判断
             {
                w1=1;
                printf("your choice is not between 1 and 9,Please input again:");
                getchar();
              }
             else    w1=0;
          } 
        while(w1==1);
      switch(n)
      { case 1:enter();    break;   
        case 2:search_num();   break;  
        case 3:modi_num();   break;    
        case 4:dele_num();   break;    
        case 5:count ();    break;    
        case 6:load();    break;      //保存模块
        case 7:browse();    break;      //加载模块
        case 8:add();    break; 
        case 9:printf("
    ×××××××谢谢,欢迎下次光临!×××××××
    
    ");
        default:exit(0);  //退出系统,exit(0)函数功能是退出程序。
      }
    }
    /*************************输入模块**********************/
    void enter()
    {
         FILE *fp;
         int n,i;
         if ((fp=fopen("emp.txt","wb"))==NULL)
         {
     
         printf("不能建立emp文件
    ");
         exit(1);
         }
         printf("输入职工人数:");
        scanf("%d",&n);
         printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资  公积金 水电费  税<Enter>
    ");
         for(i=0;i<n;i++)   /*  循环获取n个职工记录 */
         {
             printf("第%d个职工:",i+1);
             scanf("%s%s%s%d%f%f%f%f%f",emp[i].no,emp[i].name,emp[i].sex,&emp[i].age,
               &emp[i].wage1,&emp[i].wage2,&emp[i].funds,&emp[i].WATERfee,&emp[i].TAXfee);
             emp[i].wage3=emp[i].wage1+emp[i].wage2+emp[i].funds-emp[i].WATERfee-emp[i].TAXfee;
         }
         for(i=0;i<n;i++)      /*将n个职工记录写入文件*/
              fwrite(&emp[i],sizeof(struct emploee),1,fp);
         fclose(fp);
    }
    /*************************统计模块**********************/
    void count()
    {
         FILE *fp;
         int n,num;
         if((fp=fopen("emp.txt","rb"))==NULL)
         {
             printf("不能打开emp文件
    ");
             exit(1);
         }
         printf("请输入工资数:");
         scanf("%d",&num);
         printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费  税  实发工资
    ");
         for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp)!=0;n++)
         if(emp[n].wage3>=num)
         printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f   %.1f   %.1f
    ",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
                 emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);
         fclose(fp);
    }
    /********************删除模块*******************/
    
    void dele_num()
    {
         FILE *fp;
         int i,j,n;
         char num[5];
         if((fp=fopen("emp.txt","rb"))==NULL)
         {
             printf("不能打开emp文件
    ");
             exit(1);
          }
         printf("删除前:
    ");
         printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金  水电费   税  实发工资
    ");
        for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)
         printf("%6d%6s%9s%4s%5d   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f
    ",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
                 emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);/*n为emp文件中记录数*/
         printf("要删除的职工号:");
         scanf("%s",num);
         for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)
         if(i>=n)
         {
              printf("	没有%s职工号的职工
    ",num);
              exit(2);
         }
         fclose(fp);
         fp=fopen("emp.dat","w+");
         if(n==1)  /*一个记录已经删除了*/
         {
               fclose(fp);
               exit(3);
         }
         for(j=0;j<i;j++)
            fwrite(&emp[j],sizeof(struct emploee),1,fp);
         for(j=i+1;j<n;j++)
             fwrite(&emp[j],sizeof(struct emploee),1,fp);
         printf("删除后:
    ");
         fseek(fp,0,SEEK_SET);
         printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金 水电费   税  实发工资
    ");
         for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
             printf("%6d%6s%9s%4s%5d%   %.1f    %.1f   %.1f   %.1f   %.1f   %.1f
    ",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                     emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
           fclose(fp);
    }
    /********************修改模块*******************/
    void modi_num()
    {
         FILE *fp;
         int i,j;
         char num[5];
         if((fp=fopen("emp.txt","rb+"))==NULL)
         {
             printf("不能 打开emp文件
    ");
             exit(1);
         }
         printf("要修改的职工号:");
         scanf("%s",num);
         for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
        if(!strcmp(emp[i].no,num))break;
         if(feof(fp))
         {
              printf("	没有%s职工号的职工
    ",num);
              exit(2);
         }
         printf("记录号 职工号   姓名 性别 年龄 基本工资 职务工资  公积金  水电费   税  实发工资
    ");
         printf("%6d%6s%9s%4s%5d%   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f
    ",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                  emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
        printf("输入格式:职工号   姓名 性别 年龄 基本工资 职务工资 公积金  水电费 税 <Enter>
    ");
        printf("第%d个记录:",i+1);
        scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
                   &newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);//获取新的职工记录
                 newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;
        fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR);  //文件指针指向该修改的记录开头
         fwrite(&newemp,sizeof(struct emploee),1,fp);  //用newemp覆盖当前记录
         printf(" 修改后:
    ");
        fseek(fp,0,SEEK_SET);        //显示修改后的文件数据
         printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资
    ");
         for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
             printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f  %.1f   %.1f
    ",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                       emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
        fclose(fp);
    }
     /*************************查询模块***********************/
    void search_num()
    {
         FILE *fp;
         int i; 
         char num[5];
         if((fp=fopen("emp.txt","rb"))==NULL)
         {
              printf("不能打开emp文件
    ");
              exit(1);
         }
         printf("要查询的职工号:");
         scanf("%s",num);
         for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
             if(!strcmp(emp[i].no,num)) break;
        if(feof(fp))
        {
            printf("	查无此人
    ");
            exit(2);
        }
         printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费    税   实发工资
    ");
         printf("%6d%6s%9s%4s%5d  %.1f  %.1f  %.1f  %.1f   %.1f   %.1f
    ",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                   emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
           fclose(fp);
    }
    /*******************浏览模块********************/
    void browse()
    {    int i;
         FILE *fp;
         if((fp=fopen("emp.txt","r"))==NULL)
         {     
             printf("不能打开emp文件
    ");
             exit(0);
         }
         printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资
    ");
         for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
         {
              printf("%6d%6s%9s%4s%5d  %.1f  %.1f     %.1f    %.1f    %.1f   %.1f
    ",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                       emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
        }
        fclose(fp);
    }
    /******************追加模块*******************/
    void add()
    {
          FILE *fp;
          int n,i,j;
          if((fp=fopen("emp.txt","ab+"))==NULL)
          {
              printf("不能打开emp文件
    ");
               exit(0);
          }
        printf("要追加的职工人数:");
          scanf("%d",&n);
          for(i=0;i<n;i++) 
          { 
              printf("输入格式:职工号   姓名 性别 年龄   基本工资 职务工资  公积金  水电费  税   <Enter>
    ");
             printf("追加记录:
    ");
             scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
                       &newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);
                 newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;//获取一个新的职工记录
            fwrite(&newemp,sizeof(struct emploee),1,fp);   //将该职工记录写入文件
          }
          fclose(fp);
    }
     
    /*************************载入模块**********************/
    void load()          //加载记录或可以计算记录个数的函数
    {
         FILE *fp;
         int i,w;
         w=1;
         system( "cls" ); 
        if((fp=fopen("emp.txt","rb"))==NULL)      //以输出打开方式,在此前的记录被覆盖
        {
            printf("
    Cannot open file
    ");
            w=0;
            return ;
        }
        n=0;
        for(i=0;!feof(fp);i++)
        {   
            fread(&emp[i],sizeof(struct emploee),1,fp);
            n++;
        }
        n=n-1;
              fclose(fp);
        if(w==1) 
        {
            printf("Load file ok!");
            getchar();
            getchar();
            menu();                
        }
    }
     
  • 相关阅读:
    多文档上传文件
    每个程序员都有一颗想改变世界的心
    获取在服务器上面的路径
    串行口通信(二)之串行口方式0
    串行口通信(一)
    keil进阶教程
    keil教程之新建软件工程
    定时器2的使用
    定时器之计数器应用
    定时器(二)
  • 原文地址:https://www.cnblogs.com/xuhuaiqu/p/4525326.html
Copyright © 2020-2023  润新知