#include
#include
#include
#include
#include
#include
#define M1 "%-6d %-4s %3s %-2d.%.02d.%.02d "
#define M2 em[j].num,em[j].name,em[j].xb,em[j].y,em[j].m,em[j].d
#define M3 "%.2lf %.2lf %.2lf %.2lf\n"
#define M4 em[j].gwgz,em[j].btze,em[j].dkze,em[j].yfgz
#define M5 "\n\n员工号 姓名 性 别 出生年月 基本工资 补贴总额 代扣总额 实际工资\n\n"
void menu();
void menu1();
void srxxI();
void scxxO();
void gztjT();
void gzpxS();
void czxxF();
void czscD();
void tcxtQ();
int i=0;
struct Employee
{
int num;
char name[10];
char xb[3];
int y;
int m;
int d;
double gwgz;
double btze;
double dkze;
double yfgz;
}A;
struct Employee em[100];
int main()
{
char n;
int i=0;
while(1)
{
menu();
scanf("%c",&n);
switch(n)
{
case 'I':
srxxI();
break;
case 'O':
scxxO();
break;
case 'T':
gztjT();
break;
case 'S':
gzpxS();
break;
case 'F':
czxxF();
break;
case 'D':
czscD();
break;
case 'Q':
tcxtQ();
break;
default:break;
}
getch();
}
}
void menu()
{
system("cls");
printf("\t\t*********************************************\n");
printf("\t\t*\t I:输入员工工资信息 *\n");
printf("\t\t*\t O:输出员工工资信息 *\n");
printf("\t\t*\t T:输出员工工资统计信息 *\n");
printf("\t\t*\t S:按要求排序后输出员工工资信息 *\n");
printf("\t\t*\t F:按员工号查找并输出其工资信息 *\n");
printf("\t\t*\t D:按员工号查找并删除其工资信息 *\n");
printf("\t\t*\t Q:退出系统 *\n");
printf("\t\t*********************************************\n\n");
printf("\t\t\t请选择I.O.T.S.F.D.Q:");
}
void menu1()
{
system("cls");
printf("1、员工号是员工信息的唯一标识,不允许重复。长度<=4\n员工号格式:第1位为1--9之间的数字,后面的字符可以是任意数字\n");
printf("2、姓名必须是2个以上的汉字,最多4个汉字。\n");
printf("3、性别只能是男或女。\n");
printf("4、出生日期格式:4位年-月-日(长度<=10)。\n");
printf("5、0<=岗位工资、补贴总额、代扣总额<=99999。\n");
printf("6、输入空格+Ctrl+z结束!\n");
}
void srxxI()
{
system("cls");
menu1();
FILE *fp;
fp=fopen("e:\\bbb.txt","ab+");
if(fp==NULL)
{
char c;
printf("can't open this film!\n");
printf("是否退出?:");
scanf("%c",&c);
if(c=='Y')
exit(0);
else
main();
}
char q;
printf("\nA:录入文件 B:人工输入 请选择:");
scanf("\n%c",&q);
if(q=='A')
{
while(!feof(fp))
{
if(fread(&em[i],sizeof(A),1,fp)==1)
i++;
}
fclose(fp);
printf("录入完成,按任意键返回菜单。");
}
else
{
printf("\n\n员工号 姓名 性 别 出生年月 基本工资 补贴总额 代扣总额\n");
while(1)
{
char ch;
scanf("%d",&em[i].num);
scanf("%s",em[i].name);
scanf("%s",em[i].xb);
scanf("%d-%d-%d",&em[i].y,&em[i].m,&em[i].d);
scanf("%lf",&em[i].gwgz);
scanf("%lf",&em[i].btze);
scanf("%lf",&em[i].dkze);
em[i].yfgz=em[i].gwgz+em[i].btze-em[i].dkze;
i++;
while((ch=getchar())!='\n')
main();
}
}
}
void scxxO()
{
int j;
printf("现有人工总数%d\n",i);
if(i!=0)
{
printf(M5);
for(j=0;j
{
printf(M1,M2);
printf(M3,M4);
}
}
else
printf("按任意键返回主界面。\n");
}
void gztjT()
{
double sum=0.0;
double nansum=0.0,nvsum=0.0;
int j;
int nannum=0;
int nvnum=0;
double max=0.0;
double min=100000.0;
for(j=0;j
{
if(max
max=em[j].yfgz;
if(min>em[j].yfgz)
min=em[j].yfgz;
if(strcmp(em[j].xb,"男")==0)
{
nansum+=em[j].yfgz;
nannum++;
}
if(strcmp(em[j].xb,"女")==0)
{
nvsum+=em[j].yfgz;
nvnum++;
}
sum+=em[j].yfgz;
}
printf("************************************\n");
printf("\f男性工人人数:%d\n",nannum);
printf("\f女性工人人数:%d\n",nvnum);
printf("\f所发工资总额:%.2lf\n",sum);
printf("\f所发工资平均值:%.2lf\n",sum/i);
printf("\f所发最高工资:%.2lf\n",max);
printf("\f所发最低工资:%.2lf\n",min);
if(nannum!=0)
printf("\f男性工资平均值:%.2lf\n",nansum/(nannum));
else
printf("\f无男性员工!\n");
if(nvnum!=0)
printf("\f女性工资平均值:%.2lf\n",nvsum/(nvnum));
else
printf("\f无女性员工!\n");
printf("************************************\n");
}
void gzpxS()
{
struct Employee temp;
printf("按员工号升序排序!\n");
for(int s=0;s
{
for(int j=s;j
{
if(em[j].num
{
temp.num=em[j].num;
strcpy(temp.name,em[j].name);
strcpy(temp.xb,em[j].xb);
temp.y=em[j].y;
temp.m=em[j].m;
temp.d=em[j].d;
temp.gwgz=em[j].gwgz;
temp.btze=em[j].btze;
temp.dkze=em[j].dkze;
temp.yfgz=em[j].yfgz;
em[j].num=em[s].num;
strcpy(em[j].name,em[s].name);
strcpy(em[j].xb,em[s].xb);
em[j].y=em[s].y;
em[j].m=em[s].m;
em[j].d=em[s].d;
em[j].gwgz=em[s].gwgz;
em[j].btze=em[s].btze;
em[j].dkze=em[s].dkze;
em[j].yfgz=em[s].yfgz;
em[s].num=temp.num;
strcpy(em[s].name,temp.name);
strcpy(em[s].xb,temp.xb);
em[s].y=temp.y;
em[s].m=temp.m;
em[s].d=temp.d;
em[s].gwgz=temp.gwgz;
em[s].btze=temp.btze;
em[s].dkze=temp.dkze;
em[s].yfgz=temp.yfgz;
}
}
}
printf(M5);
for(int j=0;j
{
printf(M1,M2);
printf(M3,M4);
}
}
void czxxF()
{
int s;
int flag=0;
int sign=0;
char ch;
while(1)
{
if(sign==1)
{
printf("请继续查找!(如果不继续查找请按'N'!)");
scanf("%c",&ch);
if(ch!='\n')
return;
}
if(sign==0)
printf("请输入要查找的员工的员工号!\n");
scanf("%d",&s);
for(int j=0;j
{
if(em[j].num==s)
{
flag=1;
break;
}
}
if(flag==0)
printf("不存在该员工\n\n");
else
{
printf(M5);
printf(M1,M2);
printf(M3,M4);
}
sign=1;
}
}
void czscD()
{
int s;
int flag=0;
int label;
if(i==0)
{
printf("无员工(按任意键返回)!\n");
return ;
}
tt:printf("请输入要删除的员工的员工号!\n");
scanf("%d",&s);
for(int j=0;j
{
if(em[j].num==s)
{
label=j;
flag=1;
break;
}
}
if(flag==0)
{
printf("不存在该员工\n");
goto tt;
}
if((flag==1)&&(i==0))
{
i=0;
printf("现有员工数为0\n");
return;
}
for(j=label+1;j<=i;j++)
{
em[j-1].num=em[j].num;
strcpy(em[j-1].name,em[j].name);
strcpy(em[j-1].xb,em[j].xb);
em[j-1].y=em[j].y;
em[j-1].m=em[j].m;
em[j-1].d=em[j].d;
em[j-1].gwgz=em[j].gwgz;
em[j-1].btze=em[j].btze;
em[j-1].dkze=em[j].dkze;
em[j-1].yfgz=em[j].yfgz;
}
i--;
printf("编号为%d的员工已经删除!\n",s);
printf("是否继续删除!(如果不继续删除请按'N'!)\n");
}
void tcxtQ()
{
printf("确定要退出?:");
char ch;
scanf("\n%c",&ch);
system("cls");
if(ch=='Y'||ch=='y')
{
printf("\n\n\n\n\n\n\t\t\t\t正在退出?.\n");
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t正在退出?..\n");
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t正在退出?...\n");
Sleep(500);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t正在退出?.\n");
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t正在退出?..\n");
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t正在退出?...\n");
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t The End!");
printf("\n\n\t\t\tWelcome to back again next time^_^\n");
system("pause");
exit(1);
}
else
main();
}
//以下为测试数据
/*
1007 潘介 男 1964-2-28 3520 1800 400
1008 曾院 男 1973-3-27 2300 1300 250
1009 陈心 男 1967-5-28 3340 1200 180
1001 杨流 女 1966-7-17 3755 2000 450
1002 沈慕 男 1981-4-30 3011 1500 300
1003 谢蜂 男 1984-6-30 3598 1800 400
1026 张东 男 1989-7-21 3421 1080 120
1004 傅消 男 1985-2-10 2506 1300 250
1005 倪轻 男 1970-8-22 3243 1200 180
1015 杨琼 女 1992-11-3 4708 2000 450
1016 吕袥 男 1955-9-14 3060 1500 300
1017 陈丽 女 1962-6-15 2588 1200 400
1018 何猜 男 1986-3-16 2595 1300 250
1027 王雪 女 1970-1-30 4560 1900 410
1019 何既 男 1977-4-15 3760 1200 180
1020 何庆 男 1962-11-5 4670 2000 450
1021 李龙 男 1984-6-25 3878 1500 300
1022 吴温 男 1985-11-4 3333 1800 400
1023 左瘟 女 1988-9-15 2566 1300 250
1024 黄城 男 1991-6-19 3222 1200 180
1025 李者 男 1990-5-15 4777 2000 450
*/