/*******************************************************************************
职工工资管理小软件
*******************************************************************************/
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define N 20
int NN;
/******************************************************************************
函数声明
*******************************************************************************/
void enter();
int menu();
void input();
void output();
void search();
void search_employeeid();
void search_name();
void edit();
void array();
void array_basesalary();
void array_postwage();
void array_totalwage();
void array_yiliaobaoxian();
void array_gongjijin();
void statistics();
void save();
void load();
void del();
void delE();
void delName();
/******************************************************************************
职工类型定义
*******************************************************************************/
struct employee
{
char employeeid[10];
char name[10];
int sex;
int age;
float basesalary;
float postwage;
float yiliaobaoxian;
float gongjijin;
float totalwage;
};
/******************************************************************************
职工变量定义
******************************************************************************/
struct employee emp[N];
struct employee replace;
struct employee *p=emp;
/*****************************************************************************
系统主函数
******************************************************************************/
void main()
{
int c;
while(1)
{
printf(" \n\n\n\n");
printf(" 欢迎进入职工工资管理系统 \n\n\n");
printf(" 1 进入管理系统 \n\n");
printf(" 0 退出 \n\n");
printf(" \n\n\n\n");
printf(" 请输入你选择: \n");
scanf("%d",&c);
switch(c)
{
case 1:
enter();
break;
case 0:
printf(" 谢谢使用!\n");
exit(0);
}
}
}
/*****************************************************************************
功能:登陆函数,进行密码验证
*****************************************************************************/
void enter()
{
char key[10],password[10]="1";
int k=1;
printf(" 请输入密码: \n");
scanf("%s",key);
while(k<=3)
{
if(strcmp(password,key)==0)
{
while(1)
{
int a;
//system("cls");
a=menu();
switch(a)
{
case 1:
input();break;
case 2:
output();break;
case 3:
search();break;
case 4:
edit();break;
case 5:
array();break;
case 6:
load();statistics();break;
case 7:
del();break;
case 0:
printf("\n\n 谢谢使用!\n\n\n\n");
save();
exit(0);
}
}
}
else
{
k++;
printf(" 输入密码错误!请再次输入:");
scanf("%s",key);
if(k>2)
{
if(strcmp(password,key)==0)
continue;
else
{
printf(" 输入密码错误三次,系统将自动退出!\n");
exit(0);
}
}
}
}
}
/************************************************************************
功能: 主菜单函数
参数:a
类型:int
说明: 变量
返回值: a
************************************************************************/
int menu()
{
int a ;
printf("\n\n");
printf("|*****************欢迎进入职工工资管理系统************************|\n");
printf("| |\n");
printf("| |\n");
printf("| 1 输入职工信息 |\n");
printf("| |\n");
printf("| 2 职工信息输出 |\n");
printf("| |\n");
printf("| 3 职工信息查询 |\n");
printf("| |\n");
printf("| 4 修改职工信息 |\n");
printf("| |\n");
printf("| 5 工资排序 |\n");
printf("| |\n");
printf("| 6 工资统计 |\n");
printf("| |\n");
printf("| 7 删除职工信息 |\n");
printf("| |\n");
printf("| 0 退出 |\n");
printf("| |\n");
printf("| |\n");
printf("|**************** ***********************|\n");
printf("\n\n");
printf(" 请输入你所选择的选项:");
scanf("%d",&a);
while(a>7||a<0)
{
printf(" error!\n");
printf(" 请重新输入你所选择的选项:");
scanf("%d",&a);
}
return a;
}
/************************************************************************************
功能:职工信息输入
*************************************************************************************/
void input()
{
int c;
p=emp;
printf(" 进入职工信息输入模块 \n\n\n");
printf(" 请输入增加职工的数量: \n\n\n");
scanf("%d",&NN);
for(c=0;c<NN;c++,p++)
{
p[c].totalwage=p[c].basesalary+p[c].postwage-p[c].yiliaobaoxian-p[c].gongjijin;
printf(" 请输入第%d个职工信息:\n\n",c+1);
printf(" 请输入职工号:\n");
scanf("%s",p->employeeid);
if(strcmp(p->employeeid,"0")!=0)
{
printf(" 请输入职工姓名:\n");
scanf("%s",p->name);
printf(" 请输入职工性别: \n");
scanf("%d",&p->sex);
printf(" 请输入职工年龄: \n");
scanf("%d",&p->age);
printf(" 请输入职工基本工资:\n");
scanf("%f",&p->basesalary);
printf(" 请输入职工岗位工资:\n");
scanf("%f",&p->postwage);
printf(" 请输入职工医疗保险:\n");
scanf("%f",&p->yiliaobaoxian);
printf(" 请输入职工公积金: \n");
scanf("%f",&p->gongjijin);
printf(" 职工信息输入完成! \n\n");
}
else
return;
}
save();
}
/*******************************************************************************
功能:职工信息输出
********************************************************************************/
void output()
{
int j;
load();
p=emp;
printf(" 进入职工信息输出模块 \n\n\n");
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("--------------------------------------------------------------------------------\n");
for(j=0;j<NN;j++)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;;
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
printf("-------------------------------------------------------------------------------\n");
}
printf("\n\n 职工信息输出完成! \n\n");
getchar();
}
/******************************************************************************功能:职工信息查询
******************************************************************************/
void search()
{
int j;
while(1)
{
printf("*********************职工信息查询*********************\n\n\n");
printf(" 1 按职工号查询 \n");
printf(" 2 按职工姓名查询 \n");
printf(" 0 退出该项操作 \n");
printf("\n\n");
while(1)
{
printf(" 请输入你的选择 \n");
scanf("%d",&j);
if(j>=0&&j<=2)
{
switch(j)
{
case 1:
search_employeeid();break;
case 2:
search_name();break;
case 0:
return;
}
}
else
{
printf(" 输入错误! \n\n");
printf(" 请再次输入你的选择: \n\n");
}
}
}
}
/*******************************************************************************
功能:按职工号查询函数
*******************************************************************************/
void search_employeeid()
{
char employeeid[10];
int k,j;
p=emp;
printf("*********************按职工号查询职工信息*****************************\n\n\n\n");
printf(" 请输入要查询职工的职工号: \n\n");
scanf("%s",employeeid);
for(k=0;k<NN;k++)
{
if(strcmp(employeeid,p->employeeid)==0)
{
j=k;
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
printf("--------------------------------------------------------------------------------\n");
break;
}
else
{
printf(" not found\n");
return;
}
}
}
/*****************************************************************************
功能:按职工姓名查询函数
*****************************************************************************/
void search_name()
{
char name[10];
int flog=0;
int f,j;
p=emp;
printf("******************************按职工姓名查询职工信息***********************\n\n\n");
printf(" 请输入要查询职工的姓名: \n\n");
scanf("%s",name);
for(f=0;f<NN;f++,p++)
{
if(strcmp(name,p->name)==0)
{
j=f;
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
printf("--------------------------------------------------------------------------------\n");
break;
}
else
{
printf(" not found \n\n");
return;
}
}
getchar();
}
/*******************************************************************************
功能:职工信息修改函数
*******************************************************************************/
void edit()
{
char e[10];
int g=0,j;
char flog;
p=emp;
printf(" 请输入你要修改职工的职工号: \n");
scanf("%s",e);
for(g=0;g<NN;g++)
{
// if(*e==p[g].employeeid)
if(strcmp(e,p->employeeid)==0)
{
j=g;
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
printf("--------------------------------------------------------------------------------\n");
printf(" 是否要修改该职工信息?y(是)or n(否)?\n\n");
getchar();
scanf("%c",&flog);
if(flog == 'y')
{
printf(" 请输入新姓名:\n");
scanf("%s",p->name);
printf(" 请输入性别: \n");
scanf("%d",&p->sex);
printf(" 请输入年龄: \n");
scanf("%d",&p->age);
printf(" 请输入基本工资:\n");
scanf("%f",&p->basesalary);
printf(" 请输入岗位工资:\n");
scanf("%f",&p->postwage);
printf(" 请输入职工医疗保险:\n");
scanf("%f",&p->yiliaobaoxian);
printf(" 请输入职工公积金: \n");
scanf("%f",&p->gongjijin);
printf(" 修改职工信息成功! \n\n");
}
if(flog == 'n')
{
printf(" 退出该项操作! \n\n");
return;
}
save();
}
if(g==NN)
{
printf(" not found \n\n\n");
return;
}
}
}
/************************************************************************
功能:职工工资排列函数
************************************************************************/
void array()
{
int j;
while(1)
{
printf("*************************工资排序*********************\n\n");
printf(" 1 按基本工资排序 \n\n");
printf(" 2 按岗位工资排序 \n\n");
printf(" 3 按总工资排序 \n\n");
printf(" 4 按医疗保险排序 \n\n");
printf(" 5 按公积金排序 \n\n");
printf(" 0 退出 \n\n");
printf("\n\n\n");
while(1)
{
printf(" 请输入你的选择: \n\n");
scanf("%d",&j);
if(j>=0&&j<=5)
{
switch(j)
{
case 1:
array_basesalary();break;
case 2:
array_postwage();break;
case 3:
array_totalwage();break;
case 4:
array_yiliaobaoxian();break;
case 5:
array_gongjijin();break;
case 0:
return;
}
}
else
{
printf(" 输入错误!\n\n\n");
printf(" 请再次输入你的选择:\n\n");
}
}
}
}
/**************************************************************************
功能:按基本工资排列(选择法)
***************************************************************************/
void array_basesalary()
{
int i,j,k;
p=emp;
for(i=0;i<NN-1;i++)
{
k=i;
for(j=i+1;j<NN;j++)
{
if(p[k].basesalary<p[j].basesalary)
k=j;
}
if(k!=i)
{
replace=emp[k];
emp[k]=emp[i];
emp[i]=replace;
}
}
for(j=0;j<NN;j++)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
}
printf("--------------------------------------------------------------------------------\n");
}
/************************************************************************
功能:按岗位工资排列(冒泡法)
*************************************************************************/
void array_postwage()
{
int i,j;
p=emp;
for(i=0;i<NN;i++)
{
for(j=0;j<NN-i;j++)
{
if(p[j].postwage<p[j+1].postwage)
{
replace=emp[j];
emp[j]=emp[j+1];
emp[j+1]=replace;
}
}
}
for(j=0;j<NN;j++)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
}
printf("--------------------------------------------------------------------------------\n");
}
/************************************************************************
功能:按医疗保险排列(冒泡法)
************************************************************************/
void array_yiliaobaoxian()
{
int i,j;
p=emp;
for(i=0;i<NN;i++)
{
for(j=0;j<NN-i;j++)
{
if(p[j].yiliaobaoxian<p[j+1].yiliaobaoxian)
{
replace=emp[j];
emp[j]=emp[j+1];
emp[j+1]=replace;
}
}
}
for(j=0;j<NN;j++)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
}
printf("--------------------------------------------------------------------------------\n");
}
/************************************************************************
功能:按公积金排列(选择法)
************************************************************************/
void array_gongjijin()
{
int i,j,k;
p=emp;
for(i=0;i<NN-1;i++)
{
k=i;
for(j=i+1;j<NN;j++)
{
if(p[k].gongjijin<p[j].gongjijin)
k=j;
}
if(k!=i)
{
replace=emp[k];
emp[k]=emp[i];
emp[i]=replace;
}
}
for(j=0;j<NN;j++)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
}
printf("--------------------------------------------------------------------------------\n");
}
/************************************************************************
功能:按总工资排列(插入法)
************************************************************************/
void array_totalwage()
{
int i,j;
p=emp;
for(i=1;i<NN;i++)
{
replace=emp[i];
for(j=i-1;j>=0&&p[i].totalwage>p[i].totalwage;j--)
{
emp[j+1]=emp[j];
emp[j+1]=replace;
}
}
for(j=NN-1;j>=0;j--)
{
p[j].totalwage=p[j].postwage+p[j].basesalary-p[j].yiliaobaoxian-p[j].gongjijin;;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[j].employeeid,p[j].name,p[j].sex,
p[j].age,p[j].basesalary,p[j].postwage,p[j].yiliaobaoxian,p[j].gongjijin,p[j].totalwage);
}
printf("--------------------------------------------------------------------------------\n");
}
/*************************************************************************
功能:工资统计函数
**************************************************************************/
void statistics()
{
int z,a=0,b=0,c=0;
p=emp;
for(z=0;z<NN;z++)
{
if(p[z].totalwage>3000)
{
a++;
continue;
}
if(p[z].totalwage>=2000&&p[z].totalwage<=3000)
{
b++;
continue;
}
if(p[z].totalwage<=2000&&p[z].totalwage>0)
{
c++;
continue;
}
}
printf(" 总工资在3000元以上的职工人数有: %d\n\n",a);
printf(" 总工资在2000元至3000元的职工人数有:%d\n\n",b);
printf(" 总工资在2000元以下的职工人数有: %d\n\n",c);
getchar();
}
/***************************************************************************
功能:导出函数
***************************************************************************/
void save()
{
int k;
FILE *fp;
p=emp;
if((fp=fopen("emp_list","wb"))==NULL)
{
printf(" Create file error!\n");
return;
}
for(k=0;k<NN;k++,p++)
{
if(fwrite(p,sizeof(struct employee),1,fp)!=1)
{
printf(" file save error!\n\n");
break;
}
else
continue;
}
getchar();
fclose(fp);
}
/***********************************************************************
功能:导入函数
***********************************************************************/
void load()
{
int l;
FILE *fp;
p=emp;
if((fp=fopen("emp_list","rb"))==NULL)
{
printf(" Create file error!\n");
exit(0);
}
for(l=0;l<NN;l++,p++)
{
if(fread(p,sizeof(struct employee),1,fp)!=1)
{
printf(" file read error!\n\n");
break;
}
else
continue;
}
getchar();
fclose(fp);
}
/***********************************************************************
功能:删除函数
***********************************************************************/
void del()
{
int in;
while(1)
{
printf(" ************************\n");
printf(" | 1.按职工号码删除 |\n");
printf(" | |\n");
printf(" | 2.职工按姓名删除 |\n");
printf(" | |\n");
printf(" | 3.返回上一级菜单 |\n");
printf(" ************************\n");
printf(" 请在1~3之间选择: ");
scanf("%d",&in);
if(in<1 || in>3)
{
printf("\a输入有误,请重新输入!\n");
continue;
}
else
break;
}
switch(in)
{
case 1:
delE();
break;
case 2:
delName();
break;
case 3:
break;
}
}
/* 删除函数,按职工号码删除*/
void delE()
{
char employeeid[10];
char ch;
int t,i,j;
p=emp;
printf("\n-------------------- 请输入要删除的职工的姓名 ------------------------");
printf("\n输入: ");
scanf("%s",employeeid);
for(i=0;i<NN;i++)
{
if((strcmp(employeeid,p[i].employeeid))==0)
{
t=i;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[t].employeeid,p[t].name,p[t].sex,
p[t].age,p[t].basesalary,p[t].postwage,p[t].yiliaobaoxian,p[t].gongjijin,p[t].totalwage);
printf("--------------------------------------------------------------------------------\n");
printf("\n确定要删除吗?(Y / N)");
scanf(" %c",&ch);
printf("\n");
if(ch=='y' || ch=='Y')
{
for(j=i;j<NN-1;j++)
{
p[j]=p[j+1];
}
system("cls");
printf("\n\n\n\n\n\t\t\t删除成功\n");
printf("\n\n\n按任意键继续操作:");
getchar();getchar();
NN--;
break;
}
}
}
}
/* 删除函数,按职工姓名删除*/
void delName()
{
char name[10];
char ch;
int t,i,j;
p=emp;
printf("\n-------------------- 请输入要删除的职工的姓名 ------------------------");
printf("\n输入: ");
scanf("%s",name);
for(i=0;i<NN;i++)
{
if((strcmp(name,p[i].name))==0)
{
t=i;
printf("--------------------------------------------------------------------------------\n");
printf("|职工号 |姓名 |性别 |年龄 |基本工资 |岗位工资 |医疗保险 |公积金 |总工资 |\n");
printf("|%8s|%7s|%5d|%5d| %7.2f| %7.2f| %7.2f| %7.2f|%7.2f|\n",p[t].employeeid,p[t].name,p[t].sex,
p[t].age,p[t].basesalary,p[t].postwage,p[t].yiliaobaoxian,p[t].gongjijin,p[t].totalwage);
printf("--------------------------------------------------------------------------------\n");
printf("\n确定要删除吗?(Y / N)");
scanf(" %c",&ch);
printf("\n");
if(ch=='y' || ch=='Y')
{
for(j=i;j<NN-1;j++)
{
p[j]=p[j+1];
}
system("cls");
printf("\n\n\n\n\n\t\t\t删除成功\n");
printf("\n\n\n按任意键继续操作:");
getchar();getchar();
NN--;
break;
}
}
}
}
文件应该没写进去吧
fopen("emp_list.txt", "wb")
fopen("emp_list.txt", "rb");
而且程序有bug,输完第一个后,第二个没让我输入职工号