1. 程式人生 > 其它 >Python—名片管理系統

Python—名片管理系統

前言 我們之前已經學習了變數、流程控制、函式、模組等內容,接下來我們利用它們來搭建一個名片管理系統 需求 1.樣式如下 ************************************************** 歡迎使用【名片管理系統】V1.0 1. 新建名片 2. 顯示全部 3. 查詢名片 0. 退出系統 ************************************************** 2.使用者可以用數字選擇不同功能 3.使用者名稱片需要記錄使用者的 姓名、電話、QQ、郵件 4.如果查詢到指定的名片,使用者可以選擇 修改 或者 刪除 名片 步驟 1.框架搭建 2.新增名片 3.顯示所有名片 4.查詢名片 5.查詢成功後修改、刪除名片 6.讓 Python 程式能夠直接執行 01-框架搭建
我們在編寫程式的時候,為了方便使用,應該有一個主程式和一個工具包,使得程式碼整潔,在這裡主程式我命名為cards_main,工具包為cards_tools 這樣可以使得每一次啟動都從cards_main這個程式進入,而在cards_tools包裡儲存所有名片功能函式,如名片的 新增、查詢、修改、刪除 等功能 1.1 編寫主迴圈 在cards_main中新增一個無限迴圈,使得每次使用者在進行退出操作時才退出 while True: # TODO 顯示功能選單 action_str = input("請選擇希望執行的操作:") print("您選擇的操作是:[%s]" % action_str)
# 1,2,3針對名片的操作 if action_str in ["1", "2", "3"]: # TODO 新增名片 if action_str == "1": pass # TODO 顯示全部 elif action_str == "2": pass # TODO 查詢名片 elif action_str == "3": pass elif action_str == "0": print("歡迎再次使用【名片管理系統】") break else: print("您輸入的不正確,請重新輸入") 字串的判斷 if action in ["1", "2", "3"]: if action == "1" or action == "2" or action == "3":
1.使用 in 針對 列表 判斷,避免使用 or 拼接複雜的邏輯條件 2.沒有使用 int 轉換使用者輸入,可以避免 一旦使用者輸入的不是數字,導致程式執行出錯 pass pass 就是一個空語句,不做任何事情,一般用做佔位語句,目的是為了保持程式結構的完整性

無限迴圈

為了不希望程式執行後 立即退出,使用while True之類的無限迴圈,由使用者來決定退出程式的時機

TODO 註釋

在 # 後跟上 TODO ,用於標記需要去做的工作

# TODO(作者/郵件) 要做的事 1.2 在cards_tools中新增四個函式 def new_card(): """新增名片""" print("-" * 50) print("新增名片") def show_all(): """顯示所有名片""" print("-" * 50) print("顯示所有名片") def search_card(): """搜尋名片""" print("-" * 50) print("搜尋名片") 1.3 匯入模組 import cards_tools while True: # 顯示功能選單 action_str = input("請選擇希望執行的操作:") print("您選擇的操作是:[%s]" % action_str) # 1,2,3針對名片的操作 if action_str in ["1", "2", "3"]: # 新增名片 if action_str == "1": cards_tools.new_card() # 顯示全部 elif action_str == "2": cards_tools.show_all() # 查詢名片 elif action_str == "3": cards_tools.search_card() elif action_str == "0": print("歡迎再次使用【名片管理系統】") break else: print("您輸入的不正確,請重新輸入") 至此,主程式cards_main已經編寫完畢,剩下的功能實現全部在cards_tools中編寫 1.4 完成show_menu函式 def show_menu(): """顯示選單""" print("*" * 50) print("歡迎使用【名片管理系統】 V 1.0") print() print("1. 新增名片") print("2. 顯示全部") print("3. 查詢名片") print() print("0. 退出系統") print("*" * 50) 02-確定儲存名片資料的結構 首先,在寫程式前,先明白用什麼才儲存資料,眾所周知, 程式就是用來處理資料的,而變數就是用來儲存資料的,所以確定使用的變數很重要 我們可以使用字典來儲存每一張名片的詳細資訊,並用列表統一所有的名片字典 我們開啟程式的時候,是沒有資料的,所以應該定義一個全域性列表,置空列表,方便以後使用 新增列表變數 card_list = [] 03-功能實現 3.1 新增名片 def new_card(): """新增名片""" print("-" * 50) print("新增名片") name_str = input("請輸入姓名:") phone_str = input("請輸入電話:") qq_str = input("請輸入QQ:") email_str = input("請輸入郵箱:") card_dict = {"name": name_str, "phone": phone_str, "QQ": qq_str, "email": email_str} card_list.append(card_dict) print("新增使用者 %s 成功!" % name_str) 技巧:在 PyCharm 中,可以使用 SHIFT + F6 統一修改變數名 3.2 顯示所有名片 1.基礎程式碼 def show_all(): """顯示全部""" print("-" * 50) print("功能:顯示全部") for card_dict in card_list: print(card_dict) # 整個字典都被輸出了,效果不好 2.新增標題並利用 \t 進行排版 def show_all(): """顯示所有名片""" print("-" * 50) print("顯示所有名片") # 打印表頭 for table_head in ["姓名", "電話", "QQ", "郵箱"]: print(table_head, end="\t\t\t") print() # 列印分隔線 print("=" * 50) for card_dict in card_list: print("%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t" % (card_dict["name"], card_dict["phone"], card_dict["QQ"], card_dict["email"])) 3.增加沒有名片紀錄判斷 def show_all(): """顯示所有名片""" print("-" * 50) print("顯示所有名片") # 判斷是否有名片紀錄,如果沒有則返回 if len(card_list) == 0: print("當前沒有任何的名片紀錄,請使用新增功能新增名片") return 注意:return可以返回一個函式的執行結果(若後面沒有任何內容,則不返回任何結果),且return後面的程式碼不再執行,同時返回到呼叫函式位置的程式碼,去執行呼叫函式下面的程式碼 3.3 查詢名片 1.基本程式碼 def search_card(): """搜尋名片""" print("-" * 50) print("搜尋名片") find_name = input("請輸入要查詢的姓名:") for card_dict in card_list: if card_dict["name"] == find_name: print("姓名\t\t\t電話\t\t\tQQ\t\t\t郵箱") print("=" * 50) print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (card_dict["name"], card_dict["phone"], card_dict["QQ"], card_dict["email"])) break else: print("沒有找到 %s" % find_name) 2.新增操作函式(修改/刪除)的框架 def deal_card(find_dict): """操作搜尋到的名片字典 :param find_dict:找到的名片字典 """ action_str = input("請選擇要執行的操作 " "[1] 修改 [2] 刪除 [0] 返回上級選單") if action == "1": print("修改") elif action == "2": print("刪除") 3.新增刪除操作 由於找到的字典記錄已經在card_list列表中儲存,而要刪除名片記錄,只需要把列表中對應的字典刪除即可 elif action_str == "2": card_list.remove(find_dict) print("刪除成功!") 4.新增修改操作 由於找到的字典記錄已經在列表中儲存,要修改名片記錄,只需要把列表中對應的字典中每一個鍵值對的資料修改即可 if action_str == "1": find_dict["name"] = input("姓名:") find_dict["phone"] = input("電話:") find_dict["qq"] = input("QQ:") find_dict["email"] = input("郵箱:") print("修改成功!") 5.修改操作細化 為了方便使用者在使用時,對名片內容不修改,則新定義一個input_card_info函式對input函式進行拓展 def input_card_info(dict_value, tip_message): """輸入名片資訊 :param dict_value: 字典原有值 :param tip_message: 輸入提示資訊 :return: 如果輸入,返回輸入內容,否則返回字典原有值 """ # 1. 提示使用者輸入內容 result_str = input(tip_message) # 2. 針對使用者的輸入進行判斷,如果使用者輸入了內容,直接返回結果 if len(result_str) > 0: return result_str # 3. 如果使用者沒有輸入內容,返回 `字典中原有的值` else: return dict_value 修改原始碼 if action_str == "1": find_dict["name"] = input_card_info(find_dict["name"], "姓名:") find_dict["phone"] = input_card_info(find_dict["phone"], "電話:") find_dict["QQ"] = input_card_info(find_dict["QQ"], "QQ:") find_dict["email"] = input_card_info(find_dict["email"], "郵箱:") print("修改成功!") 03-Linux上的S'he'bang符號(#!) 指明執行這個指令碼檔案的解釋程式 1. 使用 which 查詢 python3 直譯器所在路徑 which python3 2.在主python檔案第一行新增內容 #! /usr/bin/python3 3.修改 主python 檔案的檔案許可權,增加執行許可權 chmod +x cards_main.py 4.在需要時執行程式 ./cards_main.py