#python 基礎綜合應用——小開發
綜合復習
- 變量- 循環- 函數- 模塊
開發?名片管理系統
名片管理系統介紹
名片管理系統可以理解成花名冊軟件,通過個人新建人的信息后可以進行查詢等簡單操作的程序
名片管理系統有三個作用,
1.新建名片
2.顯示全部名片
3.查詢名片
歡迎使用【名片管理系統】V1.0
1. 新建名片
2. 顯示全部
3. 查詢名片
0. 退出系統
名片管理系統的開發
1.框架的搭建
在我們開發程序的時候都需要做的事情就是構建框架
構建框架首先需要做的就是準備文件(文件需要的是主文件和工具文件),還需要準備一些基本的代碼能夠簡單運行起來
對于**準備文件,主文件是main文件,**所有的操作都要經過這里啟動
對于**工具文件,**就是對于這個程序進行其他操作(刪除,增添)
先創建 一個main文件
無限循環
- 在開發軟件時,如果?不希望程序執行后?立即退出 - 可以在程序中增加一個?無限循環 - 由用戶來決定?退出程序的時機
當用戶輸入數字進行程序之后,即為正確運行,那對于**正確(true)**之后主文件進行后續的操作
?
while True:
?# TODO(小明) 顯示系統菜單
?action = input("請選擇操作功能:")
?print("您選擇的操作是:%s" % action)
?# 根據用戶輸入決定后續的操作if action in ["1", "2", "3"]:passelif action == "0":print("歡迎再次使用【名片管理系統】")
?breakelse:print("輸入錯誤,請重新輸入")
?
在這里需要注意的是
- 使用?
in
?針對?列表?判斷,避免使用?or
?拼接復雜的邏輯條件 1. 沒有使用?int
?轉換用戶輸入,可以避免?一旦用戶輸
pass
?就是一個空語句,不做任何事情,一般用做占位語句 - 是為了保持程序結構的完整性
對于工具文件
在名片管理系統中,工具文件的作用就是
1.顯示菜單
2.新建名片
3.顯示全部
4.搜索名片
所以對于工具文件,我們采取的方式是,創造四個函數
def show_menu():
?"""顯示菜單"""pass
?
def new_card():
?"""新建名片"""print("-" * 50)print("功能:新建名片")
?
?
def show_all():
?"""顯示全部"""print("-" * 50)print("功能:顯示全部")
?
?
def search_card():
?"""搜索名片"""print("-" * 50)print("功能:搜索名片")
?
注意:三個引號的作用是一個一個輸出
在做好主文件和工具文件之后我們應該進行的操作是將工具文件的四個函數導入進行優化操作
用import
import cards_tools
?
while True:
?cards_tools.show_menu()
?action = input("請選擇操作功能:")
?print("您選擇的操作是:%s" % action)
?# 根據用戶輸入決定后續的操作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("歡迎再次使用【名片管理系統】")
?breakelse:print("輸入錯誤,請重新輸入:")
?
至此我們的名片管理系統的操作就大致**完成了?**
接下來就是完善每一個工具文件的函數操作
2.新建名片
之前的文章說過,程序是用來運行數據的,變量是存儲數據的
那么我們用戶需要新建名片那么就,需要保存信息到字典中,將名片字典添加到列表中,這個時候我們用戶就添加成功
定義名片列表變量
-
在?
cards_tools
?文件的頂部增加一個?列表變量 -
# 所有名片記錄的列表
card_list = []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)
?
print(card_list)4. 提示添加成功信息
print(“成功添加 %s 的名片” % card_dict[“name”])
? ?
3.顯示所有名片
若想顯示所有名片,現在的情況是名片字典全部放到列表中,所以說我們可以直接把列表全部輸出即可注意:為了有更好的顯示效果,我們應該制作表頭的分割線方便用戶觀看,則有如下代碼
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"]))
注意的是
def show_all():"""顯示全部"""print("-" * 50)print("功能:顯示全部")
?# 1. 判斷是否有名片記錄if len(card_list) == 0:print("提示:沒有任何名片記錄")
?return
?
return可以返回一個函數的結果
下方代碼不會被執行 ,這樣子就避免了后續操作,用戶可以直接了解到,沒有名片代碼的記錄,提示用戶并且返回
4.查詢名片
- 提示用戶要搜索的姓名 1. 根據用戶輸入的姓名遍歷列表 1. 搜索到指定的名片后,再執行后續的操作
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(小明) 針對找到的字典進行后續操作:修改/刪除
?breakelse:print("沒有找到 %s" % find_name)
?
for遍歷后不是通過break出來**則執行else分支?**
增加名片操作函數:修改/刪除/返回主菜單
def deal_card(find_dict):
?"""操作搜索到的名片字典
?:param find_dict:找到的名片字典"""print(find_dict)
?action_str = input("請選擇要執行的操作 ""[1] 修改 [2] 刪除 [0] 返回上級菜單")
?if action == "1":print("修改")elif action == "2":print("刪除")
?
5.查詢成功后修改刪除名片
刪除列表里面的字典即可
- 由于找到的字典記錄已經在列表中保存 - 要刪除名片記錄,只需要把列表中對應的字典刪除即可
elif action == "2":card_list.remove(find_dict)
?print("刪除成功")
- 由于找到的字典記錄已經在列表中保存 - 要修改名片記錄,只需要把列表中對應的字典中每一個鍵值對的數據修改即可
if action == "1":
?find_dict["name"] = input("請輸入姓名:")find_dict["phone"] = input("請輸入電話:")find_dict["qq"] = input("請輸入QQ:")find_dict["email"] = input("請輸入郵件:")
?print("%s 的名片修改成功" % find_dict["name"])
?
如果用戶在使用時,某些名片內容并不想修改,應該如何做呢?—— 既然系統提供的?input
?函數不能滿足需求,那么就新定義一個函數?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
?
6.讓python程序直接運行
cards_input.py
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
cards_main.py
#!/usr/bin/python3
import cards_toolswhile True:cards_tools.show_menu()action = input("請選擇操作功能:")print("您選擇的操作是:%s" % action)# 根據用戶輸入決定后續的操作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("歡迎再次使用【名片管理系統】")breakelse:print("輸入錯誤,請重新輸入:")
cards_tools.py
import cards_input# 所有名片記錄的列表
card_list = []def show_menu():"""顯示菜單"""print("*" * 50)print("歡迎使用【名片管理系統】V1.0")print("")print("1. 新建名片")print("2. 顯示全部")print("3. 查詢名片")print("")print("0. 退出系統")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)# print(card_list)# 4. 提示添加成功信息print("成功添加 %s 的名片" % card_dict["name"])def show_all():"""顯示全部"""print("-" * 50)print("功能:顯示全部")# 1. 判斷是否有名片記錄if len(card_list) == 0:print("提示:沒有任何名片記錄")return# 2. 顯示所有名片print("姓名\t\t電話\t\tQQ\t\t郵箱")print("-" * 60)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"]))print("-" * 60)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\tQQ\t\t郵箱")print("-" * 60)print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))print("-" * 60)deal_card(card_dict)breakelse:print("沒有找到 %s" % find_name)def deal_card(find_dict):"""操作搜索到的名片字典:param find_dict:名片字典"""action_str = input("請輸入對名片的操作:1: 修改/ 2: 刪除/ 0: 返回上級菜單")if action_str == "1":find_dict["name"] = cards_input.input_card_info(find_dict["name"],"請輸入姓名[回車不修改]:")find_dict["phone"] = cards_input.input_card_info(find_dict["phone"],"請輸入電話[回車不修改]:")find_dict["qq"] = cards_input.input_card_info(find_dict["qq"],"請輸入QQ[回車不修改]:")find_dict["email"] = cards_input.input_card_info(find_dict["email"],"請輸入郵箱[回車不修改]:")print("%s 的名片修改成功!" % find_dict["name"])elif action_str == "2":card_list.remove(find_dict)print("刪除名片成功!")