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