C语言学生管理系统(增进版)
在原版上进行改进,主要改进的功能有。
1.利用atof:将字符串转换为浮点型;
利用atoi:将字符串转换为整型;
原文地址:http://www.cnblogs.com/sddai/p/5774121.html
3.将结构体改变了,可能因为编码原因,只能char型输入,还好有ASCII码
4.将输出格式改变
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <math.h> 5 #include <windows.h> 6 7 #pragma warning(disable : 4996) 8 #pragma warning(disable : 4477) 9 10 FILE *fp; 11 12 int count; 13 14 char biubiubiu = '\n'; 15 16 struct add 17 { 18 char ch[2]; 19 char a[5]; 20 char SID[5]; 21 char ch1[2]; 22 char b[6]; 23 char Name[10]; 24 char ch2[2]; 25 char c[5]; 26 char Age[5]; 27 char ch3[2]; 28 char d[8]; 29 char Gender[10]; 30 char ch4[2]; 31 char e[15]; 32 char EntranxeScore[10]; 33 char ch5[2]; 34 }add1[750], student, *pointer; 35 36 void color(const unsigned short color1) 37 { 38 if (color1 >= 0 && color1 <= 15) 39 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1); 40 else 41 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); 42 } 43 44 void printinfor();//菜单函数 45 46 void wuyu_1();//按学号排序函数 47 void wuyu_2();//按总成绩排序函数 48 49 void function_1();//添加学生信息函数 50 void function_2();//删除学生信息函数 51 void function_3();//更改学生信息函数 52 void function_4();//查询学生信息函数 53 void function_5();//显示所有学生信息函数 54 void function_6();//附加功能选项函数 55 56 void findfunction_1();//通过学号查询函数 57 void findfunction_2();//通过学生姓名查询函数 58 void findfunction_3();//通过学生年龄查询函数 59 void findfunction_4();//通过学生分数查询函数 60 61 void add_txt(); 62 63 int main(void) 64 { 65 int num_1, k; 66 fp = fopen("D:\\studyinfor.txt", "ab+");//打开文本/创建,进行操作 67 fread(add1, sizeof(struct add), 750, fp);//读取文本储存信息 68 add_txt(); 69 for (k = 0; k<750; k++)//判断文本中储存人数(Age==0表示此处无数据) 70 { 71 if (add1[k].Age[0] == '\0') 72 { 73 break; 74 } 75 count++; 76 } 77 fclose(fp);//关闭指针 78 printinfor();//显示菜单 79 while (1)//使用者操作 80 { 81 do 82 { 83 printf("请输入要进行操作的序列号:"); 84 scanf("%d", &num_1); 85 } while (num_1<0 || num_1>6); 86 if (num_1 == 0)break; 87 88 switch (num_1) 89 { 90 case 1:function_1(); break; 91 case 2:function_2(); break; 92 case 3:function_3(); break; 93 case 4:function_4(); break; 94 case 5:function_5(); break; 95 case 6:function_6(); break; 96 } 97 system("cls"); 98 printinfor(); 99 } 100 return 0; 101 } 102 103 void checkSID(int j)//检查学号大小函数 104 { 105 int num_int; 106 num_int = atoi(add1[j].SID); 107 while (num_int <= 0 || num_int>750) 108 { 109 color(4); 110 printf("warning:SID的取值范围在0~750,请重新输入.\n"); 111 color(15); 112 printf("请输入学生的学号:"); 113 scanf("%s", &add1[j].SID); 114 num_int = atoi(add1[j].SID); 115 if (num_int>0 && num_int <= 750) 116 { 117 break; 118 } 119 } 120 } 121 122 void checkSID_1(int m)//检查学号是否重复函数 123 { 124 int k, num_int, num1_int; 125 num1_int = atoi(add1[m].SID); 126 for (k = 0; k < count; k++) 127 { 128 if (k == m) 129 { 130 continue; 131 } 132 num_int = atoi(add1[k].SID); 133 while (num_int == num1_int) 134 { 135 color(4); 136 printf("学号重复,请重新输入.\n"); 137 color(15); 138 printf("请输入学号:"); 139 scanf("%s", &add1[m].SID); 140 num1_int = atoi(add1[m].SID); 141 k == 0; 142 } 143 } 144 } 145 //因为选择输入的方式是ab+,从新从i=0开始输入进去,所以想要通过 146 147 void checkName(int m, char Name[])//检查姓名函数 148 { 149 while (strlen(Name)>10) 150 { 151 color(4); 152 printf("warning:Name的字数最多为5,请重新输入.\n"); 153 color(15); 154 printf("请输入学生的姓名:"); 155 scanf("%s", &add1[m].Name); 156 } 157 } 158 159 void checkGender(int i, char a[])//检查性别函数 160 { 161 while (strcmp(a, "男") && strcmp(a, "女")) 162 { 163 color(4); 164 printf("warning:Gender只能是男或女,请重新输入.\n"); 165 color(15); 166 printf("请输入学生的性别:"); 167 scanf("%s", &add1[i].Gender); 168 } 169 } 170 171 void checkAge(int m)//检查年龄函数 172 { 173 int num_int; 174 num_int = atoi(add1[m].Age); 175 while (num_int<0 || num_int>122) 176 { 177 color(4); 178 printf("warning:Age的取值范围在0~122,请重新输入,严肃对待!\n"); 179 color(15); 180 printf("请输入学生的年龄:"); 181 scanf("%s", &add1[m].Age); 182 num_int = atoi(add1[m].Age); 183 } 184 } 185 186 void checkEntranxeScore(int k) 187 { 188 double num_double; 189 num_double = atof(add1[k].EntranxeScore); 190 while (num_double<0 || num_double>750) 191 { 192 color(4); 193 printf("warning:EntranxeScore的取值范围在0~750,请重新输入.\n"); 194 color(15); 195 printf("请输入学生的分数:"); 196 scanf("%lf", &add1[k].EntranxeScore); 197 } 198 } 199 200 void getName(char name[]) { 201 while (1) { 202 printf("请输入学生的姓名:"); 203 fflush(stdin); 204 scanf("%s", name); 205 if (strlen(name)<10) { 206 break; 207 } 208 } 209 } 210 211 void printinfor() 212 { 213 system("date /t"); 214 system("TIME /t\n"); 215 printf(" **********欢迎使用学生信息管理系统(当前有%d人)********\n", count); 216 printf(" *\t\t(1)添加学生信息\t\t\t\t*\n"); 217 printf(" *\t\t(2)删除学生信息\t\t\t\t*\n"); 218 printf(" *\t\t(3)更改学生信息\t\t\t\t*\n"); 219 printf(" *\t\t(4)查询学生信息\t\t\t\t*\n"); 220 printf(" *\t\t(5)显示所有学生信息\t\t\t*\n"); 221 printf(" *\t\t(6)附加功能选项\t\t\t\t*\n"); 222 printf(" *\t\t(0)退出学生系统\t\t\t\t*\n"); 223 printf(" *\t\t\t\t\t 作者:liu\t*\n"); 224 printf(" *****************************************************\n"); 225 } 226 227 void findfunction() 228 { 229 system("cls"); 230 system("date /t"); 231 system("TIME /t\n"); 232 printf(" ***************查询学生信息(当前有%d人)*****************\n", count); 233 printf(" *\t\t(1)通过学生学号查询 \t\t\t*\n"); 234 printf("\n"); 235 printf(" *\t\t(2)通过学生姓名查询 \t\t\t*\n"); 236 printf("\n"); 237 printf(" *\t\t(3)通过学生年龄查询 \t\t\t*\n"); 238 printf("\n"); 239 printf(" *\t\t(4)通过学生分数查询 \t\t\t*\n"); 240 printf(" *********************************************************\n"); 241 } 242 243 void Morefunction() 244 { 245 system("cls"); 246 printf(" *******************附加功能*****************\n"); 247 printf("\t\t\t*\t\t\t\t\t *\n"); 248 printf(" *\t\t(1)按学号进行整理 \t *\n"); 249 printf("\t\t\t*\t\t\t\t\t *\n"); 250 printf(" *\t\t(2)按总分进行整理 \t *\n"); 251 printf("\t\t\t*\t\t\t\t\t *\n"); 252 color(3); 253 printf("\t\t\t*待开发... ... *\n"); 254 color(15); 255 printf("\t\t\t********************************************\n"); 256 } 257 258 void inputmomo(int i) 259 { 260 printf("请输入学生的学号:"); 261 scanf("%s", &add1[i].SID); 262 checkSID(i); 263 checkSID_1(i); 264 color(8); 265 printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 266 color(15); 267 printf("请输入学生的名字:"); 268 scanf("%s", &add1[i].Name); 269 checkName(i, add1[i].Name); 270 color(8); 271 printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 272 color(15); 273 printf("请输入学生的年龄:"); 274 scanf("%s", &add1[i].Age); 275 checkAge(i); 276 color(8); 277 printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 278 color(15); 279 printf("请输入学生的性别:"); 280 scanf("%s", &add1[i].Gender); 281 checkGender(i, add1[i].Gender); 282 color(8); 283 printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 284 color(15); 285 printf("请输入学生的总成绩:"); 286 scanf("%s", &add1[i].EntranxeScore); 287 color(8); 288 printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); 289 color(15); 290 } 291 292 void function_1()//添加学生信息函数 293 { 294 int n, i, m = count; 295 if ((fp = fopen("D:\\studyinfor.txt", "ab+")) == NULL)//检测文本是否正常打开 296 { 297 color(8); 298 printf("Can't open the file!"); 299 color(15); 300 system("pause"); 301 exit(1); 302 } 303 printf("请输入您要添加的学生信息人数:"); 304 scanf("%d", &n); 305 306 for (i = count; i<n + m; i++) 307 { 308 printf("请输入No.%d的信息.\n", i + 1); 309 inputmomo(i - m);//录入学生信息 310 count++; 311 } 312 fwrite(add1, sizeof(struct add), n, fp); 313 rewind(fp); 314 color(3); 315 printf("添加中"); 316 Sleep(200); 317 printf("."); 318 Sleep(300); 319 printf("."); 320 Sleep(300); 321 printf(". "); 322 Sleep(300); 323 printf("."); 324 Sleep(300); 325 printf("."); 326 Sleep(300); 327 printf(".\n"); 328 color(2); 329 printf("添加成功!\n"); 330 printf("学生信息目录已更新.\n"); 331 fread(add1, sizeof(struct add), count, fp);//读取学生信息 332 color(15); 333 printf("___________________________________________________\n"); 334 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 335 for (i = 0; i<count; i++)//打印更新的学生信息 336 { 337 if (add1[i].SID>0) 338 printf(" %-3s %-3s %-6s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore); 339 } 340 printf("|-------------------------------------------------|\n"); 341 fclose(fp); 342 printf("按任意键返回主菜单... ....\n"); 343 system("pause"); 344 } 345 346 void function_2()//删除学生信息 347 { 348 int m, k, i, j = 0, num_int; 349 if ((fp = fopen("D:\\studyinfor.txt", "wb+")) == NULL) 350 { 351 printf("Can't open the file!\n"); 352 system("pause"); 353 exit(1); 354 } 355 if (count == 0) 356 { 357 color(4); 358 printf("The file is NULL!!!\n"); 359 color(15); 360 return; 361 } 362 printf("请输入你要删除的学生的学号:"); 363 scanf("%d", &m); 364 fread(add1, sizeof(struct add), count, fp); 365 for (k = 0; k<count; k++) 366 { 367 num_int = atoi(add1[k].SID); 368 if (num_int == m) 369 { 370 printf("_____________________________________________________\n"); 371 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 372 printf(" %.2d %-6s %-3d %-3s \t%5.2lf \n", add1[k].SID, add1[k].Name, add1[k].Age, add1[k].Gender, add1[k].EntranxeScore); 373 printf("|---------------------------------------------------|\n"); 374 for (i = k; i<count - 1; i++)//将要删除的数后面的函数往前进一格,占去要删除的部分 375 { 376 strcpy(add1[i].SID, add1[i + 1].SID); 377 strcpy(add1[i].Name, add1[i + 1].Name); 378 strcpy(add1[i].Age, add1[i + 1].Age); 379 strcpy(add1[i].Gender, add1[i + 1].Gender); 380 strcpy(add1[i].EntranxeScore, add1[i + 1].EntranxeScore); 381 } 382 count--; 383 fwrite(add1, sizeof(struct add), count, fp); 384 rewind(fp);//使指针回到开头 385 fclose(fp); 386 color(3); 387 printf("删除中"); 388 Sleep(200); 389 printf("."); 390 Sleep(300); 391 printf("."); 392 Sleep(300); 393 printf(". "); 394 Sleep(300); 395 printf("."); 396 Sleep(300); 397 printf("."); 398 Sleep(300); 399 printf(".\n"); 400 Sleep(300); 401 color(2); 402 printf("删除成功!按任意键继续... ...\n"); 403 color(15); 404 j++; 405 } 406 } 407 if (j == 0) 408 { 409 color(4); 410 printf("查无此人!\n"); 411 color(15); 412 } 413 system("pause"); 414 } 415 416 void function_3()//更改学生信息 417 { 418 int m, k, j = 0, num_int; 419 if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL) 420 { 421 printf("Can't open the file!\n"); 422 system("PAUSE"); 423 exit(1); 424 } 425 if (count == 0) 426 { 427 color(4); 428 printf("The file is NULL!!!\n"); 429 color(15); 430 return; 431 } 432 printf("请输入你要更改的学生的学号:"); 433 scanf("%d", &m); 434 fread(add1, sizeof(struct add), count, fp); 435 for (k = 0; k<count; k++) 436 { 437 num_int = atoi(add1[k].SID); 438 if (num_int == m) 439 { 440 printf("_____________________________________________________\n"); 441 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 442 printf(" %-6s %-6s %-3s %-3s \t %-6s \n", add1[k].SID, add1[k].Name, add1[k].Age, add1[k].Gender, add1[k].EntranxeScore); 443 printf("|---------------------------------------------------|\n"); 444 printf("请输入你要修改的内容:\n"); 445 inputmomo(k); 446 rewind(fp); 447 fwrite(add1, sizeof(struct add), count, fp); 448 //rewind(fp); 449 fclose(fp); 450 color(2); 451 printf("更改成功!按任意键继续... ...\n"); 452 color(15); 453 j++; 454 } 455 } 456 if (j == 0) 457 { 458 color(4); 459 printf("查无此人!\n"); 460 color(15); 461 } 462 system("pause"); 463 } 464 465 void function_4()//查询学生信息 466 { 467 int m; 468 findfunction();//进入查询菜单 469 printf("请输入你查询的方式序列号:"); 470 scanf("%d", &m); 471 do { 472 switch (m) 473 { 474 case 1:findfunction_1(); break; 475 case 2:findfunction_2(); break; 476 case 3:findfunction_3(); break; 477 case 4:findfunction_4(); break; 478 } 479 } while (m<1 || m>4); 480 } 481 482 void function_5()//显示所有学生信息 483 { 484 int i; 485 if ((fp = fopen("D:\\studyinfor.txt", "rb")) == NULL) 486 { 487 printf("Can't open the file!\n"); 488 system("PAUSE"); 489 exit(1); 490 } 491 fread(add1, sizeof(struct add), count, fp); 492 if (count == 0) 493 { 494 color(4); 495 printf("The file is NULL!\n"); 496 color(15); 497 system("pause"); 498 return; 499 } 500 else { 501 printf("_____________________________________________________\n"); 502 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 503 for (i = 0; i<count; i++) 504 { 505 if (add1[i].SID != '\0') 506 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore); 507 } 508 printf("|---------------------------------------------------|\n"); 509 } 510 fclose(fp); 511 printf("按任意键返回主菜单... ...\n"); 512 system("pause"); 513 } 514 515 void function_6()//附加功能选项 516 { 517 Morefunction();//附加功能 518 int k; 519 do { 520 printf("请输入你要操作的序号:"); 521 scanf("%d", &k); 522 switch (k) 523 { 524 case 1:wuyu_1(); break; 525 case 2:wuyu_2(); break; 526 default: 527 { 528 color(4); 529 printf("输入有误,请重新输入!\n"); 530 color(15); 531 } 532 } 533 } while (k < 1 || k>2); 534 } 535 536 void findfunction_1()//学生学号查询 537 { 538 int m, n, i, j = 0, num_int; 539 printf("请输入你要搜索的学生学号范围:\n"); 540 printf("最小值:"); 541 scanf("%d", &m); 542 printf("最大值:"); 543 scanf("%d", &n); 544 fp = fopen("D:\\studyinfor.txt", "rb+"); 545 fread(add1, sizeof(struct add), count, fp); 546 printf("_____________________________________________________\n"); 547 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 548 for (i = 0; i<count; i++) 549 { 550 num_int = atoi(add1[i].SID); 551 if (num_int >= m && num_int <= n) 552 { 553 printf(" %-3s %-6s %-3s %-3s \t %-3s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore); 554 printf("|---------------------------------------------------|\n"); 555 j++; 556 } 557 } 558 if (j == 0) 559 { 560 printf("无相关学生信息.\n"); 561 } 562 printf("按任意键返回主菜单... ...\n"); 563 system("pause"); 564 } 565 566 void findfunction_2()//学生姓名查询 567 { 568 int i, n = 0; 569 char name[10]; 570 getName(name);//输入学生姓名 571 rewind(fp); 572 fp = fopen("D:\\studyinfor.txt", "rb+"); 573 fread(add1, sizeof(struct add), count, fp); 574 for (i = 0; i<count; i++) 575 { 576 if (strcmp(add1[i].Name, name) == 0) { 577 printf("_____________________________________________________\n"); 578 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 579 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore); 580 printf("|---------------------------------------------------|\n"); 581 ++n; 582 break; 583 } 584 } 585 if (n == 0) 586 { 587 color(4); 588 printf("无相关学生信息!\n"); 589 color(15); 590 } 591 printf("按任意键返回主菜单... ...\n"); 592 system("pause"); 593 } 594 595 void findfunction_3()//学生年龄查询 596 { 597 int m, n, i, j = 0, num_int; 598 printf("请输入你要查询的学生年龄范围:\n"); 599 printf("最小值:"); 600 scanf("%d", &m); 601 printf("最大值:"); 602 scanf("%d", &n); 603 fp = fopen("D:\\studyinfor.txt", "rb+"); 604 fread(add1, sizeof(struct add), count, fp); 605 printf("_____________________________________________________\n"); 606 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 607 for (i = 0; i<count; i++) 608 { 609 num_int = atoi(add1[i].Age); 610 if (num_int >= m && num_int <= n) 611 { 612 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i - 1].SID, add1[i - 1].Name, add1[i - 1].Age, add1[i - 1].Gender, add1[i - 1].EntranxeScore); 613 printf("|---------------------------------------------------|\n"); 614 j++; 615 } 616 } 617 if (j == 0) 618 { 619 printf("无相关学生信息!\n"); 620 } 621 printf("按任意键返回主菜单... ...\n"); 622 system("pause"); 623 } 624 625 void findfunction_4()//学生分数查询 626 { 627 int m, n, i, j = 0; 628 double num_double; 629 printf("请输入你要查询的学生总成绩范围:\n"); 630 printf("最小值:"); 631 scanf("%d", &m); 632 printf("最大值:"); 633 scanf("%d", &n); 634 fp = fopen("D:\\studyinfor.txt", "rb+"); 635 fread(add1, sizeof(struct add), count, fp); 636 printf("_____________________________________________________\n"); 637 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 638 for (i = 0; i<count; i++) 639 { 640 num_double = atof(add1[i].EntranxeScore); 641 if (num_double >= m && num_double <= n) 642 { 643 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore); 644 printf("|---------------------------------------------------|\n"); 645 j++; 646 } 647 } 648 if (j == 0) 649 { 650 printf("无相关学生信息!\n"); 651 } 652 printf("按任意键返回主菜单... ...\n"); 653 system("pause"); 654 } 655 656 void ExchangeFunction(int m, int n)//交换数据结构中两个统一结构的不同下标的结构值 657 { 658 double max = 0; 659 int max_1 = 0; 660 strcpy(student.EntranxeScore, add1[m].EntranxeScore); 661 strcpy(add1[m].EntranxeScore, add1[n].EntranxeScore); 662 strcpy(add1[n].EntranxeScore, student.EntranxeScore); 663 strcpy(student.Age, add1[m].Age); 664 strcpy(add1[m].Age, add1[n].Age); 665 strcpy(add1[n].Age, student.Age); 666 strcpy(student.SID, add1[m].SID); 667 strcpy(add1[m].SID, add1[n].SID); 668 strcpy(add1[n].SID, student.SID); 669 strcpy(student.Gender, add1[m].Gender); 670 strcpy(add1[m].Gender, add1[n].Gender); 671 strcpy(add1[n].Gender, student.Gender); 672 strcpy(student.Name, add1[m].Name); 673 strcpy(add1[m].Name, add1[n].Name); 674 strcpy(add1[n].Name, student.Name); 675 } 676 677 void wuyu_1()//按学号查询 678 { 679 if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL) 680 { 681 printf("Can't open the file!\n"); 682 system("PAUSE"); 683 exit(1); 684 } 685 int m, n, j, num_int, num1_int; 686 for (m = 0; m < count - 1; m++)//比较学号大小 687 { 688 for (n = m + 1; n < count; n++) 689 { 690 num_int = atoi(add1[n].SID); 691 num1_int = atoi(add1[m].SID); 692 if (num_int < num1_int) 693 { 694 ExchangeFunction(m, n);//交换一个结构体整体值 695 } 696 } 697 } 698 color(3); 699 printf("排序中"); 700 Sleep(200); 701 printf("("); 702 Sleep(300); 703 printf(";"); 704 Sleep(300); 705 printf("—"); 706 Sleep(300); 707 printf("_"); 708 Sleep(300); 709 printf("—"); 710 Sleep(300); 711 printf(")\n"); 712 Sleep(300); 713 color(6); 714 printf("排序成功!按任意键继续... ...\n"); 715 color(15); 716 printf("_____________________________________________________\n"); 717 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 718 for (j = 0; j<count; j++) 719 { 720 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[j].SID, add1[j].Name, add1[j].Age, add1[j].Gender, add1[j].EntranxeScore); 721 printf("|---------------------------------------------------|\n"); 722 } 723 rewind(fp); 724 fwrite(add1, sizeof(struct add), count, fp); 725 fclose(fp); 726 system("pause"); 727 } 728 729 void wuyu_2()//按总分排序 730 { 731 if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL) 732 { 733 printf("Can't open the file!\n"); 734 system("PAUSE"); 735 exit(1); 736 } 737 int m, n, j; 738 double num_double, num1_double; 739 for (m = 0; m < count - 1; m++)//比较总分大小 740 { 741 for (n = m + 1; n < count; n++) 742 { 743 num_double = atof(add1[n].EntranxeScore); 744 num1_double = atof(add1[m].EntranxeScore); 745 if (num_double > num1_double) 746 { 747 ExchangeFunction(m, n);//交换两个结构体整体值 748 } 749 } 750 } 751 color(3); 752 printf("排序中"); 753 Sleep(200); 754 printf("("); 755 Sleep(300); 756 printf("*"); 757 Sleep(300); 758 printf("— "); 759 Sleep(300); 760 printf("з"); 761 Sleep(300); 762 printf("—"); 763 Sleep(300); 764 printf(")\n"); 765 Sleep(300); 766 color(6); 767 printf("排序成功!按任意键继续... ...\n"); 768 color(15); 769 printf("_____________________________________________________\n"); 770 printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n"); 771 for (j = 0; j<count; j++) 772 { 773 printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[j].SID, add1[j].Name, add1[j].Age, add1[j].Gender, add1[j].EntranxeScore); 774 printf("|---------------------------------------------------|\n"); 775 } 776 rewind(fp); 777 fwrite(add1, sizeof(struct add), count, fp); 778 fclose(fp); 779 system("pause"); 780 } 781 782 void add_txt() 783 { 784 int i; 785 for (i = 0; i<750; i++) 786 { 787 strcpy(add1[i].ch, "\r\n"); 788 strcpy(add1[i].ch1, "\r\n"); 789 strcpy(add1[i].ch2, "\r\n"); 790 strcpy(add1[i].ch3, "\r\n"); 791 strcpy(add1[i].ch4, "\r\n"); 792 strcpy(add1[i].ch5, "\r\n"); 793 strcpy(add1[i].a, "SID:"); 794 strcpy(add1[i].b, "Name:"); 795 strcpy(add1[i].c, "Age:"); 796 strcpy(add1[i].d, "Gender:"); 797 strcpy(add1[i].e, "EntranxeScore:"); 798 } 799 }