课程设计---企业职工工资管理系统

来源:互联网 发布:淘宝店铺红包怎么删除 编辑:程序博客网 时间:2024/04/29 09:31

课程设计目的和要求

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

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

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

系统主要功能包括:

(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 1000st 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);}


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

0 0
原创粉丝点击