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