//创建一个Teacher结构体
typedef struct teacher{
char Name[20];//姓名
char Sex;//性别
int Age; //年龄
int TeacherID;// 编号
float grade;//评分
}Teacher;
//3声明打印Teacher函数
//void printTeacher(Teacher teacher)
void printTeacher(Teacher *tcher,int count);
//定义个函数指针
typedef BOOL (*plus)(Teacher teacher1,Teacher teacher2);
void sortTeachers(Teacher teacher3[],int count,plus pt);
//打印所有老师的函数
void printTeachers(Teacher *teachers,int count);
//分别声明两个比价函数 Teacher 姓名的函数(升序)
BOOL compareNameByAscending1(Teacher teacher1,Teacher teacher2);
//分别声明两个比价函数 Teacher 姓名的函数(降序)
BOOL compareNameByDescending1(Teacher teacher1,Teacher teacher2);
分别声明两个比价函数 Teacher 员工编号的函数(升序)
//
//BOOL compareNumberByAscending(Teacher teacher1,Teacher teacher2);
//分别声明两个比价函数 Teacher 员工编号的函数(升序)
BOOL compareNumberByAscending2(Teacher teacher1,Teacher teacher2);
//分别声明两个比价函数 Teacher 员工编号的函数(降序)
BOOL compareNumberByDescending2(Teacher teacher1,Teacher teacher2);
//分别声明两个比价函数 Teacher 员工评分的函数(升序)
BOOL compareScoreByAscending3(Teacher teacher1,Teacher teacher2);
//分别声明两个比价函数 Teacher 员工评分的函数(降序)
BOOL compareScoreByDescending3(Teacher teacher1,Teacher teacher2);
//声明一个输出教师数组中为全部男老师的函数
void printMaleTeacher(Teacher *teachers,int count);
//声明一个输出教师数组中为全部女老师的函数
void printFemaleTeacher(Teacher *teachers,int count);
void printTeacher(Teacher *tcher,int count)
{
for (int i= 0; i<count; i++) {
printf("name=%s ,sex=%c ,Age=%d, TeacherID=%d grade=%.2f\n",tcher[i].Name,tcher[i].Sex,tcher[i].Age,tcher[i].TeacherID,tcher[i].grade);
}
};
//声明老师数组进行排序
void sortTeachers(Teacher teacher3[],int count,plus pt)
{
for (int i = 0; i<count; i++) {
for (int j = 0; j<count-i-1; j++) {
if (pt(teacher3[j],teacher3[j+1])) {
Teacher temp = teacher3[j+1];
teacher3[j+1] = teacher3[j];
teacher3[j] = temp;
}
}
}
};
//打印所有老师的函数
void printTeachers(Teacher *teachers,int count)
{
for (int i = 0 ; i<count; i++) {
printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",teachers[i].Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);
}
};
//升序方法
BOOL compareNameByAscending1(Teacher teacher1,Teacher teacher2)
{
return strcmp(teacher1.Name,teacher2.Name)>0?YES:NO;
};
//分别声明两个比价函数 Teacher 姓名的函数(降序)
BOOL compareNameByDescending1(Teacher teacher1,Teacher teacher2)
{
return strcmp(teacher1.Name, teacher2.Name)<0 ?YES:NO;
};
//分别声明两个比价函数 Teacher 员工编号的函数(升序)
BOOL compareNumberByAscending2(Teacher teacher1,Teacher teacher2)
{
return teacher1.TeacherID > teacher2.TeacherID?YES:NO;
};
//分别声明两个比价函数 Teacher 员工编号的函数(降序)
BOOL compareNumberByDescending2(Teacher teacher1,Teacher teacher2)
{
return teacher1.TeacherID < teacher2.TeacherID?YES:NO;
};
//分别声明两个比价函数 Teacher 员工评分的函数(升序)
BOOL compareScoreByAscending3(Teacher teacher1,Teacher teacher2)
{
return teacher1.grade > teacher2.grade?YES:NO;
};
//分别声明两个比价函数 Teacher 员工评分的函数(降序)
BOOL compareScoreByDescending3(Teacher teacher1,Teacher teacher2)
{
return teacher1.grade < teacher2.grade?YES:NO;
};
//声明一个输出教师数组中为全部男老师的函数
void printMaleTeacher(Teacher *teachers,int count)
{
for (int i =0; i<count;i++) {
if (teachers[i].Sex=='w') {
printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",(teachers+i)->Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);
}
}
};
//声明一个输出教师数组中为全部女老师的函数
void printFemaleTeacher(Teacher *teachers,int count)
{
for (int i =0; i<count;i++) {
if (teachers[i].Sex=='f') {
printf("名字%s 性别%c 年龄=%d 编号%d 评分%.2f\n",teachers[i].Name ,teachers[i].Sex,teachers[i].Age,teachers[i].TeacherID, teachers[i].grade);
}
}
};
#import <Foundation/Foundation.h>
#import "Teacher.h"
enum FunctionName{
//Teacher 姓名的函数(升序)
CompareNameByAscending1 = 1,
//Teacher 姓名的函数(降序)
CompareNameByDescending1,
// Teacher 员工编号的函数(升序)
CompareNumberByAscending2,
// Teacher 员工编号的函数(降序)
CompareNumberByDescending2,
// Teacher 员工评分的函数(升序)
CompareScoreByAscending3,
// Teacher 员工评分的函数(降序)
CompareScoreByDescending3,
//男老师
PrintMaleTeacher,
//女老师
PrintFemaleTeacher
};
int main(int argc, const char * argv[]) {
//1. 创建一对文件Teacher.h Teacher.m
Teacher Teacher[5]={{"zhangsan",'w',25,9587,80},{"lisi",'f',30,9875,78},{"wangwu",'w',28,5679,92},{"kuijia",'f',20,88,80},{"longyang",'f',24,72,100}};
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByAscending1);
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 funNa= CompareNameByAscending1;
//int a=0;
while (funNa < 9) {
printf("请输入实现功能对应数字:");
scanf("%d",&funNa);
switch (funNa) {
case CompareNameByAscending1:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByAscending1);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case CompareNameByDescending1:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNameByDescending1);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case CompareNumberByAscending2:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNumberByAscending2);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case CompareNumberByDescending2:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareNumberByDescending2);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case CompareScoreByAscending3:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareScoreByAscending3);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case CompareScoreByDescending3:
sortTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]),compareScoreByDescending3);
printTeachers(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case PrintMaleTeacher:
printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
// printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
case PrintFemaleTeacher:
printFemaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
// printMaleTeacher(Teacher,sizeof(Teacher)/sizeof(Teacher[0]));
funNa = 10;
break;
default:
printf("对不起~请重新输入");
continue;
}
}
//a++;
//}
return 0;
}