C++实现企业职工工资管理系统分享!

课程设计目的和要求

工资管理要和人事管理相联系,生成企业每个职工的实际发放工资。

企业职工人事基本信息包括:职工编号、姓名、性别、出生日期、职称(助工、工程师、高级工程师)和任职年限。

企业职工工资信息包括:职工编号、姓名、职务工资、职务补贴、住房补贴、应发工资、个人所得税、养老保险、住房公积金和实发工资。

系统主要功能包括:

(1)创建职工人事基本信息文件,根据提示输入职工的各项信息,按职工编号对职工信息进行排序,并将排序后的职工信息存储到一个文件中。

(2)创建职工的工资信息文件(每个月创建一个文件),其中职工编号和姓名从人事信息文件中复制,其他工资组成项目按下面方法计算。

             职务工资:助工=1270*(1+任职年限*2%)

                       工程师=2360*(1+任职年限*3%)

                       高级工程师=3450*(1+任职年限*5%)

             职务补贴:=职务工资*25%

             住房补贴=(职务工资+职务补贴)*15%

             应发工资=职务工资+职务补贴+住房补贴

             个人所得税=(应发工资-3000)*5%

             养老保险=(职务工资+职务补贴)*10%

             住房公积金=应发工资*5%

             实发工资=应发工资-个人所得税-养老保险-住房公积金

(3)增加职工人事基本信息,在原有职工人事基本信息文件的基础上增加新有的职工信息。

(4)删除职工人事基本信息,提示用户输入要删除的职工编号,如果在文件有该信息存在,则将其信息输出到屏幕上,用户确认后将该信息删除,并将删除后的结果保存至原文件。最后提示用户是否继续进行删除操作。

(5)修改职工人事基本信息,提示用户输入要删除的职工编号,如果在文件有该信息存在,则将其信息输出到屏幕上,然后提示用户要修改的选项(职称、任职年限),并将修改后的结果保存至原文件。最后提示用户是否继续进行修改操作。

(6)按不同条件进行查询操作,输出满足条件的职工工资信息。

① 按职工编号查询,输入一个编号,输出对应职工工资信息。

② 按姓名查询,包括精确查询,模糊查询。

③ 按职称查询,输入职称名称,输出相应职称工资信息。

(7)按不同条件对职工工资信息进行统计工作。

① 统计个职称岗位的职工人数是多少,计算高级工程师比例。

② 计算企业职工的平均实发工资,并输出。

③ 统计职工工资低于平均工资人数,并输出他们的姓名和实发工资。

代码:

  #include<stdafx.h>   #include<stdio.h>   #include<stdlib.h>   #include<string.h>   #include<conio.h>   #include<time.h>      typedef struct date   {    short year;    short month;    short day;   }st3;   typedef struct gerenxinxi   {    char num[30];    char name[30];    char sex[30];    st3 chushengriqi;    char zhicheng[20];    int nianxian;   }st;   typedef struct gerengongzi   {     char num[20];     char name[12];     double zhiwugongzi;     double zhiwubutie;     double zhufangbutie;     double yingfagongzi;     double gerensuodeshui;     double yanglaobaoxian;     double zhufanggongjijin;     double shifagongzi;   }st1;   #define st3_len sizeof(st3)   #define st_len sizeof(st)   #define st1_len sizeof(st1)   #define gerenxinxinum 1000   #define gerengongzinum 1000   st gerenxinxi[gerenxinxinum]={0};   st1 gerengongzi[gerengongzinum]={0};      int loadgerenxinxi(void);//将文件中的信息读取   int originalgerenxinxi(void);//个人信息初始化   void getonegerenxinxi(int i);//输ru一个职工的个人信息   void allgerenxinxi(int bn);//保存所有信息   void xggerenxinxi(int bn);//修改个人信息   void saveonegerenxinxi(int i);//保存个人信息   int addgerenxinxi(int bn);//增加个人信息   int delgerenxinxi(int bn); //删除个人信息   void putonegerenxinxi(int i);//输出一个个人信息   void sort(int bn);//排序   void shengchenggongzi(int bn);//生成工资   void putonegerengongzi(int i);//输出一个人的工资信息   void cxgerenxinxi(int bn);//查询   void cxzhicheng(int bn);//职称查询   void cxname(int bn);//姓名查询   void cxnum(int bn);//编号查询   void tongjigongzixinxi(int bn);//统计工资信息   float avegongzi(int bn);//平均工资   void lowgongzi(int bn);//低于平均工资   void gangweirenshu(int bn);//职工人数      void main()   { int select,bn;     bn=loadgerenxinxi();     if(bn==0)     printf("职工信息为零:");        while(1)     {      printf("n 企业职工工资管理系统  n");      printf("n-----------------------------n");      printf("n 请输入要进行操作前的序号 n");      printf("n  1.输入职工信息   n");      printf("n  2.修改职工信息   n");      printf("n  3.增加职工信息   n");      printf("n  4.删除职工信息   n");      printf("n  5.职工工资    n");      printf("n  6.统计工资信息   n");      printf("n  7.查询工资信息   n");      printf("n  0.退出     n");      printf("n----------------------------n");            scanf("%d",&select);      getchar();      switch(select)      { case 1: originalgerenxinxi(); break;       case 2: xggerenxinxi(bn); break;       case 3: addgerenxinxi(bn); break;       case 4: delgerenxinxi(bn); break;       case 5: shengchenggongzi(bn); break;       case 6: tongjigongzixinxi(bn); break;       case 7: cxgerenxinxi(bn); break;       case 0: return;       default:printf("n按键错误,请重新选择n");      }     }       }   //=====================================================      int loadgerenxinxi(void)//将文件中的信息读取   {    FILE *fb;    int bn=0;    if((fb=fopen("gerenxinxi.txt","r+"))==NULL)    {printf("不能打开n");    return(bn);    }   while(!feof(fb))    if(fread(&gerenxinxi[bn],st_len,1,fb))    bn++;    fclose(fb);    return(bn);   }   //======================================================         int originalgerenxinxi(void)//个人信息初始化   {     int n;     char c='y';     for(n=0;c=='y';n++)     { printf("n输入职工%d的信息:n",n+1);     getonegerenxinxi(n);     printf("n继续输入请按'y',停止请按'n':");     c=getchar(); getchar();     }     sort(n);     allgerenxinxi(n);     return(n);   }   //======================================================   void getonegerenxinxi(int i)//输ru一个职工的个人信息   {    printf("职工编号:");    gets(gerenxinxi[i].num);    printf("姓名:");    gets(gerenxinxi[i].name);    printf("性别:");    gets(gerenxinxi[i].sex);    printf("出生日期:");    scanf("%d.%d.%d",&gerenxinxi[i].chushengriqi.year,&gerenxinxi[i].chushengriqi.month,&gerenxinxi[i].chushengriqi.day);    getchar();    printf("职称(助工,工程师 ,高级工程师):");    gets(gerenxinxi[i].zhicheng);    printf("任职年限:");    scanf("%d",&gerenxinxi[i].nianxian);    getchar();   }   //======================================================      void allgerenxinxi(int bn)//保存所有信息   { FILE *fb;     if((fb=fopen("gerenxinxi.txt","w"))==NULL)     { printf("不能打开n");     exit(1);     }     fwrite(gerenxinxi,st_len,bn,fb);     fclose(fb);   }   //=======================================================      void xggerenxinxi(int bn)//修改个人信息   {    int select,k=-1;    char number[20],c1='y',c2;    if(bn==0)    { printf("n职工信息为空n:");    return;    }    while(c1=='y')    {c2='y';    printf("n请输入要修改的职工编号n");    gets(number);    for(int i=0;i<bn;i++)     if(strcmp(gerenxinxi[i].num,number)==0)    { k=i;    break;}    if(k<0)     printf("n编号有误,请重新输入n");    else    { printf("n职工信息:n");     putonegerenxinxi(k);     while(c2=='y')      {       printf("n请输入要修改项前的序号:n");       printf("1.职称n");       printf("2.任职年限n");       printf("0.退出程序n");              scanf("%d",&select);       getchar();       switch(select)       {        case 1:printf("职称:");         gets(gerenxinxi[k].zhicheng);         break;        case 2:printf("入职年限:");         scanf("%d",&gerenxinxi[k].nianxian);         getchar();         break;        case 0:         exit(1);        default:         printf("n按键错误,请重新输入n");       }       printf("n还要修改该职工其它信息吗(y/n)?n");       c2=getchar();       getchar();       }     }      saveonegerenxinxi(k);      printf("n还要修改其他职工信息吗?(y/n)n");      c1=getchar();      getchar();     }    printf("n按任意键继续n");    getchar();   }   //======================================================      void saveonegerenxinxi(int i)//保存个人信息   {    FILE *fb;    if((fb=fopen("gerenxinxi.txt","r+"))==NULL)    {printf("不能打开 n");    exit(1);    }    fseek(fb,st_len*i,0);     fwrite(&gerenxinxi[i],st_len,1,fb);    fclose(fb);   }      //======================================================   int addgerenxinxi(int bn)//增加个人信息   { char c='y';    FILE *fb;    if((fb=fopen("gerenxinxi.txt","a"))==NULL)    {printf("不能打开n");    exit(1);    }    while(c=='y')    {printf("n请输入新增职工信息:n");     getonegerenxinxi(bn);     fwrite(&gerenxinxi[bn],st_len,1,fb);     bn++;     printf("n继续输入其他职工信息吗?(y/n):");     c=getchar();     getchar();    }       printf("n按任意键继续n:");    getch();    fclose(fb);    return(bn);   }   //======================================================      int delgerenxinxi(int bn) //删除个人信息   {     int k=-1;     char number[20],c1='y',c2;     if(bn==0)     { printf("n信息为空n");     return(bn);     }     while(c1=='y')     { c2='y';      printf("n输入要删除的职工编号n");      gets(number);      for(int i=0;i<bn;i++)       if(strcmp(gerenxinxi[i].num,number)==0)       { k=i;        break;}      if(k<0)       printf("n编号有误,重新输入n");     else     {      printf("n职工信息:n");      putonegerenxinxi(k);      printf("n确定要删除该职工的全部信息吗?(y/n):");      c2=getchar();      getchar();      if(c2=='y')      { for(i=k;i<bn;i++)        gerenxinxi[i]=gerenxinxi[i+1];       bn--;       printf("n成功删除!n");      }      else       printf("n取消删除!n");      printf("n继续删除其它职工信息吗?(y/n):");      c1=getchar(); getchar();     }       }     allgerenxinxi(bn);     printf("n按任意键继续!n");     getch();     return(bn);   }   //====================================================   void putonegerenxinxi(int i)//输出一个个人信息   {    printf("n");    printf("职工编号:");    puts(gerenxinxi[i].num);    printf("姓名:");    puts(gerenxinxi[i].name);    printf("性别:");    puts(gerenxinxi[i].sex);    printf("出生日期:");    printf("%d.%d.%dn",gerenxinxi[i].chushengriqi.year,gerenxinxi[i].chushengriqi.month,gerenxinxi[i].chushengriqi.day);    printf("职称:");    puts(gerenxinxi[i].zhicheng);    printf("任职年限:");    printf("%d",gerenxinxi[i].nianxian);     }      //==================================================   void sort(int bn)//排序   {    st temp;    int i,j;    for(i=0;i<bn-1;i++);    {      for(j=i+1;j<bn;j++)      if(gerenxinxi[i].num >gerenxinxi[i+1].num )      { temp=gerenxinxi[i];       gerenxinxi[i]=gerenxinxi[i+1];       gerenxinxi[i+1]=temp;      }       }   }   //=================================================   void shengchenggongzi(int bn)//生成工资   {      FILE *fp,*fp2;     int i,j;     if ((fp = fopen("gerenxinxi.txt", "r")) == NULL)     {      printf("不能打开n");      exit(0);     }     fread(gerenxinxi,st_len,bn, fp);     if ((fp2 = fopen("gerengongzi.txt", "w")) == NULL)     {     printf("不能打开n");     exit(0);     }     for(i=0;i<bn;i++)     { strcpy(gerengongzi[i].name, gerenxinxi[i].name);      strcpy(gerengongzi[i].num, gerenxinxi[i].num);      if (strcmp(gerenxinxi[i].zhicheng,"助工") == 0)      {gerengongzi[i].zhiwugongzi=1270*(1+gerenxinxi[i].nianxian*0.02);}      if (strcmp(gerenxinxi[i].zhicheng,"工程师") == 0)      {gerengongzi[i].zhiwugongzi=2360*(1+gerenxinxi[i].nianxian*0.03);}      if (strcmp(gerenxinxi[i].zhicheng,"高级工程师") == 0)      {gerengongzi[i].zhiwugongzi=3450*(1+gerenxinxi[i].nianxian*0.05);}         gerengongzi[i].zhiwubutie=gerengongzi[i].zhiwugongzi*0.25;         gerengongzi[i].zhufangbutie=(gerengongzi[i].zhiwubutie+gerengongzi[i].zhiwugongzi)*0.15;         gerengongzi[i].yingfagongzi=gerengongzi[i].zhiwugongzi+gerengongzi[i].zhiwubutie+gerengongzi[i].zhufangbutie;           if(gerengongzi[i].yingfagongzi>3000)            gerengongzi[i].gerensuodeshui=(gerengongzi[i].yingfagongzi-3000)*0.05;           else             gerengongzi[i].gerensuodeshui=0;         gerengongzi[i].yanglaobaoxian=(gerengongzi[i].zhiwubutie+gerengongzi[i].zhiwugongzi)*0.1;         gerengongzi[i].zhufanggongjijin=gerengongzi[i].yingfagongzi*0.05;         gerengongzi[i].shifagongzi=gerengongzi[i].yingfagongzi-gerengongzi[i].gerensuodeshui-gerengongzi[i].yanglaobaoxian-gerengongzi[i].zhufanggongjijin;         }     printf("n");     fwrite(gerengongzi,st1_len,bn,fp2);     fclose(fp);     fclose(fp2);     if ((fp = fopen("gerengongzi.txt", "r+")) == NULL)     {      printf("不能打开n");      exit(1);     }     fread(gerengongzi,st1_len,bn,fp2);     for(j=0;j<bn;j++)     putonegerengongzi(j);      fclose(fp);   }   //==========================================================      void putonegerengongzi(int i)//输出一个人的工资信息   {     printf("n");     printf("职工编号:");     puts(gerengongzi[i].num);     printf("职工姓名:");     puts(gerengongzi[i].name);     printf("劳务工资:");     printf("%fn",gerengongzi[i].zhiwugongzi);     printf("劳务补助:");     printf("%fn",gerengongzi[i].zhiwubutie);     printf("住房补贴:");     printf("%fn",gerengongzi[i].zhufangbutie);     printf("应发工资:");     printf("%fn",gerengongzi[i].yingfagongzi);     printf("个人所得税:");     printf("%fn",gerengongzi[i].gerensuodeshui);     printf("养老保险:");     printf("%fn",gerengongzi[i].yanglaobaoxian);     printf("住房公积金:");     printf("%fn",gerengongzi[i].zhufanggongjijin);     printf("实发工资:");     printf("%fn",gerengongzi[i].shifagongzi);   }   //===============================================   void cxgerenxinxi(int bn)//查询   {     int select;     while(1)     { printf("n请输入要进行操作前的编号n");     printf("1.编号查询n");     printf("2.按姓名查询n");     printf("3.按职称查询n");     printf("0.退出查询n");     scanf("%d",&select);     getchar();     switch(select)     {      case 1:       cxnum(bn);       break;      case 2:       cxname(bn);       break;      case 3:       cxzhicheng(bn);       break;      case 0:      return;      default:printf("n按键错误,请重新选择n");      }     }   }         //==============================================   void cxnum(int bn)   {     int i;     char number[20],c='y';     while(c=='y')     {     printf("n请输入职工编号:");     gets(number);     for(i=0;i<bn;i++)      if(strcmp(gerenxinxi[i].num,number)==0)      {       printf("n职工%d的信息:n");       putonegerenxinxi(i);       printf("n按任意键继续!n");       getch();      }      if(i==bn)      printf("n没有找到职工信息n");      return;          }         printf("n按任意键继续查询!n");     getchar();   }   //================================================   void cxzhicheng(int bn)   {     int i;     char zhicheng[20],c='y';     while(c=='y')     {     printf("n请输入职工职称:");     gets(zhicheng);     for(i=0;i<bn;i++)      if(strcmp(gerenxinxi[i].zhicheng,zhicheng)==0)      {       printf("n职工的信息:n");       putonegerenxinxi(i);       printf("n按任意键继续!n");       getch();      }      if(i==bn)      { printf("n没有找到职工信息n");       return ;      }     }         printf("n按任意键继续查询!n");     getchar();      }   //==============================================      void cxname(int bn)//姓名查询   {     int i,j,k;     char name[12],c='y';     while(c=='y')     {      k=-1;     printf("n请输入职工姓名:");     gets(name);     for(i=0,j=1;i<bn;i++)      if(strcmp(gerenxinxi[i].name,name)==0)      { printf("n当前为准确查询n");       k=i;       printf("n职工%d的信息:n",j++);       putonegerenxinxi(k);       printf("n按任意键继续!n");       getch();      }     if(k==-1)     {      printf("n当前为模糊查询n");      for(i=0,j=1;i<bn;i++)       if(strstr(gerenxinxi[i].name,name)!=NULL)       {        k=i;        printf("n职工%d的信息:n",j++);        putonegerenxinxi(k);        printf("n按任意键继续!n");        getch();       }      if(j==1)       printf("n没有找到职工信息!n");      return;     }          }     printf("n按任意键继续!n");     getchar();   }      //=================================================   void tongjigongzixinxi(int bn)//统计工资信息   {    int select;    while(1)    {     printf("请输入要进行操作前的编号n");     printf(" 1.各职称岗位的职工人数n");     printf(" 2.职工的平均实发工资n");     printf(" 3.低于平均工资的人数n");     printf(" 0.退出统计功能n");         scanf("%d",&select); getchar();     switch(select)     { case 1:gangweirenshu(bn); break;      case 2:avegongzi(bn); break;      case 3:lowgongzi(bn); break;      case 0:return;      default: printf("n按键错误,请重新选择!n");     }     return;          }   }    //=================================================   void gangweirenshu(int bn)//职工人数   { int i,j=0, k=0, m=0;    float ave;    for(i=0;i<bn;i++)    { if(strcmp(gerenxinxi[i].zhicheng ,"助工")==0)     j++;     if(strcmp(gerenxinxi[i].zhicheng ,"工程师")==0)     k++;     if(strcmp(gerenxinxi[i].zhicheng ,"高级工程师")==0)     m++;    }     ave=(m*1.0/bn);     printf("助工人数为%d人n",j);     printf("工程师人数为%d人n",k);     printf("高级工程师人数为%d人n",m);     printf("高级工程师比例为%fn",ave);   }   //==================================================   float avegongzi(int bn)//平均工资   {    int i;    float sum=0;    float ave;    for(i=0;i<bn;i++)    sum=sum+gerengongzi[i].shifagongzi;    ave=(sum/bn);    printf("职工的平均实发工资为:%fn",ave);    return(ave);    return(0);   }   //================================   void lowgongzi(int bn)//低于平均工资   { int i,k=0;    float b;    b=avegongzi(bn);    for(i=0;i<bn;i++)    {     if(gerengongzi[i].shifagongzi<b)     {      k++;      printf("姓名:%sn",gerengongzi[i].name);      printf("工资:%fn",gerengongzi[i].shifagongzi);     }        }    printf("低于平均工资的人数为:%dn",k);   }     

努力了一个多星期,自己头一次做这么大的程序,鼓励一下

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482211.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐