1. 程式人生 > >基於二叉排序樹的高校分數查詢系統

基於二叉排序樹的高校分數查詢系統

前述:該學期最後的資料結構的課程設計選題,於是記錄在自己部落格中,作為自己技術成長的點滴吧。

題目:高校最低錄取分數線的查詢

程式設計實現一個開放式的高校本科招生最低分數線的查詢系統,供師生及家長等查詢,高校自願放入該校的資訊,可能隨時有高校加入。

要求實現的查詢功能有:

  • 查詢等於使用者給定分數的高校
  • 查詢大於(或小於)使用者給定分數的高校
  • 查詢最低錄取分數線的使用者給定的分數段中的高校

  以上就是老師給定題目中要求實現的功能,為了是程式整體更加完整,自己對高校使用部分做了一些功能新增,例如學校資訊的增刪改查等功能。

題目分析:

  該設計重要功能是查詢,查詢表為高校最低錄取分數資訊的集合。根據題意可知,該查詢表中的元素個數可能隨時增減,所以它是一個動態查詢表,可採用樹狀結構儲存。為了提高查詢速度,可建立二叉排序樹並在二叉排序樹中實現查詢。

程式的程式碼結構:

  • 標頭檔案的引入以及結構體的定義
     1 #include <string.h>
     2 #include <ctype.h>
     3 #include <malloc.h>
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6
    7 #define TRUE 1 8 #define FALSE 0 9 #define OK 1 10 #define ERROR 0 11 12 typedef int Status; 13 14 typedef struct node{ 15 struct node *lchild; 16 struct node *rchild; 17 int grade; 18 char university[36]; 19 }BiTreeNode, *BiTree; 20 21
    typedef struct element{ 22 int grade; 23 char university[30]; 24 }Information;

     

  • 建立節點
    1 Status CreateBiTree(BiTree &T){
    2     T=(BiTree)malloc(sizeof(BiTreeNode));
    3     T->lchild = NULL;
    4     T->rchild = NULL;
    5     return OK; 
    6 }

     

  • 高校資訊的插入
     1 Status InsertData(BiTree &T,Information mess){
     2     BiTree NT;
     3     if(T==NULL){
     4         CreateBiTree(T);
     5         T->grade=mess.grade;
     6         strcpy(T->university,mess.university);
     7     }else{
     8         if(mess.grade<T->grade){
     9             if(T->lchild==NULL){
    10                 CreateBiTree(NT);
    11                 T->lchild=NT;
    12                 NT->grade=mess.grade;
    13                 strcpy(NT->university,mess.university);
    14             }else
    15                 InsertData(T->lchild,mess);
    16         }else{
    17             if(T->rchild==NULL){
    18                 CreateBiTree(NT);
    19                 T->rchild=NT;
    20                 NT->grade=mess.grade;
    21                 strcpy(NT->university,mess.university);
    22             }else
    23                 InsertData(T->rchild,mess);
    24         }
    25     }
    26     return OK;
    27 }

     

  • 查詢相應的學校,存在返回結構體指標T,否則返回NULL,其中FT為查詢到節點T的父母節點,lr用來表明為其左右子樹(0為左子樹,1為右子樹)
     1 BiTree FindUniversity(BiTree T,BiTree &FT,Information mess,int &lr){
     2     BiTree BT=NULL;
     3     if(T->lchild){
     4         if(FindUniversity(T->lchild,FT,mess,lr))
     5             BT=FindUniversity(T->lchild,FT,mess,lr);
     6         if(strcmp(T->lchild->university,mess.university)==0){
     7             FT=T;
     8             lr=0;
     9         }
    10     }
    11     if(strcmp(T->university,mess.university)==0){
    12         return T;
    13     }
    14     if(T->rchild){
    15         if(FindUniversity(T->rchild,FT,mess,lr))
    16             BT=FindUniversity(T->rchild,FT,mess,lr);
    17         if(strcmp(T->rchild->university,mess.university)==0){
    18             FT=T;
    19             lr=1;
    20         }
    21     } 
    22     return BT;
    23 }

     

  • 刪除學校 
     1 Status DeleteData(BiTree &T,Information mess){
     2     BiTree NT=NULL,FT=NULL,GT=NULL,LT=NULL;
     3     int lr=3;
     4     if(NT=FindUniversity(T,FT,mess,lr)){
     5         if(NT->lchild==NULL&&NT->rchild==NULL){
     6             free(NT);
     7             if(lr==0)
     8                 FT->lchild=NULL;
     9             else if(lr==1)
    10                 FT->rchild=NULL;
    11             else
    12                 T=NULL;
    13         }else if(NT->lchild==NULL){
    14             if(lr==0)
    15                 FT->lchild=NT->rchild;
    16             else if(lr==1)
    17                 FT->rchild=NT->rchild;
    18             else
    19                 T=NT->rchild;
    20             free(NT);
    21         }else if(NT->rchild==NULL){
    22             if(lr==0)
    23                 FT->lchild=NT->lchild;
    24             else if(lr==1)
    25                 FT->rchild=NT->lchild;
    26             else
    27                 T=NT->lchild;
    28             free(NT);
    29         }else{
    30             LT=NT;
    31             GT=NT->rchild;
    32             while(GT->lchild){
    33                 LT=GT;
    34                 GT=GT->lchild;
    35             }
    36             if(GT->rchild&&LT==NT){
    37                 LT->rchild=GT->rchild;
    38                 NT->grade=GT->grade;
    39                 strcpy(NT->university,GT->university);
    40                 free(GT);
    41             }else if(GT->rchild){
    42                 LT->lchild=GT->rchild;
    43                 NT->grade=GT->grade;
    44                 strcpy(NT->university,GT->university);
    45                 free(GT);
    46             }else{
    47                 NT->grade=GT->grade;
    48                 strcpy(NT->university,GT->university);
    49                 LT->lchild=NULL;
    50                 free(GT);
    51             }
    52         }
    53     }
    54     return OK;
    55 } 

     

  • 查詢學生需要的資訊,根據stat數值完成相應操作 
     1 Status DisplayNeed(BiTree T,int stat,int score,int score_max){
     2     if(T->lchild)
     3         DisplayNeed(T->lchild,stat,score,score_max);
     4     switch(stat){
     5         case 1:{
     6             if(T->grade==score){
     7                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
     8             }
     9             break;
    10         }
    11         case 2:{
    12             if(T->grade>score){
    13                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    14             }
    15             break;
    16         }
    17         case 3:{
    18             if(T->grade<score){
    19                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    20             }
    21             break;
    22         }
    23         case 4:{
    24             if(T->grade>=score&&T->grade<=score_max){
    25                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    26             }
    27             break;
    28         }
    29     }
    30     if(T->rchild)
    31         DisplayNeed(T->rchild,stat,score,score_max);
    32     return OK;
    33 }

     

  • 中序遍歷整個二叉順序樹
    1 Status InOrderTraverse(BiTree T){
    2     if(T->lchild)
    3         InOrderTraverse(T->lchild);
    4     printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    5     if(T->rchild)
    6         InOrderTraverse(T->rchild);
    7     return OK;
    8 }

     

  • 主函式
      1 int main(){
      2     BiTree T,BT,FT;
      3     int Ch_one,Ch_two,score,score_min,score_max,lr,num;
      4     Information message,backmessage; 
      5     char universityName[16];
      6     T=NULL;
      7     BT=NULL;
      8     FT=NULL;
      9     lr=3;
     10     Ch_one=1;
     11     Ch_two=1;
     12     printf("高校分數查詢系統 V1.0");
     13 
     14     while(Ch_one){
     15         printf("\n\n請輸入相應序號進行操作!(輸入0退出本系統,回車鍵表示確定)\n"); 
     16         printf("  1 學生使用\n  2 高校使用\n  請輸入:");
     17         scanf("%d",&Ch_one);
     18         Ch_two=1;
     19         if(Ch_one==1){ 
     20             while(Ch_two){
     21                 if(T){
     22                     printf("    1 查詢等於給定分數的高校\n    2 查詢大於給定分數的高校\n    3 查詢小於給定分數的高校\n");
     23                     printf("    4 查詢最低錄取分數線的給定的分數段中的高校\n    0 返回主選單\n    請輸入:");
     24                     num=0;
     25                     score_max=0;
     26                     scanf("%d",&Ch_two);
     27                 }else{
     28                     printf("\n院校資料不存在,請先對院校資料進行新增!\n");
     29                     Ch_two=0;
     30                 }
     31                     
     32                 switch(Ch_two){
     33                     case 0: break;
     34                     case 1:{
     35                         printf("    請輸入給定的分數:");
     36                         scanf("%d",&score);
     37                         NumberGet(T,Ch_two,score,score_max,num);
     38                         if(num){
     39                             printf("\n共查詢到高校%d個\n",num);
     40                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     41                             DisplayNeed(T,Ch_two,score,score_max);
     42                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     43                         }else
     44                             printf("\n未查詢到結果!\n\n");
     45                         break;
     46                     }
     47                     case 2:{
     48                         printf("    請輸入給定的分數:");
     49                         scanf("%d",&score);
     50                         NumberGet(T,Ch_two,score,score_max,num);
     51                         if(num){
     52                             printf("\n共查詢到高校%d個\n",num);
     53                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     54                             DisplayNeed(T,Ch_two,score,score_max);
     55                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     56                         }else
     57                             printf("\n未查詢到結果!\n\n");
     58                         
     59                         break;
     60                     }
     61                     case 3:{
     62                         printf("    請輸入給定的分數:");
     63                         scanf("%d",&score);
     64                         NumberGet(T,Ch_two,score,score_max,num);
     65                         if(num){
     66                             printf("\n共查詢到高校%d個\n",num);
     67                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     68                             DisplayNeed(T,Ch_two,score,score_max);
     69                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     70                         }else
     71                             printf("\n未查詢到結果!\n\n");
     72                         break;
     73                     }
     74                     case 4:{
     75                         printf("    請輸入給定的分數段的最小值:"); 
     76                         scanf("%d",&score_min);
     77                         printf("    請輸入給定的分數段的最大值:"); 
     78                         scanf("%d",&score_max);
     79                         NumberGet(T,Ch_two,score_min,score_max,num);
     80                         if(num){
     81                             printf("\n共查詢到高校%d個\n",num);
     82                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     83                             DisplayNeed(T,Ch_two,score_min,score_max);
     84                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     85                         }else
     86                             printf("\n未查詢到結果!\n\n");
     87                         break;
     88                     }
     89                     default:
     90                         printf("輸入錯誤!\n"); 
     91                 }
     92             } 
     93         }
     94         if(Ch_one==2){
     95             while(Ch_two){
     96                 printf("    1 高校資訊加入\n    2 高校分數修改\n    3 高校名稱修改\n");
     97                 printf("    4 高校申請退出\n    5 高校資訊展示\n    0 返回主選單\n    請輸入:");
     98                 scanf("%d",&Ch_two);
     99                 switch(Ch_two){
    100                     case 0: break;
    101                     case 1:{
    102                         printf("    請輸入學校名稱:");
    103                         scanf("%s",universityName);
    104                         strcpy(message.university,universityName);
    105                         printf("    請輸入最低分數線:");
    106                         scanf("%d",&message.grade);
    107                         if(T&&FindUniversity(T,FT,message,lr)){
    108                             DeleteData(T,message);
    109                             InsertData(T,message);
    110                             printf("\n該高校已存在!已將新資料作為資料來源進行修改\n\n");
    111                         } 
    112                         else{
    113                             InsertData(T,message);
    114                             printf("\n資訊新增成功!\n\n");
    115                         }
    116                         break;
    117                     }
    118                     case 2:{
    119                         printf("    請輸入學校名稱:");
    120                         scanf("%s",universityName);
    121                         strcpy(message.university,universityName);
    122                         printf("    請輸入修改後的最低分數線:");
    123                         scanf("%d",&message.grade);
    124                         if(T&&FindUniversity(T,FT,message,lr)){
    125                             DeleteData(T,message);
    126                             InsertData(T,message);
    127                             printf("\n分數線修改成功!\n\n");
    128                         }else{
    129                             InsertData(T,message);
    130                             printf("\n之前該學校不存在,現已將資料插入資料庫!\n\n");
    131                         }
    132                             
    133                         break;
    134                     }
    135                     case 3:{
    136                         printf("    請輸入原學校名稱:");
    137                         scanf("%s",universityName);
    138                         strcpy(message.university,universityName);
    139                         printf("    請輸入修改後的學校名稱:");
    140                         scanf("%s",universityName);
    141                         strcpy(backmessage.university,universityName);
    142                         if(T&&FindUniversity(T,FT,message,lr)&&!FindUniversity(T,FT,backmessage,lr)){
    143                             BT=FindUniversity(T,FT,message,lr);
    144                             strcpy(BT->university,universityName);
    145                             printf("\n學校名稱修改成功!\n\n"); 
    146                         }else
    147                             printf("\n該學校不存在或已包含更名後的學校!\n\n"); 
    148                         break;
    149                     }
    150                     case 4:{
    151                         printf("    請輸入申請退出的學校名稱:");
    152                         scanf("%s",universityName);
    153                         strcpy(message.university,universityName);
    154                         if(T&&FindUniversity(T,FT,message,lr)){
    155                             DeleteData(T,message);
    156                             printf("\n該校已退出分數查詢系統!\n\n"); 
    157                         }else
    158                             printf("\n該學校不存在!\n\n"); 
    159                         
    160                         break;
    161                     }
    162                     case 5:{
    163                         if(T){
    164                             printf("\n--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
    165                             InOrderTraverse(T);
    166                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
    167                         }else
    168                             printf("\n資料為空!\n\n");
    169                         
    170                         break;
    171                     } 
    172                     default:
    173                         printf("\n輸入錯誤!\n\n");
    174                 }
    175             }
    176         }
    177     }
    178     return 0;
    179 }

     

程式的執行結果:

高校使用:

  • 學校資訊新增
  • 學校名稱修改
  • 學校分數線修改
  • 學校申請退

該部分的所有資料均隨時產生,與實際高校錄取線並無直接關係,僅僅用來程式演示。

 

學生使用:

  • 根據特定分數查詢相應學校
  • 查詢大於給定分數的高效
  • 查詢小於給定分數的高效
  • 查詢給定分數段中的高校

當且僅當院校資料存在時才可進行資料查詢。

 

總結

 本次程式整體的資料結構基於二叉排序樹建立,以分數為判斷依據,來決定該高校在改二叉順序數中的儲存位置,這就要求我們對該結構的熟練結構,以便於實現資料的增刪查改,其中相對於重要的是資料的刪除,刪除一個節點時出現的情況多種多樣,相對於較難以處理的就是該節點有左右子樹均存在時,這時需要查詢一個相對與接近刪除節點的資訊用來替代此節點。用轉移的思想,把複雜的節點轉化為相對簡單的節點來進行處理。通過這次課程設計,認識到,資料結構的重要性,我們應該認真學習資料結構,體會其中的思想和邏輯處理。

      前述:該學期最後的資料結構的課程設計選題,於是記錄在自己部落格中,作為自己技術成長的點滴吧。

題目:高校最低錄取分數線的查詢

程式設計實現一個開放式的高校本科招生最低分數線的查詢系統,供師生及家長等查詢,高校自願放入該校的資訊,可能隨時有高校加入。

要求實現的查詢功能有:

  • 查詢等於使用者給定分數的高校
  • 查詢大於(或小於)使用者給定分數的高校
  • 查詢最低錄取分數線的使用者給定的分數段中的高校

  以上就是老師給定題目中要求實現的功能,為了是程式整體更加完整,自己對高校使用部分做了一些功能新增,例如學校資訊的增刪改查等功能。

題目分析:

  該設計重要功能是查詢,查詢表為高校最低錄取分數資訊的集合。根據題意可知,該查詢表中的元素個數可能隨時增減,所以它是一個動態查詢表,可採用樹狀結構儲存。為了提高查詢速度,可建立二叉排序樹並在二叉排序樹中實現查詢。

程式的程式碼結構:

  • 標頭檔案的引入以及結構體的定義
     1 #include <string.h>
     2 #include <ctype.h>
     3 #include <malloc.h>
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 
     7 #define TRUE        1
     8 #define FALSE       0
     9 #define OK          1
    10 #define ERROR       0
    11 
    12 typedef int Status;
    13 
    14 typedef struct node{
    15     struct node *lchild;
    16     struct node *rchild;
    17     int grade;
    18     char university[36];
    19 }BiTreeNode, *BiTree;
    20 
    21 typedef struct element{
    22     int grade;
    23     char university[30];
    24 }Information;

     

  • 建立節點
    1 Status CreateBiTree(BiTree &T){
    2     T=(BiTree)malloc(sizeof(BiTreeNode));
    3     T->lchild = NULL;
    4     T->rchild = NULL;
    5     return OK; 
    6 }

     

  • 高校資訊的插入
     1 Status InsertData(BiTree &T,Information mess){
     2     BiTree NT;
     3     if(T==NULL){
     4         CreateBiTree(T);
     5         T->grade=mess.grade;
     6         strcpy(T->university,mess.university);
     7     }else{
     8         if(mess.grade<T->grade){
     9             if(T->lchild==NULL){
    10                 CreateBiTree(NT);
    11                 T->lchild=NT;
    12                 NT->grade=mess.grade;
    13                 strcpy(NT->university,mess.university);
    14             }else
    15                 InsertData(T->lchild,mess);
    16         }else{
    17             if(T->rchild==NULL){
    18                 CreateBiTree(NT);
    19                 T->rchild=NT;
    20                 NT->grade=mess.grade;
    21                 strcpy(NT->university,mess.university);
    22             }else
    23                 InsertData(T->rchild,mess);
    24         }
    25     }
    26     return OK;
    27 }

     

  • 查詢相應的學校,存在返回結構體指標T,否則返回NULL,其中FT為查詢到節點T的父母節點,lr用來表明為其左右子樹(0為左子樹,1為右子樹)
     1 BiTree FindUniversity(BiTree T,BiTree &FT,Information mess,int &lr){
     2     BiTree BT=NULL;
     3     if(T->lchild){
     4         if(FindUniversity(T->lchild,FT,mess,lr))
     5             BT=FindUniversity(T->lchild,FT,mess,lr);
     6         if(strcmp(T->lchild->university,mess.university)==0){
     7             FT=T;
     8             lr=0;
     9         }
    10     }
    11     if(strcmp(T->university,mess.university)==0){
    12         return T;
    13     }
    14     if(T->rchild){
    15         if(FindUniversity(T->rchild,FT,mess,lr))
    16             BT=FindUniversity(T->rchild,FT,mess,lr);
    17         if(strcmp(T->rchild->university,mess.university)==0){
    18             FT=T;
    19             lr=1;
    20         }
    21     } 
    22     return BT;
    23 }

     

  • 刪除學校 
     1 Status DeleteData(BiTree &T,Information mess){
     2     BiTree NT=NULL,FT=NULL,GT=NULL,LT=NULL;
     3     int lr=3;
     4     if(NT=FindUniversity(T,FT,mess,lr)){
     5         if(NT->lchild==NULL&&NT->rchild==NULL){
     6             free(NT);
     7             if(lr==0)
     8                 FT->lchild=NULL;
     9             else if(lr==1)
    10                 FT->rchild=NULL;
    11             else
    12                 T=NULL;
    13         }else if(NT->lchild==NULL){
    14             if(lr==0)
    15                 FT->lchild=NT->rchild;
    16             else if(lr==1)
    17                 FT->rchild=NT->rchild;
    18             else
    19                 T=NT->rchild;
    20             free(NT);
    21         }else if(NT->rchild==NULL){
    22             if(lr==0)
    23                 FT->lchild=NT->lchild;
    24             else if(lr==1)
    25                 FT->rchild=NT->lchild;
    26             else
    27                 T=NT->lchild;
    28             free(NT);
    29         }else{
    30             LT=NT;
    31             GT=NT->rchild;
    32             while(GT->lchild){
    33                 LT=GT;
    34                 GT=GT->lchild;
    35             }
    36             if(GT->rchild&&LT==NT){
    37                 LT->rchild=GT->rchild;
    38                 NT->grade=GT->grade;
    39                 strcpy(NT->university,GT->university);
    40                 free(GT);
    41             }else if(GT->rchild){
    42                 LT->lchild=GT->rchild;
    43                 NT->grade=GT->grade;
    44                 strcpy(NT->university,GT->university);
    45                 free(GT);
    46             }else{
    47                 NT->grade=GT->grade;
    48                 strcpy(NT->university,GT->university);
    49                 LT->lchild=NULL;
    50                 free(GT);
    51             }
    52         }
    53     }
    54     return OK;
    55 } 

     

  • 查詢學生需要的資訊,根據stat數值完成相應操作 
     1 Status DisplayNeed(BiTree T,int stat,int score,int score_max){
     2     if(T->lchild)
     3         DisplayNeed(T->lchild,stat,score,score_max);
     4     switch(stat){
     5         case 1:{
     6             if(T->grade==score){
     7                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
     8             }
     9             break;
    10         }
    11         case 2:{
    12             if(T->grade>score){
    13                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    14             }
    15             break;
    16         }
    17         case 3:{
    18             if(T->grade<score){
    19                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    20             }
    21             break;
    22         }
    23         case 4:{
    24             if(T->grade>=score&&T->grade<=score_max){
    25                 printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    26             }
    27             break;
    28         }
    29     }
    30     if(T->rchild)
    31         DisplayNeed(T->rchild,stat,score,score_max);
    32     return OK;
    33 }

     

  • 中序遍歷整個二叉順序樹
    1 Status InOrderTraverse(BiTree T){
    2     if(T->lchild)
    3         InOrderTraverse(T->lchild);
    4     printf("學校:%30s\t分數線:%5d\n",T->university,T->grade);
    5     if(T->rchild)
    6         InOrderTraverse(T->rchild);
    7     return OK;
    8 }

     

  • 主函式
      1 int main(){
      2     BiTree T,BT,FT;
      3     int Ch_one,Ch_two,score,score_min,score_max,lr,num;
      4     Information message,backmessage; 
      5     char universityName[16];
      6     T=NULL;
      7     BT=NULL;
      8     FT=NULL;
      9     lr=3;
     10     Ch_one=1;
     11     Ch_two=1;
     12     printf("高校分數查詢系統 V1.0");
     13 
     14     while(Ch_one){
     15         printf("\n\n請輸入相應序號進行操作!(輸入0退出本系統,回車鍵表示確定)\n"); 
     16         printf("  1 學生使用\n  2 高校使用\n  請輸入:");
     17         scanf("%d",&Ch_one);
     18         Ch_two=1;
     19         if(Ch_one==1){ 
     20             while(Ch_two){
     21                 if(T){
     22                     printf("    1 查詢等於給定分數的高校\n    2 查詢大於給定分數的高校\n    3 查詢小於給定分數的高校\n");
     23                     printf("    4 查詢最低錄取分數線的給定的分數段中的高校\n    0 返回主選單\n    請輸入:");
     24                     num=0;
     25                     score_max=0;
     26                     scanf("%d",&Ch_two);
     27                 }else{
     28                     printf("\n院校資料不存在,請先對院校資料進行新增!\n");
     29                     Ch_two=0;
     30                 }
     31                     
     32                 switch(Ch_two){
     33                     case 0: break;
     34                     case 1:{
     35                         printf("    請輸入給定的分數:");
     36                         scanf("%d",&score);
     37                         NumberGet(T,Ch_two,score,score_max,num);
     38                         if(num){
     39                             printf("\n共查詢到高校%d個\n",num);
     40                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     41                             DisplayNeed(T,Ch_two,score,score_max);
     42                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     43                         }else
     44                             printf("\n未查詢到結果!\n\n");
     45                         break;
     46                     }
     47                     case 2:{
     48                         printf("    請輸入給定的分數:");
     49                         scanf("%d",&score);
     50                         NumberGet(T,Ch_two,score,score_max,num);
     51                         if(num){
     52                             printf("\n共查詢到高校%d個\n",num);
     53                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     54                             DisplayNeed(T,Ch_two,score,score_max);
     55                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     56                         }else
     57                             printf("\n未查詢到結果!\n\n");
     58                         
     59                         break;
     60                     }
     61                     case 3:{
     62                         printf("    請輸入給定的分數:");
     63                         scanf("%d",&score);
     64                         NumberGet(T,Ch_two,score,score_max,num);
     65                         if(num){
     66                             printf("\n共查詢到高校%d個\n",num);
     67                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     68                             DisplayNeed(T,Ch_two,score,score_max);
     69                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     70                         }else
     71                             printf("\n未查詢到結果!\n\n");
     72                         break;
     73                     }
     74                     case 4:{
     75                         printf("    請輸入給定的分數段的最小值:"); 
     76                         scanf("%d",&score_min);
     77                         printf("    請輸入給定的分數段的最大值:"); 
     78                         scanf("%d",&score_max);
     79                         NumberGet(T,Ch_two,score_min,score_max,num);
     80                         if(num){
     81                             printf("\n共查詢到高校%d個\n",num);
     82                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n");
     83                             DisplayNeed(T,Ch_two,score_min,score_max);
     84                             printf("--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--\n\n");
     85                         }else
     86                             printf("\n未查詢到結果!\n\n");
     87                         break;
     88                     }
     89                     default:
     90                         printf("輸入錯誤!\n"); 
     91                 }
     92             } 
     93         }
     94         if(Ch_one==2){
     95             while(Ch_two){
     96                 printf("    1 高校資訊加入\n    2 高校分數修改\n    3 高校名稱修改\n");
     97                 printf("    4 高校申請退出\n    5 高校資訊展示\n    0 返回主選單\n    請輸入:");
     98                 scanf("%d",&Ch_two);
     99                 switch(Ch_two){
    100                     case 0: break;
    101                     case 1:{
    102                         printf("    請輸入學校名稱:");
    103                         scanf("%s",universityName);
    104                         strcpy(message.university,universityName);
    105                         printf("    請輸入最低分數線:");
    106                         scanf("%d",&message.grade);
    107                         if(T&&FindUniversity(T,FT,message,lr)){
    108                             DeleteData(T,message);
    109                             InsertData(T,message);
    110                             printf("\n該高校已存在!已將新資料作為資料來源進行修改\n\n");
    111                         } 
    112                         else{
    113                             InsertData(T,message);
    114                             printf("\n資訊新增成功!\n\n");
    115                         }
    116                         break;
    117                     }
    118                     case 2:{
    119                         printf("    請輸入學校名稱:");
    120                         scanf("%s",universityName);
    121                         strcpy(message.university,universityName);
    122                         printf("    請輸入修改後的最低分數線:");
    123                         scanf("%d",&message.grade);
    124                         if(T&&FindUniversity(T,FT,message,lr)){
    125                             DeleteData(T,message);
    126                             InsertData(T,message);
    127                             printf("\n分數線修改成功!\n\n");
    128                         }else{
    129                             InsertData(T,message);
    130                             printf("\n之前該學校不存在,現已將資料插入資料庫!\n\n");
    131                         }
    132                             
    133                         break;
    134                     }
    135                     case 3:{
    136                         printf("    請輸入原學校名稱:");
    137                         scanf("%s",universityName);
    138                         strcpy(message.university,universityName);
    139                         printf("    請輸入修改後的學校名稱:");
    140                         scanf("%s",universityName);
    141                         strcpy(backmessage.university,universityName);
    142                         if(T&&FindUniversity(T,FT,message,lr)&&!FindUniversity(T,FT,backmessage,lr)){
    143                             BT=FindUniversity(T,FT,message,lr);
    144                             strcpy(BT->university,universityName);
    145                             printf("\n學校名稱修改成功!\n\n"); 
    146                         }else
    147                             printf("\n該學校不存在或已包含更名後的學校!\n\n"); 
    148                         break;
    149                     }
    150                     case 4:{
    151                         printf("    請輸入申請退出的學校名稱:");
    152                         scanf("%s",universityName);
    153                         strcpy(message.university,universityName);
    154                         if(T&&FindUniversity(T,FT,message,lr)){
    155                             DeleteData(T,message);
    156                             printf("\n該校已退出分數查詢系統!\n\n"); 
    157                         }else
    158