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

课程设计目的和要求

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

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

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

系统主要功能包括:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

代码:

#include 
#include 
#include 
#include 
#include 
#include 
 
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;igerenxinxi[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;i3000) 
   
    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 
  

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(C++实现企业职工工资管理系统)