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);

}


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

以上是 C++实现企业职工工资管理系统 的全部内容, 来源链接: utcz.com/z/361668.html

回到顶部