#include"stdio.h"
#include"string.h"
#define face " ******************************菜单*******************************************\n\n\
1.此操作无效 2.显示所有员工信息\n\
3.显示员工信息 4.最大应发工资和实发工资人员数据\n\
5.查看各工种保险费占其应发工资比率 6.查看工资总额和各工种实发工资总额\n\n\
*****************************************************************************\n"
struct information{
int num; /////////工号
char name[15]; ///////姓名
int age; //////////年龄
char type[15]; /////工种
int b_salary; ///////////基本工资
float p_salary; ///////////岗位工资
float safe_cost; /////////////保险费用
int r_salary; ////////实发工资
}info[6]={01,"叶成",19,"清洁工",350,150.0,10.0,490,
02,"彭冬花",20,"清洁工",350.0,150.0,10.0,490.0,
03,"程虹",20,"清洁工",350.0,150.0,10.0,490.0,
04,"胡盼",20,"经理",500.0,200.0,50.0,650.0,
05,"刘光强",20,"经理",500.0,200.0,50.0,650.0,
06,"董瑶",20,"经理",500.0,200.0,50.0,650.0,};
int show_info(information info[6],int);////按姓名及工号输出工资清单
int max_salary(information info[6],int count);/////最大应发工资和最大实发工资函数,输出最大应发工资和最大实发工资人员的数据
int safe_cost_rate(information info[6],int); ///////////////////////按工种计算保险费占应发工资比率的输出数据
int sum(information info[6],int); ////////////////计算工资总额和工种工资总额函数
int show_list(information info[6],int count); /////////显示清单
main()
{
printf(face);
int count=0; //////////表中的员工数目
int i,result=0;
while(1)
{
printf("~~~~~~~~请输入您要选择的操作号码~~~~~~~~\n");
scanf("%d",&i);
switch(i){
case 2:
show_list(info,6);break;
case 3:
show_info(info,6);break;
case 4:
max_salary(info,6);break;
case 5:
safe_cost_rate(info,6);break;
case 6:
sum(info,6);break;
default:
printf(" 您的输入有误请重新输入\n");
break;
}
}
}
int sum(information info[6],int count) //////////所有员工的工资之和,和同一工种的员工工资之和
{
int i,sum=0,type_sum=0;
char type[15];
printf("请输入工种名\n");
scanf("%s",type);
for(i=0;i<count;i++) {
if(!strcmp(info[i].type,type)) type_sum=type_sum+info[i].r_salary; ////////如果是同一工种求和
sum=sum+info[i].r_salary; //////////////求总工资
}
printf("员工工资总额为:%d\n工种%s工资总额为:%d\n",sum,type,type_sum);
return 0;
}
int safe_cost_rate(information info[6],int count) //////////保险费用占工种岗位工资的比率
{
int i;
char type[15];
printf("请输入工种名\n");
scanf("%s",type);
for(i=0;i<count;i++)
if(!strcmp(info[i].type,type)) { /////////////查找出匹配工种,并输出比率
printf("保险费用占该工种应发工资的比率为:%.3f\n",info[i].safe_cost/info[i].p_salary);
return 0;
}
printf("无此工种\n");
return 0;
}
int max_salary(information info[6],int count) /////////////输出最大应发工资人员的数据和最大实发人员的数据
{
int i,s_max=0,r_max=0,s_[15],r_[15],j=0,k=0;
for(i=0;i<count;i++){
if(s_max==(int)info[i].p_salary) {j++;s_[j]=i;} /////////如果有一样大的成员记录其在数组中的位置
if(s_max<info[i].p_salary) {s_max=info[i].p_salary;j=0;s_[j]=i;} ///////////如果出现更大的将J置0,重新开始记录
if(r_max==info[i].r_salary) {k++;r_[k]=i;} ///////////////////原理同上
if(r_max<info[i].r_salary) {r_max=info[i].r_salary;k=0;r_[k]=i;}
}
//////////////以下是输出统计结果
printf("最大应发工资人员数据为\n");
for(i=0;i<=j;i++)
printf("%d\t %s\t %d\t %s\t %d\t %.0f\t %.0f\t %d\n",
info[s_[i]].num,info[s_[i]].name,info[s_[i]].age,info[s_[i]].type,info[s_[i]].b_salary,
info[s_[i]].p_salary,info[s_[i]].safe_cost,info[s_[i]].r_salary);
printf("最大实发工资人员数据为\n");
for(i=0;i<=k;i++)
printf("%d\t %s\t %d\t %s\t %d\t %.0f\t %.0f\t %d\n",
info[r_[i]].num,info[r_[i]].name,info[r_[i]].age,info[r_[i]].type,info[r_[i]].b_salary,
info[r_[i]].p_salary,info[r_[i]].safe_cost,info[r_[i]].r_salary);
return 0;
}
int show_info(information info[6],int count) ///////////根据员工姓名显示其数据
{
char name[15];
int i;
printf("请输入您要查看的员工姓名\n");
scanf("%s",name);
for(i=0;i<count;i++)
if(!strcmp(info[i].name,name)) { /////////对输入的员工姓名进行匹配,如果有则进行输出
printf("%d %s %d %s %d %.0f %.0f %d\n",info[i].num,info[i].name,info[i].age,info[i].type,
info[i].b_salary,info[i].p_salary,info[i].safe_cost,info[i].r_salary);
return 0;}
printf("不存在该员工\n");
return 0;
}
int show_list(information info[6],int count) ///////////显示清单,即所有员工的数据
{
int i;
printf("工号 姓名 年龄 工种 基本工资 岗位工资 保险费 实发工资\n");
for(i=0;i<count;i++)
printf("%-5d\t %-5s\t %-5d\t %-5s\t %-5d \t %-5.0f %-5.0f %-5d\n",info[i].num,info[i].name,info[i].age,info[i].type,
info[i].b_salary,info[i].p_salary,info[i].safe_cost,info[i].r_salary);
return 0;
}
总是错误..