#include<stdio.h>
#include<string.h>
#include<Windows.h>
#define N 3
int isEmp = 0;
struct employee
{
int id;
char name[20];
char plase[20];
int age;
float greads;
char level[20];
};
void InputEmpInformation(struct employee emp[N])
{
int i,j;
printf("请输入%d位员工工号、姓名、岗位、年龄、成绩\n",N);
printf("工号\t姓名\t岗位\t年龄\t成绩\n");
for (i = 0;i < N;i++)
{
scanf("%d%s%s%d%f",&emp[i].id ,&emp[i].name ,&emp[i].plase ,&emp[i].age ,&emp[i].greads );
for(j=0;j<i;j++)
{
if(emp[i].id==emp[j].id)
{
printf("工号重复");
i--;
}
}
}
isEmp = 1;
};
void SetputEmpLevel(struct employee emp[N])
{
int i;
if(isEmp == 0)
{
printf("未输入员工信息!\n");
return;
}
for(i = 0;i < N;i++)
{
if(emp[i].greads<100&&emp[i].greads>=90)
strcpy(emp[i].level,"优秀");
if(emp[i].greads<90&&emp[i].greads>=80)
strcpy(emp[i].level,"良好");
if(emp[i].greads<80&&emp[i].greads>=70)
strcpy(emp[i].level,"中等");
if(emp[i].greads<70&&emp[i].greads>=60)
strcpy(emp[i].level,"及格");
if(emp[i].greads<60)
strcpy(emp[i].level,"不及格");
}
};
void OutputEmpInformation(struct employee emp[N])
{
int i;
if(isEmp == 0)
{
printf("未输入员工信息!\n");
return;
}
printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0;i < N;i++)
{
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );
}
};
void CoutEveryLevelNum(struct employee emp[N])
{
int i;
int a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<N;i++)
{
if(strcmp(emp[i].level,"优秀")==0)
{
a++;
}else if(strcmp(emp[i].level,"良好")==0)
{
b++;
}else if(strcmp(emp[i].level,"中等")==0)
{
c++;
}else if(strcmp(emp[i].level,"及格")==0)
{
d++;
}else if(strcmp(emp[i].level,"不及格")==0)
{
e++;
}
}
printf("优秀有%d人\t良好有%d人\t中等有%d人\t及格有%d人\t不及格有%d人\n",a,b,c,d,e);
if(isEmp == 0)
{
printf("当前未输入员工信息!\n");
return;
}
};
void Lookemp(struct employee emp[N])
{
int i,cid;
char choice,name;
float greads;
if(isEmp == 0)
{
printf("未输入员工信息!\n");
return;
}
printf("请输入查找员工的id");
scanf("%d",&cid);
for(i = 0;i<= N;i++)
{
if(cid==emp[i].id)
{
printf("请输入需要修改的信息:a姓名\tb成绩\n");
scanf("%s",&choice);
getchar();
switch(choice)
{
case'a':
case'A':
printf("请输入名字");
scanf("%s",&emp[i].name);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );
break;
case'b':
case'B':
printf("请输入成绩");
scanf("%s",&emp[i].greads);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );
break;
}
}
if(i==N)
printf("未找到相关人员");
return;
}
};
void MarkSort(struct employee emp[N])
{
int temp;
int vIndex[20];
int i,j;
if(isEmp == 0)
{
printf("未输入员工信息!\n");
return;
}
for(i=0;i<N;i++)
{
vIndex[i]=i;
}
for(i=1;i<N;i++)
{
for(j=0;j<N-i;j++)
{
if(emp[vIndex[j]].greads>emp[vIndex[j+1]].greads)
{
temp=vIndex[j];
vIndex[j]=vIndex[j+1];
vIndex[j+1]=temp;
}
}
}
for(i=0;i<N;i++)
{
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[vIndex[i]].id ,emp[vIndex[i]].name ,emp[vIndex[i]].plase ,emp[vIndex[i]].age ,emp[vIndex[i]].greads ,emp[vIndex[i]].level );
}
};
void InputFile(struct employee emp[N])
{
FILE *fp;
int i;
char path[50];
printf("输入文件路径:");
getchar();
gets(path);
fp=fopen(path,"w");
if(fp==NULL)
{
printf("文件不能为空!");
return;
}
fprintf(fp,"工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0;i < N;i++)
{
fprintf(fp,"%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level);
}
fclose(fp);
printf("写入成功!\n");
};
void OutputFile(struct employee emp[N])
{
FILE *fp;
int i;
char path[50];
printf("输入文件路径:");
getchar();
gets(path);
fp=fopen(path,"r");
if(fp==NULL)
{
printf("文件为空!");
return;
}
fscanf(fp,"工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0;i < N;i++)
{
fscanf(fp,"%d\t%s\t%s\t%d\t%.2f\t%s\n",&emp[i].id ,&emp[i].name ,&emp[i].plase ,&emp[i].age ,&emp[i].greads ,&emp[i].level);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level);
}
fclose(fp);
printf("读取成功!\n");
};
int main()
{
int num;
struct employee emp[N];
printf("*使用提示:请在使用前在#define区域修改员工人数,默认为3人\n");
while(1)
{
printf("---------------------------\n请选择程序\n1输入员工信息\n2计算等级人数\n3修改员工信息\n4按照分数排序\n5写入文件\n6读出文件\n7退出系统\n---------------------------\n");
scanf("%d",&num);
switch(num)
{
case 1:
InputEmpInformation(emp);
SetputEmpLevel(emp);
OutputEmpInformation(emp);
break;
case 2:
CoutEveryLevelNum(emp);
break;
case 3:
Lookemp(emp);
break;
case 4:
MarkSort(emp);
break;
case 5:
InputFile(emp);
break;
case 6:
OutputFile(emp);
break;
case 7:
exit(0);
break;
}
}
system("pause");
return 0;
}
如上,相关基础功能已经差不多了,但是我想让用户自定义员工数量,现在的想法是添加一条让用户修改宏定义的提示,有没有让用户在程序里就能完成这些的解决方案?