服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现学生选修课程系统设计

C语言实现学生选修课程系统设计

2021-07-22 16:38un1verses C/C++

这篇文章主要为大家详细介绍了C语言实现学生选修课程系统设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言学生选修课程系统的具体代码,供大家参考,具体内容如下

我编程的时间不长,所以这里面肯定有一些错误,或者存在更好的解决方案,欢迎大神上课!谢谢!

ps:寻找一起学习的小伙伴!

代码:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/lucas_w17/article/details/71437338

延伸 · 阅读

精彩推荐
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12