1.1 内容
本实验使用 C++ 实现一个课程管理系统,这个项目会用到 C++ 的很多特性,同时可以熟悉Linux下的C++语言编译方法及简单的Makefile编写。
1.2 实验知识点
- C++语言基本语法;
- 基本的Makefile;
- C++面向对象程序设计,类,虚函数,继承,重载;
- C++ 标准库;
- C++11 的一些用法,例如auto。
1.3 实验环境
-
g++
-
Xfce终端
1.4 适合人群
本课程是初级难度,适合有 C++ 基础的同学,可以提升 Linux 下的 C++ 语言编写的能力。 初学者可以先学习 C++11/14 高速上手教程 及其他 C++ 基础教程。
1.5 代码获取
我们提供本项目完整的代码及详细注释供参考,由于代码比较多,文档中仅对部分代码进行讲解。本实验中使用的代码可以在下面的链接中获取。
# 下载课程管理程序代码
wget http://labfile.oss.aliyuncs.com/courses/1052/cmsys.zip
# 解压代码
unzip cmsys.zip
# 进入代码文件夹查看
cd cmsys
请尽量按照实验步骤自己完成代码编写。
1.6 效果截图
二、步骤
需求分析:
项目功能需求可以拆分成下面两个模块:
- 命令输入及处理
- 课程存储及管理
提炼每个模块中的参与者:
- 命令管理对象
- 课程对象
- 课程管理对象
其中命令管理对象对命令进行管理。课程对象存储每个课程的信息,课程管理对象对课程列表进行维护和管理。
我们需要课程类,课程管理类,命令管理类三个类。如果命令对象包含的信息很复杂的话也可以单独设计成类,在本项目中命令仅仅是一个数字及相关的描述信息,为了便于查找我们只需要把命令定义在命令管理类中。
根据需求,课程类为基础类,表示基础课,子类分别为项目课,评估课。但我们的需求中并没有什么地方需要用到这两个子类的虚函数实现,所以这部分会作为扩展内容。
2.1 抽象与细化
根据上面的需求分析,设计所需的类:
- 定义课程类
Course
及课程管理类CourseManager
,命令处理类CmdManager
Course
类成员包括:- 课程ID(课程对象创建时自动生成)
- 课程名称
Course
类成员函数至少包括:- 构造函数(参数课程名称)
- 拷贝构造函数
- 返回和设置课程名称
- 获得课程ID的函数
- 打印信息函数(考虑重载
<<
)
CourseManager
类成员至少包括:- 课程列表(可以思考下使用什么数据类型存储?)
CourseManager
类成员函数至少包括:- 构造函数(参数为课程对象
vector
) - 获取课程数量函数
- 添加课程函数(参数为课程名称)
- 添加课程函数(参数为课程对象)
- 删除最新课程函数
- 删除课程函数(指定ID或指定课程名称)
- 打印课程列表
- 打印指定课程(指定ID或指定课程名称)
- 打印最长名称课程函数
- 构造函数(参数为课程对象
CmdManager
类成员至少包括:- 命令列表(可以思考下使用什么数据类型存储?)
- 课程管理对象(用在需要调用课程管理的地方)
CmdManager
类成员函数至少包括:- 初始化函数:课程及命令信息初始化
- 打印帮助信息
- 命令处理函数
- 实现中请注意:
- 哪些函数可以定义为
const
? - 是否有类成员可以定义为静态或
const
? - 哪些函数可以定义为友元?
- 哪些构造函数等于默认构造函数?
- 哪些函数可以定义为
根据这些细化的思路,我们先创建必要的程序文件,每个类都会创建一个头文件和一个cpp文件,另外为了未来命令对象的扩展,我们先创建了一个Cmd.h
文件定义所有支持的命令数字。
首先为要实现的程序命名为cmsys
(Course Manager System缩写):
# 在 /home/shiyanlou/ 目录下创建代码目录
cd ~
mkdir cmsys
cd cmsys
# 创建所需的文件
touch Course.h Course.cpp
touch CourseManager.h CourseManager.cpp
touch Cmd.h CmdManager.h CmdManager.cpp
touch main.cpp
touch Makefile