C+机试题 编写一个程序,实现公交车卡类售票管理。当输入为“老年卡、“学生卡和“普通卡”时显示不同的卡类及购票金额(老年卡”购票金额=原价*50%、“学生卡”购票金额=原价*60%、“普通卡”购票金额=原价"95%) 提示,。 第1步:建立公交卡类(boardingCard)的结构。 第2步:创建并实现公交卡类构造函数、公交卡充值函数、公交卡余额查询函数、公交卡關卡消费函数、创建纯虚函数用于完成刷卡种类显示和设置折扣率的操作。: 第3步:由公交卡类派生普通卡类、学生卡类、老年卡类,并对虚函数进行重新定义。第4步:定义主函数进行测试。
时间: 2023-12-31 13:24:33 浏览: 135
好的,以下是 C++ 的代码实现,实现了上述要求:
```c++
#include <iostream>
#include <string>
using namespace std;
class BoardingCard {
protected:
string type; // 卡类别
double balance; // 卡余额
double discountRate; // 折扣率
public:
BoardingCard(string t, double b, double d) {
type = t;
balance = b;
discountRate = d;
}
virtual void showCardType() = 0; // 纯虚函数,显示卡类别
virtual void setDiscountRate() = 0; // 纯虚函数,设置折扣率
void recharge(double amount) { // 充值
balance += amount;
cout << "充值成功,当前余额为:" << balance << endl;
}
void checkBalance() { // 查询余额
cout << "当前余额为:" << balance << endl;
}
void consume(double amount) { // 消费
if (balance >= amount) {
balance -= amount * discountRate;
cout << "消费成功,当前余额为:" << balance << endl;
} else {
cout << "卡余额不足,请先充值!" << endl;
}
}
};
class NormalCard : public BoardingCard {
public:
NormalCard(string t, double b, double d) : BoardingCard(t, b, d) {}
void showCardType() { // 显示卡类别
cout << "当前卡为普通卡,购票金额为原价*95%。" << endl;
}
void setDiscountRate() { // 设置折扣率
discountRate = 0.95;
}
};
class StudentCard : public BoardingCard {
public:
StudentCard(string t, double b, double d) : BoardingCard(t, b, d) {}
void showCardType() { // 显示卡类别
cout << "当前卡为学生卡,购票金额为原价*60%。" << endl;
}
void setDiscountRate() { // 设置折扣率
discountRate = 0.6;
}
};
class ElderCard : public BoardingCard {
public:
ElderCard(string t, double b, double d) : BoardingCard(t, b, d) {}
void showCardType() { // 显示卡类别
cout << "当前卡为老年卡,购票金额为原价*50%。" << endl;
}
void setDiscountRate() { // 设置折扣率
discountRate = 0.5;
}
};
int main() {
string type;
double balance = 0;
cout << "请输入卡类别(老年卡、学生卡、普通卡):" << endl;
cin >> type;
if (type == "老年卡") {
ElderCard card(type, balance, 0);
card.showCardType();
card.setDiscountRate();
double amount;
cout << "请输入购票金额:" << endl;
cin >> amount;
card.consume(amount);
} else if (type == "学生卡") {
StudentCard card(type, balance, 0);
card.showCardType();
card.setDiscountRate();
double amount;
cout << "请输入购票金额:" << endl;
cin >> amount;
card.consume(amount);
} else if (type == "普通卡") {
NormalCard card(type, balance, 0);
card.showCardType();
card.setDiscountRate();
double amount;
cout << "请输入购票金额:" << endl;
cin >> amount;
card.consume(amount);
} else {
cout << "输入的卡类别不正确!" << endl;
}
return 0;
}
```
在程序中,我们先定义了一个抽象类 `BoardingCard`,作为公交卡类的基类,其中包含了卡类别、卡余额和折扣率三个成员变量,以及充值、查询余额和消费三个公共方法,以及两个纯虚函数,分别用于显示卡类别和设置折扣率。
然后我们定义了普通卡类 `NormalCard`、学生卡类 `StudentCard` 和老年卡类 `ElderCard`,它们都是从 `BoardingCard` 派生而来的子类,并对虚函数进行了重新定义,以实现不同的购票金额计算方式。其中,普通卡购票金额为原价的 95%、学生卡购票金额为原价的 60%、老年卡购票金额为原价的 50%。
最后,在 `main` 函数中,我们根据输入的卡类别创建相应的卡类对象,然后调用相应的方法进行充值、查询余额和消费操作。
阅读全文