C+机试题 编写一个程序,实现公交车卡类售票管理。当输入为“老年卡、“学生卡和“普通卡”时显示不同的卡类及购票金额(老年卡”购票金额=原价*50%、“学生卡”购票金额=原价*60%、“普通卡”购票金额=原价"95%) 提示,。 第1步:建立公交卡类(boardingCard)的结构。 第2步:创建并实现公交卡类构造函数、公交卡充值函数、公交卡余额查询函数、公交卡關卡消费函数、创建纯虚函数用于完成刷卡种类显示和设置折扣率的操作。: 第3步:由公交卡类派生普通卡类、学生卡类、老年卡类,并对虚函数进行重新定义。第4步:定义主函数进行测试。
时间: 2023-12-31 07:24:32 浏览: 68
利用抽象类编写实现公交卡类售票管理程序。当输入为“老年卡”,“学生卡”,“普通卡”时,显示不同的卡类以及购票金额
好的,这是一道 C++ 的题目,需要编写一个公交车卡类售票管理程序。根据输入的不同卡类,程序需要显示不同的卡类及购票金额。下面是代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 公交卡类
class BoardingCard {
protected:
string m_type; // 卡类
double m_discount; // 折扣率
double m_balance; // 余额
public:
BoardingCard(string type, double discount, double balance)
: m_type(type), m_discount(discount), m_balance(balance) {}
// 充值函数
void recharge(double amount) {
m_balance += amount;
cout << "充值成功,当前余额为:" << m_balance << endl;
}
// 余额查询函数
void queryBalance() {
cout << "当前余额为:" << m_balance << endl;
}
// 关卡消费函数
void consume(double amount) {
if (m_balance < amount) {
cout << "余额不足,请充值后再进行消费!" << endl;
return;
}
m_balance -= amount;
cout << "消费成功,当前余额为:" << m_balance << endl;
}
// 刷卡种类显示函数(纯虚函数)
virtual void showCardType() = 0;
// 设置折扣率函数(纯虚函数)
virtual void setDiscount() = 0;
};
// 普通卡类
class NormalCard : public BoardingCard {
public:
NormalCard(double balance) : BoardingCard("普通卡", 0.95, balance) {}
// 刷卡种类显示函数
void showCardType() {
cout << "当前卡类为:" << m_type << endl;
}
// 设置折扣率函数
void setDiscount() {
m_discount = 0.95;
cout << "普通卡不可设置折扣率!" << endl;
}
};
// 学生卡类
class StudentCard : public BoardingCard {
public:
StudentCard(double balance) : BoardingCard("学生卡", 0.6, balance) {}
// 刷卡种类显示函数
void showCardType() {
cout << "当前卡类为:" << m_type << endl;
}
// 设置折扣率函数
void setDiscount() {
cout << "请输入折扣率(0~1之间的小数):" << endl;
cin >> m_discount;
cout << "折扣率设置成功!" << endl;
}
};
// 老年卡类
class ElderlyCard : public BoardingCard {
public:
ElderlyCard(double balance) : BoardingCard("老年卡", 0.5, balance) {}
// 刷卡种类显示函数
void showCardType() {
cout << "当前卡类为:" << m_type << endl;
}
// 设置折扣率函数
void setDiscount() {
m_discount = 0.5;
cout << "老年卡不可设置折扣率!" << endl;
}
};
int main() {
double balance;
string cardType;
cout << "请输入卡类(老年卡、学生卡、普通卡):" << endl;
cin >> cardType;
cout << "请输入初始余额:" << endl;
cin >> balance;
BoardingCard* card = nullptr;
if (cardType == "老年卡") {
card = new ElderlyCard(balance);
}
else if (cardType == "学生卡") {
card = new StudentCard(balance);
}
else if (cardType == "普通卡") {
card = new NormalCard(balance);
}
else {
cout << "输入错误!" << endl;
return 0;
}
card->showCardType();
card->setDiscount();
double price = 10.0; // 原价
double amount = price * card->m_discount; // 折后价
cout << "购票金额为:" << amount << endl;
card->consume(amount);
card->queryBalance();
delete card;
return 0;
}
```
程序中,我们首先定义了一个公交卡类 `BoardingCard`,包含了卡类、折扣率和余额三个属性,以及充值、余额查询、关卡消费等三个函数。其中,`showCardType` 和 `setDiscount` 是纯虚函数,需要在子类中进行实现。
接着,我们定义了三个派生类 `NormalCard`、`StudentCard` 和 `ElderlyCard`,分别对父类的虚函数进行了重定义,并在构造函数中初始化了卡类、折扣率和余额三个属性。
在主函数中,我们首先根据用户输入的卡类和余额创建了相应的卡对象,并调用了 `showCardType` 和 `setDiscount` 函数,展示了卡类和设置折扣率的操作。接着,我们设定了购票原价,计算了折后价,并调用了 `consume` 和 `queryBalance` 函数,模拟了消费和余额查询的过程。最后,我们删除了卡对象,释放了内存。
希望能够对你有所帮助!
阅读全文