本文目录导读:
这是一个非常典型的停车场管理系统的Python基础案例,它通常用来教学面向对象编程(OOP)和基础数据结构(如列表、字典)。
下面我为你构造一个结构完整、可直接运行的模拟案例,并附上代码和功能说明。
核心功能:
- 车辆进入(分配车位、记录时间)
- 车辆离开(计算费用、释放车位)
- 查看当前车位状态
- 简单的命令行交互
模拟停车场管理系统 Python 代码
import time
from datetime import datetime
class ParkingLot:
"""停车场类"""
def __init__(self, total_spaces=20, rate_per_hour=5):
self.total_spaces = total_spaces # 总车位数
self.rate_per_hour = rate_per_hour # 每小时收费(元)
self.available_spaces = total_spaces # 剩余车位数
self.parked_cars = {} # 存储已停放车辆 {车牌号: 入场时间}
def car_entry(self, plate_number):
"""车辆进入"""
if self.available_spaces <= 0:
print(f"❌ 停车场已满,车辆 {plate_number} 无法进入。")
return False
if plate_number in self.parked_cars:
print(f"⚠️ 车辆 {plate_number} 已在停车场内。")
return False
# 记录入场时间
entry_time = datetime.now()
self.parked_cars[plate_number] = entry_time
self.available_spaces -= 1
print(f"✅ 车辆 {plate_number} 进入,入场时间:{entry_time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f" 剩余车位:{self.available_spaces}/{self.total_spaces}")
return True
def car_exit(self, plate_number):
"""车辆离开"""
if plate_number not in self.parked_cars:
print(f"❌ 车辆 {plate_number} 未在停车场内。")
return False
entry_time = self.parked_cars[plate_number]
exit_time = datetime.now()
# 计算停留时间(小时,向上取整)
duration = (exit_time - entry_time).total_seconds() / 3600
hours_parked = int(duration) + (1 if duration > int(duration) else 0)
# 计算费用
fee = hours_parked * self.rate_per_hour
# 释放资源
del self.parked_cars[plate_number]
self.available_spaces += 1
print(f"🚗 车辆 {plate_number} 离开。")
print(f" 入场:{entry_time.strftime('%H:%M:%S')} → 离开:{exit_time.strftime('%H:%M:%S')}")
print(f" 停留:{duration:.2f} 小时(按 {hours_parked} 小时计费)")
print(f" 费用:{fee:.2f} 元")
print(f" 剩余车位:{self.available_spaces}/{self.total_spaces}")
return True
def show_status(self):
"""显示当前停车场状态"""
print("\n" + "="*40)
print(f"🅿️ 停车场状态({datetime.now().strftime('%H:%M:%S')})")
print(f" 总车位:{self.total_spaces}")
print(f" 已用:{len(self.parked_cars)}")
print(f" 剩余:{self.available_spaces}")
if self.parked_cars:
print("\n 当前停放车辆:")
for plate, entry_time in self.parked_cars.items():
print(f" • {plate}(入场:{entry_time.strftime('%H:%M:%S')})")
else:
print("\n 停车场目前为空。")
print("="*40)
def main():
"""主交互逻辑"""
parking_lot = ParkingLot(total_spaces=5, rate_per_hour=6) # 小规模测试
while True:
print("\n" + "*"*30)
print("停车场管理系统")
print("1. 车辆进入")
print("2. 车辆离开")
print("3. 查看状态")
print("4. 退出系统")
choice = input("请选择操作 (1-4): ").strip()
if choice == '1':
plate = input("请输入车牌号: ").strip().upper()
parking_lot.car_entry(plate)
elif choice == '2':
plate = input("请输入车牌号: ").strip().upper()
parking_lot.car_exit(plate)
elif choice == '3':
parking_lot.show_status()
elif choice == '4':
print("👋 感谢使用停车场系统,再见!")
break
else:
print("❌ 无效选择,请重新输入。")
if __name__ == "__main__":
main()
运行效果示例
******************************
停车场管理系统
1. 车辆进入
2. 车辆离开
3. 查看状态
4. 退出系统
请选择操作 (1-4): 1
请输入车牌号: 京A88888
✅ 车辆 京A88888 进入,入场时间:2025-03-30 14:25:30
剩余车位:4/5
请选择操作 (1-4): 1
请输入车牌号: 沪B66666
✅ 车辆 沪B66666 进入,入场时间:2025-03-30 14:25:33
剩余车位:3/5
请选择操作 (1-4): 3
========================================
🅿️ 停车场状态(14:25:35)
总车位:5
已用:2
剩余:3
当前停放车辆:
• 京A88888(入场:14:25:30)
• 沪B66666(入场:14:25:33)
========================================
请选择操作 (1-4): 2
请输入车牌号: 京A88888
🚗 车辆 京A88888 离开。
入场:14:25:30 → 离开:14:30:02
停留:0.08 小时(按 1 小时计费)
费用:6.00 元
剩余车位:4/5
这个案例为什么能模拟停车场管理系统?
| 真实需求 | 代码对应实现 |
|---|---|
| 车位有限 | total_spaces 与 available_spaces 变量控制 |
| 车辆识别 | 使用车牌号 (plate_number) 作为唯一标识 |
| 计时收费 | 使用 datetime 记录时间,按小时计费 |
| 防止重复入场 | 检查 plate_number 是否已在 parked_cars 字典中 |
| 满位拒绝 | 当 available_spaces == 0 时禁止进入 |
| 状态可视 | show_status() 实时显示车位占用与剩余 |
可以扩展的优化方向(真实项目)
- 数据持久化:将数据保存到 SQLite / MySQL 数据库或 JSON 文件中。
- 分段计费:不同时段不同费率(如白天 8元/h,夜间 4元/h)。
- 车牌识别模拟:换成随机生成或从预设列表读取。
- GUI 界面:使用
tkinter、PyQt或Flask做 Web 界面。 - 出口/入口闸机逻辑:多线程模拟并发进入。
这个案例确实能模拟一个基础的停车场管理系统的核心逻辑——车位管理、计时、计费、状态展示,它非常适合作为 Python 入门项目或面试中的代码考核题目。
标签: 模拟案例