利用抽象类编写一个程序实现公交车卡售票管理。当输入为“老年卡”、“学生卡”和“普通卡”时显示不同的卡类,及购票金额(“老年卡”购票金额=原价*50%、“学生卡”购票金额=原价*60%、“普通卡”购...
时间: 2023-10-01 08:06:41 浏览: 268
好的,我可以为您提供一个使用抽象类实现公交车卡售票管理的示例程序。以下是示例代码:
```python
from abc import ABC, abstractmethod
class BusCard(ABC):
def __init__(self, card_number, cardholder_name, balance):
self.card_number = card_number
self.cardholder_name = cardholder_name
self.balance = balance
self.status = "正常"
@abstractmethod
def get_discount(self):
pass
def add_money(self, amount):
self.balance += amount
def consume(self, amount):
if self.balance < amount:
print("余额不足,请充值或更换卡片!")
else:
self.balance -= amount
def check_balance(self):
print("卡号:{}\n持卡人:{}\n余额:{}".format(
self.card_number, self.cardholder_name, self.balance))
def loss_report(self):
self.status = "已挂失"
def loss_cancel(self):
self.status = "正常"
def cancel(self):
self.status = "已注销"
class ElderCard(BusCard):
def get_discount(self):
return 0.5
class StudentCard(BusCard):
def get_discount(self):
return 0.6
class NormalCard(BusCard):
def get_discount(self):
return 1.0
class TicketSystem:
def __init__(self):
self.cards = {}
def sell_card(self, card_type, card_number, cardholder_name, balance):
if card_type == "老年卡":
card = ElderCard(card_number, cardholder_name, balance)
elif card_type == "学生卡":
card = StudentCard(card_number, cardholder_name, balance)
else:
card = NormalCard(card_number, cardholder_name, balance)
self.cards[card_number] = card
print("恭喜您,{}购卡成功!".format(card_type))
def return_card(self, card_number):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
self.cards.pop(card_number)
print("退卡成功!")
def add_money(self, card_number, amount):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
card.add_money(amount)
print("充值成功!")
def consume(self, card_number, amount):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
discount = card.get_discount()
real_amount = amount * discount
card.consume(real_amount)
print("购票成功!实际金额为:{}元".format(real_amount))
def check_balance(self, card_number):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
card.check_balance()
def loss_report(self, card_number):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
card.loss_report()
print("挂失成功!")
def loss_cancel(self, card_number):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
card.loss_cancel()
print("解挂成功!")
def cancel(self, card_number):
if card_number not in self.cards:
print("卡号不存在,请重新输入!")
else:
card = self.cards[card_number]
card.cancel()
self.cards.pop(card_number)
print("注销成功!")
if __name__ == "__main__":
ticket_system = TicketSystem()
while True:
print("欢迎使用公交车卡售票管理系统!")
print("请选择您要进行的操作:")
print("1.购卡 2.退卡 3.充值 4.购票 5.余额查询 6.挂失 7.解挂 8.注销 9.退出")
choice = input()
if choice == "1":
print("请选择卡类型:1.老年卡 2.学生卡 3.普通卡")
card_type = input()
print("请输入卡号:")
card_number = input()
print("请输入持卡人姓名:")
cardholder_name = input()
print("请输入充值金额:")
balance = float(input())
ticket_system.sell_card(card_type, card_number, cardholder_name, balance)
elif choice == "2":
print("请输入卡号:")
card_number = input()
ticket_system.return_card(card_number)
elif choice == "3":
print("请输入卡号:")
card_number = input()
print("请输入充值金额:")
amount = float(input())
ticket_system.add_money(card_number, amount)
elif choice == "4":
print("请输入卡号:")
card_number = input()
print("请输入购票金额:")
amount = float(input())
ticket_system.consume(card_number, amount)
elif choice == "5":
print("请输入卡号:")
card_number = input()
ticket_system.check_balance(card_number)
elif choice == "6":
print("请输入卡号:")
card_number = input()
ticket_system.loss_report(card_number)
elif choice == "7":
print("请输入卡号:")
card_number = input()
ticket_system.loss_cancel(card_number)
elif choice == "8":
print("请输入卡号:")
card_number = input()
ticket_system.cancel(card_number)
elif choice == "9":
print("欢迎再次使用!")
break
else:
print("输入有误,请重新输入!")
```
以上程序使用了抽象类`BusCard`作为基类,定义了三个派生类`ElderCard`、`StudentCard`和`NormalCard`,分别表示老年卡、学生卡和普通卡。这三个派生类分别实现了基类的抽象方法`get_discount()`,返回不同的折扣比例,用于计算购票金额。
售票系统`TicketSystem`类中的各个方法实现了不同的操作,如购卡、退卡、充值、购票、余额查询、挂失、解挂和注销。在购票操作中,根据不同的卡片类型,计算出实际购票金额。在使用时,用户输入相应的操作编号以及需要的参数,程序会根据输入调用对应的方法进行操作。
希望这个示例程序可以帮助您完成公交车卡售票管理的编写。
阅读全文