一个员工管理系统 总是出现 error C2065: 'SetLevel' : undeclared identifier 这个问题 麻烦大家看看到底哪里错了
#include <stdio.h>#define NUM 2 //员工人数
//#define NUM 3 //员工人数
//常量声明,用于变量gender的取值范围
const char Male = 'M';
const char Female = 'F';
//常量声明,用于变量level的取值范围
const char Outstanding = 'O';
const char Excellent = 'E';
const char Acceptable = 'A';
const char Poor = 'P';
const char Dreadful = 'D';
struct employee
{
int eid; //员工号
char name[30]; //姓名,用字符数组存放。姓名的最大长度不超过30个字符
char gender; //性别,取值Male和Female之一
int age; //年龄
double score; //综合得分
char level; //等级,不能直接输入,而是通过计算
} emp[NUM];
void InputEmployee()
{
int i;
printf("请输入员工信息:\t");
printf("(员工个属性之间使用空格分开,两员工之间用回车分隔)\n\t");
printf("员工号 姓名 性别(M/F) 年龄 综合得分\n");
printf("\t-------------------------------------------\n");
for(i = 0;i < NUM;++i)
{
scanf("%d%s%c%d%lf",&emp[i].eid,emp[i].name,&emp[i].gender,&emp[i].age,&emp[i]
.score);
}
getchar();
}
//在此处填入代码,实现输入员工信息的功能
void PrintEmployee(int i)
{
printf("%d\t%s\t%c\t%d\t%.2lf\t%c\n",emp[i].eid,emp[i].name,emp[i].gender,emp[i].age,emp
[i].score,emp[i].level);
}
void PrintEmployees()
{
int i = 0;
printf("\n\t=== 公司员工信息表如下 ===\t\n");
printf("员工号\t 姓名\t 性别\t 年龄\t 得分\t 等级\n");
printf("-----------------------------------------------\n");
while (i<NUM)
{
PrintEmployee(i);
i++;
}
putchar('\n');
} //此处填入代码,实现向屏幕输出全部员工信息的功能
char getLevel(double score)
{
char level;
if (score>=90&&score<=100)
level=Outstanding ;
else if (score>=80&&score<=89)
level=Excellent;
else if (score>=70&&score<=79)
level=Acceptable;
else if (score>=60&&score<=69)
level=Poor;
else
level=Dreadful;
return level;
}
void setLevel()
{
int i;
for(i=0; i<NUM; i++)
emp[i].level = getLevel(emp[i].score);
} //此处填入代码,实现设置员工等级的功能
void Sort(int max[]) //新建的
{
int i,j,t,y;
for(i=0; i<NUM; i++)
max[i]=i; //用一个数组存放结构体数组元素的序号,
for(i=0; i<NUM-1; i++)
{
y=0; //序号数组从第一个开始进行新一轮排序
for(j=0; j<NUM-1-i; j++)
{
if(emp[max[y]].score<emp[max[y+1]].score)
{
t=max[y]; //序号进行交换,
max[y]=max[y+1];
max[y+1]=t;
}
++y;
}
}
}
void PrintSorted()
{
int i;
int a[NUM]; //获取排序后的序号数组
Sort(a);
printf("\n=== 公司员工信息表(按得分排序) ===\n");
printf("员工号\t 姓名\t 性别\t 年龄\t 得分\t 等级\n");
printf("-----------------------------------------------\n");
for(i=0;i<NUM; i++)
PrintEmployee(a[i]);
} //此处填入代码,实现将所有员工按得分降序排序后,输出到屏幕
int Query()
{
int i,j;
printf("请输入查询的工号:");
scanf("%d",&j);
getchar();
for(i=0;i<=NUM;++i)
if(emp[i].eid==j)
return i;
printf("没有该员工信息!\n");
return -1;
}
//此处填入代码,实现查询指定员工的信息的功能
void Modify(int i)
{
printf("请选择要修改的内容,1:修改年龄 2:修改分数");
int k;
scanf("%d",&k);
switch(k)
{
case '1': {
int age;
printf("员工名字%s 原来的年龄为%d\n", emp[i].name, emp[i].age);
printf("年龄只支持小写\n");
printf("请输入他/她现在的年龄:");
scanf("%d",&age);
getchar();
printf("修改成功\n");
emp[i].age = age;
PrintEmployee(i);
}break;
case '2': {
int score;
printf("员工名字%s 原来的得分为%f\n", emp[i].name, emp[i].score);
printf("得分只支持小写\n");
printf("请输入他/她现在的得分:");
scanf("%d",&score);
getchar();
printf("修改成功\n");
emp[i].score = score;
PrintEmployee(i);
};break;
default :printf("选择错误");
} //调用函数必须在主函数 调用
//此处填入代码,实现修改指定员工的信息的功能
}
void QueryTheBestnWorst()
{
int i,best,worst;
double max,min;
max=emp[0].score;
for(i=1;i<NUM;i++)
{
if(emp[i].score>max)
{
max=emp[i].score;
best=i;
}
}
printf("\n员工号 \t姓名\t性别\t年龄\t 得分\t等级\n");
printf("%d\t%s\t%c\t%d\t%lf\t%c\n",emp[best].eid,emp[best].name,emp[best].gender,emp[best].age,emp[best].score,emp[best].level);
min=emp[NUM-1].score;
for(i=0;i<NUM;i++)
{
if(emp[i].score<min)
{
min=emp[i].score;
worst=i;
}
}
printf("\n员工号 \t姓名\t性别\t年龄\t 得分\t等级\n");
printf("%d\t%s\t%c\t%d\t%lf\t%c\n",emp[worst].eid,emp[worst].name,emp[worst].gender,emp[worst].age,emp[worst].score,emp[worst].level);
} //此处填入代码,实现查询得分最高和最低的员工信息
int levelsuanfa(char level)
{
int b=0;
for(int a=0;a<NUM;a++)
{
if(emp[a].level==level)
b++;
}
return b;
}
void LevelStatistic()
{
char levels[5]={Outstanding,Excellent,Acceptable,Poor,Dreadful};
for(int i=0;i<5;i++)
printf("等级%c:一共有%d个员工\n",levels[i],levelsuanfa(levels[i]));
//此处填入代码,实现统计每一等级的员工数目
}
const char *filename = "empinfo.txt";
void WriteFile(const char *filename, const struct employee *emp, int len)
{
/* FILE *fp;
int i;
employee p = *emp;
fp = fopen("empinfo.txt","w");
for(i = 0;i < len;++i,++p)
fprintf(fp,"员工号:%d 姓名:%s 性别:%c 年龄:%d 得分:%d 等级:%c\n", emp[i].eid, emp[i].name, emp[i].gender,
emp[i].age, emp[i].score, emp[i].level);
fclose(fp);
printf("创建文件成功\n");//此处填入代码,实现将所有员工信息(除等级外)存储到一个文件中
*/}
int ReadFile(const char *filename, struct employee *emp, int len)
{
//此处填入代码,实现从文件中读出员工信息
return 0;}
int main()
{
char choice;
int endflag = 1;
int i;
while (endflag)
{
fflush(stdin); //清空输入缓冲区
printf(">>>>>>>>>>>>>>>>>>\n请选择你要做的工作:\n");
printf("1. 输入员工信息\n"
"2. 显示/排序\n"
"3. 查询并修改员工信息\n"
"4. 查询得分最高和最低的员工信息\n"
"5. 统计每一等级的员工数目\n"
"6. 将所有信息存储到一个文件中\n"
"7. 从文件中读出信息\n"
"8. 退出\n");
choice = getchar();
getchar(); // eat the last return
switch (choice)
{
case '1':
InputEmployee();
SetLevel();
PrintEmployees();
break;
case '2':
PrintSorted();
break;
case '3':
i = Query();
if (i != -1)
Modify(i);
break;
case '4':
QueryTheBestnWorst();
break;
case '5':
LevelStatistic();
break;
case '6':
WriteFile(filename, emp, NUM);
break;
case '7':
if (ReadFile(filename, emp, NUM) < 0)
printf("file does not exist\n");
else
printf("信息已从文件读入,请进行其它操作\n");
break;
case '8':
endflag = 0;
break;
default:
printf("选择错误。请重新选择。\n");
}
}
return 0;
}