这个Python案例能模拟停车场管理系统吗

访客 python案例 1

本文目录导读:

  1. 模拟停车场管理系统 Python 代码
  2. 运行效果示例
  3. 这个案例为什么能模拟停车场管理系统?
  4. 可以扩展的优化方向(真实项目)

这是一个非常典型的停车场管理系统的Python基础案例,它通常用来教学面向对象编程(OOP)和基础数据结构(如列表、字典)。

下面我为你构造一个结构完整、可直接运行的模拟案例,并附上代码和功能说明。

核心功能:

  1. 车辆进入(分配车位、记录时间)
  2. 车辆离开(计算费用、释放车位)
  3. 查看当前车位状态
  4. 简单的命令行交互

模拟停车场管理系统 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_spacesavailable_spaces 变量控制
车辆识别 使用车牌号 (plate_number) 作为唯一标识
计时收费 使用 datetime 记录时间,按小时计费
防止重复入场 检查 plate_number 是否已在 parked_cars 字典中
满位拒绝 available_spaces == 0 时禁止进入
状态可视 show_status() 实时显示车位占用与剩余

可以扩展的优化方向(真实项目)

  1. 数据持久化:将数据保存到 SQLite / MySQL 数据库或 JSON 文件中。
  2. 分段计费:不同时段不同费率(如白天 8元/h,夜间 4元/h)。
  3. 车牌识别模拟:换成随机生成或从预设列表读取。
  4. GUI 界面:使用 tkinterPyQtFlask 做 Web 界面。
  5. 出口/入口闸机逻辑:多线程模拟并发进入。

这个案例确实能模拟一个基础的停车场管理系统的核心逻辑——车位管理、计时、计费、状态展示,它非常适合作为 Python 入门项目或面试中的代码考核题目。

标签: 模拟案例

抱歉,评论功能暂时关闭!