大家有空看看,我没有思路,讨论一下
一、课程设计目的
通过设计、实现一个微型的学生养成系统,熟悉对象导向的设计思想;进一步熟悉、掌握STL中有关数据类型的使用方法,以及泛型编程的风格。
二、设计目标
题目:微型学生养成系统
在这个课程设计中,你需要设计并实现如下场景:在那山的那边,湖的那边,有一所学校,学校里有一幢宿舍楼,宿舍楼有若干房间 ,一群学生快乐地生活在这里。他们每天可做的事情有:1.换宿舍,从一个房间搬到另一个房间;2.退学,亦即搬出宿舍楼;3.入学,亦即搬入宿舍楼;4.吃饭,吃饭会增加体重,花费金钱;5.学习,学习会消耗体重,增加魅力;6.化妆(女生独有),化妆会花费金钱,提升容貌;7.运动(男生独有),运动会消耗体重,增加健康。体重、容貌、健康与魅力之间存在一定的转化关系。此外,宿舍楼还可进行扩建,亦即增加楼层,增加某层的房间数,以及增加某个房间可容纳的人数(不考虑这种任意增加的物理可能性)。经过一段时间的生活后可对学生的状态信息进行查询。
具体要求:
1. 程序运行的初始参数从某个指定的配置文件中读取(该文件名作为第一个参数传递给程序)。配置文件的格式详见范例文件。
2. 学生的初始房间分配情况从某个指定的文件中读取(该文件名作为第二个参数传递给程序)。该文件每一行都是一个学生的初始房间分配,格式如下:
【学生姓名】 【性别】 【房间号】
3. 所有的活动描述都存储在某个指定文件中(该文件名作为第三个参数传递给程序)。该文件每一行都是一个活动的描述,活动种类及其格式说明如下:
【学生姓名】 MOVE FROM 【原房间号】 TO【新房间号】
解释:换宿舍。
【学生姓名】QUIT
解释:学生退学,搬离原房间。
【学生姓名】ENROL 【房间号】
解释:学生入学,搬入房间。
ADD 【层数】FLOOR(S)
解释:在现有楼层之上增加【层数】个楼层,层号在现有楼层基础之上顺排;每层楼的房间数及每个房间的容量都是初始值。
ADD 【层号】 FLOOR【房间数】ROOM(S)
解释:在第【层号】层楼增加【房间数】个房间,房间号在该层现有房间基础之上顺排,每个房间的容量为初始值。
ADD 【房间号】【床位数】BED(S)
解释:在【房间号】房增加【床位数】个床。
【学生姓名】【EAT 食物数量】【STUDY 学习时间】【MAKEUP 化妆时间】【EXERCISE 运动时间】
解释:学生至少执行一种活动,至多执行三种活动(因为化妆和运动分别为女生和男生独有);活动的出现顺序不定;食物数量,学习时间,化妆时间,运动时间均为1 ~ 100 的正整数。
说明:
(A) 以上活动描述中【】及其中的汉字代表非终极符,在实际的活动描述文件中为具体值所代替;大写的英文字符(无论是否出现在【】中)为终极符,在实际的活动描述文件中原样出现。
(B) 【房间号】代表某个房间,其格式为 【楼层号】 - 【某一层中的房间号】,【楼层号】为两位整数,取值范围是01 ~ 99,即便十位为0也需写出;【某一层中的房间号】为两位整数,取值范围是01 ~ 50,即便十位为0也需写出。
(C) 【学生姓名】为汉字,长度为2 ~ 4,不包含空格,数据文件中不会出现不合规则的姓名。
(D) 【性别】为“男”或者“女”,数据文件中不会出现不合规则的性别。
(E) 男女生不得同一房间住宿。
(F) 女生不会运动,男生不会化妆。
(G) 若任何活动及其后果违背了规则(B)、(E)(F)以及常识(譬如不存在的房间号,不存在的学生——入学除外,等等),则该学生此次的所有活动不予执行。
4. 请自行决定宿舍,楼层,房间的数据结构。
5. 本程序中至少有三个类,男生类,女生类,以及这两个类的基类——学生类。三个类至少具有的属性分别是:
学生类的属性:姓名(不会出现同名的情况),性别,魅力,体重,花费的金钱。
男生类的属性:继承而来的属性,健康。
女生类的属性:继承而来的属性,容貌。
其中金钱,体重为正整数,健康、容貌、魅力为1 ~ 100的整数。
6. 每执行一次吃饭、学习、运动、化妆活动后,学生的状态变化如下:
男生:
体重增量:食物数量 * 单位食物增加的体重 – 学习时间 * 单位学习时间减少的体重 – 运动时间 * 单位运动时间减少的体重
金钱:食物数量 * 单位食物消耗的金钱
健康增量:运动时间 * 单位运动时间增加的健康值。说明:健康最多增加到100,但学生还可以继续运动,不算无效活动。
魅力增量:学习时间* 单位学习时间增加的魅力 + 健康增量 / 10 – 体重增量 / 5。说明:魅力最多增加到100,但学生还可以继续从事增加魅力的活动,不算无效活动。
女生:
体重增量:食物数量 * 单位食物增加的体重 – 学习时间 * 单位学习时间减少的体重
金钱:食物数量 * 单位食物消耗的金钱 + 化妆时间 * 单位化妆时间消耗的金钱
容貌增量:化妆时间 * 单位化妆时间增加的容貌。说明:容貌最多增加到100,但学生还可以继续化妆,不算无效活动。
魅力增量:学习时间* 单位学习时间增加的魅力 + 容貌增量 / 20 – 体重增量 / 4。说明:魅力最多增加到100,但学生还可以继续从事增加魅力的活动,不算无效活动。
7. 当活动描述文件中所有的活动都完成之后,向用户显示查询界面,提供如下查询功能:
a) 对于宿舍中的所有学生(包括男女生)、男生、女生,可对体重,金钱,容貌(女生适用),健康(男生适用),魅力进行最大、最小值查询,以及范围查询(亦即查询属性值属于某个范围的所有学生)。查询结果的排序依据为学生的姓名,可升序或降序排列。
b) 给出学生姓名(有可能不住在宿舍中)找出他(她)所在的房间号。
c) 给出房间号(有可能不存在),给出该房间中入住的所有学生的姓名,查询结果的排序依据为学生的姓名,可升序或降序排列。