Python綜合應(yīng)用名片管理系統(tǒng)案例詳解
本文實(shí)例講述了Python綜合應(yīng)用名片管理系統(tǒng)。分享給大家供大家參考,具體如下:
綜合應(yīng)用已經(jīng)學(xué)習(xí)過(guò)的知識(shí)點(diǎn):
- 變量
- 流程控制
- 函數(shù)
- 模塊
開(kāi)發(fā) 名片管理系統(tǒng)
系統(tǒng)需求
- 程序啟動(dòng),顯示名片管理系統(tǒng)歡迎界面,并顯示功能菜單
************************************************** 歡迎使用【名片管理系統(tǒng)】V1.0 1. 新建名片 2. 顯示全部 3. 查詢名片 0. 退出系統(tǒng) **************************************************
-
- 用戶用數(shù)字選擇不同的功能
-
- 根據(jù)功能選擇,執(zhí)行不同的功能
-
- 用戶名片需要記錄用戶的 姓名、電話、QQ、郵件
-
- 如果查詢到指定的名片,用戶可以選擇 修改 或者 刪除 名片
步驟
- 框架搭建
- 新增名片
- 顯示所有名片
- 查詢名片
- 查詢成功后修改、刪除名片
- 讓 Python 程序能夠直接運(yùn)行
01. 框架搭建
目標(biāo)
- 搭建名片管理系統(tǒng) 框架結(jié)構(gòu)
- 準(zhǔn)備文件,確定文件名,保證能夠 在需要的位置 編寫代碼
- 編寫 主運(yùn)行循環(huán),實(shí)現(xiàn)基本的 用戶輸入和判斷
1.1 文件準(zhǔn)備
- 新建 cards_main.py 保存 主程序功能代碼
- 程序的入口
- 每一次啟動(dòng)名片管理系統(tǒng)都通過(guò) main 這個(gè)文件啟動(dòng)
- 新建 cards_tools.py 保存 所有名片功能函數(shù)
- 將對(duì)名片的 新增、查詢、修改、刪除 等功能封裝在不同的函數(shù)中
1.2 編寫主運(yùn)行循環(huán)
- 在 cards_main 中添加一個(gè) 無(wú)限循環(huán)
while True: # TODO(小明) 顯示系統(tǒng)菜單 action = input("請(qǐng)選擇操作功能:") print("您選擇的操作是:%s" % action) # 根據(jù)用戶輸入決定后續(xù)的操作 if action in ["1", "2", "3"]: pass elif action == "0": print("歡迎再次使用【名片管理系統(tǒng)】") break else: print("輸入錯(cuò)誤,請(qǐng)重新輸入")
字符串判斷
if action in ["1", "2", "3"]:
if action == "1" or action == "2" or action == "3":
- 使用 in 針對(duì) 列表 判斷,避免使用 or 拼接復(fù)雜的邏輯條件
- 沒(méi)有使用 int 轉(zhuǎn)換用戶輸入,可以避免 一旦用戶輸入的不是數(shù)字,導(dǎo)致程序運(yùn)行出錯(cuò)
pass
- pass 就是一個(gè)空語(yǔ)句,不做任何事情,一般用做占位語(yǔ)句
- 是為了保持程序結(jié)構(gòu)的完整性
無(wú)限循環(huán)
- 在開(kāi)發(fā)軟件時(shí),如果 不希望程序執(zhí)行后 立即退出
- 可以在程序中增加一個(gè) 無(wú)限循環(huán)
- 由用戶來(lái)決定 退出程序的時(shí)機(jī)
TODO 注釋
- 在 # 后跟上 TODO,用于標(biāo)記需要去做的工作
# TODO(作者/郵件) 顯示系統(tǒng)菜單
1.3 在 cards_tools 中增加四個(gè)新函數(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 模塊
import cards_tools
修改 while 循環(huán)的代碼如下:
import cards_tools while True: cards_tools.show_menu() action = input("請(qǐng)選擇操作功能:") print("您選擇的操作是:%s" % action) # 根據(jù)用戶輸入決定后續(xù)的操作 if action in ["1", "2", "3"]: if action == "1": cards_tools.new_card() elif action == "2": cards_tools.show_all() elif action == "3": cards_tools.search_card() elif action == "0": print("歡迎再次使用【名片管理系統(tǒng)】") break else: print("輸入錯(cuò)誤,請(qǐng)重新輸入:")
至此:cards_main 中的所有代碼全部開(kāi)發(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)
程序就是用來(lái)處理數(shù)據(jù)的,而變量就是用來(lái)存儲(chǔ)數(shù)據(jù)的
-
使用 字典 記錄 每一張名片 的詳細(xì)信息
-
使用 列表 統(tǒng)一記錄所有的 名片字典
定義名片列表變量 -
在 cards_tools 文件的頂部增加一個(gè) 列表變量
# 所有名片記錄的列表 card_list = []
注意
- 所有名片相關(guān)操作,都需要使用這個(gè)列表,所以應(yīng)該 定義在程序的頂部
- 程序剛運(yùn)行時(shí),沒(méi)有數(shù)據(jù),所以是 空列表
03. 新增名片
3.1 功能分析
- 提示用戶依次輸入名片信息
- 將名片信息保存到一個(gè)字典
- 將字典添加到名片列表
- 提示名片添加完成
3.2 實(shí)現(xiàn) new_card 方法
- 根據(jù)步驟實(shí)現(xiàn)代碼
def new_card(): """新建名片 """ print("-" * 50) print("功能:新建名片") # 1. 提示用戶輸入名片信息 name = input("請(qǐng)輸入姓名:") phone = input("請(qǐng)輸入電話:") qq = input("請(qǐng)輸入 QQ 號(hào)碼:") email = input("請(qǐng)輸入郵箱:") # 2. 將用戶信息保存到一個(gè)字典 card_dict = {"name": name, "phone": phone, "qq": qq, "email": email} # 3. 將用戶字典添加到名片列表 card_list.append(card_dict) print(card_list) # 4. 提示添加成功信息 print("成功添加 %s 的名片" % card_dict["name"])
技巧:在 PyCharm 中,可以使用 SHIFT + F6 統(tǒng)一修改變量名
04. 顯示所有名片
4.1 功能分析
- 循環(huán)遍歷名片列表,順序顯示每一個(gè)字典的信息
4.2 基礎(chǔ)代碼實(shí)現(xiàn)
def show_all(): """顯示全部 """ print("-" * 50) print("功能:顯示全部") for card_dict in card_list: print(card_dict)
- 顯示效果不好!
4.3 增加標(biāo)題和使用 \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 增加沒(méi)有名片記錄判斷
def show_all(): """顯示全部 """ print("-" * 50) print("功能:顯示全部") # 1. 判斷是否有名片記錄 if len(card_list) == 0: print("提示:沒(méi)有任何名片記錄") return
注意
- 在函數(shù)中使用 return 表示返回
- 如果在 return 后沒(méi)有跟任何內(nèi)容,只是表示該函數(shù)執(zhí)行到此就不再執(zhí)行后續(xù)的代碼
05. 查詢名片
5.1 功能分析
- 提示用戶要搜索的姓名
- 根據(jù)用戶輸入的姓名遍歷列表
- 搜索到指定的名片后,再執(zhí)行后續(xù)的操作
5.2 代碼實(shí)現(xiàn)
- 查詢功能實(shí)現(xiàn)
def search_card(): """搜索名片 """ print("-" * 50) print("功能:搜索名片") # 1. 提示要搜索的姓名 find_name = input("請(qǐng)輸入要搜索的姓名:") # 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(小明) 針對(duì)找到的字典進(jìn)行后續(xù)操作:修改/刪除 break else: print("沒(méi)有找到 %s" % find_name)
增加名片操作函數(shù):修改/刪除/返回主菜單
def deal_card(find_dict): """操作搜索到的名片字典 :param find_dict:找到的名片字典 """ print(find_dict) action_str = input("請(qǐng)選擇要執(zhí)行的操作 " "[1] 修改 [2] 刪除 [0] 返回上級(jí)菜單") if action == "1": print("修改") elif action == "2": print("刪除")
06. 修改和刪除
6.1 查詢成功后刪除名片
- 由于找到的字典記錄已經(jīng)在列表中保存
- 要?jiǎng)h除名片記錄,只需要把列表中對(duì)應(yīng)的字典刪除即可
elif action == "2": card_list.remove(find_dict) print("刪除成功")
6.2 修改名片
由于找到的字典記錄已經(jīng)在列表中保存
- 要修改名片記錄,只需要把列表中對(duì)應(yīng)的字典中每一個(gè)鍵值對(duì)的數(shù)據(jù)修改即可
if action == "1": find_dict["name"] = input("請(qǐng)輸入姓名:") find_dict["phone"] = input("請(qǐng)輸入電話:") find_dict["qq"] = input("請(qǐng)輸入QQ:") find_dict["email"] = input("請(qǐng)輸入郵件:") print("%s 的名片修改成功" % find_dict["name"])
修改名片細(xì)化
- 如果用戶在使用時(shí),某些名片內(nèi)容并不想修改,應(yīng)該如何做呢?—— 既然系統(tǒng)提供的 input 函數(shù)不能滿足需求,那么就新定義一個(gè)函數(shù) input_card_info 對(duì)系統(tǒng)的 input 函數(shù)進(jìn)行擴(kuò)展
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. 針對(duì)用戶的輸入進(jìn)行判斷,如果用戶輸入了內(nèi)容,直接返回結(jié)果 if len(result_str) > 0: return result_str # 3. 如果用戶沒(méi)有輸入內(nèi)容,返回 `字典中原有的值` else: return dict_value
07. LINUX 上的 Shebang 符號(hào)(#!)
- #!這個(gè)符號(hào)叫做 Shebang 或者 Sha-bang
- Shebang 通常在 Unix 系統(tǒng)腳本的中 第一行開(kāi)頭 使用
- 指明 執(zhí)行這個(gè)腳本文件 的 解釋程序
使用 Shebang 的步驟
-
- 使用 which 查詢 python3 解釋器所在路徑
$ which python3
修改要運(yùn)行的 主 python 文件,在第一行增加以下內(nèi)容
#! /usr/bin/python3
修改 主 python 文件 的文件權(quán)限,增加執(zhí)行權(quán)限
$ chmod +x cards_main.py
在需要時(shí)執(zhí)行程序即可
./cards_main.py
關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python名片管理系統(tǒng)+猜拳小游戲案例實(shí)現(xiàn)彩(色控制臺(tái)版)
- python實(shí)現(xiàn)簡(jiǎn)單的名片管理系統(tǒng)
- Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡(jiǎn)單的名片管理系統(tǒng)
- python實(shí)現(xiàn)簡(jiǎn)易名片管理系統(tǒng)
- python3實(shí)現(xiàn)名片管理系統(tǒng)(控制臺(tái)版)
- python名片管理系統(tǒng)開(kāi)發(fā)
- 使用python實(shí)現(xiàn)名片管理系統(tǒng)
- 用python實(shí)現(xiàn)名片管理系統(tǒng)
- Python實(shí)現(xiàn)名片管理系統(tǒng)
- python實(shí)現(xiàn)一個(gè)函數(shù)版的名片管理系統(tǒng)過(guò)程解析
- 如何使用Python實(shí)現(xiàn)名片管理系統(tǒng)
相關(guān)文章
django框架基于模板 生成 excel(xls) 文件操作示例
這篇文章主要介紹了django框架基于模板 生成 excel(xls) 文件操作,結(jié)合具體實(shí)例形式分析了Django框架基于模板生成excel的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2019-06-06Python讀取Excel數(shù)據(jù)并生成圖表過(guò)程解析
這篇文章主要介紹了Python讀取Excel數(shù)據(jù)并生成圖表過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06python 爬取學(xué)信網(wǎng)登錄頁(yè)面的例子
今天小編就為大家分享一篇python 爬取學(xué)信網(wǎng)登錄頁(yè)面的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python設(shè)計(jì)模式之橋接模式原理與用法實(shí)例分析
這篇文章主要介紹了Python設(shè)計(jì)模式之橋接模式原理與用法,結(jié)合具體實(shí)例形式分析了Python橋接模式的相關(guān)概念、原理、定義及使用方法,需要的朋友可以參考下2019-01-01