好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python实现停车场管理系统

本文实例为大家分享了python实现停车场管理系统的具体代码,供大家参考,具体内容如下

一、需求

1、为一个车位数量固定的停车场,设计一个管理系统;
2、停车信息包括:编号、车牌号(若存在)、类型、车位编号、使用日期、入场时间、单价、费用、经手人
3、停车信息存储在数据文件中,程序至少实现功能:浏览、查询、入场、出场、导出、计费、系统菜单
4、按面向对象程序设计方法进行类的定义:选择合适的数据存储结构,并定义相应的数据元素类,选择合理的操作方法定义相应的算法实现类

二、代码

本系统包含4部分(4个py文件,剩余为测试数据文件),组成放在一个文件夹组成一个模块,如下图。

2.1 初始化模块__init__.py

"""
__init__.py 模块的作用:在导入包的时候自动执行这里的代码,进行初始化工作
"""
# 允许被 from package_name import * 导入的模块
__all__ = ['ParkingManagementSystem', 'Car']

2.2 主程序模块main.py

# coding = utf-8

from ParkingManagementSystem import *
from Car import *


def main():
? ? # 创建停车信息管理系统对象
? ? p = ParkingManagementSystem()
? ? # 创建一个停车对象
? ? car = Car()
? ? while True:
? ? ? ? print("")
? ? ? ? print("******************* 欢迎进入:停车场信息管理系统 *******************")
? ? ? ? print("------------------------- 1.浏览所有信息 ------------------------")
? ? ? ? print("------------------------- 2.查询车辆信息 ------------------------")
? ? ? ? print("------------------------- 3.入场车辆录入 ------------------------")
? ? ? ? print("------------------------- 4.出场车辆删除 ------------------------")
? ? ? ? print("------------------------- 5.退出管理系统 ------------------------")
? ? ? ? try:
? ? ? ? ? ? # 接收输入指令
? ? ? ? ? ? cmd = int(input("请输入指令数字:"))
? ? ? ? ? ? # 1.浏览所有信息
? ? ? ? ? ? if cmd == 1:
? ? ? ? ? ? ? ? p.show_all_information()
? ? ? ? ? ? # 2.查询车辆信息
? ? ? ? ? ? elif cmd == 2:
? ? ? ? ? ? ? ? while True:
? ? ? ? ? ? ? ? ? ? print("------ 1.按车牌号查找 ------")
? ? ? ? ? ? ? ? ? ? print("------ 2.按车类型查找 ------")
? ? ? ? ? ? ? ? ? ? print("------ 3.按使用日期查找 -----")
? ? ? ? ? ? ? ? ? ? print("------ 4.按经手人查找 ------")
? ? ? ? ? ? ? ? ? ? print("------ 5.查询历史记录 ------")
? ? ? ? ? ? ? ? ? ? print("------ 6.返回上级菜单 ------")
? ? ? ? ? ? ? ? ? ? query = int(input("请输入指令数字:"))
? ? ? ? ? ? ? ? ? ? # 1.按车牌号查找
? ? ? ? ? ? ? ? ? ? if query == 1:
? ? ? ? ? ? ? ? ? ? ? ? query_results = p.query_by_car_number()
? ? ? ? ? ? ? ? ? ? ? ? # 判定查询结果是否为空(False),是则不保存
? ? ? ? ? ? ? ? ? ? ? ? if query_results:
? ? ? ? ? ? ? ? ? ? ? ? ? ? decide = input("是否需要保存查询结果(输入:yes/no):")
? ? ? ? ? ? ? ? ? ? ? ? ? ? if decide == "yes":
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p.save_query_results_to_file(query_results)
? ? ? ? ? ? ? ? ? ? # 2.按车类型查找
? ? ? ? ? ? ? ? ? ? elif query == 2:
? ? ? ? ? ? ? ? ? ? ? ? query_results = p.query_by_car_type()
? ? ? ? ? ? ? ? ? ? ? ? # 判定查询结果是否为空(False),是则不保存
? ? ? ? ? ? ? ? ? ? ? ? if query_results:
? ? ? ? ? ? ? ? ? ? ? ? ? ? decide = input("是否需要保存查询结果(输入:yes/no):")
? ? ? ? ? ? ? ? ? ? ? ? ? ? if decide == "yes":

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p.save_query_results_to_file(query_results)
? ? ? ? ? ? ? ? ? ? # 3.按使用日期查找
? ? ? ? ? ? ? ? ? ? elif query == 3:
? ? ? ? ? ? ? ? ? ? ? ? query_results = p.query_by_date()
? ? ? ? ? ? ? ? ? ? ? ? # 判定查询结果是否为空(False),是则不保存
? ? ? ? ? ? ? ? ? ? ? ? if query_results:
? ? ? ? ? ? ? ? ? ? ? ? ? ? decide = input("是否需要保存查询结果(输入:yes/no):")
? ? ? ? ? ? ? ? ? ? ? ? ? ? if decide == "yes":
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p.save_query_results_to_file(query_results)
? ? ? ? ? ? ? ? ? ? # 4.按经手人查找
? ? ? ? ? ? ? ? ? ? elif query == 4:
? ? ? ? ? ? ? ? ? ? ? ? query_results = p.query_by_handler()
? ? ? ? ? ? ? ? ? ? ? ? # 判定查询结果是否为空(False),是则不保存
? ? ? ? ? ? ? ? ? ? ? ? if query_results:
? ? ? ? ? ? ? ? ? ? ? ? ? ? decide = input("是否需要保存查询结果(输入:yes/no):")
? ? ? ? ? ? ? ? ? ? ? ? ? ? if decide == "yes":
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p.save_query_results_to_file(query_results)
? ? ? ? ? ? ? ? ? ? # 5.查询历史记录
? ? ? ? ? ? ? ? ? ? elif query == 5:
? ? ? ? ? ? ? ? ? ? ? ? p.query_history_results()
? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? # 3.录入车辆信息
? ? ? ? ? ? elif cmd == 3:
? ? ? ? ? ? ? ? # 接收停车车辆信息
? ? ? ? ? ? ? ? parking_info = car.get_parking_info()
? ? ? ? ? ? ? ? p.parking(parking_info)
? ? ? ? ? ? # 4.删除车辆信息
? ? ? ? ? ? elif cmd == 4:
? ? ? ? ? ? ? ? p.driving_out()
? ? ? ? ? ? # 5.退出管理系统
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? # 保存停车信息的最大编号 id
? ? ? ? ? ? ? ? car.save_id_to_file()
? ? ? ? ? ? ? ? print("感谢使用停车场管理系统,再见!")
? ? ? ? ? ? ? ? break
? ? ? ? except Exception as result:
? ? ? ? ? ? # 保存停车信息的最大编号 id
? ? ? ? ? ? car.save_id_to_file()
? ? ? ? ? ? # 保存停车信息
? ? ? ? ? ? p.save_to_file()
? ? ? ? ? ? print("感谢使用停车场管理系统,再见!")
? ? ? ? ? ? break


if __name__ == "__main__":
? ? main()

2.3 停车管理模块ParkingManagementSystem.py

# coding = utf-8
# 模块中的__all__属性:可以规定 模块中 from module_name import * 只能够导入的一些类、变量、函数名
__all__ = ['ParkingManagementSystem']
import time


class ParkingManagementSystem(object):
? ? """算法实现类:停车场信息管理系统"""

? ? def __init__(self):
? ? ? ? """对停车信息进行初始化"""
? ? ? ? # 测试时使用
? ? ? ? print("ParkingManagementSystem的__init__函数被调用")

? ? ? ? # 车位编号存放列表
? ? ? ? self.car_stall = []
? ? ? ? self.truck_stall = []
? ? ? ? # 所有停车信息存放列表
? ? ? ? self.total_info = []

? ? ? ? # 读取停车场数据
? ? ? ? try:
? ? ? ? ? ? with open("parking_data.txt", "r") as file:
? ? ? ? ? ? ? ? for line in file.readlines():
? ? ? ? ? ? ? ? ? ? # 将字符串转化为字典,遇到空行时跳过,防止eval()函数转化空行或者空字符时报错
? ? ? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? ? ? info_dict = eval(line)
? ? ? ? ? ? ? ? ? ? ? ? self.total_info.append(info_dict)
? ? ? ? ? ? ? ? ? ? ? ? if info_dict["car_type"] == "car":
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.car_stall.append(info_dict["p_number"])
? ? ? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.truck_stall.append(info_dict["p_number"])
? ? ? ? ? ? ? ? ? ? except Exception as result:
? ? ? ? ? ? ? ? ? ? ? ? continue
? ? ? ? except Exception as result:
? ? ? ? ? ? print("停车信息数据文件不存在!")
? ? ? ? # 测试时使用
? ? ? ? # print(self.car_stall)
? ? ? ? # print(self.truck_stall)
? ? ? ? # print(self.total_info)

? ? def parking(self, parking_info):
? ? ? ? """入场停车:传入停车信息,在空的车位中增加车辆信息,更新数据文件"""
? ? ? ? # 判断传入停车信息是否为 None
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? passs

? ? def show_all_information(self):
? ? ? ? """输出所有停车场信息,按车位使用情况分类,同一分类中按编号升序排序"""
? ? ? ? # 初始化刷新数据
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? pass

? ? def query_by_car_number(self):
? ? ? ? """按车牌号查找停车信息"""
? ? ? ? # 接收车牌编号
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? pass

? ? def query_by_car_type(self):
? ? ? ? """按车类型查找停车信息"""
? ? ? ? # 接受车类型
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ?pass

? ? def query_by_date(self):
? ? ? ? """按使用日期查找停车信息"""
? ? ? ? # 接收查询日期
? ? ? ? date = input("请输入查询日期(格式参考:1998-06-06):")
? ? ? ? # 创建列表保存查询结果
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ?pass

? ? def query_by_handler(self):
? ? ? ? """按经手人查找停车信息"""
? ? ? ? # 接收经手人姓名
? ? ? ? handler = input("请输入经手人姓名:")
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? pass

? ? def query_history_results(self):
? ? ? ? """查询停车场历史记录"""
? ? ? ? # 查询输入格式化
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? print("id ?car_type ?p_number ?car_number ? handler ? price ? ?cost ? ? entrance_time ? ? ? ? ? ?exit_time")
? ? ? ??

? ? def driving_out(self):
? ? ? ? """出场:删除对应车位的车辆信息,更新数据文件"""
? ? ? ? # 接收出场时间
? ? ? ? exit_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
? ? ? ? # 接收车牌号
? ? ? ? car_number = input("请输入出场车辆车牌号(示例:京A88888):")
? ? ? ? # 遍历总停车信息列表,找到该条数据并将其移除列表
? ? ? ? pass

? ? def charging(self, info_dict):
? ? ? ? """计费: 传入停车信息,按小时计费"""
? ? ? ? # 接收车辆停车信息
? ? ? ? # 将时间由字符串格式转化为数字格式,以秒为单位
? ? ? ? exit_time = time.mktime(time.strptime(info_dict["exit_time"], "%Y-%m-%d %H:%M:%S"))
? ? ? ? entrance_time = time.mktime(time.strptime(info_dict["entrance_time"], "%Y-%m-%d %H:%M:%S"))
? ? ? ? # 计算停车时间,单位转化为小时
? ? ? ? pass

? ? def save_to_file(self):
? ? ? ? """将停车数据保存到文件"""
? ? ? ? # 打开数据文件,保存数据
? ? ? ? with open("parking_data.txt", "w") as file:
? ? ? ? ? ? for info_dict in self.total_info:
? ? ? ? ? ? ? ? # 将字典转化为字符串保存
? ? ? ? ? ? ? ? file.write(str(info_dict))
? ? ? ? ? ? ? ? file.write("\n")

? ? def save_history_to_file(self, info_dict):
? ? ? ? """将已完成出场停车数据保存到文件"""
? ? ? ? # 打开数据文件,保存数据
? ? ? ? with open("history_data.txt", "a") as file:
? ? ? ? ? ? # 将字典转化为字符串保存
? ? ? ? ? ? file.write(str(info_dict))
? ? ? ? ? ? file.write("\n")

? ? def save_query_results_to_file(self, query_results):
? ? ? ? """将查询结果保存到指定数据文件"""
? ? ? ? # 接收输入文件名
? ? ? ? file_name = input("请输入要保存数据的文件名(格式:xxx.txt ):")
? ? ? ? with open(file_name, "a") as file:
? ? ? ? ? ? # 将数据转化为字符串保存
? ? ? ? ? ? file.write(str(query_results))
? ? ? ? ? ? file.write("\n")
? ? ? ? print("查询结果保存成功,文件名为:%s" % file_name)

? ? def print_func(self, info_dict, query_results):
? ? ? ? """格式化打印输出查询结果"""
? ? ? ? # 需要完整代码请在文章文章底部添加微信,付费咨询
? ? ? ? pass

2.4 车元素模块Car.py

# coding = utf-8
# 模块中的__all__属性:可以规定 模块中 from module_name import * 只能够导入的一些类、变量、函数名
__all__ = ['Car']
import time
from ParkingManagementSystem import *


class Car(ParkingManagementSystem):
? ? """数据元素类:定义一个关于车的类"""

? ? def __init__(self):
? ? ? ? """对车的属性进行初始化"""
? ? ? ? # 测试时使用
? ? ? ? print("Car 中__init__调用成功!")
? ? ? ? # 设定初始出场时间和消费金额为空
? ? ? ? self.exit_time = None
? ? ? ? self.cost = None
? ? ? ? # 初始编号 id 为 1
? ? ? ? self.id = 1
? ? ? ? # 读取文件中编号
? ? ? ? try:
? ? ? ? ? ? with open("count_id.txt", "r") as file:
? ? ? ? ? ? ? ? self.id = int(file.read())
? ? ? ? except Exception as result:
? ? ? ? ? ? pass
? ? ? ? # 测试时使用
? ? ? ? print(self.id)

? ? def get_parking_info(self):
? ? ? ? """获取车辆停车信息"""
? ? ? ? # 调用父类中的属性
? ? ? ? ParkingManagementSystem.__init__(self)
? ? ? ? car_type = input("请输入车类型(car 或 truck):")
? ? ? ? # 判断车位是否已满,如已满则提示客户去其他停车场,如未满则分配一个车位给客户
? ? ? ? if car_type == "car":
? ? ? ? ? ? # 如车位已满,提醒客户去其他停车场,car类型的车位设定为100个
? ? ? ? ? ? if len(self.car_stall) >= 100:
? ? ? ? ? ? ? ? print("小汽车车位已满,请去其他停车场。")
? ? ? ? ? ? ? ? return
? ? ? ? ? ? # 如还有车位,则分配一个车位给客户
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? # 不同车型不同价位
? ? ? ? ? ? ? ? price = 10
? ? ? ? ? ? ? ? # 车位编号为:1-100
? ? ? ? ? ? ? ? for i in range(100):
? ? ? ? ? ? ? ? ? ? # 分配空着的车位编号
? ? ? ? ? ? ? ? ? ? if i + 1 not in self.car_stall:
? ? ? ? ? ? ? ? ? ? ? ? p_number = i + 1
? ? ? ? ? ? ? ? ? ? ? ? self.car_stall.append(p_number)
? ? ? ? ? ? ? ? ? ? ? ? print(self.car_stall)
? ? ? ? ? ? ? ? ? ? ? ? break
? ? ? ? elif car_type == "truck":
? ? ? ? ? ? # 如车位已满,提醒客户去其他停车场,truck类型的车位设定为50个
? ? ? ? ? ? if len(self.truck_stall) >= 50:
? ? ? ? ? ? ? ? print("货车车位已满,请去其他停车场。")
? ? ? ? ? ? ? ? return
? ? ? ? ? ? # 如还有车位,则分配一个车位给客户
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? # 不同车型不同价位
? ? ? ? ? ? ? ? price = 20
? ? ? ? ? ? ? ? # 车位编号为:101-150
? ? ? ? ? ? ? ? for i in range(100, 150):
? ? ? ? ? ? ? ? ? ? # 分配空着的车位编号
? ? ? ? ? ? ? ? ? ? if i + 1 not in self.truck_stall:
? ? ? ? ? ? ? ? ? ? ? ? p_number = i + 1
? ? ? ? ? ? ? ? ? ? ? ? self.truck_stall.append(p_number)
? ? ? ? ? ? ? ? ? ? ? ? print(self.truck_stall)
? ? ? ? ? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print("本停车场没有适合该车型的停车位,请重新输入!")
? ? ? ? ? ? return
? ? ? ? # 接收车位编号
? ? ? ? car_number = input("请输入车牌号(示例:京A88888):")
? ? ? ? # 接收经手人姓名
? ? ? ? handler = input("请输入经手人姓名:")
? ? ? ? # 接收入场时间
? ? ? ? entrance_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
? ? ? ? # 接收使用日期
? ? ? ? date = time.strftime("%Y-%m-%d", time.localtime())
? ? ? ? # 编号 id 自动增长
? ? ? ? self.id += 1
? ? ? ? # 保存该条停车信息到字典
? ? ? ? parking_info = {
? ? ? ? ? ? "id": self.id,
? ? ? ? ? ? "car_type": car_type,
? ? ? ? ? ? "car_number": car_number,
? ? ? ? ? ? "handler": handler,
? ? ? ? ? ? "p_number": p_number,
? ? ? ? ? ? "date": date,
? ? ? ? ? ? "entrance_time": entrance_time,
? ? ? ? ? ? "exit_time": self.exit_time,
? ? ? ? ? ? "price": price,
? ? ? ? ? ? "cost": self.cost
? ? ? ? }
? ? ? ? print(parking_info)
? ? ? ? # 返回车辆停车信息
? ? ? ? return parking_info

? ? def save_id_to_file(self):
? ? ? ? """保存停车信息的最大编号 id ,作为下次运行id增长的基础"""
? ? ? ? with open("count_id.txt", "w") as file:
? ? ? ? ? ? file.write(str(self.id))

三、运行测试

3.1 浏览所有信息

3.2 查询车辆信息

3.2.1 按车牌号查找

3.2.2 按车类型查找

3.2.3 按使用日期查找

3.2.4 按经手人查找

3.2.5 查询历史记录

3.3 入场车辆录入

3.4 出场车辆删除

3.5 退出管理系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

查看更多关于python实现停车场管理系统的详细内容...

  阅读:48次