基于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`控件来触发停车和取车操作。每次停车或取车操作都会更新相应的控件显示,并更新记录的显示。

相关推荐

最新推荐

recommend-type

Python实现GUI学生信息管理系统

主要介绍了Python实现GUI学生信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Python3实现的简单工资管理系统示例

主要介绍了Python3实现的简单工资管理系统,涉及Python文件读写、数据遍历、判断等相关操作技巧,需要的朋友可以参考下
recommend-type

使用Python实现 学生学籍管理系统

主要介绍了使用Python实现 学生学籍管理系统,代码大致分为五个函数组成,具体内容详情本文给大家介绍的非常详细,需要的朋友可以参考下
recommend-type

python实现超市商品销售管理系统

主要为大家详细介绍了python实现超市商品销售管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

python学生信息管理系统实现代码

主要介绍了python学生信息管理系统的实现代码,代码简单,复制即可使用,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB图像处理算法宝典:从理论到实战

![MATLAB图像处理算法宝典:从理论到实战](https://img-blog.csdnimg.cn/20200717112736401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1emhhbzk5MDE=,size_16,color_FFFFFF,t_70) # 1. MATLAB图像处理基础理论 MATLAB图像处理是一种利用MATLAB编程语言进行图像处理的强大工具。它提供了丰富的函数和工具箱,用于图像获取、增强、分
recommend-type

matlab中1/x的非线性规划

在MATLAB中,可以使用非线性规划函数(`fmincon`)来优化一个包含1/x的非线性目标函数。下面是一个简单的例子: ```matlab % 定义目标函数 fun = @(x) 1/x; % 定义约束函数(这里没有约束) nonlcon = []; % 定义初始点 x0 = 1; % 定义优化选项 options = optimoptions('fmincon', 'Display', 'iter'); % 进行非线性规划 [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon, options); ``` 在
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。