使用python写一个名片管理系统
系統(tǒng)需求
* 1. 程序啟動,顯示名片管理系統(tǒng)歡迎界面,并顯示功能菜單 * 2. 用戶用數(shù)字選擇不同的功能 * 3. 根據(jù)功能選擇,執(zhí)行不同的功能 * 4. 用戶名片需要記錄用戶的 **姓名**、**電話**、**QQ**、**郵件** * 5. 如果查詢到指定的名片,用戶可以選擇 **修改** 或者 **刪除** 名片步驟
框架搭建
新增名片
顯示所有名片
查詢名片
查詢成功后修改、刪除名片
讓 Python 程序能夠直接運行
01. 框架搭建
目標
-
搭建名片管理系統(tǒng) 框架結(jié)構(gòu)
-
準備文件,確定文件名,保證能夠 在需要的位置 編寫代碼
-
編寫 主運行循環(huán),實現(xiàn)基本的 用戶輸入和判斷
1.1 文件準備
新建 cards_main.py 保存 主程序功能代碼
-
程序的入口
-
每一次啟動名片管理系統(tǒng)都通過 main 這個文件啟動
新建 cards_tools.py 保存 所有名片功能函數(shù)
-
將對名片的 新增、查詢、修改、刪除 等功能封裝在不同的函數(shù)中
1.2 編寫主運行循環(huán)
-
在 cards_main 中添加一個 無限循環(huán)
字符串判斷
if action in ["1", "2", "3"]: if action == "1" or action == "2" or action == "3":使用 in 針對 列表 判斷,避免使用 or 拼接復(fù)雜的邏輯條件
沒有使用 int 轉(zhuǎn)換用戶輸入,可以避免 一旦用戶輸入的不是數(shù)字,導(dǎo)致程序運行出錯
pass
-
pass 就是一個空語句,不做任何事情,一般用做占位語句
-
是為了保持程序結(jié)構(gòu)的完整性
無限循環(huán)
-
在開發(fā)軟件時,如果 不希望程序執(zhí)行后 立即退出
-
可以在程序中增加一個 無限循環(huán)
-
由用戶來決定 退出程序的時機
TODO 注釋
-
在 # 后跟上 TODO,用于標記需要去做的工作
1.3 在 cards_tools 中增加四個新函數(shù)
def show_menu(): ?"""顯示菜單"""pass ? def new_card(): ?"""新建名片"""print("-" * 50)print("功能:新建名片") ? ? def show_all(): ?"""顯示全部"""print("-" * 50)print("功能:顯示全部") ? ? def search_card(): ?"""搜索名片"""print("-" * 50)print("功能:搜索名片") ?1.4 導(dǎo)入模塊
-
在 cards_main.py 中使用 import 導(dǎo)入 cards_tools 模塊
-
修改 while 循環(huán)的代碼如下:
至此:cards_main 中的所有代碼全部開發(fā)完畢!
1.5 完成 show_menu 函數(shù)
def show_menu(): ?"""顯示菜單"""print("*" * 50)print("歡迎使用【菜單管理系統(tǒng)】V1.0")print("")print("1. 新建名片")print("2. 顯示全部")print("3. 查詢名片")print("")print("0. 退出系統(tǒng)")print("*" * 50) ?02. 保存名片數(shù)據(jù)的結(jié)構(gòu)
程序就是用來處理數(shù)據(jù)的,而變量就是用來存儲數(shù)據(jù)的
-
使用 字典 記錄 每一張名片 的詳細信息
-
使用 列表 統(tǒng)一記錄所有的 名片字典
?
定義名片列表變量
-
在 cards_tools 文件的頂部增加一個 列表變量
注意
所有名片相關(guān)操作,都需要使用這個列表,所以應(yīng)該 定義在程序的頂部
程序剛運行時,沒有數(shù)據(jù),所以是 空列表
03. 新增名片
3.1 功能分析
提示用戶依次輸入名片信息
將名片信息保存到一個字典
將字典添加到名片列表
提示名片添加完成
3.2 實現(xiàn) new_card 方法
-
根據(jù)步驟實現(xiàn)代碼
技巧:在 PyCharm 中,可以使用 SHIFT + F6 統(tǒng)一修改變量名
04. 顯示所有名片
4.1 功能分析
-
循環(huán)遍歷名片列表,順序顯示每一個字典的信息
4.2 基礎(chǔ)代碼實現(xiàn)
def show_all(): ?"""顯示全部"""print("-" * 50)print("功能:顯示全部") ?for card_dict in card_list: ?print(card_dict)-
顯示效果不好!
4.3 增加標題和使用 \t 顯示
def show_all():"""顯示全部"""print("-" * 50)print("功能:顯示全部") ?# 打印表頭for name in ["姓名", "電話", "QQ", "郵箱"]:print(name, end="\t\t") ?print("") ?# 打印分隔線print("=" * 50) ?for card_dict in card_list: ?print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))4.4 增加沒有名片記錄判斷
def show_all():"""顯示全部"""print("-" * 50)print("功能:顯示全部") ?# 1. 判斷是否有名片記錄if len(card_list) == 0:print("提示:沒有任何名片記錄") ?return ?注意
-
在函數(shù)中使用 return 表示返回
-
如果在 return 后沒有跟任何內(nèi)容,只是表示該函數(shù)執(zhí)行到此就不再執(zhí)行后續(xù)的代碼
05. 查詢名片
5.1 功能分析
提示用戶要搜索的姓名
根據(jù)用戶輸入的姓名遍歷列表
搜索到指定的名片后,再執(zhí)行后續(xù)的操作
5.2 代碼實現(xiàn)
-
查詢功能實現(xiàn)
-
增加名片操作函數(shù):修改/刪除/返回主菜單
06. 修改和刪除
6.1 查詢成功后刪除名片
-
由于找到的字典記錄已經(jīng)在列表中保存
-
要刪除名片記錄,只需要把列表中對應(yīng)的字典刪除即可
6.2 修改名片
-
由于找到的字典記錄已經(jīng)在列表中保存
-
要修改名片記錄,只需要把列表中對應(yīng)的字典中每一個鍵值對的數(shù)據(jù)修改即可
修改名片細化
-
如果用戶在使用時,某些名片內(nèi)容并不想修改,應(yīng)該如何做呢?—— 既然系統(tǒng)提供的 input 函數(shù)不能滿足需求,那么就新定義一個函數(shù) input_card_info 對系統(tǒng)的 input 函數(shù)進行擴展
07. 最終代碼
cards_tools.py
card_list = []def show_menu():"""顯示菜單"""print("*" * 50)print("歡迎使用【名片管理系統(tǒng)】V1.0")print()print("1. 新建名片")print("2. 顯示全部")print("3. 查詢名片")print()print("0. 退出系統(tǒng)")print("*" * 50)def new_card():"""新建名片"""print("-" * 50)print("功能:新建名片")# 1. 提示用戶輸入名片信息name = input("請輸入姓名:")phone = input("請輸入電話:")qq = input("請輸入 QQ 號碼:")email = input("請輸入郵箱:")# 2. 將用戶信息保存到一個字典card_dict = {"name": name,"phone": phone,"qq": qq,"email": email}# 3. 將用戶字典添加到名片列表card_list.append(card_dict)# 4. 提示添加成功信息print("成功添加 %s 的名片" % card_dict["name"])def show_all():"""顯示全部"""print("-" * 50)print("功能:顯示全部")# 1. 判斷是否有名片記錄if len(card_list) == 0:print("提示:沒有任何名片記錄")return# 打印表頭for name in ["姓名", "電話", "QQ", "郵箱"]:print(name, end="\t\t")print("")# 打印分隔線print("=" * 50)for card_dict in card_list:print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))def search_card():"""搜索名片"""print("-" * 50)print("功能:搜索名片")# 1. 提示要搜索的姓名find_name = input("請輸入要搜索的姓名:")# 2. 遍歷字典for card_dict in card_list:if card_dict["name"] == find_name:print("姓名\t\t\t電話\t\t\tQQ\t\t\t郵箱")print("-" * 40)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"]))print("-" * 40)# TODO(小明) 針對找到的字典進行后續(xù)操作:修改/刪除deal_card(card_dict)breakelse:print("沒有找到 %s" % find_name)def deal_card(find_dict):"""操作搜索到的名片字典:param find_dict:找到的名片字典"""action = input("請選擇要執(zhí)行的操作 ""[1] 修改 [2] 刪除 [0] 返回上級菜單")if action == "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("%s 的名片修改成功" % find_dict["name"])elif action == "2":card_list.remove(find_dict)print("刪除成功")def input_card_info(dict_value, tip_message):"""輸入名片信息:param dict_value: 字典原有值:param tip_message: 輸入提示信息:return: 如果輸入,返回輸入內(nèi)容,否則返回字典原有值"""# 1. 提示用戶輸入內(nèi)容result_str = input(tip_message)# 2. 針對用戶的輸入進行判斷,如果用戶輸入了內(nèi)容,直接返回結(jié)果if len(result_str) > 0:return result_str# 3. 如果用戶沒有輸入內(nèi)容,返回 `字典中原有的值`else:return dict_valuecards_main.py
import cards_toolscards_tools.show_menu()while True:# TODO(小明) 顯示系統(tǒng)菜單action = input("請選擇操作功能:")if action in ["1", "2", "3"]:if action == "1":cards_tools.new_card()elif action == "2":cards_tools.show_all()else:cards_tools.search_card()elif action == "0":print("歡迎再次使用【名片管理系統(tǒng)】")breakelse:print("操作有誤,請重新輸入")?
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的使用python写一个名片管理系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python之字符串的切片操作
- 下一篇: Python的单例模式