用python写一个火车票购买系统,有成人与儿童票,可以查询余票和退票等
时间: 2024-03-01 10:53:59 浏览: 53
好的,下面是一个简单的实现示例:
```python
import random
# 火车票信息
tickets = [
{"train_no": "G1234", "from_station": "北京", "to_station": "上海", "start_time": "08:00", "end_time": "13:00", "price": 500, "adult_num": 100, "child_num": 50},
{"train_no": "G2345", "from_station": "上海", "to_station": "北京", "start_time": "14:00", "end_time": "19:00", "price": 500, "adult_num": 80, "child_num": 30},
{"train_no": "G3456", "from_station": "北京", "to_station": "广州", "start_time": "09:00", "end_time": "18:00", "price": 800, "adult_num": 120, "child_num": 60},
{"train_no": "G4567", "from_station": "广州", "to_station": "北京", "start_time": "10:00", "end_time": "19:00", "price": 800, "adult_num": 100, "child_num": 40},
]
# 用户信息
users = [
{"name": "张三", "id_card": "110101199001010001", "order_history": []},
{"name": "李四", "id_card": "110101199101010001", "order_history": []},
]
# 订单号
order_id = 1
# 查询余票
def query_tickets(from_station, to_station, date):
for ticket in tickets:
if ticket["from_station"] == from_station and ticket["to_station"] == to_station and ticket["start_time"].startswith(date):
print("车次:{},出发时间:{},到达时间:{},价格:{},成人票余票:{},儿童票余票:{}".format(ticket["train_no"], ticket["start_time"], ticket["end_time"], ticket["price"], ticket["adult_num"], ticket["child_num"]))
# 购买车票
def buy_ticket(train_no, from_station, to_station, date, adult_num, child_num, name, id_card):
global order_id
for ticket in tickets:
if ticket["train_no"] == train_no and ticket["from_station"] == from_station and ticket["to_station"] == to_station and ticket["start_time"].startswith(date):
if ticket["adult_num"] >= adult_num and ticket["child_num"] >= child_num:
ticket["adult_num"] -= adult_num
ticket["child_num"] -= child_num
order = {"order_id": order_id, "name": name, "id_card": id_card, "train_no": train_no, "from_station": from_station, "to_station": to_station, "date": date, "adult_num": adult_num, "child_num": child_num, "price": ticket["price"] * adult_num}
order_id += 1
for user in users:
if user["name"] == name and user["id_card"] == id_card:
user["order_history"].append(order)
break
else:
user = {"name": name, "id_card": id_card, "order_history": [order]}
users.append(user)
print("购票成功,订单号为:{}".format(order["order_id"]))
else:
print("余票不足,购票失败")
# 退票
def refund_ticket(order_id, name, id_card):
for user in users:
if user["name"] == name and user["id_card"] == id_card:
for order in user["order_history"]:
if order["order_id"] == order_id:
for ticket in tickets:
if ticket["train_no"] == order["train_no"] and ticket["from_station"] == order["from_station"] and ticket["to_station"] == order["to_station"] and ticket["start_time"].startswith(order["date"]):
ticket["adult_num"] += order["adult_num"]
ticket["child_num"] += order["child_num"]
user["order_history"].remove(order)
print("退票成功")
return
else:
print("订单不存在")
return
else:
print("用户不存在")
# 查询订单
def query_order(order_id=None, name=None, id_card=None):
if order_id:
for user in users:
for order in user["order_history"]:
if order["order_id"] == order_id:
print("订单号:{},姓名:{},身份证号:{},车次:{},出发地:{},目的地:{},日期:{},成人票数量:{},儿童票数量:{},价格:{}".format(order["order_id"], order["name"], order["id_card"], order["train_no"], order["from_station"], order["to_station"], order["date"], order["adult_num"], order["child_num"], order["price"]))
return
else:
print("订单不存在")
elif name and id_card:
for user in users:
if user["name"] == name and user["id_card"] == id_card:
for order in user["order_history"]:
print("订单号:{},姓名:{},身份证号:{},车次:{},出发地:{},目的地:{},日期:{},成人票数量:{},儿童票数量:{},价格:{}".format(order["order_id"], order["name"], order["id_card"], order["train_no"], order["from_station"], order["to_station"], order["date"], order["adult_num"], order["child_num"], order["price"]))
else:
print("该用户没有购买火车票")
else:
print("用户不存在")
# 测试
if __name__ == "__main__":
# 查询余票
query_tickets("北京", "上海", "2022-01-01")
# 购买车票
buy_ticket("G1234", "北京", "上海", "2022-01-01", 2, 1, "张三", "110101199001010001")
# 退票
refund_ticket(1, "张三", "110101199001010001")
# 查询订单
query_order(1)
query_order(name="张三", id_card="110101199001010001")
```
这个示例实现了查询余票、购买车票、退票、查询订单等功能。你可以根据需求进行修改和扩展。