学生管理系统.c
學(xué)生管理系統(tǒng).c
直接貼代碼了?
另有:python調(diào)用c程序的實(shí)現(xiàn)
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 using namespace std; 4 5 6 struct Student 7 { 8 char Number[9]; 9 char Name[9]; 10 char Sex[20]; 11 char Post[4]; 12 char MainPhone[12]; 13 char OtherPhone[12]; 14 char Mail[30]; 15 struct Student* Next; 16 }; 17 18 int NodeNumber = 0;//統(tǒng)計(jì)個(gè)數(shù) 19 char MESSAGE[20] = { '\0' };//保存文件名字,用來(lái)判斷是否重復(fù)輸入 20 struct Student *top = NULL, *rear = NULL; 21 22 void Choice(); 23 void WriteMessage(); 24 void AddStudent(); 25 void Amend(); 26 void Delete(); 27 void Save(); 28 void PrintOne(); 29 void PrintClass(); 30 void PrintPosition(); 31 void PrintALL(); 32 void PrintSame(); 33 34 35 int main(){ 36 Choice(); 37 int num; 38 printf("請(qǐng)輸入功能選項(xiàng):"); 39 while (scanf("%d", &num)) 40 { 41 switch (num) 42 { 43 case 1:system("CLS"); 44 WriteMessage(); 45 break; 46 case 2:system("CLS"); 47 AddStudent(); 48 break; 49 case 3:system("CLS"); 50 Amend(); 51 break; 52 case 4:system("CLS"); 53 Delete(); 54 break; 55 case 5:system("CLS"); 56 Save(); 57 break; 58 case 6:system("CLS"); 59 PrintOne(); 60 break; 61 case 7:system("CLS"); 62 PrintClass(); 63 break; 64 case 8:system("CLS"); 65 PrintPosition(); 66 break; 67 case 9:system("CLS"); 68 PrintALL(); 69 break; 70 case 10:system("CLS"); 71 PrintSame(); 72 break; 73 default:system("CLS"); 74 printf("輸入錯(cuò)誤!\n"); 75 system("PAUSE"); 76 system("CLS"); 77 Choice(); 78 break; 79 } 80 printf("請(qǐng)輸入功能選項(xiàng):"); 81 } 82 return 0; 83 } 84 85 //界面選項(xiàng) 86 void Choice() 87 { 88 printf("\t※※※※※※※※※※※歡迎進(jìn)入通訊錄管理系統(tǒng)※※※※※※※※※※※\n"); 89 printf("\t※ ※\n"); 90 printf("\t※ 系統(tǒng)功能說(shuō)明: ※\n"); 91 printf("\t※ ※\n"); 92 printf("\t※ 1.從文件中錄入多位同學(xué)的相關(guān)信息; ※\n"); 93 printf("\t※ 2.增加1位新同學(xué)的相關(guān)信息; ※\n"); 94 printf("\t※ 3.修改1位同學(xué)的相關(guān)信息; ※\n"); 95 printf("\t※ 4.刪除1位同學(xué)的所有信息; ※\n"); 96 printf("\t※ 5.將當(dāng)前系統(tǒng)中的所有信息保存到文件中; ※\n"); 97 printf("\t※ 6.打印某位同學(xué)(按照姓名或手機(jī)號(hào)查找)的所有相關(guān)信息 ※\n"); 98 printf("\t※ 7.打印某班同學(xué)的所有相關(guān)信息(可選); ※\n"); 99 printf("\t※ 8.輸出所有班級(jí)干部的相關(guān)信息; ※\n"); 100 printf("\t※ 9.按照學(xué)號(hào)順序打印系統(tǒng)中所有同學(xué)的信息; ※\n"); 101 printf("\t※ 10.打印所有包含相同手機(jī)號(hào)的同學(xué)信息; ※\n"); 102 printf("\t※ ※\n"); 103 printf("\t※ ---------退出系統(tǒng)請(qǐng)輸入exit--------- ※\n"); 104 printf("\t※ ※\n"); 105 printf("\t※※※※※※※※※※※※※謝謝使用※※※※※※※※※※※※※※※※\n"); 106 printf("\n"); 107 } 108 109 //輸出一個(gè)學(xué)生信息 110 void Out(struct Student *t) 111 { 112 printf("\t學(xué) 號(hào):%-13s姓 名:%-13s\n", t->Number, t->Name); 113 printf("\t性 別:%-13s職 務(wù):%-13s\n", t->Sex, t->Post); 114 printf("\t手機(jī)號(hào):%-13s其它號(hào):%-13s\n", t->MainPhone, t->OtherPhone); 115 printf("\t郵 箱:%s\n", t->Mail); 116 printf("\t------------------------------------------\n"); 117 printf("\n"); 118 119 } 120 121 //插入鏈表 122 void inrear(struct Student *p) //構(gòu)建鏈表(隊(duì)列) 123 { 124 if (top == NULL) 125 { 126 top = p; 127 rear = p; 128 } 129 130 else 131 { 132 rear->Next = p; 133 rear = p; 134 } 135 NodeNumber++;//節(jié)點(diǎn)數(shù)加一 136 } 137 138 //對(duì)學(xué)號(hào)排序 139 void Sort(){ 140 struct Student *p, *q, *r, *s; //q指向p的前元素,r指向p的后元素 141 bool flag = true; 142 s = (struct Student *)malloc(sizeof(struct Student)); //哨兵變量 143 s->Next = top; 144 top = s; 145 p = top->Next; 146 q = s; 147 while (flag&&p != NULL) 148 { 149 flag = false; 150 while (p->Next != NULL) //用p從頭掃到尾 151 { 152 r = p->Next; //r指向p后 153 if (strcmp(p->Number, r->Number) == 1) 154 { 155 q->Next = r; 156 p->Next = r->Next; 157 r->Next = p; 158 q = r; 159 flag = true; 160 } 161 else 162 { // q,p向后移位 163 q = p; 164 p = p->Next; 165 } 166 } 167 q = s;//q,p重新到第一個(gè)元素 168 p = top->Next; 169 } 170 top = top->Next;//釋放哨兵變量 171 free(s); 172 } 173 174 //檢查學(xué)生是否重復(fù) 175 bool Check(struct Student *t) 176 { 177 struct Student *p = top; 178 while (p != NULL) 179 { 180 if (strcmp(p->Number, t->Number) == 0 || strcmp(p->Name, t->Name) == 0) 181 return false; 182 p = p->Next; 183 } 184 return true; 185 } 186 187 //從文件中讀入信息 188 void WriteMessage() 189 { 190 FILE *f; 191 char str[20] = { '\0' }; 192 printf("請(qǐng)輸入文件名稱:"); 193 scanf("%s", str); 194 //比較文件名字是否重復(fù) 195 if (strcmp(MESSAGE, str) == 0) 196 { 197 printf("錯(cuò)誤,多次輸入同一文件!\n"); 198 printf("是否重新輸入(Y or N)\n"); 199 char ch = getchar(); 200 ch = getchar(); 201 if (ch == 'Y' || ch == 'y') 202 { 203 system("CLS"); 204 WriteMessage(); 205 } 206 else 207 { 208 system("PAUSE"); 209 system("CLS"); 210 Choice(); 211 } 212 } 213 else 214 { 215 strcpy(MESSAGE, str); 216 f = fopen(str, "r"); 217 if (!f) 218 { 219 printf("文件打開(kāi)失敗!即將創(chuàng)立新的%s文件", str); 220 f = fopen(str, "w"); 221 } 222 else 223 { 224 while (!feof(f)) 225 { 226 struct Student *p = (struct Student *)malloc(sizeof(struct Student)); 227 p->Next = NULL; 228 fscanf(f, "%s", &p->Number); 229 fscanf(f, "%s", &p->Name); 230 fscanf(f, "%s", &p->Sex); 231 fscanf(f, "%s", &p->Post); 232 fscanf(f, "%s", &p->MainPhone); 233 fscanf(f, "%s", &p->OtherPhone); 234 fscanf(f, "%s", &p->Mail); 235 if (Check(p)) 236 inrear(p); 237 } 238 printf("文件已成功寫(xiě)入!\n"); 239 printf("學(xué)生數(shù)為: %d\n", NodeNumber); 240 system("PAUSE"); 241 system("CLS"); 242 Choice(); 243 } 244 fclose(f); 245 } 246 } 247 248 249 //增加學(xué)生 250 void AddStudent(){ 251 struct Student *p = (struct Student *)malloc(sizeof(struct Student)); 252 p->Next = NULL; 253 printf("\n請(qǐng)輸入學(xué)號(hào):"); 254 scanf("%s", &p->Number); 255 while (p->Number[0] != '5' || p->Number[1] != '3') 256 { 257 printf("你輸入的學(xué)號(hào)是不是不對(duì)呢,請(qǐng)重新輸入"); 258 scanf("%s", &p->Number); 259 if (strlen(p->Number) != 8) 260 { 261 printf("你輸入的學(xué)號(hào)是不是不對(duì)呢,請(qǐng)重新輸入"); 262 scanf("%s", &p->Number); 263 } 264 } 265 while (strlen(p->Number) != 8) 266 { 267 printf("你輸入的學(xué)號(hào)是不是不對(duì)呢,請(qǐng)重新輸入"); 268 scanf("%s", &p->Number); 269 if (p->Number[0] != '5' || p->Number[1] != '3') 270 { 271 printf("你輸入的學(xué)號(hào)是不是不對(duì)呢,請(qǐng)重新輸入"); 272 scanf("%s", &p->Number); 273 } 274 } 275 printf("\n請(qǐng)輸入姓名:"); 276 scanf("%s", &p->Name); 277 for (int T = 67; T<122; T++) 278 for (int i = 0; i<strlen(p->Name); i++) 279 while (p->Name[i] == char(T)) 280 { 281 printf("你輸入的名字格式有誤,請(qǐng)重新輸入"); 282 scanf("%s", &p->Name); 283 } 284 printf("\n請(qǐng)輸入性別:"); 285 scanf("%s", &p->Sex); 286 while (strcmp(p->Sex, "男") != 0 && strcmp(p->Sex, "女") != 0 && strcmp(p->Sex, "不詳") != 0){ 287 printf("你輸入的性別格式有錯(cuò)誤請(qǐng)重新輸入"); 288 printf("\n"); 289 scanf("%s", &p->Sex); 290 } 291 printf("\n請(qǐng)輸入職務(wù):"); 292 scanf("%s", &p->Post); 293 while (strcmp(p->Post, "班長(zhǎng)") != 0 && strcmp(p->Post, "學(xué)委") != 0 && strcmp(p->Post, "體育委員") != 0 && strcmp(p->Post, "文藝委員") != 0){ 294 printf("你輸入的職務(wù)有錯(cuò)誤請(qǐng)重新輸入"); 295 printf("\n"); 296 scanf("%s", &p->Post); 297 } 298 printf("\n請(qǐng)輸入主要手機(jī)號(hào):"); 299 scanf("%s", &p->MainPhone); 300 while (strlen(p->MainPhone) != 11) 301 { 302 printf("你輸入的主手機(jī)號(hào)格式有誤哦,請(qǐng)重新輸入"); 303 scanf("%s", &p->MainPhone); 304 } 305 for (int i = 0; i<strlen(p->MainPhone); i++) 306 while (p->MainPhone[i] != char(48) && p->MainPhone[i] != char(49) && p->MainPhone[i] != char(50) && p->MainPhone[i] != char(51) && p->MainPhone[i] != char(52) && p->MainPhone[i] != char(53) && p->MainPhone[i] != char(54) && p->MainPhone[i] != char(55) && p->MainPhone[i] != char(56) && p->MainPhone[i] != char(57)) 307 { 308 printf("你輸入的主手機(jī)號(hào)格式有誤哦,請(qǐng)重新輸入"); 309 scanf("%s", &p->MainPhone); 310 } 311 printf("\n請(qǐng)輸入其他手機(jī)號(hào):"); 312 scanf("%s", &p->OtherPhone); 313 while (strlen(p->OtherPhone) != 11) 314 { 315 printf("你輸入的副手機(jī)號(hào)格式有問(wèn)題哦,請(qǐng)重新輸入"); 316 scanf("%s", &p->OtherPhone); 317 } 318 while (strcmp(p->MainPhone, p->OtherPhone) == 0) 319 printf("你輸入的主手機(jī)號(hào)和副手機(jī)號(hào)相同"); 320 printf("\n請(qǐng)輸入郵箱:"); 321 scanf("%s", &p->Mail); 322 int j = 1; 323 for (int L = 0; L<strlen(p->Mail); L++){ 324 if (p->Mail[L] == '@') 325 j++; 326 } 327 328 if (j != 2) 329 { 330 printf("你輸入的郵箱名是不是錯(cuò)了呢,請(qǐng)重新輸入郵箱名"); 331 scanf("%s", &p->Mail); 332 } 333 334 335 if (Check(p)) 336 inrear(p); 337 printf("已成功存儲(chǔ)!"); 338 system("PAUSE"); 339 system("CLS"); 340 Choice(); 341 }; 342 343 //修改信息 344 void Amend(){ 345 printf("\n請(qǐng)輸入要修改的同學(xué)的學(xué)號(hào)或姓名:"); 346 char str[8]; 347 scanf("%s", str); 348 struct Student *p = top; 349 while (p != NULL) 350 { 351 if ((strcmp(str, p->Number) == 0) || (strcmp(str, p->Name) == 0)) 352 break; 353 else 354 p = p->Next; 355 } 356 if (p != NULL) 357 { 358 printf("\n請(qǐng)選擇要修改的信息:\n\n"); 359 printf("1.學(xué)號(hào) 2.姓名 3.性別 4.主要電話號(hào)碼 5.其它電話號(hào)碼 6.郵箱\n\n"); 360 int n; 361 scanf("%d", &n); 362 while (n>0) 363 { 364 switch (n) 365 { 366 case 1:printf("請(qǐng)輸入新的學(xué)號(hào):"); 367 char NewNumber[9]; 368 scanf("%s", NewNumber); 369 strcpy(p->Number, NewNumber); 370 printf("已成功修改!\n"); 371 break; 372 case 2:printf("請(qǐng)輸入新的姓名:"); 373 char NewName[9]; 374 scanf("%s", NewName); 375 strcpy(p->Name, NewName); 376 printf("已成功修改!\n"); 377 break; 378 case 3:printf("請(qǐng)輸入新的性別:"); 379 char NewSex[3]; 380 scanf("%s", NewSex); 381 strcpy(p->Sex, NewSex); 382 printf("已成功修改!\n"); 383 break; 384 case 4:printf("請(qǐng)輸入新的主要手機(jī)號(hào)碼:"); 385 char NewMainPhone[12]; 386 scanf("%s", NewMainPhone); 387 strcpy(p->MainPhone, NewMainPhone); 388 printf("已成功修改!\n"); 389 break; 390 case 5:printf("請(qǐng)輸入新的其它手機(jī)號(hào)碼:"); 391 char NewOtherPhone[12]; 392 scanf("%s", NewOtherPhone); 393 strcpy(p->OtherPhone, NewOtherPhone); 394 printf("已成功修改!\n"); 395 break; 396 case 6:printf("請(qǐng)輸入新的郵箱:"); 397 char NewMail[30]; 398 scanf("%s", NewMail); 399 strcpy(p->Mail, NewMail); 400 printf("已成功修改!\n"); 401 break; 402 default:printf("輸入錯(cuò)誤!\n"); 403 break; 404 } 405 printf("\n請(qǐng)輸入修改選項(xiàng)或輸入0退出修改!\n"); 406 scanf("%d", &n); 407 } 408 system("PAUSE"); 409 system("CLS"); 410 Choice(); 411 } 412 else 413 { 414 printf("該系統(tǒng)中無(wú)此學(xué)生,是否添加(Y or N)\n"); 415 char ch = getchar();//濾去回車(chē) 416 ch = getchar(); 417 if (ch == 'Y' || ch == 'y') 418 AddStudent(); 419 if (ch == 'N' || ch == 'n') 420 { 421 system("PAUSE"); 422 system("CLS"); 423 Choice(); 424 } 425 } 426 }; 427 428 //刪除學(xué)生 429 void Delete(){ 430 printf("\n請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào)或姓名:"); 431 char str[9]; 432 scanf("%s", str); 433 struct Student *s = (struct Student *)malloc(sizeof(struct Student)), *p, *q; 434 s->Next = top; 435 top = s; 436 q = s; 437 p = q->Next; 438 while (p != NULL) 439 { 440 if ((strcmp(str, p->Number) == 0) || (strcmp(str, p->Name) == 0)) 441 { 442 q->Next = p->Next; 443 p = p->Next; 444 } 445 else 446 { 447 q = q->Next; 448 p = p->Next; 449 } 450 } 451 top = top->Next; 452 free(s); 453 NodeNumber--;//節(jié)點(diǎn)數(shù)減一 454 455 printf("\n是否繼續(xù)刪除(Y or N)\n\n"); 456 char ch = getchar();//濾去回車(chē) 457 ch = getchar(); 458 if (ch == 'Y' || ch == 'y') 459 Delete(); 460 if (ch == 'N' || ch == 'n') 461 { 462 system("PAUSE"); 463 system("CLS"); 464 Choice(); 465 } 466 }; 467 468 //保存信息到文件 469 void Save(){ 470 FILE *out; 471 out = fopen("PresentMessage.txt", "w"); 472 struct Student *p = top; 473 while (p != NULL) 474 { 475 fprintf(out, "%s %s %s %s %s %s\n", p->Number, p->Name, p->Sex, p->MainPhone, p->OtherPhone, p->Mail); 476 p = p->Next; 477 } 478 fclose(out); 479 printf("數(shù)據(jù)已成功導(dǎo)入文件PresentMessage.txt!\n"); 480 system("PAUSE"); 481 system("CLS"); 482 Choice(); 483 }; 484 485 //打印指定學(xué)生 486 void PrintOne(){ 487 printf("請(qǐng)輸入要打印的同學(xué)的姓名或手機(jī)號(hào):"); 488 bool flag = false; 489 char str[12]; 490 scanf("%s", str); 491 struct Student *p = top; 492 while (p != NULL) 493 { 494 if ((strcmp(str, p->MainPhone) == 0) || (strcmp(str, p->OtherPhone) == 0) || (strcmp(str, p->Name) == 0)) 495 { 496 flag = true; 497 Out(p); 498 p = p->Next; 499 } 500 else 501 p = p->Next; 502 } 503 if (!flag) 504 printf("該系統(tǒng)中無(wú)此學(xué)生或輸入錯(cuò)誤!\n"); 505 system("PAUSE"); 506 system("CLS"); 507 Choice(); 508 509 }; 510 511 //打印指定班級(jí) 512 void PrintClass(){ 513 bool flag = false; 514 Sort(); 515 printf("請(qǐng)輸入班級(jí)(阿拉伯?dāng)?shù)字):"); 516 int num; 517 scanf("%d", &num); 518 char ch[2]; 519 ch[0] = char(num % 10 + 48); 520 ch[1] = char(num / 10 + 48); 521 struct Student *p = top; 522 while (p != NULL) 523 { 524 if (p->Number[4] == ch[1] && p->Number[5] == ch[0]){ 525 Out(p); 526 flag = true; 527 } 528 p = p->Next; 529 } 530 if (!flag) 531 printf("該系統(tǒng)中無(wú)此班級(jí)的學(xué)生!\n"); 532 system("PAUSE"); 533 system("CLS"); 534 Choice(); 535 }; 536 537 //打印指定職務(wù) 538 void PrintPosition(){ 539 bool flag; 540 printf("請(qǐng)輸入要打印的職務(wù):"); 541 char str[12]; 542 scanf("%s", str); 543 struct Student *p = top; 544 while (p != NULL) 545 { 546 if ((strcmp(str, p->Post) == 0)) 547 { 548 flag = true; 549 Out(p); 550 p = p->Next; 551 } 552 else 553 p = p->Next; 554 } 555 if (!flag) 556 printf("該系統(tǒng)中無(wú)此職務(wù)學(xué)生或輸入錯(cuò)誤!\n"); 557 system("PAUSE"); 558 system("CLS"); 559 Choice(); 560 561 }; 562 563 //打印所有學(xué)生 564 void PrintALL(){ 565 Sort(); 566 struct Student* p = top; 567 printf("\t系統(tǒng)中共有%d個(gè)學(xué)生\n\n", NodeNumber); 568 if (p == NULL) 569 printf("文件中沒(méi)有學(xué)生信息!\n"); 570 else 571 { 572 while (p != NULL) 573 { 574 Out(p); 575 p = p->Next; 576 } 577 } 578 system("PAUSE"); 579 system("CLS"); 580 Choice(); 581 }; 582 583 //打印含有相同手機(jī)號(hào)的學(xué)生 584 void PrintSame(){ 585 int n = 1, m = 0;//n用來(lái)統(tǒng)計(jì)p,m用來(lái)統(tǒng)計(jì)q 586 bool flag = true;//flag判斷當(dāng)前節(jié)點(diǎn) 587 bool *Handle = (bool *)malloc(NodeNumber + 1);//用bool型的數(shù)組關(guān)聯(lián)鏈表,true代表相同的 588 for (int i = 0; i<NodeNumber; i++) 589 Handle[i] = true; 590 struct Student *q = top, *p; 591 if (q == NULL) 592 { 593 printf("系統(tǒng)中無(wú)學(xué)生信息!\n"); 594 system("PAUSE"); 595 system("CLS"); 596 Choice(); 597 } 598 else 599 { 600 p = q->Next; 601 while (q->Next != NULL) 602 { 603 while (p != NULL) 604 { 605 if ((strcmp(q->MainPhone, p->MainPhone) == 0) || (strcmp(q->OtherPhone, p->OtherPhone) == 0) || (strcmp(q->MainPhone, p->OtherPhone) == 0) || (strcmp(q->OtherPhone, p->MainPhone) == 0)) 606 { 607 //用flag控制當(dāng)前節(jié)點(diǎn)的輸出 608 if (flag) 609 { 610 Out(q); 611 Out(p); 612 flag = false; 613 Handle[n++] = false; 614 } 615 else 616 { 617 Out(p); 618 Handle[n++] = false; 619 } 620 } 621 else 622 n++; 623 p = p->Next; 624 } 625 m++; 626 q = q->Next; 627 flag = true; 628 //判斷當(dāng)前節(jié)點(diǎn)是否可訪問(wèn) 629 while (Handle[m] == false) 630 { 631 q = q->Next; 632 if (q->Next == NULL) 633 break; 634 m++; 635 } 636 n = m + 1; 637 p = q->Next; 638 } 639 } 640 system("PAUSE"); 641 system("CLS"); 642 Choice(); 643 };?
posted on 2018-12-11 13:43 **勇敢的心 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lzc978/p/10101632.html
總結(jié)
- 上一篇: python的递归
- 下一篇: Pytorch-nn.BatchNorm