main
Teacher teachers[5] = {
{"yi", 'f', 25, 1, 88},
{"er", 'm', 26, 2, 68},
{"san", 'm', 65, 3, 99},
{"si", 'm', 36, 4, 85},
{"wu", 'f', 20, 5, 78}
};
printf("输入1:实现按照姓名进行升序排列\n");
printf("输入2:实现按照姓名进行降序排雷\n");
printf("输入3:实现按照员工编号进行升序排列\n");
printf("输入4:实现按照员工编号惊醒降序排列\n");
printf("输入5:实现按照评分进行升序排列\n");
printf("输入6:实现按照评分进行降序排列\n");
printf("输入7:实现输出所有的女老师\n");
printf("输入8:实现输出所有的男老师\n");
printf("==============================\n");
//声明一个枚举,每个枚举值与用户输入的功能数字一一对应
enum FunctionName{
CompareNameByAscending = 1,
CompareNameByDescending,
CompareNumberByAscending,
CompareNumberByDescending,
CompareScoreByAscending,
CompareScoreByDescending,
PrintMaleTeacher,
PrintFemaleTeacher
};
enum FunctionName temp = 0;
int x = 9;
while (x != 0) {
printf("请输入实现功能对应的数字:");
scanf("%d",&x);
temp = x;
if (temp >8) {
printf("对不起,您所输入的数字没有对应的函数,请重新输入!!\n");
}
switch (temp) {
case CompareNameByAscending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareNameByAscending);
break;
case CompareNameByDescending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareNameByDescending);
break;
case CompareNumberByAscending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareNumberByAscending);
break;
case CompareNumberByDescending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareNumberByDescending);
break;
case CompareScoreByAscending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareScoreByAscending);
break;
case CompareScoreByDescending:
sortTeachers(teachers, sizeof(teachers) / sizeof(teachers[0]), compareScoreByDescending);
break;
case PrintMaleTeacher:
printMaleTeacher(teachers, sizeof(teachers) / sizeof(teachers[0]));
break;
case PrintFemaleTeacher:
printFemaleTeacher(teachers, sizeof(teachers) / sizeof(teachers[0]));
break;
default:
break;
}
}
.h
//创建一个Teacher 结构体
typedef struct teacher{
char name[20];//姓名
char gender;//性别
int age;//年龄
int ID;//员工编号
float score;//评分
}Teacher;
//打印Teacher结构体
void printTeacher(Teacher *teacher);
//重命名函数指针类型
typedef BOOL(*CompareFunctionPointer)(Teacher teacher1, Teacher teacher2 );
//对老师数组进行排序
void sortTeachers(Teacher teacher[], int count, CompareFunctionPointer cfp);
//打印数组中所有老师的信息
void printTeachers(Teacher *teachers, int count);
//两个比较Teacher员工编号的函数
//升序方式
BOOL compareNumberByAscending(Teacher teacher1, Teacher teacher2);
//降序方式
BOOL compareNumberByDescending(Teacher teacher1, Teacher teacher2);
//两个比较Teacher 员工评分的函数
//升序方式
BOOL compareScoreByAscending(Teacher teacher1, Teacher teacher2);
//降序方式
BOOL compareScoreByDescending(Teacher teacher1, Teacher teacher2);
//两个比较Teacher 员工姓名的函数
//升序方式
BOOL compareNameByAscending(Teacher teacher1, Teacher teacher2);
//降序方式
BOOL compareNameByDescending(Teacher teacher1, Teacher teacher2);
//输出教师数组中全部男老师
void printMaleTeacher(Teacher *teachers, int count);
//输出教师数组中全部女老师
void printFemaleTeacher(Teacher *teachers, int count);
.m
//两个比较Teacher员工编号的函数
//升序方式
BOOL compareNumberByAscending(Teacher teacher1, Teacher teacher2){
return teacher1.ID > teacher2.ID ? YES : NO;
}
//降序方式
BOOL compareNumberByDescending(Teacher teacher1, Teacher teacher2){
return teacher1.ID < teacher2.ID ? YES : NO;
}
//两个比较Teacher 员工姓名的函数
//升序方式
BOOL compareNameByAscending(Teacher teacher1, Teacher teacher2){
return strcmp(teacher1.name, teacher2.name) > 0 ? YES : NO;
}
//降序方式
BOOL compareNameByDescending(Teacher teacher1, Teacher teacher2){
return strcmp(teacher1.name, teacher2.name) > 0 ? NO : YES;
}
//两个比较Teacher 员工评分的函数
//升序方式
BOOL compareScoreByAscending(Teacher teacher1, Teacher teacher2){
return teacher1.score > teacher2.score ? YES : NO;
}
//降序方式
BOOL compareScoreByDescending(Teacher teacher1, Teacher teacher2){
return teacher1.score > teacher2.score ? NO : YES;
}
//输出教师数组中全部男老师
void printMaleTeacher(Teacher *teachers, int count){
for (int i = 0; i < count; i++) {
if ((teachers + i)->gender == 'm') {
printf("姓名:%s 性别:%c 年龄:%d 员工编号:%d 评分:%.2f\n", (teachers + i)->name, (teachers + i)->gender, (teachers + i)->age, (teachers + i)->ID, (teachers + i)->score);
}
}
}
//输出教师数组中全部女老师
void printFemaleTeacher(Teacher *teachers, int count){
for (int i = 0; i < count; i++) {
if ((teachers + i)->gender == 'f') {
printf("姓名:%s 性别:%c 年龄:%d 员工编号:%d 评分:%.2f\n", (teachers + i)->name, (teachers + i)->gender, (teachers + i)->age, (teachers + i)->ID, (teachers + i)->score);
}
}
}