C++实现简易选课系统:面向对象设计与核心逻辑解析

小林子
小林子
发布时间:2026-10-16| 5人浏览过
原创

本文提供一套完整的C++简易选课系统源码,基于控制台交互界面。系统利用面向对象特性(OOP)构建课程、教师、学生及助教模型,通过结构体与类封装数据,使用全局数组模拟数据库。主要功能包括:读取外部TXT配置初始化数据、教师开设/删除课程、学生查看课表及选课退课、以及多角色登录验证逻辑。代码未依赖外部图形库,适合学习C++基础语法、字符串处理及简单架构设计。

核心结构与角色设计

该系统采用面向对象的编程范式,将业务实体抽象为不同的类,并通过公有继承(Public Inheritance)复用代码。主要涉及四个核心类:Course、Person及其子类 teacher、student,以及多重继承的 TeachingAssistant(助教)。

1. 数据模型定义

目的: 建立内存中的数据结构,用于暂存从文件读取的学生、教师和课程信息。

关键类解析:

  • Course:包含课程ID、名称、学分及 HaveSet 标志位。只有当 HaveSet 为真时,该课程才对学生可见可选。
  • Person:基类,包含姓名和年龄等公共属性。
  • teacher:继承自Person,增加教师ID、授课数量限制及 TeachCourse 数组记录已授课程。
  • student:继承自Person,增加学号、密码、最少选修数要求及 mycourse 数组记录已选课程。
  • TeachingAssistant:同时继承自 teacher 和 student,具备双重身份,既可以是选课主体,也可协助教师。
// 全局数据存储,模拟小型数据库
Course AllList[200]; // 最大支持200门课程
teacher A_T[200];    // 最大支持200位教师
student A_S[2000];   // 最大支持2000名学生
TeachingAssistant A_TA[2500];

2. 初始化与文件IO

入口: 系统启动时的 Pre() 函数。

动作: 利用 freopen("date.txt","r",stdin) 重定向标准输入,从文本文件中批量读取课程、教师和学生数据至全局数组。

注意: 这种直接重定向的标准输入方式在后续需要切换回控制台交互时,必须使用 freopen("CON","r",stdin) 恢复,否则程序会一直尝试读取文件导致阻塞或错误。

功能模块操作流程

第1步:主菜单与角色登录

目的: 区分用户身份,进入对应的子系统。

操作逻辑:

  1. 学生/助教入口: 输入学号和密码。系统进行遍历匹配,若密码错误超过3次则退出。验证通过后,根据 who 参数(0为学生,1为助教)调用 SelectSytem 或 TASystem。
  2. 教师入口: 输入教师ID。系统校验ID范围后,直接进入 Setcourse 流程,赋予其课程管理权限。

第2步:教师管理课程

目的: 激活可用课程池,让学生能够选择。

操作说明:

  • 设置课程: 教师在列表中选择一个未被设置的课程ID。系统检查该教师剩余可授课额度(Len - now_have),若额度充足且课程空闲,则更新 AllList[CID].HaveSet = 1。
  • 删除课程: 教师取消某门已授课程。系统将该课程从 TeachCourse 数组中移除,并将末尾元素前移填补空缺,同时将全局课程的 HaveSet 置为0。

第3步:学生选课与课表查看

目的: 完成学生学业规划及进度管理。

操作说明:

  • 选课: 输入课程ID。条件判断:1. 课程已被老师设置;2. 学生尚未选择该课程。满足则加入 mycourse 数组并计数。
  • 退课: 在“我的课表”页面输入要删除的课程ID。系统同样采用末尾替换法删除数组元素,保持数据紧凑。
  • 学分判定: 每次操作后,系统对比 courseCount 与 LeastNum,提示是否满足最低学分要求。

运行环境与测试数据

代码编译需支持 C++ 标准库。由于使用了 _sleep 和 system("cls"),该程序主要在 Windows 环境下(如 MSVC 或 MinGW)运行最佳。Linux/macOS 下需修改头文件为 #include <unistd.h> 并使用 sleep(0.5) 及 system("clear")。

配套的测试数据文件格式如下(需在程序同级目录创建 date.txt):

/* date.txt 格式说明 */
// 第一行:课程总数
10
// 接下来N行:课程ID 课程名 学分
1 Media_English 2
...
// 下一部分:教师总数
5
// 接下来M行:姓名 年龄 编号 需授课数
Harry_potter 35 1 2
...
// 最后部分:学生总数
2
// 接下来K行:姓名 入学年份 学号 密码
Jack 2021 2021001 123456!

以上就是C++简易选课系统设计的详细内容,更多关于C++面向对象课程设计资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。