编写一个程序,实现公交车卡类售票管理。当输入为“老年卡、“学生卡”和“普通卡”时显示不 同的卡类及购票金额(“老年卡”购票金额=原价“50%、“学生卡”购票金额=原价”60%、“普通卡” 购票金额=原价“95% ) 提示:* 第1步:建立公交卡类(boardingCard)的结构。 第2步:创建并实现公交卡类构造数、公交卡充值医数、公交卡余额查询数、公交卡 刷卡消费面数、创建纯虚函数用于完成刷卡种类显示和设置折扣率的操作。 第3步:由公交卡类派生普通卡类、学生卡类,老年卡类,并对虚函数进行重新定义。 第4步:定义主面数进行测试。
时间: 2023-12-31 15:20:03 浏览: 62
一卡通解决方案-车安科技IC卡智能停车场管理系统解决方案.doc
好的,以下是一个可能的实现,仅供参考:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 公交卡类
class BoardingCard {
public:
BoardingCard(string type, double discount): m_type(type), m_discount(discount) {}
virtual ~BoardingCard() {}
virtual void showCardInfo() = 0; // 显示卡类信息
virtual void setDiscount(double discount) { m_discount = discount; } // 设置折扣率
virtual double getDiscount() const { return m_discount; } // 获取折扣率
virtual double getTicketPrice(double originalPrice) const { return originalPrice * m_discount; } // 获取购票金额
protected:
string m_type; // 卡类
double m_discount; // 折扣率
};
// 普通卡类
class NormalCard: public BoardingCard {
public:
NormalCard(): BoardingCard("普通卡", 0.95) {}
virtual ~NormalCard() {}
virtual void showCardInfo() {
cout << "卡类: " << m_type << endl;
cout << "购票金额折扣率: " << m_discount << endl;
}
};
// 学生卡类
class StudentCard: public BoardingCard {
public:
StudentCard(): BoardingCard("学生卡", 0.6) {}
virtual ~StudentCard() {}
virtual void showCardInfo() {
cout << "卡类: " << m_type << endl;
cout << "购票金额折扣率: " << m_discount << endl;
}
};
// 老年卡类
class ElderCard: public BoardingCard {
public:
ElderCard(): BoardingCard("老年卡", 0.5) {}
virtual ~ElderCard() {}
virtual void showCardInfo() {
cout << "卡类: " << m_type << endl;
cout << "购票金额折扣率: " << m_discount << endl;
}
};
int main() {
string cardType;
double originalPrice;
BoardingCard* card = nullptr;
while (true) {
cout << "请输入卡类: ";
cin >> cardType;
if (cardType == "普通卡") {
card = new NormalCard();
break;
} else if (cardType == "学生卡") {
card = new StudentCard();
break;
} else if (cardType == "老年卡") {
card = new ElderCard();
break;
} else {
cout << "无效的卡类,请重新输入" << endl;
}
}
cout << "请输入原价: ";
cin >> originalPrice;
card->showCardInfo();
cout << "购票金额: " << card->getTicketPrice(originalPrice) << endl;
delete card;
return 0;
}
```
这个程序定义了一个 `BoardingCard` 类作为公交卡的基类,它包含了公交卡的共同属性和操作,例如卡类、折扣率、购票金额计算等。然后派生出了三个不同的卡类:`NormalCard`、`StudentCard` 和 `ElderCard`,它们分别对虚函数 `showCardInfo` 进行了重新定义。最后,在 `main` 函数中根据用户输入的卡类创建对应的对象,并根据用户输入的原价计算购票金额。
需要注意的是,这个程序没有实现充值和余额查询的功能,因为这并不在这个问题的要求范围之内。如果需要实现这些功能,可以在 `BoardingCard` 类中添加相应的成员函数。
阅读全文