学生选课系统 c语言
1 /********************************* 2 *主题:学生选修课程系统设计 3 * 4 *设计要求: 5 *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加的类别,要求编号要唯一,如果添加了重复编号的记录是,则提示数据添加重复并取消添加。 6 *2.查询功能:可根据编号、姓名等信息对已添加的同学和课程记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 7 *3.显示功能:可显示当前系统中所有学生和课程的记录,每条记录占据一行。 8 *4.编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 9 *5.删除功能:主要实现对已添加的学生和课程记录进行删除。如果当前系统中没有对应的记录,则提示“记录为空!”并返回操作。 10 *6.统计功能:能根据多种参数进行统计。能统计学生人数、课程门数、选修某门课程的学生的相关信息。 11 * 12 *********************************/ 13 /* 14 * Verson:2.0(basic) 15 * 16 * History: 完成课程信息的录入,查询等操作;完成选课功能(2017-05-05 20:30:00-01:20:00) 17 * 18 * Author:universes 19 * 20 * 21 *********************************/ 22 /* 23 * Verson:1.9 24 * 25 * History:完成了学生信息的查询操作 (2017-05-04 22:00:32-01:11:00) 26 * 27 * Author:universes 28 * 29 * 30 ********************************/ 31 /* 32 * Verson:1.5 33 * 34 * HIstory2:添加查重功能 (2017-05-02 23:39:19-01:06:05) 35 * History1:完成了用户对课程和学生信息的添加操作(没有查重功能)(2017-05-02 22:06:13-23:39:19) 36 * 37 * Author:universes 38 * 39 * 40 ********************************/ 41 /* 42 * Verson:1.0 43 * 44 * History:完成了用户的选择功能框架(2017-04-19 22:06:13-22:40:47) 45 * 46 * Author:universes 47 * 48 * 49 ********************************/ 50 #include <stdio.h> 51 #include <malloc.h> 52 #include <stdlib.h> 53 #include <string.h> 54 55 #define SIZE_STU 10 56 #define SIZE_COU 10 57 #define SIZE_SEL 10 58 //////////////函数声明部分 59 void home(void); 60 void stu_operate(void); 61 void cou_operate(void); 62 void statistic(void); 63 void choose(void); 64 void delete_sel(int); 65 //--学生信息部分: 66 void input_stu(void); 67 void search_stu(void); 68 void search_stu_id(void); 69 void search_stu_name(void); 70 void show_stu(void); 71 void edit_stu(void); 72 void renew_stu(void); 73 void delete_stu(void); 74 //--课程信息部分: 75 void input_cou(void); 76 void search_cou(void); 77 void search_cou_id(void); 78 void search_cou_name(void); 79 void show_cou(void); 80 void edit_cou(void); 81 void renew_cou(void); 82 void delete_cou(void); 83 84 /*学生信息结构体*/ 85 struct student_info { 86 char stu_ID[9]; 87 char stu_name[5]; 88 char sex[9]; 89 char age[9]; 90 char collage[9]; 91 char grade[9]; 92 char contact[9]; 93 }stu[SIZE_STU]; 94 95 /*课程信息结构体*/ 96 struct course_info { 97 char course_ID[9]; 98 char course_name[9]; 99 char property[9]; 100 char period[9]; 101 char credit[9]; 102 char time[9]; 103 int people; 104 }cou[SIZE_COU]; 105 106 /*选课记录结构体*/ 107 struct select { 108 int s;//存放学生信息的数组下标 109 int c;//存放课程信息的数组下标 110 }sel[SIZE_SEL]; 111 112 //全局变量i,j,x分别是学生,课程,选课信息数组下标 113 int i = -1; 114 int j = -1; 115 int x = -1; 116 117 int main(void){ 118 //进入欢迎界面 119 home(); 120 return 0; 121 } 122 123 //欢迎界面 124 void home(void) { 125 printf("\n-------------------------欢迎进入选课系统!----------------------"); 126 int h; 127 printf("\n\n 请选择你要进行的操作:"); 128 printf("\n\n 1.学生操作"); 129 printf("\n 2.课程操作"); 130 printf("\n 3.开始选课"); 131 printf("\n 4.选课统计"); 132 printf("\n 5.退出系统"); 133 printf("\n "); 134 printf("\n 请输入:"); 135 scanf("%d",&h); 136 system("cls"); 137 switch(h){ 138 case 1: 139 stu_operate(); 140 break; 141 case 2: 142 cou_operate(); 143 break; 144 case 3: 145 choose(); 146 break; 147 case 4: 148 statistic(); 149 break; 150 default: 151 system("cls"); 152 printf("BYE!"); 153 break; 154 } 155 } 156 /*开始选课*/ 157 void choose(void){ 158 char stu_id[10],cou_id[10]; 159 printf("\n-------------------------欢迎进入选课系统!----------------------"); 160 //输入选课学生信息 161 printf("\n\n 请输入选课人学号:"); 162 fflush(stdin); 163 scanf("%s",stu_id); 164 int h,flag = 0; 165 for(h = 0;h <= i;h++){ 166 if(strcmp(stu[h].stu_ID,stu_id)==0){ 167 flag = 0; 168 break; 169 } else { 170 flag = 1; 171 } 172 } 173 if(flag||i==-1){ 174 printf("\n 不存在此学号\n"); 175 system("pause"); 176 system("cls"); 177 home(); 178 } 179 //录入姓名信息 180 x++; 181 sel[x].s = h; 182 //输入课程信息 183 printf("\n\n 请输入选修课程号:"); 184 fflush(stdin); 185 scanf("%s",cou_id); 186 flag = 0; 187 for(h = 0;h <= j;h++){ 188 if(strcmp(cou[h].course_ID,cou_id)==0){ 189 flag = 0; 190 break; 191 } else { 192 flag = 1; 193 } 194 } 195 if(flag||j==-1){ 196 printf("\n 不存在此课程号\n"); 197 x--; 198 system("pause"); 199 system("cls"); 200 home(); 201 } 202 //录入课程信息 203 sel[x].c = h; 204 cou[h].people++; 205 printf("\n 录入成功!\n"); 206 system("pause"); 207 system("cls"); 208 home(); 209 } 210 /*删除选课记录*/ 211 void delete_sel(int q){//删除第q+1条记录 212 /*注意!本函数没有将x减1,请在函数外手动减1(考虑外层函数循环的需要)*/ 213 int h; 214 cou[sel[q].c].people--; 215 for(h = q;q < x;h++){ 216 q++; 217 sel[h].c = sel[q].c; 218 sel[h].s = sel[q].s; 219 } 220 221 } 222 //对学生记录进行操作 223 void stu_operate(void) { 224 printf("\n-------------------------欢迎进入选课系统!----------------------"); 225 printf("\n\n 请选择你要对学生记录进行的操作:"); 226 printf("\n\n 1.添加"); 227 printf("\n 2.查询"); 228 printf("\n 3.显示"); 229 printf("\n 4.返回主页面"); 230 printf("\n "); 231 printf("\n 请输入:"); 232 int i; 233 scanf("%d",&i); 234 system("cls"); 235 switch(i){ 236 case 1://添加学生信息 237 input_stu(); 238 break; 239 case 2://查询学生信息 240 search_stu(); 241 break; 242 case 3://显示所有学生信息 243 show_stu(); 244 break; 245 case 4: 246 home(); 247 break; 248 } 249 } 250 //对课程记录进行操作 251 void cou_operate(void) { 252 printf("\n-------------------------欢迎进入选课系统!----------------------"); 253 printf("\n\n 请选择你要对课程记录进行的操作:"); 254 printf("\n\n 1.添加"); 255 printf("\n 2.查询"); 256 printf("\n 3.显示"); 257 printf("\n 4.返回主页面"); 258 printf("\n "); 259 printf("\n 请输入:"); 260 int i; 261 scanf("%d",&i); 262 system("cls"); 263 switch(i){ 264 case 1: 265 input_cou(); 266 break; 267 case 2: 268 search_cou(); 269 break; 270 case 3: 271 show_cou(); 272 case 4: 273 home(); 274 break; 275 } 276 } 277 //选课信息统计记录 278 void statistic(void){ 279 printf("\n-------------------------欢迎进入选课系统!----------------------"); 280 printf("\n\n 共有学生信息:%d 条",i+1); 281 printf("\n 共有课程信息:%d 条",j+1); 282 if(x == -1){ 283 printf("\n 选课记录:0 条"); 284 printf("\n\n "); 285 system("pause"); 286 system("cls"); 287 home(); 288 } else { 289 printf("\n\n 选课记录 %d 条:",x+1); 290 int m; 291 for(m = 0;m <= x;m++){ 292 printf("\n ================"); 293 printf("\n 第%d条",m+1); 294 printf("\n 学生学号:%s",stu[sel[m].s].stu_ID); 295 printf("\n 学生姓名:%s",stu[sel[m].s].stu_name); 296 printf("\n 课程号:%s",cou[sel[m].c].course_ID); 297 printf("\n 课程名:%s",cou[sel[m].c].course_name); 298 } 299 printf("\n\n "); 300 system("pause"); 301 system("cls"); 302 home(); 303 } 304 305 } 306 307 308 //--------------------------------------学生信息插入-------------------------------------- 309 void input_stu(void){ 310 char flag; 311 FILE * fp; 312 //--判断文件是否为空 313 fp = fopen("student.txt","r+"); 314 flag = fgetc(fp); 315 if(flag==EOF){ 316 fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n"); 317 } 318 fclose(fp); 319 //-- 320 fp = fopen("student.txt","a+"); 321 if(fp == NULL){ 322 printf("打开文件失败!"); 323 system("cls"); 324 stu_operate(); 325 } 326 printf("学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n"); 327 while(1){ 328 i++; 329 scanf("%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact); 330 //--数据查重 331 int h; 332 for(h = 0;h < i;h++){ 333 if(i == 0) break;//第一条数据不需要查重 334 if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==0) { 335 printf("该学号已存在,请重新输入!\n"); 336 scanf("\n%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact); 337 h = -1; 338 } 339 } 340 //-- 341 fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age,stu[i].collage,stu[i].grade,stu[i].contact); 342 printf("\n录入成功,继续录入输入y,返回上一级请按任意键:"); 343 fflush(stdin); 344 scanf("%c",&flag); 345 fclose(fp); 346 if(flag!='y'&&'Y') break; 347 fp = fopen("student.txt","a"); 348 } 349 renew_stu(); 350 system("cls"); 351 stu_operate(); 352 } 353 /*查询学生信息*/ 354 void search_stu(void){ 355 system("cls"); 356 printf("\n请选择查询方式:"); 357 printf("\n 1.学号查询"); 358 printf("\n 2.姓名查询"); 359 printf("\n请选择:"); 360 int h; 361 scanf(" %d",&h); 362 switch(h){ 363 case 1: 364 search_stu_id(); 365 break; 366 case 2: 367 search_stu_name(); 368 break; 369 370 } 371 } 372 /*学号查询*/ 373 void search_stu_id(void){ 374 system("cls"); 375 char id[9]; 376 printf("\n输入学生的学号:"); 377 fflush(stdin); 378 scanf("%s",id); 379 int h; 380 for(h = 0;h <= i;h++){ 381 if(strcmp(stu[h].stu_ID,id)==0){ 382 system("cls"); 383 printf("查找成功!"); 384 printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式"); 385 printf("\n\t-----------------------------------------------------------------"); 386 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); 387 system("pause"); 388 system("cls"); 389 stu_operate(); 390 } 391 } 392 system("cls"); 393 printf("没有此学号!\n"); 394 system("pause"); 395 system("cls"); 396 stu_operate(); 397 } 398 /*姓名查询*/ 399 void search_stu_name(void){ 400 system("cls"); 401 char name[9]; 402 printf("\n输入学生的姓名:"); 403 fflush(stdin); 404 scanf("%s",name); 405 int h; 406 for(h = 0;h <= i;h++){ 407 if(strcmp(stu[h].stu_name,name)==0){ 408 system("cls"); 409 printf("查找成功!"); 410 printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式"); 411 printf("\n\t---------------------------------------------------------"); 412 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); 413 system("pause"); 414 system("cls"); 415 stu_operate(); 416 } 417 } 418 system("cls"); 419 printf("没有此姓名!"); 420 system("pause"); 421 system("cls"); 422 stu_operate(); 423 } 424 /*显示所有学生信息*/ 425 void show_stu(void){ 426 int h; 427 if(i == -1){ 428 printf("\n还没有录入信息!\n"); 429 system("pause"); 430 system("cls"); 431 stu_operate(); 432 } 433 system("cls"); 434 printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式"); 435 printf("\n\t---------------------------------------------------------"); 436 for(h = 0;h <= i;h++){ 437 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); 438 } 439 // 440 fflush(stdin); 441 printf("\n\t1.修改"); 442 printf("\n\t2.删除"); 443 printf("\n\t3.返回"); 444 printf("\n\n 选择要进行的操作:"); 445 int flag; 446 fflush(stdin); 447 scanf("%d",&flag); 448 switch(flag){ 449 case 1: 450 edit_stu(); 451 break; 452 case 2: 453 delete_stu(); 454 break; 455 default: 456 system("cls"); 457 stu_operate(); 458 break; 459 460 } 461 } 462 /*编辑学生信息*/ 463 void edit_stu(void){ 464 printf("\n输入需要编辑的学生的学号:"); 465 char id[10]; 466 getchar(); 467 scanf("%s",id); 468 int h; 469 for(h = 0;h <= i;h++){ 470 if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行 471 system("cls"); 472 printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式"); 473 printf("\n\t---------------------------------------------------------"); 474 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); 475 printf("\n这是修改前的数据,请依次输入修改值:\n\t"); 476 fflush(stdin); 477 scanf("%s %s %s %s %s %s %s",&stu[h].stu_ID,&stu[h].stu_name,&stu[h].sex,&stu[h].age,&stu[h].collage,&stu[h].grade,&stu[h].contact); 478 int k; 479 for(k = 0;k <= i;k++){ 480 if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){ 481 if(k==h){ 482 continue; 483 } else {//学号不唯一 484 printf("\n此学号已存在!重新输入学号:"); 485 fflush(stdin); 486 scanf("%s",&stu[h].stu_ID); 487 k = -1; 488 } 489 } 490 } 491 /*将修改信息写入文件*/ 492 //思想:将原文件重新写入一遍 493 renew_stu(); 494 system("cls"); 495 printf("修改成功!\n"); 496 system("pause"); 497 system("cls"); 498 stu_operate(); 499 } 500 } 501 printf("\n此学号不存在!\n"); 502 system("pause"); 503 system("cls"); 504 stu_operate(); 505 } 506 /*删除学生信息*/ 507 void delete_stu(void){ 508 printf("\n输入需要编辑的学生的学号:"); 509 char id[10]; 510 getchar(); 511 scanf("%s",id); 512 int h; 513 for(h = 0;h <= i;h++){ 514 if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行 515 system("cls"); 516 //检查他/她是否选课了 517 int a; 518 for(a = 0;a <= x;a++){ 519 if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1 520 delete_sel(a); 521 a = -1; 522 x--; 523 continue; 524 } 525 } 526 //如果只有一条记录 527 if(i==0){ 528 i = -1; 529 renew_stu(); 530 printf("修改成功!\n"); 531 system("pause"); 532 system("cls"); 533 stu_operate(); 534 } 535 536 int k; 537 for(k = h+1;k <= i;k++,h++){//将数组直接向前移动 538 strcpy(stu[h].stu_ID,stu[k].stu_ID); 539 strcpy(stu[h].stu_name,stu[k].stu_name); 540 strcpy(stu[h].sex,stu[k].sex); 541 strcpy(stu[h].grade,stu[k].grade); 542 strcpy(stu[h].contact,stu[k].contact); 543 strcpy(stu[h].collage,stu[k].collage); 544 strcpy(stu[h].age,stu[k].age); 545 } 546 /*将修改信息写入文件*/ 547 //思想:将原文件重新写入一遍 548 renew_stu(); 549 i--; 550 system("cls"); 551 printf("修改成功!\n"); 552 system("pause"); 553 system("cls"); 554 stu_operate(); 555 } 556 } 557 printf("\n此学号不存在!\n"); 558 system("pause"); 559 system("cls"); 560 stu_operate(); 561 } 562 //--------------------------------------课程信息插入-------------------------------------- 563 void input_cou(void){ 564 char flag; 565 FILE * fp; 566 //--判断文件是否为空 567 fp = fopen("course.txt","r+"); 568 flag = fgetc(fp); 569 if(flag==EOF){ 570 fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n"); 571 } 572 fclose(fp); 573 //-- 574 fp = fopen("course.txt","a+"); 575 if(fp == NULL){ 576 printf("打开文件失败!"); 577 system("cls"); 578 cou_operate(); 579 } 580 printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n"); 581 while(1){ 582 j++; 583 scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time); 584 //--数据查重 585 int h; 586 for(h = 0;h < j;h++){ 587 if(j == 0) break;//第一条数据不需要查重 588 if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) { 589 printf("该课程号已存在,请重新输入!\n"); 590 scanf("\n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time); 591 h = -1; 592 } 593 } 594 //-- 595 fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people); 596 printf("\n录入成功,继续录入输入y,返回上一级请按任意键:"); 597 fflush(stdin); 598 scanf("%c",&flag); 599 fclose(fp); 600 if(flag!='y'&&'Y') break; 601 fp = fopen("course.txt","a"); 602 } 603 renew_cou(); 604 system("cls"); 605 cou_operate(); 606 } 607 /*查询课程信息*/ 608 void search_cou(void){ 609 system("cls"); 610 printf("\n请选择查询方式:"); 611 printf("\n 1.课程号查询"); 612 printf("\n 2.课程名查询"); 613 printf("\n请选择:"); 614 int h; 615 scanf(" %d",&h); 616 switch(h){ 617 case 1: 618 search_cou_id(); 619 break; 620 case 2: 621 search_cou_name(); 622 break; 623 624 } 625 } 626 /*课程号查询*/ 627 void search_cou_id(void){ 628 system("cls"); 629 char id[9]; 630 printf("\n输入课程号:"); 631 fflush(stdin); 632 scanf("%s",id); 633 int h; 634 for(h = 0;h <= j;h++){ 635 if(strcmp(cou[h].course_ID,id)==0){ 636 system("cls"); 637 printf("查找成功!"); 638 printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数"); 639 printf("\n\t-----------------------------------------------------------------"); 640 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); 641 system("pause"); 642 system("cls"); 643 cou_operate(); 644 } 645 } 646 system("cls"); 647 printf("没有此课程号!\n"); 648 system("pause"); 649 system("cls"); 650 cou_operate(); 651 } 652 /*课程名查询*/ 653 void search_cou_name(void){ 654 system("cls"); 655 char name[9]; 656 printf("\n输入课程名:"); 657 fflush(stdin); 658 scanf("%s",name); 659 int h; 660 for(h = 0;h <= j;h++){ 661 if(strcmp(cou[h].course_name,name)==0){ 662 system("cls"); 663 printf("查找成功!"); 664 printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数"); 665 printf("\n\t---------------------------------------------------------"); 666 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); 667 system("pause"); 668 system("cls"); 669 cou_operate(); 670 } 671 } 672 system("cls"); 673 printf("没有此课程名!"); 674 system("pause"); 675 system("cls"); 676 cou_operate(); 677 } 678 /*显示所有课程信息*/ 679 void show_cou(void){ 680 int h; 681 if(j == -1){ 682 printf("\n还没有录入信息!\n"); 683 system("pause"); 684 system("cls"); 685 cou_operate(); 686 } 687 system("cls"); 688 printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数"); 689 printf("\n\t-------------------------------------------------------------"); 690 for(h = 0;h <= j;h++){ 691 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); 692 } 693 // 694 fflush(stdin); 695 printf("\n\t1.修改"); 696 printf("\n\t2.删除"); 697 printf("\n\t3.返回"); 698 printf("\n\n 选择要进行的操作:"); 699 int flag; 700 fflush(stdin); 701 scanf("%d",&flag); 702 switch(flag){ 703 case 1: 704 edit_cou(); 705 break; 706 case 2: 707 delete_cou(); 708 break; 709 default: 710 system("cls"); 711 cou_operate(); 712 break; 713 714 } 715 } 716 /*编辑课程信息*/ 717 void edit_cou(void){ 718 printf("\n输入需要编辑的课程号:"); 719 char id[10]; 720 getchar(); 721 scanf("%s",id); 722 int h; 723 for(h = 0;h <= j;h++){ 724 if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行 725 system("cls"); 726 printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期"); 727 printf("\n\t-------------------------------------------------------------"); 728 printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time); 729 printf("\n这是修改前的数据,请依次输入修改值:\n\t"); 730 fflush(stdin); 731 scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time); 732 int k; 733 for(k = 0;k <= j;k++){ 734 if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){ 735 if(k==h){ 736 continue; 737 } else {//课程号不唯一 738 printf("\n此课程号已存在,重新输入:"); 739 fflush(stdin); 740 scanf("%s",&cou[h].course_ID); 741 k = -1; 742 } 743 } 744 } 745 /*将修改信息写入文件*/ 746 //思想:将原文件重新写入一遍 747 renew_cou(); 748 system("cls"); 749 printf("修改成功!\n"); 750 system("pause"); 751 system("cls"); 752 cou_operate(); 753 } 754 } 755 printf("\n此课程号不存在!\n"); 756 system("pause"); 757 system("cls"); 758 cou_operate(); 759 } 760 /*删除课程信息*/ 761 void delete_cou(void){ 762 printf("\n输入需要编辑的课程号:"); 763 char id[10]; 764 getchar(); 765 scanf("%s",id); 766 int h; 767 for(h = 0;h <= j;h++){ 768 if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行 769 system("cls"); 770 //如果只有一条记录 771 if(j==0){ 772 j = -1; 773 renew_cou(); 774 printf("修改成功!\n"); 775 system("pause"); 776 system("cls"); 777 cou_operate(); 778 } 779 //查看是否有人选课 780 if(cou[h].people!=0){//有人选课时 781 int a; 782 for(a = 0;a <= x;a++){ 783 if(sel[a].c == h){ 784 delete_sel(a); 785 a = -1; 786 x--; 787 continue; 788 } 789 } 790 } 791 int k; 792 for(k = h+1;k <= j;k++,h++){//将数组直接向前移动 793 strcpy(cou[h].course_ID,cou[k].course_ID); 794 strcpy(cou[h].course_name,cou[k].course_name); 795 strcpy(cou[h].property,cou[k].property); 796 strcpy(cou[h].period,cou[k].period); 797 strcpy(cou[h].credit,cou[k].credit); 798 strcpy(cou[h].time,cou[k].time); 799 } 800 /*将修改信息写入文件*/ 801 //思想:将原文件重新写入一遍 802 renew_cou(); 803 j--; 804 system("cls"); 805 printf("修改成功!\n"); 806 system("pause"); 807 system("cls"); 808 cou_operate(); 809 } 810 } 811 printf("\n此课程号不存在!\n"); 812 system("pause"); 813 system("cls"); 814 cou_operate(); 815 } 816 817 //--功能函数 818 /*更新系统数据至文件*/ 819 void renew_stu(void){ 820 FILE * fp; 821 fp = fopen("student.txt","w+"); 822 if(fp == NULL){ 823 printf("\n打开文件失败,无法保存至文件。\n"); 824 fclose(fp); 825 return ; 826 } 827 fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n"); 828 if(i == -1){ 829 fclose(fp); 830 return; 831 } 832 int h; 833 for(h = 0;h <= i;h++){ 834 fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); 835 } 836 fclose(fp); 837 838 } 839 void renew_cou(void){ 840 FILE * fp; 841 fp = fopen("course.txt","w+"); 842 if(fp == NULL){ 843 printf("\n打开文件失败,无法保存至文件。\n"); 844 fclose(fp); 845 return ; 846 } 847 fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n"); 848 if(j == -1){ 849 fclose(fp); 850 return; 851 } 852 int h; 853 for(h = 0;h <= j;h++){ 854 fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); } 855 fclose(fp); 856 857 }
第一次发博客,挺激动的。写的是学生选课系统,也算是自己的第二个小项目,第一个是算术表达式,不怕丢人哈哈,写的过程中都是非常艰难,经常写到一半就写不下去了,因为一开始的构思就是错误的。当然,也谈不上什么构思,就是简单的想了一下大体的方向。所以到后面越来越难做,只好重新修改一遍。包括这次也是如此。以后这方面要小心,一定要先认真的构思一下。也有一部分原因是好久没有写c了,好几个月了,结构体和指针的一些知识都还给老师了,所以这次也算是边写边学了吧,哈哈~
我编程的时间不长,所以这里面肯定有一些错误,或者存在更好的解决方案,欢迎上课!谢谢!
ps:寻找一起学习的小伙伴!