用Python写一个简易的高铁购票系统
时间: 2023-11-30 21:02:38 浏览: 62
基于Python的火车购票软件设计.zip
5星 · 资源好评率100%
好的,我可以帮你简单介绍一下高铁购票系统的实现思路:
1. 首先需要设计一个用户界面,可以使用 Python 自带的 tkinter 模块实现。
2. 接着需要设计一个票务系统,包括车次、座位、票价等信息。可以使用 Python 的类或字典等数据结构来实现。
3. 用户可以通过界面选择起点和终点站以及日期等信息,系统会根据用户选择的信息查询可用车次,然后用户可以选择购买某个车次的座位。
4. 当用户选择座位并确认购买后,系统会扣除用户的账户余额,并将购票信息存储到数据库中。
具体的代码实现可以参考以下示例:
```python
import tkinter as tk
class TrainTicketSystem:
def __init__(self):
self.trains = {
"G1001": {
"start_station": "北京",
"end_station": "上海",
"start_time": "08:00",
"end_time": "13:00",
"seats": {
"一等座": {"price": 1000, "count": 20},
"二等座": {"price": 500, "count": 50}
}
},
"G1002": {
"start_station": "上海",
"end_station": "北京",
"start_time": "14:00",
"end_time": "19:00",
"seats": {
"一等座": {"price": 1000, "count": 30},
"二等座": {"price": 500, "count": 60}
}
}
}
self.users = {
"张三": {"balance": 2000, "tickets": []},
"李四": {"balance": 5000, "tickets": []}
}
def buy_ticket(self, user, train_no, seat_type):
train = self.trains[train_no]
seat = train["seats"][seat_type]
if seat["count"] <= 0:
return "该座位已售罄"
if user["balance"] < seat["price"]:
return "账户余额不足"
user["balance"] -= seat["price"]
user["tickets"].append({
"train_no": train_no,
"start_station": train["start_station"],
"end_station": train["end_station"],
"start_time": train["start_time"],
"end_time": train["end_time"],
"seat_type": seat_type,
"price": seat["price"]
})
seat["count"] -= 1
return "购票成功"
class GUI:
def __init__(self, system):
self.system = system
self.root = tk.Tk()
self.start_station_var = tk.StringVar()
self.end_station_var = tk.StringVar()
self.date_var = tk.StringVar()
self.train_listbox = tk.Listbox(self.root)
self.seat_type_var = tk.StringVar()
self.buy_result_label = tk.Label(self.root, text="", fg="red")
self.init_gui()
def init_gui(self):
self.root.title("高铁购票系统")
tk.Label(self.root, text="起点站:").grid(row=0, column=0)
tk.Entry(self.root, textvariable=self.start_station_var).grid(row=0, column=1)
tk.Label(self.root, text="终点站:").grid(row=1, column=0)
tk.Entry(self.root, textvariable=self.end_station_var).grid(row=1, column=1)
tk.Label(self.root, text="日期:").grid(row=2, column=0)
tk.Entry(self.root, textvariable=self.date_var).grid(row=2, column=1)
tk.Button(self.root, text="查询车次", command=self.query_trains).grid(row=3, column=0, columnspan=2)
tk.Label(self.root, text="车次列表:").grid(row=4, column=0)
self.train_listbox.grid(row=4, column=1)
tk.Label(self.root, text="座位类型:").grid(row=5, column=0)
tk.OptionMenu(self.root, self.seat_type_var, "").grid(row=5, column=1)
tk.Button(self.root, text="购买", command=self.buy_ticket).grid(row=6, column=0)
self.buy_result_label.grid(row=6, column=1)
def query_trains(self):
start_station = self.start_station_var.get()
end_station = self.end_station_var.get()
date = self.date_var.get()
self.train_listbox.delete(0, tk.END)
for train_no, train in self.system.trains.items():
if train["start_station"] == start_station and train["end_station"] == end_station:
self.train_listbox.insert(tk.END, train_no)
def buy_ticket(self):
user = self.system.users["张三"]
train_no = self.train_listbox.get(tk.ACTIVE)
seat_type = self.seat_type_var.get()
result = self.system.buy_ticket(user, train_no, seat_type)
self.buy_result_label.config(text=result)
if __name__ == "__main__":
system = TrainTicketSystem()
gui = GUI(system)
gui.root.mainloop()
```
当你运行以上代码时,会弹出一个窗口,你可以在窗口中输入起点站、终点站和日期,然后点击“查询车次”按钮,系统会显示可用车次的列表。你可以在列表中选择一个车次,并选择座位类型,然后点击“购买”按钮,系统会尝试为你购买座位,并显示购票结果。以上仅是一个简单的示例,实际的高铁购票系统还需要考虑更多的细节和安全问题,例如用户身份验证、支付安全、数据加密等等。
阅读全文