一、项目需求:
-
创建一对文件Teacher.h Teacher.m。1分
-
在 Teacher.h中,定义一个 Teacher结构体,成员变量包括:姓名、性别、
年龄、员工编号、评分。2分
-
声明一个打印Teacher的函数,void printTeacher(Teacher* teacher)。1
分 实现部分 4分
-
定义一个函数指针类型,typedef BOOL(*CompareFunctionPointer)(Teacher
teacher1, Teacher teacher2);1分
-
声明一个实现老师数组排序的函数, void sortTeachers(Teacher
teacher[ ] ,int count, CompareFunctionPointer cfp);1分 实现部分4 分
-
声明一个打印数组中所有老师的函数,void printTeachers(Teacher * teachers,
intcount);1分 实现部分4分
-
分别声明两个比较 Teacher姓名的函数: BOOL
compareNameByAscending(Teacher teacher1 , Teacher teacher2);(升序方 式 )、BOOL compareNameByDescending(Teacher teacher1, Teacherteacher2);(降序方式)。2分 实现部分 8分
-
分别声明两个比较 Teacher员工编号的函数: BOOLcompareNumberByAscending(Teacher teacher1 , Teacher teacher2);(升序方式)、BOOLcompareNumberByDescending(Teacher teacher1,Teacherteacher2);(降序方式)2分 实现部分8分
-
分别声明两个比较 Teacher员工评分的函数: BOOLcompareScoreByAscending(Teacher teacher1 , Teacher teacher2);(升序方 式 )、BOOL compareScoreByDescending(Teacher teacher1, Teacherteacher2);(降序方式)2分 实现部分 8分
10.声 明 一 个 输 出 教 师 数 组 中 全 部 男 老 师 的 函 数 ,voidprintMaleTeacher(Teacher * teachers, int count);1分实现部分4分
11.声 明 一 个 输 出 教 师 数 组 中 全 部 女 老 师 的 函 数 ,voidprintFemaleTeacher(Teacher * teacher, int count);1分实现部分4分
12.声明一个枚举FunctionName,其中的每个枚举值于用户从控制台输入的功能数字一一对应。例如:当从控制台输入1 时,此时实现按照姓名进行升序排列。
3)根据控制台输入的数字,控制输出结果:
1)使用while 循环实现重新输入功能。7分
2)使用switch...case 实现:根据控制台输入的 1~8之间的数字,对 Teacher数组进行不同排序并输出结果。case的数值使用 1~8数字对应的枚举值。6分
3)输入数字1~6,对Teacher 数组进行排序,使用 sortTeachers函数、比较函数实现排序,排序后使用printTeachers 函数打印输出所有老师信息。4分
4)输入数字7~8,根据性别筛选老师,分别使用printMaleTeacher、
以下为实现:
#import<Foundation/Foundation.h>
// 定义一个Teacher结构体
typedefstruct Teacher {
char name[50];
char sex;
int age;
int number;
float score;
} Teacher;
// 声明一个打印Teacher的函数
void printTeacher(Teacher *teacher);
// 定义一个函数指针类型
typedefBOOL (*CompareFunctionPointer)(Teacher teacher1,Teacher teacher2);
// 声明一个实现老师数组排序的函数
void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp);
// 声明一个打印所有老师的函数
void printTeachers(Teacher *teachers,int count);
// 分别声明两个比较Teacher姓名的函数:
BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2);
BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2);
// 分别声明两个比较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);
// 声明一个输出教师数组中全部男老师的函数:
void printMaleTeacher(Teacher *teachers,int count);
// 声明一个输出教师数组中全部女老师的函数:
void printFeMaleTeacher(Teacher *teachers,int count);
enum FunctionName{
CompareNameByAscending =1,
CompareNameByDescending,
CompareNumberByAscending,
CompareNumberByDescending,
CompareScoreByAscending,
CompareScoreByDescending,
PrintFemaleTeacher,
PrintMaleTeacher
};
#import"Teacher.h"
void printTeacher(Teacher *teacher){
printf("%s,%c,%d,%d,%.2f\n",teacher->name,teacher->sex,teacher->age,teacher->number,teacher->score);
}
void sortTeachers(Teacher teacher[],int count,CompareFunctionPointer cfp){
for (int i =0; i < count - 1; i++) {
for (int j =0; j < count - i - 1; j++) {
if (cfp(teacher[j],teacher[j +1])) {
Teacher temp = teacher[j];
teacher[j] = teacher[j +1];
teacher[j +1] = temp;
}
}
}
printTeachers(teacher,5);
}
void printTeachers(Teacher *teachers,int count){
for (int n =0; n < count; n++) {
printTeacher(teachers + n);
}
}
BOOL compareNameByAscending(Teacher teacher1,Teacher teacher2){
return (strcmp(teacher1.name, teacher2.name) > 0);
}
BOOL compareNameByDescending(Teacher teacher1,Teacher teacher2){
return (strcmp(teacher1.name, teacher2.name) < 0);
}
BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2){
return (teacher1.number > teacher2.number);
}
BOOL compareNumberByDescending(Teacher teacher1,Teacher teacher2){
return (teacher1.number < teacher2.number);
}
BOOL compareScoreByAscending(Teacher teacher1,Teacher teacher2){
return (teacher1.score > teacher2.score);
}
BOOL compareScoreByDescending(Teacher teacher1,Teacher teacher2){
return (teacher1.score < teacher2.score);
}
void printMaleTeacher(Teacher *teachers,int count){
for (int n =0; n < count; n++) {
if (teachers[n].sex =='m') {
printTeacher(teachers + n);
}
}
}
void printFeMaleTeacher(Teacher *teachers,int count){
for (int n =0; n < count; n++) {
if (teachers[n].sex =='f') {
printTeacher(teachers + n);
}
}
}
#import<Foundation/Foundation.h>
#import"Teacher.h"
int main(int argc,const char * argv[]) {
Teacher teacher1 = {"Meiko",'m', 18,2, 88.1};
Teacher teacher2 = {"Deiko",'f', 18,1, 86.1};
Teacher teacher3 = {"Peiko",'m', 18,5, 82.1};
Teacher teacher4 = {"Ceiko",'f', 18,4, 85.1};
Teacher teacher5 = {"Seiko",'m', 18,3, 98.1};
Teacher teachers[] = {teacher1, teacher2, teacher3, teacher4, teacher5};
printf("输入1:按照姓名进行升序排列\n输入2:按照姓名进行降序排列\n输入3:按照员工编号进行升序排列\n输入4:按照员工编号进行降序排列\n输入5:按照评分进行升序排列\n输入6:按照评分进行降序排列\n输入7:实现输出所有的女老师\n实现输出所有的男老师\n====================\n");
while (1) {
int a =0;
printf("请输入实现功能相对应的数字:");
scanf("%d",&a);
switch (a) {
case1:
sortTeachers(teachers, 5,compareNameByAscending);
break;
case2:
sortTeachers(teachers, 5,compareNameByDescending);
break;
case3:
sortTeachers(teachers, 5,compareNumberByAscending);
break;
case4:
sortTeachers(teachers, 5,compareNumberByDescending);
break;
case5:
sortTeachers(teachers, 5,compareScoreByAscending);
break;
case6:
sortTeachers(teachers, 5,compareScoreByDescending);
break;
case7:
printFeMaleTeacher(teachers, 5);
break;
case8:
printMaleTeacher(teachers, 5);
break;
default:
printf("fail\n");
break;
}
}