Python实现停车场管理系统
1. 为一个车位数量固定的停车场,设计一个管理系统;2. 停车信息包括:编号、车牌号(若存在)、类型、车位编号、使用日期、入场时间、单价、费用、经手人3. 停车信息存储在数据文件中,程序至少实现功能:浏览、查询、入场、出场、导出、计费、系统菜单4. 按面向对象程序设计方法进行类的定义:选择合适的数据存储结构,并定义相应的数据元素类,选择合理的操作方法定义相应的算法实现类
·
Python实现简易停车场管理系统
一、需求
- 为一个车位数量固定的停车场,设计一个管理系统;
- 停车信息包括:编号、车牌号(若存在)、类型、车位编号、使用日期、入场时间、单价、费用、经手人
- 停车信息存储在数据文件中,程序至少实现功能:浏览、查询、入场、出场、导出、计费、系统菜单
- 按面向对象程序设计方法进行类的定义:选择合适的数据存储结构,并定义相应的数据元素类,选择合理的操作方法定义相应的算法实现类
二、代码
本系统包含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 退出管理系统
更多推荐
已为社区贡献5条内容
所有评论(0)