您的位置:首页 > 其它

职工工资管理系统

2012-02-06 17:40 351 查看
#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

#define HEADER1 " ------------------------------职工工资表--------------------------------------- \n"

#define HEADER2 "|职工工号| 职工姓名 | 职工年龄| 职工性别 | 基本工资 | 岗位工资 | 总工资| \n"

#define HEADER3 "|--------|-----------|---------|----------|-----------|-----------|-------| \n"

#define FORMAT "|%-8s|%-10s |%-9d|%-10s|%-11.0f|%-11.0f|%-7.0f|\n"

#define DATA p->num,p->name,p->age,p->sex,p->jbgz,p->gwgz,p->zgz

#define END "------------------------------------------------------------------- --------\n"

#define N 5

/********************************************************************************************************

定义结构体

*********************************************************************************************************/

/*定义与职工有关的数据结构*/

typedef struct emp /*标记为emp*/

{

char num[10]; /*职工编号*/

char name[15]; /*职工姓名*/

int age; /*年龄*/

char sex[10]; /*性别*/

float jbgz; /*基本工资*/

float gwgz; /*岗位工资*/

float zgz; /*总工资*/

}EMP;

void save(EMP emp[] ,int n);

int Locate(EMP emp[],int n);

/****************************************************************************************************

显示菜单

****************************************************************************************************/

char displaymenu()

{

char k;

system("cls");

printf(" 职工工资系统 \n");

printf(" *************************菜单********************************\n");

printf(" * 1 添加职工信息 2 输出职工信息 *\n");

printf(" * 3 查询职工信息 4 修改职工信息 *\n");

printf(" * 5 职工工资排序 6 职工工资统计 *\n");

printf(" * 7 导出数据 8 导入数据 *\n");

printf(" * 9 退出系统 *\n");

printf(" 请选择你想进行的操作:");

k=getchar();

printf(" ***************************************************************\n");

return k;

}

/******************************************************************************************************

定义输出函数

*******************************************************************************************************/

void printheader() /*格式化输出表头*/

{

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);

}

void printdata(EMP pp) /*格式化输出表中数据*/

{

EMP* p;

p=&pp;

printf(FORMAT,DATA);

}

/************************************************************************************

添加职工信息

************************************************************************************/

int add(EMP emp[] ,int *n)

{

int i=0;

system("cls");

printf("*****************请输入职工信息********\n");

printf("请输入职工工号:\n");

scanf("%s",emp[i].num);

while(strcmp(emp[i].num,"0") )

{

printf("请输入职工姓名: \n");

scanf("%s",emp[i].name);

printf("请输入职工年龄:\n ");

scanf("%d",&emp[i].age);

printf("请输入职工性别: \n");

scanf("%s",emp[i].sex);

printf("请输入职工基本工资: \n");

scanf("%f",&emp[i].jbgz);

printf("请输入职工岗位工资: \n");

scanf("%f",&emp[i].gwgz);

emp[i].zgz=emp[i].jbgz+emp[i].gwgz;

printf("职工总工资:\n %-8.0f\n",emp[i].zgz);

i++;

printf("请输入职工工号:\n");

scanf("%s",emp[i].num);

}

*n=i;

save(emp ,i);

return i;

}

/*****************************************************************************************************

显示函数

******************************************************************************************************/

void Disp(EMP emp[],int n) /*显示数组emp[]中存储的记录,内容为employee结构中定义的内容*/

{

int i;

system("cls");

if(n==0) /*表示没有职工工资记录*/

{

printf("\n=====>没有职工记录!\n");

}

printf("\n\n");

printheader(); /*输出表格头部*/

i=0;

while(i<n) /*逐条输出数组中存储的职工信息*/

{

printdata(emp[i]);

i++;

printf(HEADER3);

}

getchar();

}

/*********************************************************************************************************

查询职工信息函数

**********************************************************************************************************/

int Locate(EMP emp[],int n)

{

int k,m=-1;

char num[10],name[20];

int i=0;

system("cls");

printf("请选择以什么方式查询:1.按职工工号查询 2.按职工姓名查询 \n ");

scanf("%d",&k);

if(k==1)

{

printf("请输入你要查询的职工工号:\n");

scanf("%s",num);

while(i<n)

{

if(strcmp(emp[i].num,num)==0) /*若找到工号*/

{

printf("职工工号:%s\n职工姓名:%s\n职工年龄:%d\n职工性别:%s\n职工基本工资:%-8.0f\n职工岗位工资:%-8.0f\n职工总工资:%-8.0f\n",emp[i].num,emp[i].name,emp[i].age,emp[i].sex,emp[i].jbgz,emp[i].gwgz,emp[i].zgz);

m=i;

getchar();

break;

}

i++;

}

if(i>=n)

printf("没有所找职工信息\n");

getchar();

}

else if(k==2)

{

printf("请输入你要查询的职工姓名:\n");

scanf("%s",name);

while(i<n)

{

if(strcmp(emp[i].name,name)==0) /*若找到姓名*/

{ printf("职工工号:%s\n职工姓名:%s\n职工年龄:%d\n职工性别:%s\n职工基本工资:%-8.0f\n职工岗位工资:%-8.0f\n职工总工资:%-8.0f\n",emp[i].num,emp[i].name,emp[i].age,emp[i].sex,emp[i].jbgz,emp[i].gwgz,emp[i].zgz);

m=i;

getchar();

break;

}

i++;

}

if(i>=n)

printf("没有所找职工信息\n");

}

return m;/*返回一个整数m*/

getchar();

}

/************************************************************************************************

修改职工信息。先按输入的职工编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改

*************************************************************************************************/

void Modify(EMP emp[],int n)

{

int i;

if(n<=0)

{

system("cls");

printf("\n=====>No employee record!\n");

getchar();

return ;

}

system("cls");

printf("修改职工信息");

Disp(emp,n);

i=Locate(emp,n); /*查询到该数组元素,并返回下标值*/

if(i!=-1) /*若p!=-1,表明已经找到该数组元素*/

{

printf("请输入新的职工信息: \n");

printf("职工工号:\n");

scanf("%s",emp[i].num);

printf("职工姓名: \n");

scanf("%s",emp[i].name);

printf("职工年龄:\n ");

scanf("%d",&emp[i].age);

printf("职工性别: \n");

scanf("%s",emp[i].sex);

printf("职工基本工资: \n");

scanf("%f",&emp[i].jbgz);

printf("职工岗位工资: \n");

scanf("%f",&emp[i].gwgz);

emp[i].zgz=emp[i].jbgz+emp[i].gwgz;

printf("职工总工资:\n %-8.0f\n",emp[i].zgz);

save(emp ,n);

printf("\n=====>修改成功!\n");

getchar();

Disp(emp,n);

getchar();

}

else

printf("没有职工信息\n");

getchar();

}

/************************************************************************************************

统计公司的员工的工资在各等级的人数

************************************************************************************************/

void Tongji(EMP emp[],int n)

{

int count2000=0,count3000=0,count0=0;

int i=0;

system("cls");

Disp(emp,n);

i=0;

while(i<n)

{

if(emp[i].zgz>=3000) {count3000++;i=i+1;continue;} /*实发工资>3000*/

if(emp[i].zgz>=2000) {count2000++;i=i+1;continue;} /*2000<=实发工资<3000*/

if(emp[i].zgz<2000) {count0++;i=i+1;continue;} /*实发工资<2000*/

}

printf("\n------------------------------the TongJi result--------------------------------\n");

printf("zgz >= 3000:%d (ren)\n",count3000);

printf("2000<=zgz<3000:%d (ren)\n",count2000);

printf("zgz < 2000:%d (ren)\n",count0);

printf("-------------------------------------------------------------------------------\n");

printf("\n\n**************统计结束****************");

getchar();

}

/************************************************************************************************

导出数据

************************************************************************************************/

void save(EMP emp[],int n)

{

FILE* fp;

int i=0;

fp=fopen("emp","wb+");/*以只写方式打开二进制文件*/

if(fp==NULL) /*打开文件失败*/

{

printf("\n=====>打开文件错误!\n");

return ;

}

for(i=0;i<n;i++)

{

if(fwrite(&emp[i],sizeof(EMP),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/

{

continue;

}

else

{

break;

}

}

if(i>0)

{

getchar();

printf("\n\n*******导出完成,总共导出个数为:%d ********************\n",i);

getchar();

}

else

{

system("cls");

printf("************没有信息导出!!!********************\n");

getchar();

}

fclose(fp); /*关闭此文件*/

}

/**************************************************************************************

导入数据

**************************************************************************************/

void Read(EMP emp[],int * n)

{

FILE* fp;

int i=0;

fp=fopen("emp","rb");/*以只读方式打开二进制文件*/

if(fp==NULL) /*打开文件失败*/

{

printf("\n=====>打开文件错误!\n");

exit(0);

}

for(i=0;i<N;i++)

{

if(fread(&emp[i],sizeof(EMP),1,fp)==1)/*如果读过程发生错误*/

continue;

else

break;

}

*n=i;

if(i>0)

{

printf("\n\n******导入完成,总共导入个数为:%d **************\n",i);

getchar();

}

else

{ system("cls");

printf("************没有信息导入!!!********************\n");

getchar();

}

getchar();

fclose(fp); /*关闭此文件*/

}

/**********************************************************************************************

职工总工资排序

**********************************************************************************************/

/*用冒泡法对职工总工资排序*/

void sort(EMP emp[],int n)

{

int i,j;

float t;

for(i=0;i<n;i++)

for(j=0;j<n-i;j++)

if(emp[j].zgz<emp[j+1].zgz)

{

t=emp[j].zgz;

emp[j].zgz=emp[j+1].zgz;

emp[j+1].zgz=t;

}

Disp(emp,n); /*显示排序后的所有记录*/

save(emp ,n);

printf("\n =====>sort complete!\n");

}

/*选择法对职工总工资排序*

void sort1(EMP emp[],int n)

{int i,j,k;

float t;

for(i=0; i<N-1; i++)

{k=i;

for(j=i+1; j<N; j++)

if(emp[j].zgz>emp[k].zgz) k=j;

if (k!=i)

{t=emp[i].zgz; emp[i].zgz=emp[k].zgz;emp[k].zgz=t;} /* a[i]和a[k]互换 *

Disp(emp,n); /*显示排序后的所有记录*

saveflag=1;

printf("\n =====>sort complete!\n");

}

}

/*用冒泡法对职工总工资排序*/

/*用插入法对职工总工资排序*

void sort2(EMP emp[],int n)

{int i,p,j;

float t;

for(i=1;i<n;i++)

{

t=emp[i].zgz;

for(p=0;p<i;p++)

if(emp[p].zgz<t)

break;

if(p==i)

continue;

for(j=i;j>p;j--)

emp[j].zgz=emp[j-1].zgz;

emp[p].zgz=t;

}

Disp(emp,n); /*显示排序后的所有记录*

printf("\n =====>sort complete!\n");

} */

/*****************************************************************************************************

主函数

*****************************************************************************************************/

void main()

{

EMP emp
;

int n;

char s1[8],s2[8]={"123456"};

int i,k;

for(i=0;i<3;i++)

{

printf("\n请输入密码:");

gets(s1);

if(strcmp(s1,s2)==0)

break;

else

printf("\n密码错误请重新输入");

}

if(i>2)

{

printf("\n您已连续3次将用户名或密码输错,系统将退出!\n");

exit(0);

}

else

{

while(1)

{

k=displaymenu();

switch(k)

{

case '1' : add(emp,&n); break;

case '2' : Read(emp,&n);Disp(emp,n) ;break;

case '3' : Read(emp,&n);Locate(emp,n);break;

case '4' : Read(emp,&n);Modify(emp,n);;break;

case '5' : Read(emp,&n);sort(emp,n);break;

case '6' : Read(emp,&n);Tongji(emp,n); break;

case '7' : save(emp,n) ;break;

case '8' : Read(emp,&n);break;

case '9' : system("cls");printf("*******系统退出,谢谢使用********\n");exit(0);break;

default : printf("输入错误,输入必须是0~9之间的一个数字!请重新输入\n");getchar();getchar();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: