当前位置:   article > 正文

一个简单的学生选课管理系统实现(c语言)_选课系统c语言

选课系统c语言

该程序使用c语言实现了一个简单的学生选课管理系统。共有n门课程,每门课程信息包括:课程编号、课程性质、学分、理论授课学时、实验或上机学时、开课学期、上课时间等信息,学生可按要求(如总学分不得少于15)自行选课。该程序具有下列功能:
(1)能从文件导入课程信息;
(2)能从键盘录入课程信息和学生选课信息;
(3)能按特定要求查询相关课程信息;
(4)按输入课程编号修改课程相关信息;
(5)输入课程编号显示该课程选课人数及选课学生信息;
(6)输入学号显示该生选课情况;
(7)能将学生选课信息导出到指定文件。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. // 定义课程结构体
  5. typedef struct {
  6. char courseID[10];
  7. char courseNature[20];
  8. int credit;
  9. int theoryHours;
  10. int practiceHours;
  11. char semester[10];
  12. char classTime[30];
  13. } Course;
  14. // 定义学生结构体
  15. typedef struct {
  16. char studentID[10];
  17. char courseID[10];
  18. } StudentCourse;
  19. // 从文件中导入课程信息
  20. void importCourses(Course courses[], int *numCourses) {
  21. FILE *file = fopen("D:/courses.txt", "r");
  22. if (file == NULL) {
  23. printf("无法打开文件!\n");
  24. return;
  25. }
  26. *numCourses = 0;
  27. while (fscanf(file, "%s %s %d %d %d %s %[^\n]s", courses[*numCourses].courseID, courses[*numCourses].courseNature,
  28. &courses[*numCourses].credit, &courses[*numCourses].theoryHours, &courses[*numCourses].practiceHours,
  29. courses[*numCourses].semester, courses[*numCourses].classTime) != EOF) {
  30. (*numCourses)++;
  31. }
  32. fclose(file);
  33. }
  34. void exportCourses(Course courses[], int numCourses) {
  35. FILE *file = fopen("D:/courses.txt", "w");
  36. if (file == NULL) {
  37. printf("无法打开文件!\n");
  38. return;
  39. }
  40. for (int i = 0; i < numCourses; i++) {
  41. fprintf(file, "%s %s %d %d %d %s %s\n", courses[i].courseID, courses[i].courseNature,
  42. courses[i].credit, courses[i].theoryHours, courses[i].practiceHours,
  43. courses[i].semester, courses[i].classTime);
  44. }
  45. fclose(file);
  46. printf("课程信息已成功导出!\n");
  47. }
  48. // 录入课程信息和学生选课信息
  49. void inputCourseInfo(Course courses[], int *numCourses) {
  50. printf("请输入课程信息:\n");
  51. printf("课程编号 课程性质 学分 理论学时 实践学时 开课学期 上课时间\n");
  52. scanf("%s %s %d %d %d %s %[^\n]s", courses[*numCourses].courseID, courses[*numCourses].courseNature,
  53. &courses[*numCourses].credit, &courses[*numCourses].theoryHours, &courses[*numCourses].practiceHours,
  54. courses[*numCourses].semester, courses[*numCourses].classTime);
  55. (*numCourses)++;
  56. exportCourses(courses, *numCourses); // 录入课程信息后立即保存到文件
  57. }
  58. void inputStudentCourse(StudentCourse studentCourses[], int *numStudentCourses) {
  59. printf("请输入学生选课信息:\n");
  60. printf("学号 课程编号\n");
  61. scanf("%s %s", studentCourses[*numStudentCourses].studentID, studentCourses[*numStudentCourses].courseID);
  62. (*numStudentCourses)++;
  63. }
  64. // 按特定要求查询相关课程信息
  65. void searchCourseInfo(Course courses[], int numCourses, char courseID[]) {
  66. // 在课程数组中查找指定课程编号的课程信息
  67. for (int i = 0; i < numCourses; i++) {
  68. if (strcmp(courses[i].courseID, courseID) == 0) {
  69. printf("课程编号:%s\n", courses[i].courseID);
  70. printf("课程性质:%s\n", courses[i].courseNature);
  71. printf("学分:%d\n", courses[i].credit);
  72. printf("理论学时:%d\n", courses[i].theoryHours);
  73. printf("实践学时:%d\n", courses[i].practiceHours);
  74. printf("开课学期:%s\n", courses[i].semester);
  75. printf("上课时间:%s\n", courses[i].classTime);
  76. return;
  77. }
  78. }
  79. printf("未找到该课程!\n");
  80. }
  81. // 按输入课程编号修改课程相关信息
  82. void modifyCourseInfo(Course courses[], int numCourses, char courseID[]) {
  83. // 在课程数组中查找指定课程编号的课程信息
  84. for (int i = 0; i < numCourses; i++) {
  85. if (strcmp(courses[i].courseID, courseID) == 0) {
  86. printf("请输入修改后的课程信息:\n");
  87. printf("课程性质 学分 理论学时 实践学时 开课学期 上课时间\n");
  88. scanf("%s %d %d %d %s %[^\n]s", courses[i].courseNature,
  89. &courses[i].credit, &courses[i].theoryHours, &courses[i].practiceHours,
  90. courses[i].semester, courses[i].classTime);
  91. printf("课程信息修改成功!\n");
  92. return;
  93. }
  94. }
  95. printf("未找到该课程!\n");
  96. }
  97. // 输入课程编号显示该课程选课人数及选课学生信息
  98. void displayCourseStudents(StudentCourse studentCourses[], int numStudentCourses, char courseID[]) {
  99. int count = 0; // 初始化选课人数为0
  100. printf("课程编号:%s\n", courseID);
  101. printf("选课学生信息:\n");
  102. for (int i = 0; i < numStudentCourses; i++) {
  103. if (strcmp(studentCourses[i].courseID, courseID) == 0) {
  104. printf("学号:%s\n", studentCourses[i].studentID);
  105. count++; // 每找到一个匹配的选课记录,选课人数加1
  106. }
  107. }
  108. printf("选课人数:%d\n", count); // 输出选课人数
  109. if (count == 0) {
  110. printf("暂无学生选修该课程!\n");
  111. }
  112. }
  113. // 输入学号显示该生选课情况
  114. void displayStudentCourses(StudentCourse studentCourses[], int numStudentCourses, char studentID[]) {
  115. printf("学号:%s\n", studentID);
  116. printf("选课情况:\n");
  117. int count = 0;
  118. for (int i = 0; i < numStudentCourses; i++) {
  119. if (strcmp(studentCourses[i].studentID, studentID) == 0) {
  120. printf("课程编号:%s\n", studentCourses[i].courseID);
  121. count++;
  122. }
  123. }
  124. if (count == 0) {
  125. printf("未找到该生选课信息!\n");
  126. }
  127. }
  128. // 将学生选课信息导出到文件
  129. void exportStudentCourses(StudentCourse studentCourses[], int numStudentCourses) {
  130. FILE *file = fopen("D:/studentcourses.txt", "w");
  131. if (file == NULL) {
  132. printf("无法打开文件!\n");
  133. return;
  134. }
  135. for (int i = 0; i < numStudentCourses; i++) {
  136. fprintf(file, "%s %s\n", studentCourses[i].studentID, studentCourses[i].courseID);
  137. }
  138. fclose(file);
  139. printf("学生选课信息已成功导出!\n");
  140. }
  141. int main() {
  142. Course courses[100]; // 最多支持100门课程
  143. int numCourses = 0;
  144. StudentCourse studentCourses[1000]; // 最多支持1000名学生选课
  145. int numStudentCourses = 0;
  146. int choice;
  147. char courseID[10];
  148. char studentID[10];
  149. while (1) {
  150. printf("\n");
  151. printf("学生选课管理系统\n");
  152. printf("1. 导入课程信息\n");
  153. printf("2. 录入课程信息\n");
  154. printf("3. 录入学生选课信息\n");
  155. printf("4. 查询课程信息\n");
  156. printf("5. 修改课程信息\n");
  157. printf("6. 显示课程选课人数及学生信息\n");
  158. printf("7. 显示学生选课情况\n");
  159. printf("8. 导出学生选课信息\n");
  160. printf("9. 退出系统\n");
  161. printf("请输入选项:");
  162. scanf("%d", &choice);
  163. switch (choice) {
  164. case 1:
  165. importCourses(courses, &numCourses);
  166. printf("课程信息导入成功!\n");
  167. break;
  168. case 2:
  169. inputCourseInfo(courses, &numCourses);
  170. break;
  171. case 3:
  172. inputStudentCourse(studentCourses, &numStudentCourses);
  173. break;
  174. case 4:
  175. printf("请输入要查询的课程编号:");
  176. scanf("%s", courseID);
  177. searchCourseInfo(courses, numCourses, courseID);
  178. break;
  179. case 5:
  180. printf("请输入要修改的课程编号:");
  181. scanf("%s", courseID);
  182. modifyCourseInfo(courses, numCourses, courseID);
  183. break;
  184. case 6:
  185. printf("请输入要查询的课程编号:");
  186. scanf("%s", courseID);
  187. displayCourseStudents(studentCourses, numStudentCourses, courseID);
  188. break;
  189. case 7:
  190. printf("请输入要查询的学号:");
  191. scanf("%s", studentID);
  192. displayStudentCourses(studentCourses, numStudentCourses, studentID);
  193. break;
  194. case 8:
  195. exportStudentCourses(studentCourses, numStudentCourses);
  196. break;
  197. case 9:
  198. printf("感谢使用学生选课管理系统!\n");
  199. exit(0);
  200. default:
  201. printf("无效的选项!\n");
  202. }
  203. }
  204. return 0;
  205. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/615728
推荐阅读
相关标签
  

闽ICP备14008679号