写一个C++代码首先,你可以定义一个公交卡(boardingcard)的结构体。这个结构体应该包括公交卡的种类(普通卡、学生卡、老年卡)、余额、折扣率等属性。 然后,你可以创建公交卡类,在这个类中实...
时间: 2024-03-21 22:41:24 浏览: 25
好的,以下是 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
// 公交卡枚举类型
enum CardType {
NORMAL,
STUDENT,
ELDER
};
// 公交卡结构体
struct BoardingCard {
CardType type; // 公交卡种类
double balance; // 余额
double discount; // 折扣率
BoardingCard(CardType t, double b, double d) : type(t), balance(b), discount(d) {}
};
// 公交卡类
class BusCard {
public:
BusCard(CardType t, double b, double d) {
card = new BoardingCard(t, b, d);
}
// 获取余额
double getBalance() {
return card->balance;
}
// 充值
void topUp(double amount) {
card->balance += amount;
}
// 打印当前余额
void printBalance() {
cout << "当前余额:" << card->balance << endl;
}
// 乘车
void ride(double distance) {
double price;
switch (card->type) {
case NORMAL:
price = 2;
break;
case STUDENT:
price = 1.5;
break;
case ELDER:
price = 1;
break;
default:
price = 2;
}
price *= distance * card->discount;
if (price > card->balance) {
cout << "余额不足,请充值!" << endl;
} else {
card->balance -= price;
cout << "乘车成功,本次消费:" << price << "元。" << endl;
}
}
private:
BoardingCard* card;
};
int main() {
// 创建一张普通卡,余额为100元,无折扣
BusCard normal(NORMAL, 100, 1);
normal.printBalance(); // 当前余额:100
normal.ride(10); // 乘车成功,本次消费:20元。
normal.printBalance(); // 当前余额:80
normal.topUp(50);
normal.printBalance(); // 当前余额:130
normal.ride(20); // 乘车成功,本次消费:40元。
normal.printBalance(); // 当前余额:90
// 创建一张学生卡,余额为50元,折扣率为0.9
BusCard student(STUDENT, 50, 0.9);
student.printBalance(); // 当前余额:50
student.ride(10); // 乘车成功,本次消费:13.5元。
student.printBalance(); // 当前余额:36.5
student.topUp(20);
student.printBalance(); // 当前余额:56.5
student.ride(20); // 余额不足,请充值!
student.printBalance(); // 当前余额:56.5
// 创建一张老年卡,余额为30元,折扣率为0.8
BusCard elder(ELDER, 30, 0.8);
elder.printBalance(); // 当前余额:30
elder.ride(10); // 乘车成功,本次消费:8元。
elder.printBalance(); // 当前余额:22
elder.topUp(10);
elder.printBalance(); // 当前余额:32
elder.ride(20); // 余额不足,请充值!
elder.printBalance(); // 当前余额:32
return 0;
}
```
这个程序创建了一个公交卡类 `BusCard`,其中包含了三个方法:`getBalance()` 用于获取余额,`topUp(double amount)` 用于充值,`ride(double distance)` 用于乘车。在 `ride()` 方法中,会根据公交卡的种类计算价格,如果余额充足则扣除相应金额,否则提示用户充值。
在 `main()` 函数中,我们创建了三张不同种类的公交卡,并进行了一些操作来测试程序的功能。