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[];
  87. char stu_name[];
  88. char sex[];
  89. char age[];
  90. char collage[];
  91. char grade[];
  92. char contact[];
  93. }stu[SIZE_STU];
  94.  
  95. /*课程信息结构体*/
  96. struct course_info {
  97. char course_ID[];
  98. char course_name[];
  99. char property[];
  100. char period[];
  101. char credit[];
  102. char time[];
  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 = -;
  114. int j = -;
  115. int x = -;
  116.  
  117. int main(void){
  118. //进入欢迎界面
  119. home();
  120. return ;
  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 :
  139. stu_operate();
  140. break;
  141. case :
  142. cou_operate();
  143. break;
  144. case :
  145. choose();
  146. break;
  147. case :
  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[],cou_id[];
  159. printf("\n-------------------------欢迎进入选课系统!----------------------");
  160. //输入选课学生信息
  161. printf("\n\n 请输入选课人学号:");
  162. fflush(stdin);
  163. scanf("%s",stu_id);
  164. int h,flag = ;
  165. for(h = ;h <= i;h++){
  166. if(strcmp(stu[h].stu_ID,stu_id)==){
  167. flag = ;
  168. break;
  169. } else {
  170. flag = ;
  171. }
  172. }
  173. if(flag||i==-){
  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 = ;
  187. for(h = ;h <= j;h++){
  188. if(strcmp(cou[h].course_ID,cou_id)==){
  189. flag = ;
  190. break;
  191. } else {
  192. flag = ;
  193. }
  194. }
  195. if(flag||j==-){
  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 ://添加学生信息
  237. input_stu();
  238. break;
  239. case ://查询学生信息
  240. search_stu();
  241. break;
  242. case ://显示所有学生信息
  243. show_stu();
  244. break;
  245. case :
  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 :
  265. input_cou();
  266. break;
  267. case :
  268. search_cou();
  269. break;
  270. case :
  271. show_cou();
  272. case :
  273. home();
  274. break;
  275. }
  276. }
  277. //选课信息统计记录
  278. void statistic(void){
  279. printf("\n-------------------------欢迎进入选课系统!----------------------");
  280. printf("\n\n 共有学生信息:%d 条",i+);
  281. printf("\n 共有课程信息:%d 条",j+);
  282. if(x == -){
  283. printf("\n 选课记录:0 条");
  284. printf("\n\n ");
  285. system("pause");
  286. system("cls");
  287. home();
  288. } else {
  289. printf("\n\n 选课记录 %d 条:",x+);
  290. int m;
  291. for(m = ;m <= x;m++){
  292. printf("\n ================");
  293. printf("\n 第%d条",m+);
  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. void input_stu(void){
  309. char flag;
  310. FILE * fp;
  311. //--判断文件是否为空
  312. fp = fopen("student.txt","r+");
  313. flag = fgetc(fp);
  314. if(flag==EOF){
  315. fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
  316. }
  317. fclose(fp);
  318. //--
  319. fp = fopen("student.txt","a+");
  320. if(fp == NULL){
  321. printf("打开文件失败!");
  322. system("cls");
  323. stu_operate();
  324. }
  325. printf("学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
  326. while(){
  327. i++;
  328. 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);
  329. //--数据查重
  330. int h;
  331. for(h = ;h < i;h++){
  332. if(i == ) break;//第一条数据不需要查重
  333. if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==) {
  334. printf("该学号已存在,请重新输入!\n");
  335. 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);
  336. h = -;
  337. }
  338. }
  339. //--
  340. 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);
  341. printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
  342. fflush(stdin);
  343. scanf("%c",&flag);
  344. fclose(fp);
  345. if(flag!='y'&&'Y') break;
  346. fp = fopen("student.txt","a");
  347. }
  348. renew_stu();
  349. system("cls");
  350. stu_operate();
  351. }
  352. /*查询学生信息*/
  353. void search_stu(void){
  354. system("cls");
  355. printf("\n请选择查询方式:");
  356. printf("\n 1.学号查询");
  357. printf("\n 2.姓名查询");
  358. printf("\n请选择:");
  359. int h;
  360. scanf(" %d",&h);
  361. switch(h){
  362. case :
  363. search_stu_id();
  364. break;
  365. case :
  366. search_stu_name();
  367. break;
  368.  
  369. }
  370. }
  371. /*学号查询*/
  372. void search_stu_id(void){
  373. system("cls");
  374. char id[];
  375. printf("\n输入学生的学号:");
  376. fflush(stdin);
  377. scanf("%s",id);
  378. int h;
  379. for(h = ;h <= i;h++){
  380. if(strcmp(stu[h].stu_ID,id)==){
  381. system("cls");
  382. printf("查找成功!");
  383. printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
  384. printf("\n\t-----------------------------------------------------------------");
  385. 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);
  386. system("pause");
  387. system("cls");
  388. stu_operate();
  389. }
  390. }
  391. system("cls");
  392. printf("没有此学号!\n");
  393. system("pause");
  394. system("cls");
  395. stu_operate();
  396. }
  397. /*姓名查询*/
  398. void search_stu_name(void){
  399. system("cls");
  400. char name[];
  401. printf("\n输入学生的姓名:");
  402. fflush(stdin);
  403. scanf("%s",name);
  404. int h;
  405. for(h = ;h <= i;h++){
  406. if(strcmp(stu[h].stu_name,name)==){
  407. system("cls");
  408. printf("查找成功!");
  409. printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
  410. printf("\n\t---------------------------------------------------------");
  411. 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);
  412. system("pause");
  413. system("cls");
  414. stu_operate();
  415. }
  416. }
  417. system("cls");
  418. printf("没有此姓名!");
  419. system("pause");
  420. system("cls");
  421. stu_operate();
  422. }
  423. /*显示所有学生信息*/
  424. void show_stu(void){
  425. int h;
  426. if(i == -){
  427. printf("\n还没有录入信息!\n");
  428. system("pause");
  429. system("cls");
  430. stu_operate();
  431. }
  432. system("cls");
  433. printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
  434. printf("\n\t---------------------------------------------------------");
  435. for(h = ;h <= i;h++){
  436. 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);
  437. }
  438. //
  439. fflush(stdin);
  440. printf("\n\t1.修改");
  441. printf("\n\t2.删除");
  442. printf("\n\t3.返回");
  443. printf("\n\n 选择要进行的操作:");
  444. int flag;
  445. fflush(stdin);
  446. scanf("%d",&flag);
  447. switch(flag){
  448. case :
  449. edit_stu();
  450. break;
  451. case :
  452. delete_stu();
  453. break;
  454. default:
  455. system("cls");
  456. stu_operate();
  457. break;
  458.  
  459. }
  460. }
  461. /*编辑学生信息*/
  462. void edit_stu(void){
  463. printf("\n输入需要编辑的学生的学号:");
  464. char id[];
  465. getchar();
  466. scanf("%s",id);
  467. int h;
  468. for(h = ;h <= i;h++){
  469. if(strcmp(stu[h].stu_ID,id)==){//找到需要编辑的行
  470. system("cls");
  471. printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
  472. printf("\n\t---------------------------------------------------------");
  473. 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);
  474. printf("\n这是修改前的数据,请依次输入修改值:\n\t");
  475. fflush(stdin);
  476. 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);
  477. int k;
  478. for(k = ;k <= i;k++){
  479. if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==){
  480. if(k==h){
  481. continue;
  482. } else {//学号不唯一
  483. printf("\n此学号已存在!重新输入学号:");
  484. fflush(stdin);
  485. scanf("%s",&stu[h].stu_ID);
  486. k = -;
  487. }
  488. }
  489. }
  490. /*将修改信息写入文件*/
  491. //思想:将原文件重新写入一遍
  492. renew_stu();
  493. system("cls");
  494. printf("修改成功!\n");
  495. system("pause");
  496. system("cls");
  497. stu_operate();
  498. }
  499. }
  500. printf("\n此学号不存在!\n");
  501. system("pause");
  502. system("cls");
  503. stu_operate();
  504. }
  505. /*删除学生信息*/
  506. void delete_stu(void){
  507. printf("\n输入需要编辑的学生的学号:");
  508. char id[];
  509. getchar();
  510. scanf("%s",id);
  511. int h;
  512. for(h = ;h <= i;h++){
  513. if(strcmp(stu[h].stu_ID,id)==){//找到需要编辑的行
  514. system("cls");
  515. //检查他/她是否选课了
  516. int a;
  517. for(a = ;a <= x;a++){
  518. if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1
  519. delete_sel(a);
  520. a = -;
  521. x--;
  522. continue;
  523. }
  524. }
  525. //如果只有一条记录
  526. if(i==){
  527. i = -;
  528. renew_stu();
  529. printf("修改成功!\n");
  530. system("pause");
  531. system("cls");
  532. stu_operate();
  533. }
  534.  
  535. int k;
  536. for(k = h+;k <= i;k++,h++){//将数组直接向前移动
  537. strcpy(stu[h].stu_ID,stu[k].stu_ID);
  538. strcpy(stu[h].stu_name,stu[k].stu_name);
  539. strcpy(stu[h].sex,stu[k].sex);
  540. strcpy(stu[h].grade,stu[k].grade);
  541. strcpy(stu[h].contact,stu[k].contact);
  542. strcpy(stu[h].collage,stu[k].collage);
  543. strcpy(stu[h].age,stu[k].age);
  544. }
  545. /*将修改信息写入文件*/
  546. //思想:将原文件重新写入一遍
  547. renew_stu();
  548. i--;
  549. system("cls");
  550. printf("修改成功!\n");
  551. system("pause");
  552. system("cls");
  553. stu_operate();
  554. }
  555. }
  556. printf("\n此学号不存在!\n");
  557. system("pause");
  558. system("cls");
  559. stu_operate();
  560. }
  561. //--------------------------------------课程信息插入--------------------------------------
  562. void input_cou(void){
  563. char flag;
  564. FILE * fp;
  565. //--判断文件是否为空
  566. fp = fopen("course.txt","r+");
  567. flag = fgetc(fp);
  568. if(flag==EOF){
  569. fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
  570. }
  571. fclose(fp);
  572. //--
  573. fp = fopen("course.txt","a+");
  574. if(fp == NULL){
  575. printf("打开文件失败!");
  576. system("cls");
  577. cou_operate();
  578. }
  579. printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n");
  580. while(){
  581. j++;
  582. 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);
  583. //--数据查重
  584. int h;
  585. for(h = ;h < j;h++){
  586. if(j == ) break;//第一条数据不需要查重
  587. if (strcmp(cou[h].course_ID,cou[j].course_ID)==) {
  588. printf("该课程号已存在,请重新输入!\n");
  589. 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);
  590. h = -;
  591. }
  592. }
  593. //--
  594. 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);
  595. printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
  596. fflush(stdin);
  597. scanf("%c",&flag);
  598. fclose(fp);
  599. if(flag!='y'&&'Y') break;
  600. fp = fopen("course.txt","a");
  601. }
  602. renew_cou();
  603. system("cls");
  604. cou_operate();
  605. }
  606. /*查询课程信息*/
  607. void search_cou(void){
  608. system("cls");
  609. printf("\n请选择查询方式:");
  610. printf("\n 1.课程号查询");
  611. printf("\n 2.课程名查询");
  612. printf("\n请选择:");
  613. int h;
  614. scanf(" %d",&h);
  615. switch(h){
  616. case :
  617. search_cou_id();
  618. break;
  619. case :
  620. search_cou_name();
  621. break;
  622.  
  623. }
  624. }
  625. /*课程号查询*/
  626. void search_cou_id(void){
  627. system("cls");
  628. char id[];
  629. printf("\n输入课程号:");
  630. fflush(stdin);
  631. scanf("%s",id);
  632. int h;
  633. for(h = ;h <= j;h++){
  634. if(strcmp(cou[h].course_ID,id)==){
  635. system("cls");
  636. printf("查找成功!");
  637. printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
  638. printf("\n\t-----------------------------------------------------------------");
  639. 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);
  640. system("pause");
  641. system("cls");
  642. cou_operate();
  643. }
  644. }
  645. system("cls");
  646. printf("没有此课程号!\n");
  647. system("pause");
  648. system("cls");
  649. cou_operate();
  650. }
  651. /*课程名查询*/
  652. void search_cou_name(void){
  653. system("cls");
  654. char name[];
  655. printf("\n输入课程名:");
  656. fflush(stdin);
  657. scanf("%s",name);
  658. int h;
  659. for(h = ;h <= j;h++){
  660. if(strcmp(cou[h].course_name,name)==){
  661. system("cls");
  662. printf("查找成功!");
  663. printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
  664. printf("\n\t---------------------------------------------------------");
  665. 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);
  666. system("pause");
  667. system("cls");
  668. cou_operate();
  669. }
  670. }
  671. system("cls");
  672. printf("没有此课程名!");
  673. system("pause");
  674. system("cls");
  675. cou_operate();
  676. }
  677. /*显示所有课程信息*/
  678. void show_cou(void){
  679. int h;
  680. if(j == -){
  681. printf("\n还没有录入信息!\n");
  682. system("pause");
  683. system("cls");
  684. cou_operate();
  685. }
  686. system("cls");
  687. printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
  688. printf("\n\t-------------------------------------------------------------");
  689. for(h = ;h <= j;h++){
  690. 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);
  691. }
  692. //
  693. fflush(stdin);
  694. printf("\n\t1.修改");
  695. printf("\n\t2.删除");
  696. printf("\n\t3.返回");
  697. printf("\n\n 选择要进行的操作:");
  698. int flag;
  699. fflush(stdin);
  700. scanf("%d",&flag);
  701. switch(flag){
  702. case :
  703. edit_cou();
  704. break;
  705. case :
  706. delete_cou();
  707. break;
  708. default:
  709. system("cls");
  710. cou_operate();
  711. break;
  712.  
  713. }
  714. }
  715. /*编辑课程信息*/
  716. void edit_cou(void){
  717. printf("\n输入需要编辑的课程号:");
  718. char id[];
  719. getchar();
  720. scanf("%s",id);
  721. int h;
  722. for(h = ;h <= j;h++){
  723. if(strcmp(cou[h].course_ID,id)==){//找到需要编辑的行
  724. system("cls");
  725. printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期");
  726. printf("\n\t-------------------------------------------------------------");
  727. 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);
  728. printf("\n这是修改前的数据,请依次输入修改值:\n\t");
  729. fflush(stdin);
  730. 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);
  731. int k;
  732. for(k = ;k <= j;k++){
  733. if(strcmp(cou[k].course_ID,cou[h].course_ID)==){
  734. if(k==h){
  735. continue;
  736. } else {//课程号不唯一
  737. printf("\n此课程号已存在,重新输入:");
  738. fflush(stdin);
  739. scanf("%s",&cou[h].course_ID);
  740. k = -;
  741. }
  742. }
  743. }
  744. /*将修改信息写入文件*/
  745. //思想:将原文件重新写入一遍
  746. renew_cou();
  747. system("cls");
  748. printf("修改成功!\n");
  749. system("pause");
  750. system("cls");
  751. cou_operate();
  752. }
  753. }
  754. printf("\n此课程号不存在!\n");
  755. system("pause");
  756. system("cls");
  757. cou_operate();
  758. }
  759. /*删除课程信息*/
  760. void delete_cou(void){
  761. printf("\n输入需要编辑的课程号:");
  762. char id[];
  763. getchar();
  764. scanf("%s",id);
  765. int h;
  766. for(h = ;h <= j;h++){
  767. if(strcmp(cou[h].course_ID,id)==){//找到需要编辑的行
  768. system("cls");
  769. //如果只有一条记录
  770. if(j==){
  771. j = -;
  772. renew_cou();
  773. printf("修改成功!\n");
  774. system("pause");
  775. system("cls");
  776. cou_operate();
  777. }
  778. //查看是否有人选课
  779. if(cou[h].people!=){//有人选课时
  780. int a;
  781. for(a = ;a <= x;a++){
  782. if(sel[a].c == h){
  783. delete_sel(a);
  784. a = -;
  785. x--;
  786. continue;
  787. }
  788. }
  789. }
  790. int k;
  791. for(k = h+;k <= j;k++,h++){//将数组直接向前移动
  792. strcpy(cou[h].course_ID,cou[k].course_ID);
  793. strcpy(cou[h].course_name,cou[k].course_name);
  794. strcpy(cou[h].property,cou[k].property);
  795. strcpy(cou[h].period,cou[k].period);
  796. strcpy(cou[h].credit,cou[k].credit);
  797. strcpy(cou[h].time,cou[k].time);
  798. }
  799. /*将修改信息写入文件*/
  800. //思想:将原文件重新写入一遍
  801. renew_cou();
  802. j--;
  803. system("cls");
  804. printf("修改成功!\n");
  805. system("pause");
  806. system("cls");
  807. cou_operate();
  808. }
  809. }
  810. printf("\n此课程号不存在!\n");
  811. system("pause");
  812. system("cls");
  813. cou_operate();
  814. }
  815.  
  816. //--功能函数
  817. /*更新系统数据至文件*/
  818. void renew_stu(void){
  819. FILE * fp;
  820. fp = fopen("student.txt","w+");
  821. if(fp == NULL){
  822. printf("\n打开文件失败,无法保存至文件。\n");
  823. fclose(fp);
  824. return ;
  825. }
  826. fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
  827. if(i == -){
  828. fclose(fp);
  829. return;
  830. }
  831. int h;
  832. for(h = ;h <= i;h++){
  833. 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);
  834. }
  835. fclose(fp);
  836.  
  837. }
  838. void renew_cou(void){
  839. FILE * fp;
  840. fp = fopen("course.txt","w+");
  841. if(fp == NULL){
  842. printf("\n打开文件失败,无法保存至文件。\n");
  843. fclose(fp);
  844. return ;
  845. }
  846. fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
  847. if(j == -){
  848. fclose(fp);
  849. return;
  850. }
  851. int h;
  852. for(h = ;h <= j;h++){
  853. 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); }
  854. fclose(fp);
  855.  
  856. }

第一次发博客,挺激动的。写的是学生选课系统,也算是自己的第二个小项目,第一个是算术表达式,不怕丢人哈哈,写的过程中都是非常艰难,经常写到一半就写不下去了,因为一开始的构思就是错误的。当然,也谈不上什么构思,就是简单的想了一下大体的方向。所以到后面越来越难做,只好重新修改一遍。包括这次也是如此。以后这方面要小心,一定要先认真的构思一下。也有一部分原因是好久没有写c了,好几个月了,结构体和指针的一些知识都还给老师了,所以这次也算是边写边学了吧,哈哈~

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

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

学生选课系统 c语言的更多相关文章

  1. JAVA | 学生选课系统

    这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...

  2. python开发项目:学生选课系统

    程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...

  3. 学生选课系统v1.0

    最近两天写了下老师课上留的作业:学生选课系统.感觉自己写的特别麻烦,思路特别不清晰,平常自己总会偷懒,一些太麻烦细节的功能就不去实现了,用简单的功能来替代,直到自己这回写完这个系统(但自己写的比较lo ...

  4. python基础-10 程序目录结构 学生选课系统面向对象练习

    一 程序目录结构 1 bin文件夹 二进制文件.代码程序  2 conf 配置文件  3 帮助文档  4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...

  5. java web知识点复习,重新编写学生选课系统的先关操作。

    为了复习之前学习的相关的html,javaweb等知识.自己有重新编写了一遍学生选课系统. 下面主要展示登录界面的代码,以及各个大的主页面的相关jsp. <%@ page language=&q ...

  6. 学生选课系统(Java语言期末前测试)

      测试具体要求: 2.系统要求与功能设计 2.1 页面要求 (1)能够在Tomcat服务器中正确部署,并通过浏览器查看: (2)网站页面整体风格统一: (3)首页(登录页)要求实现不同用户登录后,进 ...

  7. 从零开始学Python06作业思路:学生选课系统

    一,作业要求 选课系统: 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 学生:用户名.密码.性别.年龄.选课列表[].上课记录{课程1:[di,a,]} ...

  8. python实现学生选课系统 面向对象的应用:

    一.要求: 选课系统 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 使用pickle保存在文件 学生: 学生:用户名.密码.性别.年龄.选课列表[].上课 ...

  9. python--面向对象编程之学生选课系统练习

    1.系统目录结构 文件夹注解: bin--系统管理员和学生的主程序代码 config--系统的配置文件 db--系统的数据文件 admin--管理员的数据文件 student--学生的数据文件 lib ...

随机推荐

  1. URL在Tomcat服务器端的servlet解析过程

    servlet 是Java中用于运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. proto ...

  2. 二维条码扫描模组在肯德基KFC的无纸化点餐解决方案

    在如今提倡节约资源的环境下,肯德基在品牌发展中,逐渐实现无纸化点餐,不仅节约了纸质点餐单,而且还具有节约资源的示范作用.而其中二维码扫描模组是这套无纸化点餐方案的重点,在整套设备中,加入二维码扫描模组 ...

  3. redis的两种安装方法

    原:https://www.cnblogs.com/caokai520/p/4409712.html C# Redis   概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦 ...

  4. 基于TensorFlow的手写中文识别(版本一)

    具体效果实现: 第一次由于设备问题所以只训练了是一些个简单的字: 第二选了23个字训练了3000在字迹清晰下能够识别: 类似于默,鼠,鼓,这类文字也能识别,由于训练数据的问题,在测试的时候应尽量写在正 ...

  5. [Python]CentOS - ImportError: No module named '_curses'

    网上搜了不少答案, 基本都是说Windows环境下curses包不适用的问题. 作为碰到这个问题的linux用户,实在感到无奈. 起因是在CentOS上部署uwsgi,想要使用uwsgitop来监控. ...

  6. windows本地用户及组的区别

    Administrators(超级管理员组) 用来管理注册用户或者具有一定权限的其他管理员,维护网站的运行. Administrators中的用户对计算机/域有不受限制的完全访问权,分配给该组的默认权 ...

  7. 全志a20安卓电视盒子安装可道云kodexplorer服务-编译安装php7.3+nginx

    可道云真的很强大,安装包很小,功能却很齐全,还可以自定义轻应用如果有手机客户端就更好了 研究了一下,可道云根目录放到外置存储设备(移动硬盘)会更合适,改路径的方法下面有提到上传文件时一个文件会在用户目 ...

  8. java代码编译与C/C++代码编译的区别

    Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. Java在编译过程中一般会按照以下过程进行: (1)JDK根 ...

  9. tyflow birth节点

    0-50帧,持续出生5颗粒子,若范围为0-0,5颗粒子将在第一帧全部出生 每一帧出生5颗粒子,直到50帧结束 连续发射,在0-500帧范围内,每5颗粒子出生后,继续出生5颗 5颗粒子出生后持续50帧, ...

  10. ubuntu显卡驱动安装

    1.确定显卡型号 网上有些使用lspci | grep -i nvidia可以查看显卡型号,但是我的好像查不到具体型号,如下图. 但是后来我知道了安装的是1080Ti,所以也就明确了型号.驱动在(ht ...