C+机试题 编写一个程序,实现公交车卡类售票管理。当输入为“老年卡、“学生卡和“普通卡”时显示不同的卡类及购票金额(老年卡”购票金额=原价50%、“学生卡”购票金额=原价60%、“普通卡”购票金额=原价"95%) 提示,。 第1步:建立公交卡类(boardingCard)的结构。 第2步:创建并实现公交卡类构造函数、公交卡充值函数、公交卡余额查询函数、公交卡關卡消费函数、创建纯虚函数用于完成刷卡种类显示和设置折扣率的操作。: 第3步:由公交卡类派生普通卡类、学生卡类、老年卡类,并对虚函数进行重新定义。第4步:定义主函数进行测试。
时间: 2023-12-31 09:24:27 浏览: 73
好的,下面是一个可能的实现,仅供参考:
```c++
#include <iostream>
#include <string>
using namespace std;
// 公交卡类
class BoardingCard {
protected:
double balance; // 余额
double discount; // 折扣率
public:
BoardingCard(double b = 0, double d = 1) : balance(b), discount(d) {}
virtual void showCardType() = 0; // 纯虚函数,用于显示卡类型
virtual void setDiscount(double d) { discount = d; } // 设置折扣率
void topUp(double amount) { balance += amount; } // 充值
double checkBalance() { return balance; } // 余额查询
virtual double pay(double amount) { // 消费,返回实际支付金额
double actualAmount = amount * discount;
balance -= actualAmount;
return actualAmount;
}
};
// 普通卡类
class NormalCard : public BoardingCard {
public:
NormalCard(double b = 0) : BoardingCard(b, 0.95) {}
void showCardType() { cout << "普通卡"; }
};
// 学生卡类
class StudentCard : public BoardingCard {
public:
StudentCard(double b = 0) : BoardingCard(b, 0.6) {}
void showCardType() { cout << "学生卡"; }
};
// 老年卡类
class ElderCard : public BoardingCard {
public:
ElderCard(double b = 0) : BoardingCard(b, 0.5) {}
void showCardType() { cout << "老年卡"; }
};
int main() {
// 创建不同类型的卡
BoardingCard* card1 = new NormalCard(100);
BoardingCard* card2 = new StudentCard(50);
BoardingCard* card3 = new ElderCard(20);
// 显示卡类型和余额
card1->showCardType();
cout << ",余额:" << card1->checkBalance() << endl;
card2->showCardType();
cout << ",余额:" << card2->checkBalance() << endl;
card3->showCardType();
cout << ",余额:" << card3->checkBalance() << endl;
// 消费
double amount = 10;
cout << "消费" << amount << "元" << endl;
double actualAmount = card1->pay(amount);
cout << "实际支付:" << actualAmount << "元,余额:" << card1->checkBalance() << "元" << endl;
actualAmount = card2->pay(amount);
cout << "实际支付:" << actualAmount << "元,余额:" << card2->checkBalance() << "元" << endl;
actualAmount = card3->pay(amount);
cout << "实际支付:" << actualAmount << "元,余额:" << card3->checkBalance() << "元" << endl;
// 充值
double amount2 = 50;
cout << "充值" << amount2 << "元" << endl;
card1->topUp(amount2);
cout << "余额:" << card1->checkBalance() << "元" << endl;
// 释放内存
delete card1;
delete card2;
delete card3;
return 0;
}
```
该程序定义了一个公交卡类 `BoardingCard`,并由其派生出三个子类,分别是普通卡类 `NormalCard`、学生卡类 `StudentCard` 和老年卡类 `ElderCard`。每个子类都重定义了纯虚函数 `showCardType`,以显示对应的卡类型。同时,普通卡类、学生卡类和老年卡类也分别重定义了消费函数 `pay`,以根据不同的折扣率计算实际支付金额。
在主函数中,首先创建了不同类型的卡,并显示了卡类型和余额。然后进行了一些消费和充值操作,并显示了实际支付金额和余额。最后释放了卡对象的内存。
注意,该程序只是一个简单的示例,实际使用时可能需要根据具体需求进行更改和完善。
阅读全文