1、 系統概述
學生學籍管理系統從學生學籍管理的現狀出發,以實現學生學籍管理為設計目標
學生學籍管理系統:用數據文件存放學生的學籍,可對學生學籍進行注冊,登錄,修改,刪除,查找,統計,學籍變化等操作。
在界面友善方面,首先使用system函數使界面美觀,用制表符制作界面使界面簡潔易讀,其次將輸入數據的思路流程化,使用者可以從任意數據輸入過程開始,,各種各樣的數據產生過程。再者,考慮到了對非法輸入做了一定的處理,輸出提示語句與提示音,增加了程序的可操作性。
本系統使用結構體數組對學生學籍存儲,並使用文件指針及文件的讀寫函數將學生學籍保存於文件file.TXT中,使得數據長期存儲。
本系統以模塊化設計為主要思想,逐步細化,自頂向下,實現對學生的學籍管理
程序缺陷
部分變量命名不規范
未對用戶與管理員權限進行限制
未能使用鏈表進行數據結構設計
2、 數據結構設計
本程序所使用的數據類型
數據類型 |
字節 |
值的范圍 |
int |
4 |
-2,147,483,648~ 2,147,483,647 |
char |
1 |
-128~127 |
struct date |
12 |
# |
struct student |
272 |
# |
FILE* |
4 |
# |
變量數據類型及說明
變量 |
|
功能 |
數據類型 |
|
值的范圍 |
flag |
|
標記是否登錄 |
int |
|
0、1 |
stu[N] |
|
學生學籍信息數組 |
struct student |
|
N=100 |
w1 |
|
各函數w1為數據錯誤標志位 |
int |
|
0,1 |
i,j |
|
多在函數中被用於循環控制變量 |
int |
|
0~ 2,147,483,647 |
birthday |
|
出生年月 |
struct date |
|
|
num[20] |
|
學號數組 |
char |
|
最多19字符 |
name[25] |
|
姓名數組 |
char |
|
最多24字符 |
age |
|
年齡 |
int |
|
|
addr[50] |
|
籍貫 |
char |
|
最多49字符 |
dept[50] |
|
系別 |
char |
|
最多49字符 |
classs[30] |
|
班級 |
char |
|
最多29字符 |
major[30] |
|
專業 |
char |
|
最多29字符 |
classes[30] |
|
班級 |
char |
|
最多29字符 |
status[20] |
|
學籍狀態 |
char |
|
最多19字符 |
password[20] |
|
密碼 |
char |
|
最多19字符 |
變量介紹:
其他變量為函數臨時變量
學生學籍結構體數組為方便各函數調用,使用全局變量存儲
Flag為登錄標志位,使用全局變量來進行存儲,從而判斷是否登錄
i、 j用於for循環的控制計數變量,控制循環的進行
w0、w1用於while循環的控制
輸出數據:
%d帶符號的十進制形式輸出整數。
用於數據個數的輸出
%s以字符串類型整體輸入字符數組,例如學生籍貫的輸出
以字符串輸出學生信息數據
使用清屏函數及時清除屏幕多余數據,使得界面美觀大方,易讀性強
3、 模塊設計
系統通過歡迎函數、菜單函數、查詢函數、刪除函數、查詢函數、修改函數、籍貫輸出函數來實現學生信息的查找刪除等功能,各功能通過主函數switch語句調用,各函數又互相調用
設計錯誤
開始對錯誤數據的處理不力,錯誤比較多,沒有按全局的思路完善程序所導致的
4.調試運行及操作說明
程序使用說明
- 1. 運行程序進入歡迎界面,按[enter]進入主菜單
- 1. 根據所需服務輸入對應數字
錯誤輸入:如果輸入錯誤數字9 系統會提示錯誤、發出提示音並提示重新輸入
3.鍵入1 進入登錄系統頁面
3.1 管理員登錄鍵入一並輸入密碼,密碼為123456
3.2用戶名為學生姓名密碼為學號
4.按任意鍵登錄成功會返回菜單頁
錯誤提示:未登錄選擇進入插入、刪除頁面會提示登錄(查詢除外)並轉到登錄頁面
5.進入菜單鍵入2進入插入頁面,按提示輸入學生信息
6.進入鍵入1進入瀏覽頁面,進入鍵入2返回菜單
7.菜單選擇4進入查詢界面,分為姓名與學號查詢
8.顯示結果,查詢結束可選擇繼續與返回菜單
錯誤提示:輸入錯誤姓名與學號會提示重新輸入
9.進入刪除界面,同理,按提示輸入將刪除所選項
10.進入修改界面,按提示輸入將修改所選項
11.進入籍貫界面,選擇專業與學號並按提示輸入將查看籍貫項
12.菜單狀態按8鍵,將退出系統
1 /* 2 C語言綜合設計 3 4 題目:學生學籍管理系統 5 6 管理員登錄密碼:123456 7 用戶為輸入學生姓名,密碼為學號 8 9 功能: 10 (1) 系統以菜單方式工作。 11 (2) 登記學生的學號,姓名,性別,年齡,籍貫,系別,專業,班級;修改已知學號的學生信息; 12 (3) 刪除已知學號的學生信息; 13 (4) 查找已知學號的學生信息; 14 (5) 按學號,專業輸出學生籍貫表。 15 (6) 查詢學生學籍變化,比如入學,轉專業,退學,降級,休學,畢業。 16 17 編譯平台:vc++6.0 18 2018.6.12 19 20 */ 21 22 #include<stdio.h> 23 #include<string.h> 24 #include<stdlib.h> 25 #include<conio.h> 26 #define N 100 /*存儲100個學生的學籍信息*/ 27 int flag; /*標記是否登錄*/ 28 struct date /*出生日期*/ 29 { 30 int year; 31 int month; 32 int day; 33 }; 34 struct student 35 { 36 char num[20];/*學號*/ 37 char name[25];/*姓名*/ 38 char sex[10];/*性別*/ 39 struct date birthday;/*出生年月*/ 40 int age;/*年齡*/ 41 char addr[50];/*籍貫*/ 42 char dept[50]; /*系別*/ 43 char major[30]; /*專業*/ 44 char classs[30]; /*班級*/ 45 char phone[20];/*電話*/ 46 char status[20];/*學籍狀態*/ 47 }stu[N]; 48 49 void login() /*登錄*/ 50 { 51 void menu(); 52 int load(); 53 int n,i,m,w; 54 FILE *fp; 55 struct student s; 56 char password[20]; 57 int d,q; 58 int j=0; 59 system("cls"); 60 if(flag) 61 { 62 printf(" 已經登錄!\n"); 63 printf("Press any key to continue…\n"); 64 getchar(); 65 getchar(); 66 system("cls"); 67 menu(); 68 } 69 70 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 71 n=load(); /*打開文件*/ 72 else 73 n=0; 74 75 76 printf("\n\t請選擇登錄身份:1.管理員 2.用戶 [ ]\b\b"); 77 scanf("%d",&d); 78 if(d==1) 79 { 80 printf("\n\t\t\t請輸入密碼:"); 81 getchar(); 82 83 while(1) 84 { 85 password[j]=getch(); 86 if(password[j]=='\r') 87 break; 88 printf("*"); 89 j++; 90 } 91 password[j]='\0'; 92 if(!strcmp(password,"123456")) /*判斷密碼是否正確*/ 93 { 94 flag=1; 95 printf("\n\t登錄成功!\n"); 96 printf("\tPress [ Enter ] key to continue…"); 97 getchar(); 98 system("cls"); 99 menu(); 100 } 101 if(!flag) 102 { 103 printf("\t\n密碼錯誤!\n\a"); 104 printf("What do you want to do next? 1.繼續登錄 2.返回菜單 [ ]\b\b"); 105 scanf("%d",&q); 106 if(q==1) /*繼續登錄*/ 107 { 108 system("cls"); 109 login(); 110 } 111 else if(q==2) /*返回主菜單*/ 112 { 113 system("cls"); 114 menu(); 115 } 116 } 117 } 118 else 119 { 120 printf("\n\t\t\t用戶名:"); 121 scanf("%s",s.name); 122 printf("\t\t\t密碼:"); 123 124 while(1) 125 { 126 password[j]=getch(); 127 if(password[j]=='\r') 128 break; 129 printf("*"); 130 j++; 131 } 132 password[j]='\0'; 133 flag=0; /*未登錄時flag=0*/ 134 for(i=0;i<n;i++) 135 if(!strcmp(s.name,stu[i].name)&&!strcmp(stu[i].num,password)) 136 { 137 flag=1; /*登錄成功flag=1*/ 138 break; 139 } 140 if(flag) 141 { 142 printf("\n\t登錄成功!\n"); 143 printf("\tPress any key to continue…\n"); 144 getchar(); getchar(); 145 system("cls"); 146 menu(); /*登錄成功后返回主菜單*/ 147 } 148 else 149 { 150 m=0; /*設置m是為了避免陷入 登錄失敗時 跳不出登錄界面*/ 151 w=1; /*設置w是為了避免輸出多次 “用戶不存在”*/ 152 153 do 154 { 155 if(w>0) 156 printf("用戶名不存在或密碼錯誤!\n\a"); /*第一次登錄時輸入不存在的用戶時顯示*/ 157 printf("What do you want to do next? 1.繼續登錄 2.返回菜單 [ ]\b\b"); 158 scanf("%d",&q); 159 if(q==1) /*繼續登錄*/ 160 { 161 login(); 162 m=1; 163 } 164 else if(q==2) /*返回主菜單*/ 165 { 166 system("cls"); 167 menu(); 168 m=1; 169 } 170 else 171 { 172 printf("選擇錯誤!請重新選擇:\n\a"); 173 w=0; 174 } 175 }while(m==0); 176 } 177 } 178 } 179 180 void printf_one(int k) /*輸出一個學生的信息*/ 181 { 182 system("color 4e"); 183 printf("學號:%s\n",stu[k].num); 184 printf("姓名:%s\n",stu[k].name); 185 printf("性別:%s\n",stu[k].sex); 186 printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day); 187 printf("年齡:%d\n",stu[k].age); 188 printf("籍貫:%s\n",stu[k].addr); 189 printf("系別:%s\n",stu[k].dept); 190 printf("專業:%s\n",stu[k].major); 191 printf("班級:%s\n",stu[k].classs); 192 printf("電話:%s\n",stu[k].phone); 193 printf("學籍狀態:%s\n",stu[k].status); 194 } 195 196 void printf_n(int n) /*瀏覽時輸出所有學生的信息*/ 197 { 198 int j,i=1; 199 system("color 2e"); 200 201 for(j=0;j<n;j++) 202 { 203 printf("第%d個學生:\n",i++); 204 printf_one(j); 205 printf("\n"); 206 } 207 getchar(); 208 } 209 210 void printf_addr() /* 按學號,專業輸出學生籍貫表*/ 211 { 212 void menu(); 213 int w0,k,i,n,w1,w2; 214 struct student s; 215 FILE *fp; 216 system("color 2e"); 217 if(!flag) 218 { 219 printf("\n\n\t請先登錄!\n\a"); 220 printf("\n\t請按 Enter 鍵進入登錄界面!"); 221 getchar(); 222 getchar(); 223 login(); 224 } 225 else 226 { 227 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 228 n=load(); 229 do 230 { 231 printf("請選擇學生籍貫的輸出類別: 1.專業 2.學號 [ ]\b\b"); 232 scanf("%d",&w1); 233 if(w1<1||w1>2) 234 { 235 printf("輸入錯誤!請重新輸入!\n\a"); 236 w2=1; 237 } 238 else 239 w2=0; /*防止陷入死循環*/ 240 }while(w2==1); 241 if(w1==1) /*按專業輸出*/ 242 { 243 do 244 { 245 k=-1; 246 do 247 { 248 printf("\n請輸入專業!\nName:"); 249 scanf("%s",s.major); 250 for(i=0;i<n;i++) 251 if(strcmp(s.major,stu[i].major)==0) 252 { 253 k=i; 254 printf("\n"); 255 printf_one(i); 256 printf("\n"); 257 } 258 if(k==-1) /*沒有找到*/ 259 { 260 int o; 261 printf("\n\n沒有此專業的信息!\n!"); 262 printf("What do you want to do?\n\t1.繼續 2.返回菜單 [ ]\b\b"); 263 scanf("%d",&o); 264 if(o==1) 265 { 266 system("cls"); 267 printf_addr; /*繼續輸出*/ 268 } 269 else 270 { 271 system("cls"); 272 menu(); 273 } 274 } 275 }while(k==-1); 276 // system("cls"); 277 printf("\nWhat do you want to do next?\n\t1).繼續 2).返回菜單 [ ]\b\b"); 278 scanf("%d",&w0); 279 }while(w0==1); 280 system("cls"); 281 menu(); /*不再查找時返回主菜單*/ 282 } 283 else /*按學號輸出*/ 284 { 285 do 286 { 287 k=-1; 288 do 289 { 290 printf("\n請輸入要輸出的學號!\nNum:"); 291 scanf("%s",s.num); 292 for(i=0;i<n;i++) 293 if(strcmp(s.num,stu[i].num)==0) /*找到了*/ 294 { 295 k=i; 296 printf("籍貫:"); puts(stu[k].addr); 297 break; 298 } 299 if(k==-1) /*沒有找到*/ 300 { 301 int o; 302 printf("\n\n沒有這個學生的信息!\n!"); 303 printf("What do you want to do?\n\t1.繼續 2.返回菜單 [ ]\b\b"); 304 scanf("%d",&o); 305 if(o==1) 306 { 307 system("cls"); 308 printf_addr; /*繼續輸出*/ 309 } 310 else 311 { 312 system("cls"); 313 menu(); 314 } 315 } 316 }while(k==-1); 317 printf("\nWhat do you want to do?\n\t1).繼續 2).返回菜單 [ ]\b\b"); 318 scanf("%d",&w0); 319 system("cls"); 320 }while(w0==1); 321 system("cls"); 322 menu();/*不再查找時返回主菜單*/ 323 324 } 325 } 326 } 327 328 329 330 int load() /*打開文件,讀取里面的數據*/ 331 { 332 FILE *fp; 333 int i; 334 if((fp=fopen("file.txt","rb"))==NULL) /*讀入空文件,rb表示打開一個二進制文件,只允許讀數據*/ 335 { 336 printf("\n文件不存在!\n"); 337 return 0; 338 } 339 for(i=0;!feof(fp);i++) /*處理到文件結尾*/ 340 fread(&stu[i],sizeof(struct student),1,fp); /*fread(buffer,size,cout,fp)將磁盤文件中的一批數據作為一個整體一次性讀取出來, 341 buffer指定數據塊位置,sizeof數據塊字節數,count讀取次數,fp指向源磁盤文件*/ 342 fclose(fp); 343 return(i-1); 344 } 345 346 void input(int k) /*輸入學生信息*/ 347 { 348 getchar(); 349 printf("學號:"); gets(stu[k].num); 350 printf("姓名:"); gets(stu[k].name); 351 printf("性別:"); gets(stu[k].sex); 352 printf("出生年月:"); scanf("%d%d%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); 353 printf("年齡:"); scanf("%d",&stu[k].age); getchar(); 354 printf("籍貫:"); gets(stu[k].addr); 355 printf("系別:"); gets(stu[k].dept); 356 printf("專業:"); gets(stu[k].major); 357 printf("班級:"); gets(stu[k].classs); 358 printf("電話:"); gets(stu[k].phone); 359 printf("學籍狀態:");gets(stu[k].status); 360 } 361 362 void save(int n) /*保存學生信息*/ 363 { 364 void exit(); 365 FILE *fp; 366 int i; 367 if((fp=fopen("file.txt","wb"))==NULL) /*只打開或建立一個二進制文件,只允許寫數據*/ 368 { 369 printf("\nCan not open file!\n"); 370 exit(0); 371 } 372 for(i=0;i<n;i++) 373 if(stu[i].name[0]!='\0') 374 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*將一批數據作為一個整體一次性寫入磁盤文件*/ 375 printf("文件寫入錯誤!\n"); 376 fclose(fp); 377 } 378 379 void printf_back()/*添加學生信息后顯示的“是瀏覽還是返回”*/ 380 { 381 int w,k=0; 382 void browse(); 383 void menu(); 384 printf("\n\n\t^_^.插入成功. ^_^\n\n"); 385 do 386 { 387 printf("What do you want to do next?\n\n\t1).瀏覽所有\t2).返回: [ ]\b\b"); 388 scanf("%d",&w); 389 if(w==1) 390 { 391 system("cls"); 392 browse(); 393 } 394 else if(w==2) 395 { 396 system("cls"); 397 menu(); 398 } 399 else 400 printf(" 選擇錯誤!請重新選擇!\n\a"); 401 }while(k==0); 402 } 403 404 void insert() /*添加學生信息*/ 405 { 406 int i,n,k,t; 407 FILE *fp; 408 if(!flag) 409 { 410 printf("\n\n\t請先登錄!\n\a"); 411 printf("\n\t請按 Enter 鍵進入登錄界面!"); 412 getchar(); 413 getchar(); 414 login(); 415 } 416 else 417 { 418 if((fp=fopen("file.txt","rb"))==NULL) /*讀入空文件,rb表示打開一個二進制文件,只允許讀數據*/ 419 { 420 printf("How many people do you want to add(1-%d)?:",N-1); 421 n=0; 422 } 423 else 424 { 425 n=load(); 426 printf("How many student do you want to insert (1-%d)?:",N-n-1);/*剩余可插入的個數*/ 427 } 428 429 scanf("%d",&t); 430 while(t>=(N-n-1)||t<1) 431 { 432 printf("輸入錯誤!請重新輸入!\n\a"); 433 scanf("%d",&t); 434 } 435 k=n+t; 436 for(i=n;i<k;i++) 437 { 438 printf("\n輸入第 %d 個學生學籍信息.\n",i-n+1); 439 input(i); 440 } 441 save(k); /*保存所有學生的信息*/ 442 printf_back(); 443 } 444 } 445 446 void deleter() /*刪除*/ 447 { 448 void menu(); 449 if(!flag) 450 { 451 printf("\n\n\t請先登錄!\n\a"); 452 printf("\n\t請按 Enter 鍵進入登錄界面!"); 453 getchar(); 454 getchar(); 455 login(); 456 } 457 else 458 { 459 struct student s; 460 int i,n,k,w0,w1; 461 n=load(); 462 do 463 { 464 k=-1; 465 //printf_n(n); /*刪除之前先顯示所有學生的信息*/ 466 do 467 { 468 printf("\n\n請輸入您想要刪除的學生的姓名!\nName:"); 469 scanf("%s",s.name); 470 for(i=0;i<n;i++) 471 if(strcmp(s.name,stu[i].name)==0) 472 { 473 k=i; 474 s=stu[i]; 475 } 476 if(k==-1) 477 { 478 int m; 479 printf("\n\n沒有這個學生的信息!\n"); 480 printf("What do you want to do next? 1.繼續輸入 2.返回主菜單 [ ]\b\b"); 481 scanf("%d",&m); 482 if(m==1) 483 deleter(); 484 else 485 { 486 k=0; 487 system("cls"); 488 menu(); 489 } 490 } 491 }while(k==-1); 492 printf_one(k); 493 printf("\n\t確定刪除?\n\t1).是 2).返回 [ ]\b\b");/*再次詢問是否刪除*/ 494 scanf("%d",&w0); 495 if(w0==1) 496 { 497 stu[k].name[0]='\0'; 498 save(n); 499 } 500 else 501 break; 502 printf("\n\t^_^.成功刪除^_^.\n"); 503 printf("What do you want to do?\n\t1).繼續 2).返回 [ ]\b\b"); 504 scanf("%d",&w1); 505 }while(w1==1); 506 system("cls"); 507 menu(); /*不再刪除時返回主菜單,w1!=1*/ 508 } 509 } 510 511 void search() /*查找*/ 512 { 513 void menu(); 514 int w0,k,i,n,w1,w2; 515 struct student s; 516 FILE *fp; 517 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 518 n=load(); 519 do 520 { 521 printf("請選擇查找類別: 1.姓名 2.學號 [ ]\b\b"); 522 scanf("%d",&w1); 523 if(w1<1||w1>2) 524 { 525 printf("輸入錯誤!請重新輸入!\n\a"); 526 w2=1; 527 } 528 else 529 w2=0; /*防止陷入死循環*/ 530 }while(w2==1); 531 if(w1==1) /*按姓名查找*/ 532 { 533 do 534 { 535 k=-1; 536 do 537 { 538 printf("\n請輸入您想要查找的學生的姓名!\nName:"); 539 scanf("%s",s.name); 540 for(i=0;i<n;i++) 541 if(strcmp(s.name,stu[i].name)==0) 542 { 543 k=i; 544 s=stu[i]; 545 } 546 if(k==-1) /*沒有找到*/ 547 { 548 int o; 549 printf("\n\n沒有這個學生的信息!\n!"); 550 printf("What do you want to do?\n\t1.繼續 2.返回菜單 [ ]\b\b"); 551 scanf("%d",&o); 552 if(o==1) 553 { 554 system("cls"); 555 search(); /*繼續查找*/ 556 } 557 else 558 { 559 system("cls"); 560 menu(); 561 } 562 } 563 }while(k==-1); 564 system("cls"); 565 printf_one(k); /*找到以后輸出這個學生的信息*/ 566 printf("\nWhat do you want to do next?\n\t1).繼續 2).返回菜單 [ ]\b\b"); 567 scanf("%d",&w0); 568 }while(w0==1); 569 system("cls"); 570 menu(); /*不再查找時返回主菜單*/ 571 } 572 else /*按學號查找*/ 573 { 574 do 575 { 576 k=-1; 577 do 578 { 579 printf("\n請輸入您想要查找的學生的學號!\nNum:"); 580 scanf("%s",s.num); 581 for(i=0;i<n;i++) 582 if(strcmp(s.num,stu[i].num)==0) /*找到了*/ 583 { 584 k=i; 585 s=stu[i]; 586 } 587 if(k==-1) /*沒有找到*/ 588 { 589 int o; 590 printf("\n\n沒有這個學生的信息!\n!"); 591 printf("What do you want to do?\n\t1.繼續 2.返回菜單 [ ]\b\b"); 592 scanf("%d",&o); 593 if(o==1) 594 { 595 system("cls"); 596 search(); /*繼續查找*/ 597 } 598 else 599 { 600 system("cls"); 601 menu(); 602 } 603 } 604 }while(k==-1); 605 system("cls"); 606 printf_one(k); /*找到以后輸出這個學生的學籍信息*/ 607 printf("\nWhat do you want to do?\n\t1).繼續 2).返回菜單 [ ]\b\b"); 608 scanf("%d",&w0); 609 }while(w0==1); 610 system("cls"); 611 menu();/*不再查找時返回主菜單*/ 612 613 } 614 } 615 616 int modify_data(int i) /*修改信息函數*/ 617 { 618 int c,w1; 619 void menu(); 620 do 621 { 622 puts("\n請選擇要修改的選項:\n\n1.學號 2.姓名 3.性別 4.出生日期 5.年齡 6.籍貫 7.系別 8.專業 9.班級 10.電話 11.學籍狀態 12.所有信息 13.取消並返回"); 623 printf("請選擇?: [ ]\b\b\b"); 624 scanf("%d",&c); 625 if(c>13||c<1) 626 { 627 puts("\n選擇錯誤!請重新選擇!"); 628 getchar(); 629 } 630 }while(c>13||c<1); 631 do 632 { 633 switch(c) 634 { 635 case 1: printf("學號:"); scanf("%s",stu[i].num); break; 636 case 2: printf("姓名:"); scanf("%s",stu[i].name); break; 637 case 3: printf("性別:"); scanf("%s",stu[i].sex); break; 638 case 4: printf("出生年月:"); scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break; 639 case 5: printf("年齡:"); scanf("%d",&stu[i].age);break; 640 case 6: printf("籍貫:"); scanf("%s",stu[i].addr);break; 641 case 7: printf("系別:"); scanf("%s",stu[i].dept);break; 642 case 8: printf("專業:"); scanf("%s",stu[i].major);break; 643 case 9: printf("班級:"); scanf("%s",stu[i].classs);break; 644 case 10: printf("電話:"); scanf("%s",stu[i].phone);break; 645 case 11: printf("學籍狀態:"); scanf("%s",stu[i].status);break; 646 case 12: input(i); break; /*修改這個學生的所有信息*/ 647 case 13: menu(); /*返回主菜單*/ 648 649 } 650 puts("\nNow:\n"); 651 printf_one(i); /*輸出 修改后 的這個學生的信息*/ 652 printf("\n確定?\n\n\t1).是 2).不,重新修改 3).返回不保存 [ ]\b\b"); 653 scanf("%d",&w1); 654 }while(w1==2); 655 return(w1); /*修改成功並選擇1后返回1*/ 656 } 657 658 void modify() /*修改*/ 659 { 660 void menu(); 661 if(!flag) 662 { 663 printf("\n\n\t請先登錄!\n"); 664 printf("\n\t請按 Enter 鍵進入登錄界面!"); 665 getchar(); 666 getchar(); 667 login(); 668 } 669 else 670 { 671 struct student s; 672 int i,n,k,w0=1,w1,w2=0; 673 n=load(); 674 do 675 { 676 k=-1; 677 //printf_n(n); /*刪除之前先顯示所有學生的信息*/ 678 do 679 { 680 printf("\n請輸入您想要修改的學生的姓名!\nName:"); 681 scanf("%s",s.name); 682 for(i=0;i<n;i++) 683 if(strcmp(s.name,stu[i].name)==0) /*與其中一個學生匹配*/ 684 { 685 k=i; 686 s=stu[i]; 687 } 688 if(k==-1) /*沒有找到輸入的學生*/ 689 { 690 int o; 691 printf("\n\n沒有這個學生的信息!\n"); 692 printf("What do you want to do?\n\t1.繼續 2.返回菜單 [ ]\b\b"); 693 scanf("%d",&o); 694 system("cls"); 695 if(o==1) 696 { 697 698 //modify(); /*繼續修改*/ 699 } 700 else 701 { 702 //system("cls"); 703 menu(); 704 } 705 } 706 }while(k==-1); 707 system("cls"); 708 printf_one(k); /*輸出這個學生的信息*/ 709 w1=modify_data(k); 710 if(w1==1) /*判斷是否修改成功修改*/ 711 { 712 printf("\n\t^_^.修改成功 ^_^.\n\n是否繼續?\n\n\t1).是 2).保存返回\t[ ]\b\b"); 713 scanf("%d",&w0); 714 w2=1; 715 } 716 else 717 { 718 w0=0; 719 if(w2==0) 720 stu[k]=s; 721 } 722 if((w0!=1)&&(w2==1)) /*修改成功保存*/ 723 save(n); 724 }while(w0==1); 725 system("cls"); 726 menu();/*不再修改返回主菜單*/ 727 } 728 } 729 730 void browse()/*瀏覽*/ 731 { 732 void menu(); 733 int n; 734 system("color 5f"); 735 if(!flag) 736 { 737 printf("\n\n\t請先登錄!\n\a"); 738 printf("\n\t請按 Enter 鍵進入登錄界面!"); 739 getchar(); 740 getchar(); 741 login(); 742 } 743 else 744 { 745 n=load(); 746 printf_n(n); 747 printf(" 共有 %d 個學生的記錄.\n",n); 748 printf("\nPress [ ENTER ] key to back..."); 749 getchar(); 750 system("cls"); 751 menu(); /*返回主函數*/ 752 } 753 } 754 755 756 void welcome() /*歡迎頁面*/ 757 { 758 system("color F0"); 759 printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n"); 760 puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※"); 761 puts("\t ※※ ※※"); 762 puts("\t ※※ ※※"); 763 puts("\t ※※ 歡迎訪問學生學籍管理系統! ※※"); 764 puts("\t ※※ ※※"); 765 puts("\t ※※ ※※"); 766 puts("\t ※※ ※※"); 767 puts("\t ※※ ※※"); 768 puts("\t ※※ 制作人:xxx ※※"); 769 puts("\t ※※ 2018.6 ※※"); 770 puts("\t ※※ ※※"); 771 puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※"); 772 printf("\n\tPress [ Enter ] key to continue……\n"); 773 getchar(); 774 system("cls"); 775 } 776 777 void menu() /*主菜單*/ 778 { 779 int n,w1;/*n為服務種類保存變量,w1為數據錯誤標志位*/ 780 system("color 2e"); /*system函數改變背景色與前景色*/ 781 printf("\n\t\t\t歡迎使用學生學籍管理系統!\n"); 782 printf("\n"); 783 784 do 785 { 786 puts("\t\t★★★★★★★★ 菜單 ★★★★★★★★"); 787 puts("\t\t 1.登 錄 "); 788 puts("\t\t 2.插 入 "); 789 puts("\t\t 3.刪 除 "); 790 puts("\t\t 4.查 詢 "); 791 puts("\t\t 5.修 改 "); 792 puts("\t\t 6.瀏 覽 "); 793 puts("\t\t 7.籍 貫 "); 794 puts("\t\t 8.退 出 "); 795 puts("\t\t★★★★★★★★★★★★★★★★★★★★★"); 796 printf("請選擇服務種類(1-8) : [ ]\b\b"); 797 scanf("%d",&n); 798 if(n<1||n>8) 799 { 800 system("cls"); 801 printf("選擇錯誤! 請重新選擇!\n\a");/*輸出錯誤提示語句並發出警告音*/ 802 w1=1; 803 } 804 else 805 w1=0; 806 }while(w1==1); 807 switch(n) 808 { 809 case 1: login(); break; /*登錄*/ 810 case 2: system("cls"); insert(); break; /*插入*/ 811 case 3: system("cls"); deleter(); break; /*刪除*/ 812 case 4: system("cls"); search(); break; /*查找*/ 813 case 5: system("cls"); modify(); break; /*修改*/ 814 case 6: system("cls"); browse(); break; /*瀏覽*/ 815 case 7: system("cls"); printf_addr(); break; /*輸出籍貫*/ 816 case 8: printf(" 歡迎再次使用!再見!\n"); exit(0);break; /*退出*/ 817 818 } 819 } 820 821 int main() 822 { 823 welcome(); 824 menu(); 825 return 0; 826 }
效果圖
目錄菜單
刪除學生
插入學生學籍
根據自己需要可以改變功能!
學好C語言,為專業知識的學習有很大好處。努力多學,學好計算機技術