職工工資管理系統 --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("************* 職工工資管理系統 **************\n");
      printf("*            1-----輸入職工信息                     *\n");
      printf("*            2-----查詢職工信息                     *\n");
      printf("*            3-----根據職工ID號修改              *\n");
      printf("*            4-----根據職工ID號刪除              *\n");
      printf("*            5-----據工資統計並瀏覽              *\n");
      printf("*            6-----從文件載入信息                 *\n");
      printf("*            7-----瀏覽全部職工                    *\n");
      printf("*            8-----追加職工信息                    *\n");
      printf("*            9-----退出程序                           *\n");
      printf("***************************************************\n");
  printf("       輸入您的選擇(1-9):[ ]\b\b");
  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("\n×××××××謝謝,歡迎下次光臨!×××××××\n\n");
    default:exit(0);  //退出系統,exit(0)函數功能是退出程序。
  }
}
/*************************輸入模塊**********************/
void enter()
{
     FILE *fp;
     int n,i;
     if ((fp=fopen("emp.txt","wb"))==NULL)
     {
 
     printf("不能建立emp文件\n");
     exit(1);
     }
     printf("輸入職工人數:");
    scanf("%d",&n);
     printf("輸入格式:職工號 姓名 性別 年齡 基本工資 職務工資  公積金 水電費  稅<Enter>\n");
     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文件\n");
         exit(1);
     }
     printf("請輸入工資數:");
     scanf("%d",&num);
     printf("記錄號 職工號 姓名 性別 年齡 基本工資 職務工資 公積金 水電費  稅  實發工資\n");
     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",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文件\n");
         exit(1);
      }
     printf("刪除前:\n");
     printf("記錄號 職工號 姓名 性別 年齡   基本工資 職務工資 公積金  水電費   稅  實發工資\n");
    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",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("\t沒有%s職工號的職工\n",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("刪除后:\n");
     fseek(fp,0,SEEK_SET);
     printf("記錄號 職工號 姓名 性別 年齡   基本工資 職務工資 公積金 水電費   稅  實發工資\n");
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
         printf("%6d%6s%9s%4s%5d%   %.1f    %.1f   %.1f   %.1f   %.1f   %.1f\n",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文件\n");
         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("\t沒有%s職工號的職工\n",num);
          exit(2);
     }
     printf("記錄號 職工號   姓名 性別 年齡 基本工資 職務工資  公積金  水電費   稅  實發工資\n");
     printf("%6d%6s%9s%4s%5d%   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f\n",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>\n");
    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(" 修改后:\n");
    fseek(fp,0,SEEK_SET);        //顯示修改后的文件數據
     printf("記錄號 職工號   姓名 性別 年齡   基本工資 職務工資   公積金  水電費   稅   實發工資\n");
     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\n",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文件\n");
          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("\t查無此人\n");
        exit(2);
    }
     printf("記錄號 職工號   姓名 性別 年齡   基本工資 職務工資   公積金  水電費    稅   實發工資\n");
     printf("%6d%6s%9s%4s%5d  %.1f  %.1f  %.1f  %.1f   %.1f   %.1f\n",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文件\n");
         exit(0);
     }
     printf("記錄號 職工號   姓名 性別 年齡   基本工資 職務工資   公積金  水電費   稅   實發工資\n");
     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\n",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文件\n");
           exit(0);
      }
    printf("要追加的職工人數:");
      scanf("%d",&n);
      for(i=0;i<n;i++) 
      { 
          printf("輸入格式:職工號   姓名 性別 年齡   基本工資 職務工資  公積金  水電費  稅   <Enter>\n");
         printf("追加記錄:\n");
         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("\nCannot open file\n");
        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();                
    }
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM