OOP驾考预约(单继承)

【id:211】【10分】F. OOP驾考预约(单继承)
时间限制
1s
内存限制
128MB
题目描述

某驾校对学车的学员做出以下设计:

(1)定义CPerson类,包含数据成员:姓名,联系电话。由CPerson作为基类派生出学员类。

(2)学员类表示普通学员,他们可以在场地A练车,一天最多获得一个学时(即使练习时长超过一小时也只能按一个学时计算)

学员类新增一个数据成员Atime,长度为12的整数数组,表示连续12天,在A场地每天练习的时长,时长单位按分钟计算

学员类新增一个成员函数void check(),检查学员是否达到预约科目二考试资格的标准,并输出相应提示信息。

预约资格是:在每12天的周期内,总学时达到10小时可以预约。练习每一小时计一学时,不足一小时计0

(3)学员类派生出VIP学员类,他们可以在场地B练车,一天最多获得两个学时(即使练习时长超过两小时也只能按两个学时计算)。

VIP学员同样可以在A场地练车。A\B场地练车获得学时可以叠加,即VIP学员一天最多获得3个学时。

VIP学员类新增一个数据成员Btime,长度为12的整数数组,表示连续12天中,在B场地每天练习的时长,时长单位按分钟计算

VIP学员类重载函数void check(),功能也是检查预约资格,只是学时计算要包含A和B场地。


输入

测试样例有t学员

每个学员的第一行先输入学员信息:类型(普通学员用F表示,VIP学员用V表示),姓名,电话。

如果是普通学员,接着只包含一行数据,第二行输入A场地的12天来每天的练习时长(共12个整数,单位为分钟)

如果是VIP学员,接着包含两行数据,第二行输入A场地的12天练习时长,第三行输入B场地的12天练习时长,每行都是12个整数。


输出

输出t行

调用check函数,输出一个每个学员是否能否预约科目二,并输出相关提示信息


样例查看模式 
正常显示
查看格式
输入样例1 <-复制
3
F Wendy 13209871920
30 30 40 60 60 40 60 70 100 80 30 40
V Sarah 15081098293
170 80 0 50 60 90 110 0 40 60 30 100
0 0 90 0 0 0 0 130 0 0 0 66
V 张三 15030120983
80 0 0 30 20 0 40 0 30 150 0 0
0 10 10 0 0 10 0 20 0 0 150 160
输出样例1
Wendy未达到学时要求不能预约!电话13209871920
Sarah达到学时要求可以预约!电话15081098293
张三未达到学时要求不能预约!电话15030120983

在使用构造函数时需要传递数组,使用固定格式:

*this->Atime = *new int[12];

for (int i = 0; i < 12; ++i) {

Atime[i]=atime[i];

}

否则数据出错

不能直接使用等号=

#include "iostream"
#include "vector"

using namespace std;

//定义 CPerson 类,包含数据成员:姓名,联系电话。由CPerson作为基类派生出学员类。
class CPerson {
protected:
    string name;
    string phone;
public:
    CPerson(const string &name, const string &phone) : name(name), phone(phone) {}
};

//学员类表示普通学员,他们可以在场地A练车,一天最多获得一个学时(即使练习时长超过一小时也只能按一个学时计算)
//学员类新增一个数据成员Atime,长度为12的整数数组,表示连续12天,在A场地每天练习的时长,时长单位按分钟计算
//
// 学员类新增一个成员函数void check(),检查学员是否达到预约科目二考试资格的标准,并输出相应提示信息。
class Student : public CPerson {
public:
    int Atime[12];//时长单位按分钟计算,一天最多获得一个学时
    Student(const string &name, const string &phone, int *atime) : CPerson(name, phone) {
        *this->Atime = *new int[12];
        for (int i = 0; i < 12; ++i) {
            Atime[i]=atime[i];
        }
    }

    void check() {
        //检查学员是否达到预约科目二考试资格的标准,并输出相应提示信息。
        //预约资格是:在每12天的周期内,总学时达到10小时可以预约。练习每一小时计一学时,不足一小时计0
        int sum = 0;
        for (int i = 0; i < 12; ++i) {
            if (Atime[i] >= 60) {
                sum++;
            }
        }
        if (sum >= 10) {
            cout << name << "达到学时要求可以预约!电话" << phone << endl;
        } else {
            cout << name << "未达到学时要求不能预约!电话" << phone << endl;
        }

    }
};

//学员类派生出VIP学员类,他们可以在场地B练车,一天最多获得两个学时(即使练习时长超过两小时也只能按两个学时计算)。
//
// VIP学员同样可以在A场地练车。A\B场地练车获得学时可以叠加,即VIP学员一天最多获得3个学时。
//
// VIP学员类新增一个数据成员 Btime,长度为12的整数数组,表示连续12天中,在B场地每天练习的时长,时长单位按分钟计算
//
// VIP学员类重载函数void check(),功能也是检查预约资格,只是学时计算要包含A和B场地。
class VIP : public Student {
public:
    int Btime[12];//时长单位按分钟计算
    VIP(const string &name, const string &phone, int *atime, int *btime) : Student(name, phone, atime) {
        *this->Btime = *new int[12];
        for (int i = 0; i < 12; ++i) {
            Btime[i]=btime[i];
        }
    }

    void check() {
        //功能也是检查预约资格,只是学时计算要包含A和B场地。
        //检查学员是否达到预约科目二考试资格的标准,并输出相应提示信息。
        //预约资格是:在每12天的周期内,总学时达到10小时可以预约。练习每一小时计一学时,不足一小时计0
        int sum = 0;
        for (int i = 0; i < 12; ++i) {
            if (Atime[i] >= 60) {
                sum++;
            }
            if (Btime[i] >= 120) {
                sum += 2;
            } else if (Btime[i] >= 60) {
                sum++;
            }
        }
        // cout << sum << endl;
        if (sum >= 10) {
            cout << name << "达到学时要求可以预约!电话" << phone << endl;
        } else {
            cout << name << "未达到学时要求不能预约!电话" << phone << endl;
        }
    }
};

int main() {
    //测试样例有t学员
    //
    // 每个学员的第一行先输入学员信息:类型(普通学员用F表示,VIP学员用V表示),姓名,电话。
    //
    // 如果是普通学员,接着只包含一行数据,第二行输入A场地的12天来每天的练习时长(共12个整数,单位为分钟)
    //
    int t;
    cin >> t;
    while (t--) {
        char type;
        cin >> type;
        switch (type) {
            case 'F': {
                string name;
                string phone;
                int *Atime = new int[12];
                cin >> name >> phone;
                for (int i = 0; i < 12; ++i) {
                    cin >> Atime[i];
                }
                Student student(name, phone, Atime);
                student.check();
                break;
            }
            case 'V': {
                // 如果是VIP学员,接着包含两行数据,第二行输入A场地的12天练习时长,第三行输入B场地的12天练习时长,每行都是12个整数。
                string name;
                string phone;
                int *Atime = new int[12];
                int *Btime = new int[12];
                cin >> name >> phone;
                for (int i = 0; i < 12; ++i) {
                    cin >> Atime[i];
                }
                for (int i = 0; i < 12; ++i) {
                    cin >> Btime[i];
                }
                VIP vip(name, phone, Atime, Btime);

                vip.check();
                break;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_62288512/article/details/131580648