OOP驾考预约(单继承)

题目描述

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

(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函数,输出一个每个学员是否能否预约科目二,并输出相关提示信息

样例

输入:

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

输出:

Wendy未达到学时要求不能预约!电话13209871920
Sarah达到学时要求可以预约!电话15081098293
张三未达到学时要求不能预约!电话15030120983

#include<iostream>
#include<cstring>
#include<iomanip>
#include<cmath>
using namespace std;

class CPerson {
protected:
	string name;
	char phone[12];
public:
	CPerson(string n, char* p) :name(n)
	{
		int i;
		for (i = 0; i < 11; i++)
		{
			phone[i] = p[i];
		}
		phone[i] = '\0';
	}
};
class AS :public CPerson {
protected:
	int Atime[12];
public:
	AS(string n, char* p, int* a) :CPerson(n, p)
	{
		int i;
		for (i = 0; i < 12; i++)
		{
			Atime[i] = a[i];
		}
	}
	void check()
	{
		int cnt = 0;
		int i;
		for (i = 0; i < 12; i++)
		{
			if (Atime[i] >= 60)cnt++;
		}
		if (cnt >= 10)cout << name << "达到学时要求可以预约!电话" << phone << endl;
		else cout << name << "未达到学时要求不能预约!电话" << phone << endl;
	}
};
class BS :public AS {
	int Btime[12];
public:
	BS(string n, char* p, int* a, int* b) :AS(n, p, a) {
		int i;
		for (i = 0; i < 12; i++)
		{
			Btime[i] = b[i];
		}
	}
	void check()
	{
		int cnt = 0;
		int i;
		for (i = 0; i < 12; i++)
		{
			if (Atime[i] >= 60)cnt++;
			cnt += Btime[i] / 60;
		}
		if (cnt >= 10)cout << name << "达到学时要求可以预约!电话" << phone << endl;
		else cout << name << "未达到学时要求不能预约!电话" << phone << endl;
	}

};
int main()
{
	int t,i;
	cin >> t;
	char k;
	string na;
	char phone[12];
	int A[12], B[12];
	while (t--)
	{
		cin >> k>>na;
		for (i = 0; i < 11; i++)
		{
			cin >> phone[i];
		}
		phone[i] = '\0';
		if (k == 'F')
		{
			for(i=0;i<12;i++)
			{
				cin >> A[i];
			}
			AS a(na, phone, A);
			a.check();
		}
		else if (k == 'V')
		{
			for (i = 0; i < 12; i++)
			{
				cin >> A[i];
			}
			for (i = 0; i < 12; i++)
			{
				cin >> B[i];
			}
			BS b(na, phone, A,B);
			b.check();
		}
	}
	return 0;
}

 ps:两个单继承,实现功能有所不同,分别定义不同类,对应不同学员,本题看上去复杂,但只是繁,没有很复杂。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值