基于python和GUI的简单的停车场管理系统
时间: 2024-01-08 16:02:06 浏览: 32
一个简单的停车场管理系统需要考虑以下功能:
1. 记录车辆进出时间和停车位号
2. 统计停车场内剩余车位数
3. 查询某个时间段内的停车记录
4. 收费功能
下面是一个基于Python和Tkinter库实现的简单停车场管理系统的示例代码:
```python
import tkinter as tk
from datetime import datetime
class ParkingLot:
def __init__(self, capacity):
self.capacity = capacity
self.parking_lot = {i: None for i in range(1, capacity+1)}
self.records = []
def park(self, car_number):
for i in range(1, self.capacity+1):
if self.parking_lot[i] is None:
self.parking_lot[i] = (car_number, datetime.now())
self.records.append((car_number, i, datetime.now(), None))
return i
return None
def unpark(self, parking_spot):
if self.parking_lot[parking_spot] is not None:
car_number, entry_time = self.parking_lot[parking_spot]
exit_time = datetime.now()
self.parking_lot[parking_spot] = None
self.records[-1] = (car_number, parking_spot, entry_time, exit_time)
return exit_time - entry_time
return None
def get_empty_spots(self):
return [i for i, spot in self.parking_lot.items() if spot is None]
def get_records(self, start_time=None, end_time=None):
if start_time is None:
start_time = datetime.min
if end_time is None:
end_time = datetime.now()
return [record for record in self.records if start_time <= record[2] <= end_time]
class ParkingLotGUI:
def __init__(self, master, parking_lot):
self.master = master
self.parking_lot = parking_lot
self.car_number_var = tk.StringVar()
self.parking_spot_var = tk.StringVar(value='None')
self.entry_time_var = tk.StringVar(value='None')
self.exit_time_var = tk.StringVar(value='None')
self.duration_var = tk.StringVar(value='None')
self.empty_spots_var = tk.StringVar(value=str(self.parking_lot.get_empty_spots()))
self.records_var = tk.StringVar(value='')
self.car_number_label = tk.Label(master, text='Car Number:')
self.car_number_entry = tk.Entry(master, textvariable=self.car_number_var)
self.park_button = tk.Button(master, text='Park', command=self.park)
self.unpark_button = tk.Button(master, text='Unpark', command=self.unpark)
self.parking_spot_label = tk.Label(master, text='Parking Spot:')
self.parking_spot_entry = tk.Entry(master, state='readonly', textvariable=self.parking_spot_var)
self.entry_time_label = tk.Label(master, text='Entry Time:')
self.entry_time_entry = tk.Entry(master, state='readonly', textvariable=self.entry_time_var)
self.exit_time_label = tk.Label(master, text='Exit Time:')
self.exit_time_entry = tk.Entry(master, state='readonly', textvariable=self.exit_time_var)
self.duration_label = tk.Label(master, text='Duration:')
self.duration_entry = tk.Entry(master, state='readonly', textvariable=self.duration_var)
self.empty_spots_label = tk.Label(master, text='Empty Spots:')
self.empty_spots_entry = tk.Entry(master, state='readonly', textvariable=self.empty_spots_var)
self.records_label = tk.Label(master, text='Records:')
self.records_entry = tk.Entry(master, state='readonly', textvariable=self.records_var)
self.car_number_label.grid(row=0, column=0)
self.car_number_entry.grid(row=0, column=1)
self.park_button.grid(row=0, column=2)
self.unpark_button.grid(row=0, column=3)
self.parking_spot_label.grid(row=1, column=0)
self.parking_spot_entry.grid(row=1, column=1)
self.entry_time_label.grid(row=2, column=0)
self.entry_time_entry.grid(row=2, column=1)
self.exit_time_label.grid(row=3, column=0)
self.exit_time_entry.grid(row=3, column=1)
self.duration_label.grid(row=4, column=0)
self.duration_entry.grid(row=4, column=1)
self.empty_spots_label.grid(row=5, column=0)
self.empty_spots_entry.grid(row=5, column=1)
self.records_label.grid(row=6, column=0)
self.records_entry.grid(row=6, column=1, columnspan=3)
def park(self):
car_number = self.car_number_var.get()
parking_spot = self.parking_lot.park(car_number)
if parking_spot is not None:
self.parking_spot_var.set(str(parking_spot))
self.entry_time_var.set(str(datetime.now()))
self.exit_time_var.set('None')
self.duration_var.set('None')
self.empty_spots_var.set(str(self.parking_lot.get_empty_spots()))
self.update_records()
def unpark(self):
parking_spot = int(self.parking_spot_var.get())
duration = self.parking_lot.unpark(parking_spot)
if duration is not None:
self.exit_time_var.set(str(datetime.now()))
self.duration_var.set(str(duration))
self.empty_spots_var.set(str(self.parking_lot.get_empty_spots()))
self.update_records()
def update_records(self):
records = self.parking_lot.get_records()
self.records_var.set('\n'.join([f'{record[0]} parked at spot {record[1]} from {record[2]} to {record[3]}' for record in records]))
def main():
parking_lot = ParkingLot(10)
root = tk.Tk()
gui = ParkingLotGUI(root, parking_lot)
root.mainloop()
if __name__ == '__main__':
main()
```
在上面的代码中,我们定义了一个`ParkingLot`类来存储停车场的状态和记录,以及一个`ParkingLotGUI`类来实现GUI界面。在GUI界面中,我们使用`Entry`控件来显示当前停车场的状态和记录,使用`Button`控件来触发停车和取车操作。每次停车或取车操作都会更新相应的控件显示,并更新记录的显示。