商品管理系統需求分析
商品管理系統主要是針對商品的增刪改查操作,商品主要包含ID、名稱和價格三個屬性資訊,因為要實現增刪改查,因此商品資訊使用字典型別的容器來儲存,而多個商品的儲存就需要使用到列表型別的容器,因此商品資訊列表就是一個列表套用多個字典。面向過程是一種程式設計思想,其特點就是以功能為中心,將實現的功能封裝成一個個的函式。而商品管理系統主要是增刪改查操作,粗粒度劃分為增加商品、刪除商品、修改商品、查詢商品四個函式,而增加商品、刪除商品和修改商品之前都需要呼叫查詢商品,判斷操作的商品是否已經存在。除此以外,關於商品的函式還可以實現商品列表,即展示列表容器中的所有商品,以及清空商品列表。增加商品、修改商品都需要輸入商品的屬性資訊,因此可以封裝一個輸入商品函式,用於讀取鍵盤輸入的函式資訊並返回多個引數(底層是一個元祖)
因為程式是基於終端實現的,因此還需要有一個顯示選單的功能,然後讓使用者輸入選單的選項來執行對應的商品管理功能。當用戶輸入指定的選項後,為了提高系統的容錯性,還需要實現引數校驗的方法來校驗使用者輸入的選項是否符合要求。
而上述這些函式都應該被一個主函式呼叫,而且商品管理的功能是可以重複使用,此時可以使用死迴圈,然後提供一個退出系統的功能來結束死迴圈。
商品管理系統核心功能實現在實現商品管理核心功能之前,需要定義一個全域性變數用來儲存商品資訊列表
# 定義商品列表容器儲存商品資訊,預設初始化列表為空product_list = []
實現商品查詢功能
def search_product_by_id(product_id): """ 根據ID查詢商品資訊 :param product_id:產品ID :return:指定ID的商品資訊 """ if product_list: # 遍歷每個商品 for product_dict in product_list: # 獲取商品列表中的商品id屬性值 list_product_id = product_dict.get("id") if product_id == list_product_id: return product_dict else: print(f"查詢的商品編號為{product_id}不存在商品列表中")
商品查詢功能測試
在測試商品查詢功能之前,需要初始化產品列表的資料,該方法存放在pms_test.py測試原始檔中
def init_product_list(): """ 初始化商品列表 :return: """ iphone12 = {"id": "1", "name": "iphone12pro max", "price": 12000.00} huawei_mate40_pro_plus = {"id": "2", "name": "huawei_mate40_pro_plus", "price": 8999.00} product_list.append(iphone12) product_list.append(huawei_mate40_pro_plus)
然後在測試原始檔中呼叫方法即可
程式執行結果
實現修改商品和新增商品共用的從鍵盤輸入商品資訊並返回的方法python的return可以返回多個值
def input_product_info(): """ 獲取使用者輸入的商品資訊並返回 :return: """ product_id = input("請輸入商品ID:") product_name = input("請輸入商品名稱:") product_price = input("請輸入商品價格:") return product_id, product_name, product_price
測試從鍵盤輸入商品資訊並返回的方法,該方法返回的型別實際上是元祖型別
實現商品的新增功能def add_product(product_tuple): """ 新增商品 新增商品就是向列表中新增一個字典 :param product_tuple: :return: """ # 建立一個字典儲存產品資訊 product_dict = {} # 新增產品資訊 # 透過字典的特性,如果key不存在則會新增元素,如果key存在則會修改元素 product_dict["id"] = product_tuple[0] product_dict["name"] = product_tuple[1] product_dict["price"] = product_tuple[2] # 將產品資訊新增到列表中 product_list.append(product_dict) if product_list != []: print("新增商品成功") else: print("新增商品失敗")
測試商品新增功能測試商品新增功能之前首先需要呼叫從鍵盤輸入商品資訊並返回的方法
實現商品刪除功能def del_product(del_product_id): """ 根據id刪除商品 :param del_product_id: :return: """ delete_product_dict = search_product_by_id(del_product_id) if delete_product_dict: product_list.remove(delete_product_dict) print(f"刪除商品{delete_product_dict['name']} 成功") else: print(f"商品ID為{id}的商品不存在")
測試商品刪除功能
首先測試商品列表中沒有商品的情況
程式執行結果
然後測試商品列表中有商品的情況
實現商品修改功能商品修改時只能夠支援商品名稱和價格的修改
def modify_product(): """ 修改商品資訊 :return: """ product_tuple = input_product_info() modify_product_dict = search_product_by_id(product_tuple[0]) if modify_product_dict: modify_product_dict["name"] = product_tuple[1] modify_product_dict["price"] = product_tuple[2] print("修改成功")
測試商品修改方法
程式執行結果
實現清空商品列表功能def clear_product_list(): """ 清空商品列表 :return: """ product_list.clear() if not product_list: print("清空商品成功") else: print("清空商品失敗")
測試清空商品列表功能
程式執行結果
實現基於終端的商品資訊展示其中print_product_title_info()函式用於顯示商品標題資訊,而print_product_info()函式用於顯示產品資訊,預設顯示產品資訊標題
def print_product_title_info(): """ 列印產品資訊標題 :return: """ print("商品ID".ljust(10), end="") print("商品名稱".ljust(30), end="") print("商品價格".ljust(30), end="\n")def print_product_info(product_dict, print_title_flag=True): """ 列印產品資訊到終端 :param product_dict: 產品資訊 :param print_title_flag: 是否列印標題 :return: """ if print_title_flag: print_product_title_info() print(str(product_dict["id"]).ljust(10), end="") print(str(product_dict["name"]).ljust(30), end="") print(str(product_dict["price"]).ljust(30)) pass
基於終端的商品資訊展示測試
程式執行結果
實現商品管理主控函式實現根據使用者輸入的編號呼叫對應的函式def operator(select_id): """ 選擇功能的函式 根據使用者輸入的編號呼叫對應的函式 :return: """ if select_id == "1": product_tuple = input_product_info() product_dict = search_product_by_id(product_tuple[0]) if product_dict is None: add_product(product_tuple) else: print("商品已經存在,不能重複新增") elif select_id == "2": delete_product_id = input("請輸入商品ID:") del_product(delete_product_id) elif select_id == "3": modify_product() elif select_id == "4": product_id = input("請輸入查詢商品的ID:") product_dict = search_product_by_id(product_id) if product_dict: print(f"根據產品ID{product_id}獲取的商品資訊如下") print_product_info(product_dict) else: print(f"指定的商品{product_id}編號的商品不存在") elif select_id == "5": get_product_list() elif select_id == "6": clear_product_list() elif select_id == "7": system_exit()
實現校驗使用者輸入的編號def check_operator_id(select_id): """ 校驗操作的編號必須是位於1-7之間的數字 :param select_id: :return: """ if not select_id.isdigit(): print("操作的編號必須是數字,請重新輸入") return False if int(select_id) > 7 or int(select_id) < 0: print("操作的編號必須位於1-7之間,請重新輸入") return False return True
實現主控函式
def pms(): """ 入口函式,呼叫該函式就可以使用商品管理系統 :return: """ # 借用死迴圈來迴圈使用選單 while True: # 呼叫顯示選單函式 show_menu() select_id = input("請輸入操作的編號:") if check_operator_id(select_id): operator(select_id)
實現系統退出功能系統退出可以呼叫exit()函式,其中0表示正常退出,-1表示異常退出def system_exit(): """ 系統退出函式 :return: """ print("系統退出") # 程式正常退出的code就是0 # 非0,例如-1就是異常退出 exit(0)
商品管理系統整合測試測試商品新增和商品列表測試商品修改和商品列表測試商品查詢測試商品新增、商品列表、刪除和清空
新增商品和檢視商品列表
清空商品後檢視商品列表
測試退出系統