编写一个程序,实现公交车卡类售票管理。当输入为“老年卡、“学生卡”和“普通卡”时显示不 同的卡类及购票金额(“老年卡”购票金额=原价50%、学生卡购票金额=原价"60%、“普通卡” 购票金额=原价“95%)。 提示: 第1步:建立公交卡类(boardingCard)的结构。。 第2步:创建并实现公交卡类构造面数、公交卡充值数、公交卡余额查询面数、公交卡 刷卡消费函数、创建纯虚函数用于完成刷卡种类显示和设置折扣率的操作。 第3步:由公交卡类派生普通卡类、学生卡类、老年卡类,并对虚函数进行重新定义。。 第4步定义主函数进行测试。
时间: 2023-12-31 08:23:00 浏览: 15
好的,以下是一个可能的实现方案:
```c++
#include <iostream>
using namespace std;
// 公交卡类
class BoardingCard {
protected:
int recharge; // 充值数
int balance; // 余额
public:
BoardingCard(int r) : recharge(r), balance(r) {}
virtual void displayDiscount() = 0; // 显示折扣信息
virtual void swipeCard() { // 刷卡消费
int price = 2; // 假设车票原价为2元
balance -= price;
cout << "本次消费" << price << "元,余额" << balance << "元" << endl;
}
int getBalance() { return balance; } // 查询余额
};
// 普通卡类
class NormalCard : public BoardingCard {
public:
NormalCard(int r) : BoardingCard(r) {}
void displayDiscount() { cout << "普通卡,购票金额为原价的95%" << endl; }
void swipeCard() {
int price = 2 * 0.95;
balance -= price;
cout << "本次消费" << price << "元,余额" << balance << "元" << endl;
}
};
// 学生卡类
class StudentCard : public BoardingCard {
public:
StudentCard(int r) : BoardingCard(r) {}
void displayDiscount() { cout << "学生卡,购票金额为原价的60%" << endl; }
void swipeCard() {
int price = 2 * 0.6;
balance -= price;
cout << "本次消费" << price << "元,余额" << balance << "元" << endl;
}
};
// 老年卡类
class ElderlyCard : public BoardingCard {
public:
ElderlyCard(int r) : BoardingCard(r) {}
void displayDiscount() { cout << "老年卡,购票金额为原价的50%" << endl; }
void swipeCard() {
int price = 2 * 0.5;
balance -= price;
cout << "本次消费" << price << "元,余额" << balance << "元" << endl;
}
};
int main() {
int recharge = 30; // 假设充值30元
cout << "请选择公交卡类型:" << endl;
cout << "1. 普通卡" << endl;
cout << "2. 学生卡" << endl;
cout << "3. 老年卡" << endl;
int choice;
cin >> choice;
BoardingCard* card = nullptr;
switch (choice) {
case 1:
card = new NormalCard(recharge);
break;
case 2:
card = new StudentCard(recharge);
break;
case 3:
card = new ElderlyCard(recharge);
break;
default:
cout << "无效的选择" << endl;
return 0;
}
card->displayDiscount();
card->swipeCard();
cout << "当前余额:" << card->getBalance() << "元" << endl;
delete card;
return 0;
}
```
在这个程序中,我们定义了一个BoardingCard类作为公交卡的基类,其中包括充值数和余额两个成员变量,以及构造函数、查询余额和刷卡消费的成员函数。此外,我们还定义了一个纯虚函数displayDiscount用于显示折扣信息。然后,我们分别派生出了普通卡、学生卡和老年卡,并对虚函数进行了重新定义,以实现不同的折扣率和购票金额。最后,我们在主函数中根据用户选择创建不同的公交卡对象进行测试。
阅读全文