实验楼学习之C++实现课程管理系统

地址:C++实现课程管理系统

需求分析

        课程总共分成三种:基础课,项目课以及评估课,每门课都有唯一ID以及课程名,其中项目课增加了标签数据,评估课增加了时间数据。整个系统的功能有:打印课程表(仅仅打印课程名和ID),根据ID或者课程名打印课程详细信息,根据ID或者课程名删除课程,添加课程。整个课程信息保存在文件内,当启动课程管理系统时需要从文件内读取课程信息。

实现分析

    通过上面的需求分析,我们设计三种类来实现:课程类,课程管理类以及命令类。

      课程类分为基础课类,项目课类和评估课类,为了是的课程管理类能够统一管理,以基础课类为基类,项目课类和评估课类公有继承它:

class Course
{
    ....
};

class ProjectCourse:public Course
{
    ....
};
class JudgeCourse:public Course
{
    ....
}; 
由于需要实现打印课程详细信息的操作,在继承体系中添加下面函数
virtual void PrintInfo() const; //打印课程详细,并且是虚函数,保证课程管理类能够调用正确的版本

为了可以通过ID或者课程名寻找课程,还需要添加两个函数能够返回ID和课程名,并且也要是虚函数,这两个虚函数派生类可以直接继承,不需要改写。

virtual int GetID() const;
virtual string GetName() const;

每门课程ID唯一,只要在基类添加静态数据成员即可,整个继承体系共享一份基类的静态成员。同时,我们禁止拷贝或者赋值,为了能够实现将课程资源交给其他变量,添加移动构造函数和移动赋值运算符,还有另一个原因在下面课程管理类中。

static int currentID;

以上即使课程类的实现方式。

            

            课程管理类。既然要保证能够统一管理课程,那容器类必须保存的成员是基类的指针,为了能够防止资源泄露,使用只能指针来管理资源。那选择什么容器保存智能指针呢?课程管理类需要实现课程添加以及删除,那么就要保证方便删除和添加课程,这里我们实际并没有实现删除操作,仅仅添加一个标记vector来标记此课程是否已经被删除。那只需要实现添加课程操作就可以了,那么vector足够。我这里还有一些操作不完善,比如没有在文件中标记课程是否被删除。我们课程管理类启动所产生的所有动作都没有和文件同步,这一点还需要完善。对于上面的课程需要移动构造函数和移动赋值运算符另外一个原因就是,我们需要用Course对象来初始化智能指针,如果没有上面两个成员,我们无法完成上述操作。


扫描二维码关注公众号,回复: 1860247 查看本文章

           对于命令类,比较简单,可以直接看代码。代码已经上传到github。CourseManageSystem

最后添加一个运行图片:


猜你喜欢

转载自blog.csdn.net/w1157984197/article/details/79832390