<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了python實現停車場管理系統的具體程式碼,供大家參考,具體內容如下
1、為一個車位數量固定的停車場,設計一個管理系統;
2、停車資訊包括:編號、車牌號(若存在)、型別、車位編號、使用日期、入場時間、單價、費用、經手人
3、停車資訊儲存在資料檔案中,程式至少實現功能:瀏覽、查詢、入場、出場、匯出、計費、系統選單
4、按物件導向程式設計方法進行類的定義:選擇合適的資料儲存結構,並定義相應的資料元素類,選擇合理的操作方法定義相應的演演算法實現類
本系統包含4部分(4個py檔案,剩餘為測試資料檔案),組成放在一個資料夾組成一個模組,如下圖。
""" __init__.py 模組的作用:在匯入包的時候自動執行這裡的程式碼,進行初始化工作 """ # 允許被 from package_name import * 匯入的模組 __all__ = ['ParkingManagementSystem', 'Car']
# 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()
# 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
# 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.2.1 按車牌號查詢
3.2.2 按車型別查詢
3.2.3 按使用日期查詢
3.2.4 按經手人查詢
3.2.5 查詢歷史記錄
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45