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虚拟机中字节(bytes)的实现原理及源码剖析
在本篇文章当中主要给大家介绍在 cpython 内部,bytes 的实现原理、内存布局以及与 bytes 相关的一个比较重要的优化点—— bytes 的拼接,需要的可以参考一下2023-03-03Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
这篇文章主要介绍了Python元组 tuple的概念与基本操作,结合实例形式详细分析了Python元组的定义、创建、访问、计数、推导式等常见操作技巧与操作注意事项,需要的朋友可以参考下2019-10-10Python3实现的爬虫爬取数据并存入mysql数据库操作示例
这篇文章主要介绍了Python3实现的爬虫爬取数据并存入mysql数据库操作,涉及Python正则爬取数据及针对mysql数据库的存储操作相关实现技巧,需要的朋友可以参考下2018-06-06python中列表添加元素的几种方式(+、append()、extend())
本文主要介绍了python中列表添加元素的几种方式(+、append()、extend()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-08-08
最新评论