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:寻找一起学习的小伙伴!

转载于:https://www.cnblogs.com/litlife/p/6821797.html

学生选课系统 c语言相关推荐

  1. c语言p1-melepeo,学生选课系统c语言程序代码

    学生选课系统c语言程序代码 (25页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 #include #includestruct cou ...

  2. c语言课程设计 选课系统,学生选课系统c语言课程设计.doc

    西安理工大学C语言课程设计任务: 题目:学生选修课程系统设计 功能:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息.试设计一选修课程系统 ...

  3. 学生选课系统c语言程序总结,学生选课系统C语言程序代码总结.doc

    #include #include struct couse * head1; struct student * head2; struct couse//课程信息结构体 { int num1; ch ...

  4. 学生选课系统C语言系统的说明文档,C语言学生选课系统(代码)

    #include #include #include int N1,N2; struct student { int num2; char name2[20]; int nelenum[50]; // ...

  5. 基于php语言的 选课系统,基于C语言实现学生选课系统

    鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...

  6. c语言课程描述英文版,c语言学生选课系统(国外英文资料).doc

    c语言学生选课系统(国外英文资料) c语言学生选课系统(国外英文资料) # include < stdio, h > # include < string. H > # inc ...

  7. 基于C语言的学生选课系统

    鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...

  8. c语言添加删除课程的思路,基于C语言实现学生选课系统

    基于C语言实现学生选课系统 发布时间:2020-09-03 11:41:13 来源:脚本之家 阅读:100 作者:xiaocaidayong 鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一 ...

  9. 采用ASP.NET使用C#.NET语言开发的在线学生选课系统(源码+数据库+论文)

    随着在校大学生人数的不断增加,教务系统的数据量也不断的上涨.针对学生选课这一环节,本系统从学生网上自主选课以及教师的课程信息发布两个大方面进行了设计,基本实现了学生的在线信息查询.选课功能.教师添加课 ...

  10. java学生选课系统课程设计报告_Java语言程序设计课程设计-学生选课系统

    <Java语言程序设计课程设计-学生选课系统>由会员分享,可在线阅读,更多相关<Java语言程序设计课程设计-学生选课系统(23页珍藏版)>请在人人文库网上搜索. 1.10届 ...

最新文章

  1. javascript:call和apply函数的用法(转载)
  2. PHP下载CSS文件中的图片
  3. 95-10-040-启动-限额管理
  4. 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
  5. 成都计算机学校分数线,成都市计算机汽车职业技术学校2020年招生录取分数线...
  6. MyBatis 动态 SQL(认真看看, 以后写 SQL 就爽多了)
  7. 【图像去噪】基于matlab GUI中值+均值+维纳+小波滤波图像去噪【含Matlab源码 753期】
  8. 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
  9. es6文档笔记(全)
  10. CREO学习笔记【常见表面处理工艺】
  11. css样式实现居中对齐
  12. 阿里云服务器被攻击了怎么办?
  13. 【正点原子I.MX6U-MINI应用篇】6、嵌入式Linux在LCD屏幕上显示字符
  14. C语言PAT刷题 - 1019 数字黑洞
  15. 什么是rootkit
  16. 【毕业设计_课程设计】面向高考招生咨询的问答系统设计与实现(源码+论文)
  17. matlab中hold all,matlab中hold on的使用方法
  18. [转帖]超能网 主板类型
  19. Jmeter 压测工具
  20. 笔记本安装Archlinux笔记

热门文章

  1. XCode: 如何添加自定义代码片段
  2. PIL库的总结与简单应用
  3. EasyDarwin添加自定义的服务模块EasyMyModule
  4. 使用 RMI + ZooKeeper 实现远程调用
  5. Linux计划任务入门详解
  6. POJ1328Radar Installation
  7. 1580. Dean's Debts
  8. 使用using关键字来自动清除对象资源
  9. 听说……明天上线?!
  10. 2019工作榜单 | Python程序员吸金榜,AI排第一,这个我服!