基於二叉排序樹的高校分數查詢系統
題目:高校最低錄取分數線的查詢
程式設計實現一個開放式的高校本科招生最低分數線的查詢系統,供師生及家長等查詢,高校自願放入該校的資訊,可能隨時有高校加入。
要求實現的查詢功能有:
- 查詢等於使用者給定分數的高校
- 查詢大於(或小於)使用者給定分數的高校
- 查詢最低錄取分數線的使用者給定的分數段中的高校
以上就是老師給定題目中要求實現的功能,為了是程式整體更加完整,自己對高校使用部分做了一些功能新增,例如學校資訊的增刪改查等功能。
題目分析:
該設計重要功能是查詢,查詢表為高校最低錄取分數資訊的集合。根據題意可知,該查詢表中的元素個數可能隨時增減,所以它是一個動態查詢表,可採用樹狀結構儲存。為了提高查詢速度,可建立二叉排序樹並在二叉排序樹中實現查詢。
程式的程式碼結構:
- 標頭檔案的引入以及結構體的定義
1 #include <string.h> 2 #include <ctype.h> 3 #include <malloc.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6
- 建立節點
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&<==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&<==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