以下就是一個名片管理系統的具體功能:有添加名片,顯示已添加的名片,搜索名片這幾個功能,並且中間能夠提供差異化處理,例如查找名片的時候可以根據不同的信息去查找,也可以綜合所有信息查找。下面我將具體介紹整個系統是如何搭建起來的。
1.框架搭建
當我們要完成一個項目的時候,第一件事應該就是有一個總體的規劃,就像是我們高中寫作文的時候,老師不是都讓我們先列個提綱的嘛,有了提綱,就有了寫作的方向。完成一個Python項目也是一樣,要先有一個大體的框架,這個程序我們要實現什麼功能,有什麼功能,每個功能要怎麼來完成,需要什麼輔助的東西,包啊,插件啊,數據庫啊等等。萬丈高樓平地起,如果不事先有個規劃,到真正做起來的時候一定會手忙腳亂。特別是當你走上了工作的崗位,開發大型的複雜的項目的時候,一上來就直接敲代碼是絕對不行的。
就這個名片管理系統得話:首先展示在用戶眼中應該是最開始的這個界面,後續所有的操作都是在這個的基礎上完成的。新增名片是一個模塊,顯示全部是一個模塊,搜索名片也是一個模塊,也就是一個函數,用戶想執行什麼操作,就調用那個模塊的函數來完成,這就是一個大體的框架,後面我們就需要根據不同的模塊來編寫具體的代碼。
這就是一個主函數的代碼,我們所要執行的具體功能都封裝在cards_tools模塊中。
import cards_tools
# 無限循環,由用戶主動決定什麼時候退出循環
while True:
# 顯示功能菜單
cards_tools.show_menu()
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()
# 0 退出系統
elif action_str == "0":
print("歡迎再次使用【名片管理系統】")
break
# 如果在開發程序時,不希望立刻編寫分支內部的代碼
# 可以使用 pass 關鍵字,表示一個佔位符,能過保證程序的代碼結構正確
# 程序執行時,pass關鍵字不會執行任何的操作
# 其他內容輸入錯誤,需要提示用戶
else:
print("您輸入的不正確,請重新選擇")
顯示菜單
在主界面顯示歡迎信息。代碼如下:
def show_menu():
"""顯示菜單"""
print("*" * 50)
print("歡迎使用【名片管理系統】v1.0")
print("")
print("1.新增名片")
print("2.顯示全部")
print("3.搜索名片")
print("")
print("0.退出系統")
print("*" * 50)
新增名片
新添加一個人的名片,需要哪些信息呢?姓名,電話,QQ賬號,郵箱地址。我們把每個單獨的信息作爲一個字符串,然後一個人的所有信息放在一個字典中,所有人的信息放在一個列表中,這樣是不是顯得很有條理,後面處理起來也更加的方便。
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1.提示用戶輸入名片的詳細信息
name_str = input("請輸入姓名: ")
phone_str = input("請輸入電話: ")
qq_str = input("請輸入QQ: ")
email_str = input("請輸入郵箱: ")
# 2.使用用戶輸入的信息建立一個名片字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3.將名片字典添加到列表中
card_list.append(card_dict)
# print(card_list)
# 4.提示用戶添加成功
print("添加%s的明片成功!" % name_str)
顯示所有名片
按照姓名,電話,QQ,郵箱的順序依次顯示每一個人的信息。
ef show_all():
"""顯示所有名片"""
print("-" * 50)
print("顯示所有名片")
# 判斷是否存在名片記錄,如果沒有,提示用戶並且返回
if len(card_list) == 0:
print("當前沒有任何名片記錄,請使用新增功能添加名片! ")
# return 可以返回一個函數的執行結果
# 下方的代碼不會被執行
# 如果return 後面沒有任何的內容,表示會返回到調用函數的位置
# 並且不返回任何的結果
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"]))
搜索名片
搜索名片這裏特別需要注意的是:如果用戶不知道姓名,只知道郵箱,該怎麼去搜索呢?我們在搜索模塊裏面設計了一個新的輸入函數,如果用戶輸入爲空,就是直接回車得話,直接跳到下一個信息選項,目前只能搜索不相同的信息,後面我會繼續改進,這個地方是我新加入的,可能會有bug。
def search_card():
"""搜索名片"""
print("-" * 50)
print("搜索名片")
# 1.提示用戶輸入要搜索的姓名
find_name = input_search_info("請輸入要搜索的姓名: ")
find_phone = input_search_info("請輸入要搜索的電話: ")
find_qq = input_search_info("請輸入要搜索的qq: ")
find_email = input_search_info("請輸入要搜索的郵箱: ")
# 2.遍歷名片列表,查詢要搜索的姓名,如果沒有找到,需要提示用戶
for card_dict in card_list:
search("name", find_name)
search("phone", find_phone)
search("qq", find_qq)
search("email", find_email)
def input_search_info(tip_message):
result_str = input(tip_message)
if len(result_str) > 0:
return result_str
else:
pass
def search(infomation, find_info):
for card_dict in card_list:
if card_dict[infomation] == find_info:
print("姓名\t\t電話\t\tQQ\t\t郵箱")
print("=" * 50)
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
# 針對找到的名片記錄執行修改和刪除的操作
deal_card(card_dict)
break
處理查找到的名片
這裏是對查找到的名片進行增刪改除的操作,同樣需要注意的是如果用戶不想改直接按回車的問題。
def deal_card(find_dict):
"""
處理查找到的名片
:param find_dict: 查找到的名片
"""
action_str = input("請選擇要執行的操作"
" [1] 修改 [2] 刪除 [0] 返回上級菜單")
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("修改名片成功!")
if action_str == "2":
card_list.remove(find_dict)
print("刪除名片成功!")
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
以上就是一個完整的名片管理系統所需要的所有功能了!
最後
剛看了我們院17級輔導員恕姐的日誌,然後思考了一下自己的人生,面臨考研就業的我們真的需要提升自己啊!在我們面前的時間不多了,真的需要好好努力了!
我前面的博客已經說了,我是看it黑馬的教程學的Python,所以其中的很多代碼都有借鑑,當然我自己也有一些改進的地方,純屬自己記錄自己的學習歷程,沒有剽竊之意!