關於教師信息的升降序排列輸出

一、項目需求:

1.    創建一對文件Teacher.h  Teacher.m。

2.    在Teacher.h中,定義一個Teacher結構體,成員變量包括:姓名、性別、年齡、員工編號、評分。

3.    聲明一個打印Teacher的函數,void  printTeacher(Teacher*  teacher)。

4.    定義一個函數指針類型,typedef  BOOL(*CompareFunctionPointer)(Teacherteacher1, Teacher  teacher2);

5.    聲明一個老師數組排序的函數,void sortTeachers(Teacher teacher[ ] ,int count, CompareFunctionPointer  cfp);

6.    聲明一個打印數組中所有老師的函數,void printTeachers(Teacher * teachers, int count);

7.    分別聲明兩個比較Teacher姓名的函數:BOOL compareNameByAscending(Teacher teacher1 , Teacher  teacher2);(升序方式)、BOOLcompareNameByDescending(Teacher teacher1, Teacher  teacher2);(降序方式)。

8.    分別聲明兩個比較Teacher員工編號的函數:BOOL compareNumberByAscending(Teacher  teacher1 , Teacher  teacher2);(升序方式)、BOOLcompareNumberByDescending(Teacher teacher1, Teacher  teacher2);(降序方式)

9.    分別聲明兩個比較Teacher員工評分的函數:BOOL compareScoreByAscending(Teacher teacher1 , Teacher  teacher2);(升序方式)、BOOLcompareScoreByDescending(Teacher teacher1, Teacher  teacher2);(降序方式)

10. 聲明一個輸出教師數組中全部男老師的函數,void printMaleTeacher(Teacher * teachers, int count);

11. 聲明一個輸出教師數組中全部女老師的函數,void printFemaleTeacher(Teacher * teacher, int count);

12. 聲明一個枚舉FunctionName,其中的每個枚舉值於用戶從控制檯輸入的功能數字一一對應。例如:當從控制檯輸入1時,此時實現按照姓名進行升序排列。


13. 要求在控制檯中,有用戶操作說明。如圖:


14. 在Teacher.m中,實現上述的全部函數。

15.  在main.m文件中要求:

①   創建一個Teacher數組,利用上面的sortTeachers(Teacher  teacher[ ] ,int count,CompareFunctionPointer  cfp)函數,調用函數(使用switch…case,通過控制檯輸入的數字與枚舉值匹配實現調用不同的函數)來分別實現按姓名、員工編號、評分排序,其中每種排序的升、降方式都要實現。比如:分別實現對年齡按照升序、降序排列。

②   輸出教師數組中全部的男老師。

③   輸出教師數組中的所有女老師。

// main.m
//  exam1
//
//  Created by ******* on 15/9/16.
//  Copyright (c) 2015年 ******. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Teacher.h"
int main(int argc, const char * argv[]) {
    
    
    
    
    
   
        Teacher tea1 = {"zhangsan","nan",20,021,89};
        Teacher tea2 = {"lisi","nan",29,012,80};
        Teacher tea3 = {"wangwu","nv",33,032,88};
        Teacher tea4 = {"zhaoliu","nv",21,054,87};
        Teacher tea[] = {tea1,tea2,tea3,tea4};
       
    
        
    
        enum FunctionName i = 0;
        CompareFunctionPointer  cfp = NULL;
        documOptions();
        while(1){
            scanf("%d",&i);
            switch (i) {
                case CompareNameByAscending:
                    cfp = compareNameByAscending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    break;
                case CompareNameByDescending:
                    cfp = compareNameByDescending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    
                    break;
                case CompareNumberByAscending:
                    cfp = compareNumberByAscending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    
                    break;
                case CompareNumberByDescending:
                    cfp = compareNumberByDescending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    
                    break;
                case CompareScoreByAscending:
                    cfp = compareScoreByAscending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    
                    break;
                case CompareScoreByDescending:
                    cfp = compareScoreByDescending;
                    sortTeachers(tea, 4, cfp);
                    printTeachers(tea, 4);
                    
                    break;
                case PrintFemaleTeacher:
                    printFemaleTeacher(tea, 4);
                    
                    break;
                case PrintMaleTeacher:
                    printMaleTeacher(tea, 4);
                    
                    
                    break;
                default:printf("請重新輸入");
                    break;
            }
        
        }
    
    return 0;
}



//  Teacher.h
//  exam1
//
//  Created by ******* on 15/9/16.
//  Copyright (c) 2015年 ******. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef struct Teacher{
    char name[20];
    char sex[5];
    int age;
    int number;
    float score;
}Teacher;



enum FunctionName{
    CompareNameByAscending = 1,
    CompareNameByDescending,
    CompareNumberByAscending,
    CompareNumberByDescending,
    CompareScoreByAscending,
    CompareScoreByDescending,
    PrintFemaleTeacher,
    PrintMaleTeacher
};
//打印結構體函數

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);
//升序、降序排老師姓名方式
BOOL compareNameByAscending(Teacher  teacher1 , Teacher  teacher2);
BOOL compareNameByDescending(Teacher  teacher1, Teacher  teacher2);

//升序、降序排老師員工編號
BOOL compareNumberByAscending(Teacher teacher1 , Teacher teacher2);
BOOL compareNumberByDescending(Teacher teacher1, Teacher teacher2);

//升序、降序排員工評分高低
BOOL compareScoreByAscending(Teacher teacher1 , Teacher teacher2);
BOOL compareScoreByDescending(Teacher teacher1, Teacher teacher2);
//聲明一個輸出教師數組中全部男/女老師的函數
void printMaleTeacher(Teacher * teachers, int count);
void printFemaleTeacher(Teacher * teacher, int count);

void documOptions();



//  Teacher.m
//  exam1
//
//  Created by ****** on 15/9/16.
//  Copyright (c) 2015年 *****. All rights reserved.
//

#import "Teacher.h"

void printTeacher(Teacher *teacher){
    
    printf("姓名:%s,性別:%s,年齡:%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 - 1 - i; j++) {
            if (cfp(teacher[j] ,teacher[j+ 1])) {
                Teacher temp = teacher[j];
                teacher[j] = teacher[j+1];
                teacher[j+1] = temp;
            }
        }
    }
    
    
}

void printTeachers(Teacher * teachers, int count){
    for (int i = 0; i < count; i ++) {
        printf("姓名:%s,性別:%s,年齡:%d,員工編號:%d,評分:%.2f\n",teachers[i].name,teachers[i].sex,teachers[i].age,teachers[i].number,teachers[i].score);
        
    }
    
    
    
}
//升序排老師姓名方式
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 i = 0; i < count; i ++) {
        if(strcmp(teachers[i].sex,"nan") == 0){
            printf("姓名:%s,性別:%s,年齡:%d,員工編號:%d,評分:%.2f\n",teachers[i].name,teachers[i].sex,teachers[i].age,teachers[i].number,teachers[i].score);
        }
    }
}

void printFemaleTeacher(Teacher * teacher, int count){
    for (int i = 0; i < count; i ++) {
        if(strcmp(teacher[i].sex,"nv") == 0){
            printf("姓名:%s,性別:%s,年齡:%d,員工編號:%d,評分:%.2f\n",teacher[i].name,teacher[i].sex,teacher[i].age,teacher[i].number,teacher[i].score);
        }
    }
}

void documOptions(){
    
    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");
    printf("請輸入實現功能對應的數字:\n");
    
}





發佈了10 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章