一、设计要求
2.1课程信息录入功能
功能描述: 系统允许管理员录入新的课程信息,包括课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分和开课学期等。
输入要求: 用户通过控制台输入各项课程信息。
输出结果: 新录入的课程信息保存到文件中,以确保数据的持久性。
2.2 课程信息浏览功能
功能描述: 系统允许用户浏览所有已录入的课程信息。
输入要求: 用户通过选择菜单项触发浏览功能。
输出结果: 控制台显示所有课程的详细信息。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
2.3 按学分查询功能
功能描述: 系统允许用户根据学分查询符合条件的课程。
输入要求: 用户输入要查询的学分值。
输出结果: 控制台显示符合条件的课程列表。
2.4 按课程性质查询功能
功能描述: 系统允许用户根据课程性质查询符合条件的课程。
输入要求: 用户输入要查询的课程性质。
输出结果: 控制台显示符合条件的课程列表。
2.5 学生选修课程功能
功能描述: 系统允许学生选择想要选修的课程,并检查选课后的总学分是否达到最低要求(60学分)。
输入要求: 用户输入要选修的课程编号列表。
输出结果: 控制台显示选修课程的详细信息及总学分情况。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
二、设计思路
1.系统总体结构
该学生选修课程系统的总体结构分为以下几个模块:
数据存储模块:用于课程信息的持久化存储和读取。
输入处理模块:用于课程信息的录入。
输出展示模块:用于课程信息的浏览和显示。
查询模块:用于按学分和课程性质进行课程查询。
选课模块:用于学生选修课程和计算总学分。
用户交互模块:基于控制台菜单,提供用户与系统交互的接口。
2.数据结构设计
系统使用一个Course
结构体来表示课程信息,包含以下字段:
int courseID`: 课程编号 char courseName[MAX_NAME_LENGTH]`: 课程名称 char courseType[MAX_NAME_LENGTH]`: 课程性质 int totalHours`: 总学时 int lectureHours`: 授课学时 int labHours`: 实验或上机学时 float credits`: 学分 int semester`: 开课学期
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
课程信息存储在一个Course
数组courses
中,courseCount
记录当前课程数量。
3. 数据存储模块
3.1 课程信息保存
函数saveCoursesToFile
负责将课程信息保存到文件courses.txt
中。具体实现如下:
void saveCoursesToFile() { FILE *file = fopen("courses.txt", "w"); if (!file) { printf("无法打开文件!\n"); return; } // 此处多行代码 略...略...略... fclose(file); }
3.2 课程信息读取
函数loadCoursesFromFile
负责从文件courses.txt
中读取课程信息,初始化系统运行时的数据。具体实现如下:
void loadCoursesFromFile() { FILE *file = fopen("courses.txt", "r"); if (!file) { printf("无法打开文件!\n"); return; } // 此处多行代码 略...略...略... fclose(file); }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
4. 输入处理模块
4.1 课程信息录入
函数inputCourse
用于录入新课程信息,并保存到文件中。具体实现如下:
void inputCourse() { if (courseCount >= MAX_COURSES) { printf("课程数量已达上限!\n"); return; } printf("请输入课程编号: "); scanf("%d", &courses[courseCount].courseID); printf("请输入课程名称: "); scanf("%s", courses[courseCount].courseName); printf("请输入课程性质: "); scanf("%s", courses[courseCount].courseType); printf("请输入总学时: "); scanf("%d", &courses[courseCount].totalHours); printf("请输入授课学时: "); scanf("%d", &courses[courseCount].lectureHours); printf("请输入实验或上机学时: "); scanf("%d", &courses[courseCount].labHours); printf("请输入学分: "); scanf("%f", &courses[courseCount].credits); printf("请输入开课学期: "); scanf("%d", &courses[courseCount].semester); courseCount++; saveCoursesToFile(); printf("课程信息已保存!\n"); }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
5. 输出展示模块
5.1 课程信息浏览
函数displayCourses
用于浏览所有课程信息,具体实现如下:
void displayCourses() { // 此处多行代码 略...略...略... }
6. 查询模块
6.1 按学分查询
函数queryByCredits
根据学分查询课程,具体实现如下:
void queryByCredits() { float credits; printf("请输入查询的学分: "); scanf("%f", &credits); // 此处多行代码 略...略...略... } }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
6.2 按课程性质查询
函数queryByType
根据课程性质查询课程,具体实现如下:
void queryByType() { char type[MAX_NAME_LENGTH]; printf("请输入查询的课程性质: "); scanf("%s", type); // 此处多行代码 略...略...略... } }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
7. 选课模块
7.1 学生选修课程
函数studentSelectCourse
用于学生选修课程并计算总学分,具体实现如下:
void studentSelectCourse() { int selectedCourses[MAX_COURSES]; int selectedCount = 0; float totalCredits = 0; int courseID; printf("请输入选修的课程编号 (输入0结束):\n"); while (1) { scanf("%d", &courseID); if (courseID == 0) break; // 此处多行代码 略...略...略... // 此处多行代码 略...略...略... } } if (totalCredits < 60) { printf("总学分不足60分,选课失败!\n"); } else { printf("选课成功! 选修课程如下:\n"); // 此处多行代码 略...略...略... } } }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
8. 用户交互模块
8.1 控制台菜单
系统通过控制台菜单与用户交互,主函数main
实现如下:
int main() { int choice; loadCoursesFromFile(); while (1) { printf("学生选修课程系统\n"); printf("1. 课程信息录入\n"); printf("2. 课程信息浏览\n"); printf("3. 按学分查询\n"); printf("4. 按课程性质查询\n"); printf("5.学生选修课程\n"); printf("6. 退出\n"); printf("请选择: "); scanf("%d", &choice); // 此处多行代码 略...略...略... return 0; }
该系统通过模块化设计和清晰的功能划分,实现了学生选修课程的管理和查询功能,并确保数据的持久化和用户操作的简便性。每个功能模块独立且易于维护,用户通过控制台菜单即可方便地进行各种操作。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 选修 ” 获取。👈👈👈