一个简单的C++课程设计

一、课程设计目的

通过设计、实现媒体库管理系统,熟悉面向对象的设计思想;进一步熟悉、掌握STL中有关类型及其使用方法,泛型编程的风格。

 

二、系统设计要求

题目:媒体库管理系统

在这个课程设计中,你需要设计并实现一个继承体系以管理图书馆中流通的物品:图书、视频光盘以及图画。你需要设计一个名为 Medium 的基类以表示所有流通物品所公有的属性。接着,你需要从 Medium 类派生出 Book Video Painting 三个派生类。这个课程设计的目的是实现一个具有多态行为的设计。

阶段一:

基类的描述:在这个应用中,每一个物品都有: 标题,作者,评级(未评级,一般,成人,儿童),借出状态(可用,已借出)四个属性。因此,基类 Medium 应具有这四个数据成员,其访问权限为保护;此外,基类Medium还具有如下成员函数:从标准输入流中读取数据的函数;从文件中读取单个物品信息的函数;输出信息到标准输出流的函数。

注:标题和作者都可能包含空格。

Book类的描述:相比基类,Book类增加了出版社的名字,ISBN号(可简单认为是一个由 0-9,‘-’,A-Z 构成的字符串),出版年份和书的页数这四个数据成员。

Video类的描述:相比基类,Video类增加了出品者的名字,出品年份和视频时长(以分钟计,整数)这三个数据成员。

Painting类的描述:相比基类,Painting类增加了出品国籍,作品的长与宽(以厘米计,整数)这三个数据成员。

在阶段一中,写一个简单的测试程序以检验这些类的所有性质。每一个类都必须可以从文件或标准输入流中读入一个该类对象的信息,并且可以将一个该类对象的信息输出到文件或者标准输出流中。提示:基类中相关的成员函数应该声明为虚函数。

这个简单的测试程序也需要提交。

阶段二:

设计一个名为 MediaLib 的类,在其构造函数中从一个数据文件中读入信息,不可以在源代码中硬编码(hard-code)此数据文件名。此类应具有如下方法:增加新物品,删除物品,显示整个媒体库中的物品,显示媒体库中的部分物品。换言之,媒体库中所有物品的信息存在于硬盘中的某个文件中,当一个 MediaLib 对象被创建时读入媒体库中的所有物品信息。在内存中,物品信息有可能被修改,在程序退出时所有物品信息又被写回至硬盘(这里所有物品信息被写回至硬盘只是功能上的描述;从效率着眼,仅仅写回发生了改变的信息的实现策略更好,但是需要考虑新增纪录、删除纪录的处理,比较复杂,有兴趣的同学可以尝试这种策略)。因为具有插入、删除功能,实现 MediaLib 类的时候应该使用STL中的 list 类作为底层容器。MediaLib 类还具有一个名为run的成员函数以显示如下菜单:

1.        新增一个物品;

2.        删除一个物品;

3.        显示整个媒体库;

4.        显示满足搜索条件的物品;

5.        退出。

说明:之所以不在程序中显式提供物品信息修改功能,是因为此功能可以用先删除,再插入操作序列替代。

功能的详细描述:

新增物品:提示用户输入物品的相关信息,除标题外其余信息都可有缺省值。

显示满足搜索条件的物品:譬如,显示所有的Book,按照作者名排序。实现此功能时需要提供进一步的子菜单以便用户指定查询条件和排序依据。查询条件可包括物品的类别(BookVideoPainting),四个类中出现过的任何数据成员及其任意组合(在有意义的前提下),其中年份(出版年份、出品年份),书籍页数,视频时长和作品长度、宽度可以进行范围查询。查询结果的排序依据可以是物品的类别,四个类中出现过的任何数据成员(在有意义的前提下,亦即不必考虑用户输入无意义排序依据的情况),但用户最多只能按照重要性的不同指定三个排序依据;每个排序依据都有升序、降序之分(其中 Book < Painting < Video)。因为查询和排序的条件众多,因此同学们需要仔细考虑用户界面的设计以方便用户的使用。过于拙劣的界面设计将会扣分,设计良好、便于使用但又不过分花哨的界面会有加分!提示:假如对数据进行索引的话需考虑到数据将要存储回硬盘文件这个事实。如何存储索引信息不在本门课程的包括范围之内,但利用所学本门课和其他课的知识也不是不可以实现的,有兴趣的同学可以尝试,若能完成会有加分。

退出:当选择“退出”时,整个媒体库,包括已作的修改,必须写回到数据文件中。

显示:在实现显示功能时必须使之实用,譬如,在显示一屏信息后必须能暂停,待用户指示继续后再继续显示。输出的信息中应加上适当的空白以方便阅读。

 

输入说明:

在程序一开始提示用户输入数据文件的名字。输入的具体格式参见提供的示例文件。但你们的程序将会用一个很大的数据文件进行测试,因此不要对文件的大小做任何假定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值