# 基于C++的学生选课管理系统的设计与实现
# 一 需求分析
- 系统添加课程:将一门课程加入到系统数据中。课程提交重复时给出提示信息
- 系统删除课程:以课程编号为索引删除课程。系统无此课程时给出提示
- 课程添加学生:把学生的姓名、学号等信息加入到课程中。学号重复时给出提示信息
- 课程删除学生:以学号为索引从课程中删除学生。课程无此学生时给出提示
- 课程添加教师:把教师的姓名、教工号等信息加入到课程中。教工号重复时给出提示信息
- 课程删除教师:以教工号为索引从课程中删除教师。课程无此教师时给出提示
- 课程输出数据:提供某课程的学生、教师信息
# 二 程序设计
## 2.1 功能结构图
如下所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/5bbcc3285084087651c4b40244ad8e19.writebug)
## 2.2 数据设计
数据架构如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/1d27ac5533095775029d039afa00de1e.writebug)
- Object(abstractbaseclass):抽象基类。定义了“姓名”和“编号”两种属性。它是Student(class),Teacher(class),Course(class) 最终的父类
- Person(class):表示人。没有额外定义属性。Student(class)和Teacher(class)直接继承这个类
- Teacher(class):表示教师。没有额外定义属性
- Student(class):表示学生。没有额外定义属性
- std::set(templateclass)
- Group(template class):对std::set作轻度封装
- Course(class):表示课程。包含成员Group<Student>和Group<Teacher>,定义一系列添加、删除、访问的操作
- System(class):表示整个系统的类。是整个程序的核心。包含成员Group<Course>。定义了一系列添加、删除、访问操作
## 2.3 函数设计
函数结构如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/5a9214943f2f416e4f344cdfab9cc7ad.writebug)
```c++
// 格式化输出的辅助函数。以上几乎所有函数都调用OutputHelper
void OutputHelper(const string& s1, const string& s2);
// 调用PrintTitle和PrintCourse以表格的形式打印所有的课程
void PrintAllCourse(const System& sys);
// 输入一个课程的全部信息
void PrintCourse(const Course&crs);
// 打印“>>> ”用以实现交互界面
inline void PrintPromt();
// 打印“… ”用以等待用户输入更多信息
inline void PrintPromtForInput();
// 打印指导信息。每次运行该系统都会输出该内容
void PrintInstroduction();
// 打印帮助信息。在系统中输入help会调用该函数输出帮助
void PrintHelp();
// 打印错误信息。该函数会将参数s直接打印出来(加上换行符)
inline void PrintError(const string& s);
// 打印表格的题头。执行实际的打印行为
inline void PrintTitle();
// 模板函数,接受Name和Id,返回T。T是应当是Student,Teacher,Course中的一个
T InputNameAndId();
// 模板函数,接受Id,返回T。同上
T InputId();
```
# 三 程序实现
## 3.1 实现思路
### 3.1.1 结构间关系
系统中包含了一系列课程,课程由名称和编号构成;课程包含了任课教师和选课学生,学生和教师都含有名称和学号/教工号等信息。系统负责管理课程,课程负责管理教师和学生。
### 3.1.2 具体逻辑
“添加”操作需要“名称”和“编号”两项信息。“删除”操作只需要“编号”作为索引。编号保证唯一,是确定身份的凭证。
## 3.2 数据流流向
数据流流向图如下所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e27949734c043d0d36739da4ccc687e2.writebug)
- User指用户,即系统管理员
- User Interface指程序的交互层,包括文件main.cpp,IOHelper.\*
- BusinessLogic指业务逻辑层,包括除上述文件以外的所有文件
- Dataaccess 数据访问层,系统采用文件IO的方式储存数据
## 3.3 main函数算法流程
如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/050a2b0393c6dd635f87a06f7eae472d.writebug)
- 输入:输入使用getline读取整行
- 是否语法错误:使用正则表达式检查语法错误。若格式不匹配,输出错误提示信息,重新等待输入
- 是否逻辑错误:调用System类并查看返回值。若返回false表示出现逻辑错误。输出提示信息,重新等待输入
- 执行命令:命令被执行
# 四 程序运行
**case1:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/ccdcb44f460739c130e1aaadeed33fe7.writebug)
**case2:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/9fac318286108d93788a0f69048c192e.writebug)
**case3:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/65435747339f2840230c916b2f21c73d.writebug)
**case4:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b1ae55f45cdb87f51d661dda800d44b5.writebug)
**case5:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/a71b43557c3ca6969ef0d788392e98ce.writebug)
**case6:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/c9d210aaa2e2deac536453383f006a3c.writebug)
**case7:**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/f780eade1abc2a38b43f8c0f86888ed5.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
精选_毕业设计_基于C++的学生选课管理系统的设计与实现_完整源码
共21个文件
cpp:6个
hpp:6个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 33 浏览量
2022-03-05
11:06:16
上传
评论
收藏 368KB ZIP 举报
温馨提示
基于C++的学生选课管理系统的设计与实现
资源推荐
资源详情
资源评论
收起资源包目录
20308362590416662.zip (21个子文件)
student-course-selection-system
src
input.txt 219B
src
Course.cpp 531B
README 193B
Course.hpp 2KB
IOHelper.hpp 2KB
Object.hpp 899B
Makefile 668B
main.cpp 4KB
System.hpp 2KB
Object.cpp 282B
Person.hpp 703B
Group.hpp 1KB
System.cpp 2KB
unitTest.cpp 517B
IOHelper.cpp 2KB
data
CourseDateInSystem 244B
bin
CourseSelectionSystem.exe 93KB
ScreenShotsOfExample.docx 238KB
Project 2技术报告.doc 136KB
LICENSE 1KB
README.md 5KB
共 21 条
- 1
资源评论
工具盒子
- 粉丝: 60
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功