#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define renshu 200
struct date
{
int nian;
int yue;
int ri;
};
/* 自定义类型 */
struct zhigongxx
{
int gonghao; //本程序中工号必须为整数且不能超过200.
char xingming[50];
char xingbie[6];
struct date riqi;
double jintie;
double zonggongzi;
double shui;
double wuxianyijin;
double yingfa;
}zg[renshu]; //定义了“人数”这么多的可以用来存放职工信息的空间
void shuoming();
void caidan();
void shuru();
void zhengli();
void chazhao();
void shuchu();
void shanchu();
void xiugai();
void duqu();
void baocun();
int s=0;
int n;
/* 主函数 */
void main()
{
int xuanze;
do
{
if(s==0)
{
shuoming();
s++;
}
caidan();
printf("\n");
scanf("%d",&xuanze); //选择命令并执行
if(xuanze==0)
break;
else
switch(xuanze)
{
case 1:
{
shuru();
break;
}
case 2:
{
zhengli();
break;
}
case 3:
{
shanchu();
break;
}
case 4:
{
chazhao();
break;
}
case 5:
{
xiugai();
break;
}
case 6:
{
shuchu();
break;
}
case 7:
{
duqu();
break;
}
case 8:
{
baocun();
break;
}
default :
printf("您输入的数据有误,请重新输入:\n");
};
}while(1);
printf("程序结束,请按任意键结束......\n");
}
/* 菜单输出函数 */
void caidan()
{
printf("*******************************************************\n");
printf("* *\n");
printf("* 请 从 以 下 选 项 中 选 择 : *\n");
printf("* *\n");
printf("* 0: 退 出 1: 输 入 *\n");
printf("* *\n");
printf("* 2:整 理 3:删 除 *\n");
printf("* *\n");
printf("* 4:查 询 5:修 改 *\n");
printf("* *\n");
printf("* 6:显 示 7: 读 取 *\n");
printf("* *\n");
printf("* 8:保 存 *\n");
printf("* *\n");
printf("* 请 从 0 - 8 中 选 择 操 作 : *\n");
printf("* *\n");
printf("*******************************************************\n");
}
/* 说明输出函数 */
void shuoming()
{
printf("********欢迎大家使用小张工资管理系统!********\n");
printf("1.该工资管理系统的计算均是参照国家规定对职工的工资予以扣除或增加,具体方案参照《课程设计》;\n");
printf("2.个人所得税的计算方法参照国家最新标准;\n");
printf("3.其他问题介绍详细请见《课程设计》;\n");
printf("4.请使用人员务必遵守使用规则。\n");
}
/* 个人所得税计算函数 */
double shui(double yingna)
{
if(yingna<0)
printf("数据错误,职工工资不能为负数!\n");
else if(yingna<=1500)
return(yingna*0.03);
else if(yingna<=4500)
return(yingna*0.1-105);
else if(yingna<=9000)
return(yingna*0.2-555);
else if(yingna<=35000)
return(yingna*0.25-1005);
else if(yingna<=55000)
return(yingna*0.3-2755);
else if(yingna<=80000)
return(yingna*0.35-5505);
else
return(yingna*0.45-13505);
}
/* 五险一金计算函数 */
double wuxianyijin(double zonggongzi)
{
double fanhui;
fanhui=zonggongzi*0.15;
return(fanhui);
}
/* 输入函数 */
void shuru()
{
n=0;
do
{
printf("请依次输入第%d位职工的信息:\n",n+1);
printf("输入格式请务必遵守以下格式:工号/姓名/性别/日期(依次输入年,月,日)/津贴/总工资,用空格隔开:\n");
scanf("%d",&zg[n].gonghao);
if(zg[n].gonghao==0)
break;
else
{
scanf("%s%s%d%d%d%lf%lf",zg[n].xingming,zg[n].xingbie,&zg[n].riqi.nian,&zg[n].riqi.yue,&zg[n].riqi.ri,&zg[n].jintie,&zg[n].zonggongzi);
zg[n].wuxianyijin=wuxianyijin(zg[n].zonggongzi);
zg[n].shui=shui(zg[n].zonggongzi-zg[n].wuxianyijin);
zg[n].yingfa=zg[n].zonggongzi-zg[n].wuxianyijin-zg[n].shui;
n++;
}
}while(1);
}
/* 数据整理函数 */
void zhengli()
{
int i,j;
struct zhigongxx temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(zg[i].gonghao>zg[j].gonghao)
{ temp=zg[i];zg[i]=zg[j];zg[j]=temp; }
}
}
printf("整理完成!\n");
}
//以上程序没有问题
/* 查找函数 */
void chazhao()
{
int i;
int choose;
int haoma;
char xx[30];
do
{
printf("请选择:\n");
printf("1.按工号查找:\n");
printf("2.按姓名查找:\n");
printf("3.返回菜单: \n");
scanf("%d",&choose);
if(choose==1 || choose==2)
{
if(choose==1)
{
printf("请输入工号:\n");
scanf("%d",&haoma);
for(i=0;i<n;i++)
{
if(zg[i].gonghao==haoma)
{
printf("工号/姓名/性别/日期(年,月,日)/津贴/总工资/应缴个人所得税/五险一金扣除/应发工资,依次为:\n");
printf("%4d/%s/%s/%2d,%2d,%2d/%.2lf/%.2lf/%.2lf/%.2lf/%.2lf\n",zg[i].gonghao,zg[i].xingming,zg[i].xingbie,zg[i].riqi.nian,zg[i].riqi.yue,zg[i].riqi.ri,zg[i].jintie,zg[i].zonggongzi,zg[i].shui,zg[i].wuxianyijin,zg[i].yingfa);
break;
}
}
if(i>=n)
printf("您所输入的员工号码不存在......\n");
}
if(choose==2)
{
printf("请输入员工姓名(名字之间不允许存在空格):\n");
scanf("%s",xx);
for(i=0;i<n;i++)
{
if(strcmp(zg[i].xingming,xx)==0)
{
printf("工号/姓名/性别/日期(年,月,日)/津贴/总工资/应缴个人所得税/五险一金扣除/应发工资,依次为:\n");
printf("%4d/%s/%s/%2d,%2d,%2d/%.2lf/%.2lf/%.2lf/%.2lf/%.2lf\n",zg[i].gonghao,zg[i].xingming,zg[i].xingbie,zg[i].riqi.nian,zg[i].riqi.yue,zg[i].riqi.ri,zg[i].jintie,zg[i].zonggongzi,zg[i].shui,zg[i].wuxianyijin,zg[i].yingfa);
break;
}
}
if(i>=n)
printf("您所输入的员工姓名不存在......\n");
}
}
else
break;
}while(1);
}
// 以上程序没有问题
/* 输出函数 */
void shuchu()
{
int i;
int j=0;
for(i=0;i<n;i++)
{
j++;
printf("第%d位职工的工号/姓名/性别/日期(年,月,日)/津贴/总工资/应缴个人所得税/五险一金扣除/应发工资,依次为:\n",j);
printf("%4d/%s/%s/%2d.%2d.%2d/%.2lf/%.2lf/%.2lf/%.2lf/%.2lf\n",zg[i].gonghao,zg[i].xingming,zg[i].xingbie,zg[i].riqi.nian,zg[i].riqi.yue,zg[i].riqi.ri,zg[i].jintie,zg[i].zonggongzi,zg[i].shui,zg[i].wuxianyijin,zg[i].yingfa);
}
}
// 以上程序没有问题
/* 删除函数 */
void shanchu()
{
int i;int k;int haoma;int pd;
printf("请输入要删除的员工工号:\n");
scanf("%d",&haoma);
for(i=0;i<n;i++)
{
if(haoma==zg[i].gonghao)
{
k=i;
printf("您确定要删除该员工的信息吗?\n");
printf("确定请输入1,返回请输入2:\n");
scanf("%d",&pd);
if(pd==1)
{
for(i=k;i<n-1;i++)
{ zg[i]=zg[i+1]; }
n--;
printf("删除完成!\n");
break;
}
else
return;
}
}
}
// 以上程序没有问题
/* 修改函数 */
void xiugai()
{
int i;int k=0;
int haoma;
printf("请输入需要修改职工的工号:\n");
scanf("%d",&haoma);
printf("是否继续下一步,是请输入1,返回上一层请输入2:\n");
scanf("%d",&k);
if(k==1)
{
for(i=0;i<n;i++)
{
if(haoma==zg[i].gonghao)
{
printf("请输入修改信息,依次为工号/姓名/性别/日期(年月日)/津贴和总工资:\n");
scanf("%d%s%s%d%d%d%lf%lf",&zg[i].gonghao,zg[i].xingming,zg[i].xingbie,&zg[i].riqi.nian,&zg[i].riqi.yue,&zg[i].riqi.ri,&zg[i].jintie,&zg[i].zonggongzi);
zg[i].wuxianyijin=wuxianyijin(zg[i].zonggongzi);
zg[i].shui=shui(zg[i].zonggongzi-zg[i].wuxianyijin);
zg[i].yingfa=zg[i].zonggongzi-zg[i].wuxianyijin-zg[i].shui;
printf("修改完成!\n");
break;
}
}
if(i>=n)
printf("无此员工的信息......\n");
}
else
printf("返回上一层......\n");
}
// 以上程序没有问题
/* 读取函数 */
void duqu()
{
FILE *fp;
int i;
printf("职工信息按照以下格式输出,依次为:\n");
printf("工号/姓名/性别/日期(年,月,日)/津贴/总工资/应缴个人所得税/五险一金扣除和应发工资:\n");
if((fp=fopen("d:\\zhigongxx.txt","a+"))==NULL)
{
return;
}
n=0;
while(!feof(fp)) //判断文件指针是否指向文件结束处
{
fscanf(fp,"%d%s%s%d%d%d%lf%lf%lf%lf%lf",&zg[n].gonghao,zg[n].xingming,zg[n].xingbie,&zg[n].riqi.nian,&zg[n].riqi.yue,&zg[n].riqi.ri,&zg[n].jintie,&zg[n].zonggongzi,&zg[n].shui,&zg[n].wuxianyijin,&zg[n].yingfa);//利用fscanf()函数输入信息
n++;
}
for(i=0;i<n-1;i++)
{
printf("%4d/%s/%s/%2d.%2d.%2d/%.2lf/%.2lf/%.2lf/%.2lf/%.2lf\n",zg[i].gonghao,zg[i].xingming,zg[i].xingbie,zg[i].riqi.nian,zg[i].riqi.yue,zg[i].riqi.ri,zg[i].jintie,zg[i].zonggongzi,zg[i].shui,zg[i].wuxianyijin,zg[i].yingfa);
}
fclose(fp);
}
//以上程序没有问题
/* 保存函数 */
void baocun()
{
int i;
FILE *fp;
fp=fopen("d:\\zhigongxx.txt","a+");
for(i=0;i<n;i++)
{
fprintf(fp,"%d %s %s %d %d %d %lf %lf %lf %lf %lf\n",zg[i].gonghao,zg[i].xingming,zg[i].xingbie,zg[i].riqi.nian,zg[i].riqi.yue,zg[i].riqi.ri,zg[i].jintie,zg[i].zonggongzi,zg[i].shui,zg[i].wuxianyijin,zg[i].yingfa);//用格式化输出函数输出内容到student.dat
}
fclose(fp);
printf("保存完成!\n");
}
// 程序到此结束,完成。