软件编程
位置:首页>> 软件编程>> C语言>> C++实现企业职工工资管理系统

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

作者:Mr-Lou  发布时间:2023-11-02 17:34:34 

标签:C++,工资,管理系统

本文实例为大家分享了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.%d\n",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("%f\n",gerengongzi[i].zhiwugongzi);
      printf("劳务补助:");
      printf("%f\n",gerengongzi[i].zhiwubutie);
      printf("住房补贴:");
      printf("%f\n",gerengongzi[i].zhufangbutie);
      printf("应发工资:");
      printf("%f\n",gerengongzi[i].yingfagongzi);
      printf("个人所得税:");
      printf("%f\n",gerengongzi[i].gerensuodeshui);
      printf("养老保险:");
      printf("%f\n",gerengongzi[i].yanglaobaoxian);
      printf("住房公积金:");
      printf("%f\n",gerengongzi[i].zhufanggongjijin);
      printf("实发工资:");
      printf("%f\n",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("高级工程师比例为%f\n",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("职工的平均实发工资为:%f\n",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("姓名:%s\n",gerengongzi[i].name);
           printf("工资:%f\n",gerengongzi[i].shifagongzi);
       }
   
   }
   printf("低于平均工资的人数为:%d\n",k);
}

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

来源:http://blog.csdn.net/zero_bug/article/details/42553139

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com