python 名片管理系统 200313
生活随笔
收集整理的這篇文章主要介紹了
python 名片管理系统 200313
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 新的項目環境
- 完成項目的架構
- 程序的入口
- 流程的安排
- 詳細的功能設計 功能菜單設計
- 功能:用戶輸入
- 進入功能分支 根據用戶的選擇
- 數據存儲結構的分析
- 功能實施:新增名片
- 功能實施:查詢所有名片
- 功能實現:搜索名片
- 名片搜索出來后 相關操作
- 功能:修改名片
- 功能調優:修改名片 不輸入內容不修改
- 功能實現:刪除數據
- 封裝二維碼的生成函數
- 功能:批量生成二維碼
- 文件的讀寫操作
新的項目環境
- 新建項目
- 新建文件
- 檢察解釋器
- 可以開始寫代碼了
完成項目的架構
程序的入口
- 寫一個啟動函數
- 執行啟動函數
流程的安排
- 歡迎界面
- 功能菜單
- 用戶選擇功能
- 對應的功能運行
- 重新再一次顯示功能菜單
- 重新再一次用戶選擇功能
是否繼續執行程序要看用戶的選擇
如果用戶輸入q,就讓程序結束
詳細的功能設計 功能菜單設計
- 1 新增名片
- 2 查詢所有名片
- 3 搜索名片
- q 退出程序
打印功能菜單的實現
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key,val))def user_choice():"""用戶選擇"""choice = input('請輸入您的選擇:')return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""if choice_num == "q":print('用戶輸入的是退出指令,程序結束')exit()print('運行{}功能'.format(choice_num))def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()print('用戶輸入的是{}'.format(choice))# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n\n')start()功能:用戶輸入
- 接收用戶的輸入
- 驗證用戶的輸入是否合法
- 同時給出一些提示
- 非法輸入會再給輸入的機會
進入功能分支 根據用戶的選擇
- 根據用戶的選擇不同會啟動不同的函數
- 通過分支的方式進行指向
數據存儲結構的分析
思考 新增的名片放在哪里
名片管理系統會放多個人的信息
它應該是一個數據容器
思考,學到現在的數據空器有哪些
- 列表
- 元組
- 字典
使用列表作為數據容器的理由
數據往列表中扔的時候,不用給數據想鍵的名字
需要存入列表中,直接通過 列表.append(數據)
決定 使用列表來存我們的數據
功能實施:新增名片
- 定義一個全局的列表,可被每一個函數所有使用
- 每一次新增了用戶的信息以后,把信息添加到列表中
效果圖
代碼
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }# 所有的數據列表,保存所有的名片信息 card_list = []def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)def show_cards():print('顯示所有名片的功能!!!!!!!!!!')def search_card():print('搜索名片的功能!!!!')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n')start()功能實施:查詢所有名片
- 從存儲的列表中遍歷取出每一個字典
- 格式化輸入每一個字典中的內容
功能實現:搜索名片
- 用戶要輸入一個搜索詞
- 依次遍歷出名片列表中的所有字典
- 比對一下字典中的name鍵的值,看值里面有沒有搜索詞
- 如果有,就把這個字典作業結果展現出來
效果:
如果搜索的結果有多個,我們只取第一個(因為簡單,目標是不弄太復雜免得更暈)
代碼:
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }# 所有的數據列表,保存所有的名片信息 card_list = [{"name":"張三", "tel":"15977777777","email":"777777@qq.com"} ]def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)def show_cards():# print('顯示所有名片的功能!!!!!!!!!!')# 打印表頭print('姓名\t電話\t\t郵箱\t')# print(card_list) # [{},{}]# 遍歷全部名片列表,依次獲取每一個字典for card in card_list: # card是代表了一個字典name = card['name']tel = card['tel']email = card['email']# print(name,tel,email)print('{}\t{}\t{}'.format(name,tel,email))def show_search_result(card):print('搜索結果:******************')print('姓名\t電話\t\t郵箱\t')print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))def search_card():"""名片搜索"""# - 用戶要輸入一個搜索詞key = input('請輸入要搜索的詞(從姓名里查):') # "張"# - 依次遍歷出名片列表中的所有字典for card in card_list: # [{"name":???},{}]# card 就是一個字典{"name":???}# 獲取姓名name = card["name"] # ”張三"# 如何判斷"張" 在不在 "張三" 字符串中?if key in name:# 那么,這一輪遍歷出來的字典就是要找的字典# print(card)# 顯示這個結果show_search_result(card)breakelse:print('查找不成功,請重新再試')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n')start()名片搜索出來后 相關操作
- 生成二維碼
- 從數據列表中刪除
- 修改名片的數據
寫一個函數專門的負責搜索出來的名片的結果處理
deal_card(card)
deal_card函數它的職能
- 顯示功能菜單
- 讓用戶選擇
- 執行相關的功能函數
布局代碼
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }# 搜索結果的處理菜單 deal_menu = {"m":"修改名片","d":"刪除名片","c":"生成二維碼", }# 所有的數據列表,保存所有的名片信息 card_list = [{"name":"張三", "tel":"15977777777","email":"777777@qq.com"} ]def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)def show_cards():# print('顯示所有名片的功能!!!!!!!!!!')# 打印表頭print('姓名\t電話\t\t郵箱\t')# print(card_list) # [{},{}]# 遍歷全部名片列表,依次獲取每一個字典for card in card_list: # card是代表了一個字典name = card['name']tel = card['tel']email = card['email']# print(name,tel,email)print('{}\t{}\t{}'.format(name,tel,email))def show_search_result(card):print('搜索結果:******************')print('姓名\t電話\t\t郵箱\t')print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))def show_deal_menu():"""顯示處理的菜單"""for key,val in deal_menu.items():print("{}----{}".format(key,val))def deal_choice():"""用戶選擇想要的操作"""# 接收用戶的輸入choice = input('請選擇對該名片的操作:')# 驗證用戶的輸入if choice not in deal_menu:choice = 'error'return choicedef modify_card(card):print('修改名片', card)def delete_card(card):print('刪除名片', card)def create_png(card):print('生成二維碼', card)def run_deal_func(choice, card):"""運行用戶的選擇"""if choice == "error":print('不存在的操作指令')returnelif choice == "m":modify_card(card)elif choice == "d":delete_card(card)elif choice == "c":create_png(card)def deal_card(card):"""處理搜索成功的名片"""# - 顯示功能菜單show_deal_menu()# - 讓用戶選擇choice = deal_choice()# - 執行相關的功能函數run_deal_func(choice, card)def search_card():"""名片搜索"""# - 用戶要輸入一個搜索詞key = input('請輸入要搜索的詞(從姓名里查):') # "張"# - 依次遍歷出名片列表中的所有字典for card in card_list: # [{"name":???},{}]# card 就是一個字典{"name":???}# 獲取姓名name = card["name"] # ”張三"# 如何判斷"張" 在不在 "張三" 字符串中?if key in name:# 顯示這個結果show_search_result(card)# 處理這個結果deal_card(card)breakelse:print('查找不成功,請重新再試')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n')start()功能:修改名片
思路分析
我們有什么?
有一個名片字典
我們要什么?
修改它
修改哪些?
所有的數據都可以讓用戶修改
如何讓用戶修改?
input函數接收內容
操作步驟
- 接收新的數據:姓名,電話,郵箱
- 把原字典的對應數據進行修改
- 功能完成,進行檢察
代碼
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }# 搜索結果的處理菜單 deal_menu = {"m":"修改名片","d":"刪除名片","c":"生成二維碼", }# 所有的數據列表,保存所有的名片信息 card_list = [{"name":"張三", "tel":"15977777777","email":"777777@qq.com"} ]def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)def show_cards():# print('顯示所有名片的功能!!!!!!!!!!')# 打印表頭print('姓名\t電話\t\t郵箱\t')# print(card_list) # [{},{}]# 遍歷全部名片列表,依次獲取每一個字典for card in card_list: # card是代表了一個字典name = card['name']tel = card['tel']email = card['email']# print(name,tel,email)print('{}\t{}\t{}'.format(name,tel,email))def show_search_result(card):print('搜索結果:******************')print('姓名\t電話\t\t郵箱\t')print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))def show_deal_menu():"""顯示處理的菜單"""for key,val in deal_menu.items():print("{}----{}".format(key,val))def deal_choice():"""用戶選擇想要的操作"""# 接收用戶的輸入choice = input('請選擇對該名片的操作:')# 驗證用戶的輸入if choice not in deal_menu:choice = 'error'return choicedef modify_card(card):"""修改名片,本質就是修改字鍵中鍵所對應的值:param card::return:"""# - 接收新的數據:姓名,電話,郵箱new_name = input('原數據:{},要修改為:'.format(card["name"]))new_tel = input('原數據:{},要修改為:'.format(card['tel']))new_email = input('原數據:{},要修改為:'.format(card['email']))# - 把原字典的對應數據進行修改card['name'] = new_namecard['tel'] = new_telcard['email'] = new_emaildef delete_card(card):print('刪除名片', card)def create_png(card):print('生成二維碼', card)def run_deal_func(choice, card):"""運行用戶的選擇"""if choice == "error":print('不存在的操作指令')returnelif choice == "m":modify_card(card)elif choice == "d":delete_card(card)elif choice == "c":create_png(card)def deal_card(card):"""處理搜索成功的名片"""# - 顯示功能菜單show_deal_menu()# - 讓用戶選擇choice = deal_choice()# - 執行相關的功能函數run_deal_func(choice, card)def search_card():"""名片搜索"""# - 用戶要輸入一個搜索詞key = input('請輸入要搜索的詞(從姓名里查):') # "張"# - 依次遍歷出名片列表中的所有字典for card in card_list: # [{"name":???},{}]# card 就是一個字典{"name":???}# 獲取姓名name = card["name"] # ”張三"# 如何判斷"張" 在不在 "張三" 字符串中?if key in name:# 顯示這個結果show_search_result(card)# 處理這個結果deal_card(card)breakelse:print('查找不成功,請重新再試')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n')start()功能調優:修改名片 不輸入內容不修改
需求 用戶如果不輸入內容,那么就不修改
驗證辦法
驗證長度,如果長度為0 代表用戶是空輸入
In [104]: m.strip() Out[104]: ''In [105]: len(m.strip()) Out[105]: 0In [106]: m Out[106]: ' '實現想法
- 對接收到的數據進行去空白操作
- 對去空白操作了的內容進行長度驗證,如果長度為0那么就是空數據
函數的需求
需要一個函數
幫我驗證上面的功能
如果用戶輸入的是空的,那么返回一個原來的數據
如果用戶輸入的是非空的,那么就返回用戶輸入的值
實現代碼
# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","q": "退出程序" }# 搜索結果的處理菜單 deal_menu = {"m": "修改名片","d": "刪除名片","c": "生成二維碼", }# 所有的數據列表,保存所有的名片信息 card_list = [{"name": "張三", "tel": "15977777777", "email": "777777@qq.com"} ]def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)def show_cards():# print('顯示所有名片的功能!!!!!!!!!!')# 打印表頭print('姓名\t電話\t\t郵箱\t')# print(card_list) # [{},{}]# 遍歷全部名片列表,依次獲取每一個字典for card in card_list: # card是代表了一個字典name = card['name']tel = card['tel']email = card['email']# print(name,tel,email)print('{}\t{}\t{}'.format(name, tel, email))def show_search_result(card):print('搜索結果:******************')print('姓名\t電話\t\t郵箱\t')print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))def show_deal_menu():"""顯示處理的菜單"""for key, val in deal_menu.items():print("{}----{}".format(key, val))def deal_choice():"""用戶選擇想要的操作"""# 接收用戶的輸入choice = input('請選擇對該名片的操作:')# 驗證用戶的輸入if choice not in deal_menu:choice = 'error'return choicedef get_real_info(input_data, default_data):"""驗證用戶輸入的內容是否為空,返回有用的數據"""strip_data = input_data.strip() # 把字符串的空格左右兩邊都去掉if len(strip_data) == 0:return default_datareturn strip_datadef modify_card(card):"""修改名片,本質就是修改字鍵中鍵所對應的值:param card::return:"""# - 接收新的數據:姓名,電話,郵箱new_name = input('原數據:{},要修改為:'.format(card["name"]))new_tel = input('原數據:{},要修改為:'.format(card['tel']))new_email = input('原數據:{},要修改為:'.format(card['email']))# - 把原字典的對應數據進行修改card['name'] = get_real_info(new_name, card["name"])card['tel'] = get_real_info(new_tel, card['tel'])card['email'] = get_real_info(new_email, card['email'])def delete_card(card):print('刪除名片', card)def create_png(card):print('生成二維碼', card)def run_deal_func(choice, card):"""運行用戶的選擇"""if choice == "error":print('不存在的操作指令')returnelif choice == "m":modify_card(card)elif choice == "d":delete_card(card)elif choice == "c":create_png(card)def deal_card(card):"""處理搜索成功的名片"""# - 顯示功能菜單show_deal_menu()# - 讓用戶選擇choice = deal_choice()# - 執行相關的功能函數run_deal_func(choice, card)def search_card():"""名片搜索"""# - 用戶要輸入一個搜索詞key = input('請輸入要搜索的詞(從姓名里查):') # "張"# - 依次遍歷出名片列表中的所有字典for card in card_list: # [{"name":???},{}]# card 就是一個字典{"name":???}# 獲取姓名name = card["name"] # ”張三"# 如何判斷"張" 在不在 "張三" 字符串中?if key in name:# 顯示這個結果show_search_result(card)# 處理這個結果deal_card(card)breakelse:print('查找不成功,請重新再試')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n\n')start()功能實現:刪除數據
列表.remove(數據)封裝二維碼的生成函數
原始內容
from segno import helpersqr = helpers.make_mecard(name='whalecode',email='1510284616@qq.com',phone='15977777777' )qr.save('whalecode電話.png', scale=5)封裝辦法
- 先寫一個函數
- 把功能代碼全部都放到函數里面
- 把變化的內容做成形參
- 調用的時候傳遞實參
封裝的結果
from segno import helpers# 手動配置一下 dir_path = r'D:\card2020\png\\'def make_qr(name, email, phone):qr = helpers.make_mecard(name=name,email=email,phone=phone)file_name = name + ".png" # "張三.png“file_path = dir_path + file_nameprint(file_path)qr.save(file_path, scale=5)make_qr("諸葛亮2", "1111@163.com", "1334444554")功能:批量生成二維碼
遍歷列表,得到字典
利用二維碼生成的函數
文件的讀寫操作
- 寫一個函數用于保存數據到文件中(添加名片后保存)
- 寫一個函數用于讀取文件的內容(讀文件內容并且把內容返回給調用者)
最終的代碼
from segno import helpers# 功能菜單 func_menu = {"1": "新增名片","2": "查詢所有名片","3": "搜索名片","4": "批量生成二維碼","q": "退出程序" }# 搜索結果的處理菜單 deal_menu = {"m": "修改名片","d": "刪除名片","c": "生成二維碼", }def load_data():"""讀取文件的內容"""# 1,打開文件,讀模式f = open('card.db', 'r', encoding='utf8')# 2,讀取內容(讀的一定是str類型)con = f.read()# 3,關閉文件f.close()# 4,激活被封印的列表con_li = eval(con)# 5,返回這個列表給調用者return con_li# 所有的數據列表,保存所有的名片信息 card_list = load_data()# 手動配置一下 dir_path = r'D:\card2020\png\\'def make_qr(name, email, phone):qr = helpers.make_mecard(name=name,email=email,phone=phone)file_name = name + ".png" # "張三.png“file_path = dir_path + file_name# print(file_path)qr.save(file_path, scale=5)def show_welcome():"""歡迎菜單"""print('*'*60)print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""# 遍歷功能菜單字典 同時得到字典的鍵與值for key, val in func_menu.items():# print(key,'----',val)print('{}----{}'.format(key, val))def save_data():"""保存列表的數據到文件中"""# 文件打開f = open('card.db','w',encoding='utf8')# 內容存進去con = str(card_list)f.write(con)# 文件關閉f.close()def add_card():"""新增名片功能"""# 定義了一個用戶名片的空字典card_dict = {}# 接收用戶的輸入name = input('請輸入姓名:')tel = input('請輸入電話:')email = input('請輸入郵箱:')# 空字典中添加內容card_dict['name'] = namecard_dict['tel'] = telcard_dict['email'] = email# 所有名片的列表添加名片字典card_list.append(card_dict)# 保存數據到文件中save_data()def show_cards():# print('顯示所有名片的功能!!!!!!!!!!')# 打印表頭print('姓名\t電話\t\t郵箱\t')# print(card_list) # [{},{}]# 遍歷全部名片列表,依次獲取每一個字典for card in card_list: # card是代表了一個字典name = card['name']tel = card['tel']email = card['email']# print(name,tel,email)print('{}\t{}\t{}'.format(name, tel, email))def show_search_result(card):print('搜索結果:******************')print('姓名\t電話\t\t郵箱\t')print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))def show_deal_menu():"""顯示處理的菜單"""for key, val in deal_menu.items():print("{}----{}".format(key, val))def deal_choice():"""用戶選擇想要的操作"""# 接收用戶的輸入choice = input('請選擇對該名片的操作:')# 驗證用戶的輸入if choice not in deal_menu:choice = 'error'return choicedef get_real_info(input_data, default_data):"""驗證用戶輸入的內容是否為空,返回有用的數據"""strip_data = input_data.strip() # 把字符串的空格左右兩邊都去掉if len(strip_data) == 0:return default_datareturn strip_datadef modify_card(card):"""修改名片,本質就是修改字鍵中鍵所對應的值:param card::return:"""# - 接收新的數據:姓名,電話,郵箱new_name = input('原數據:{},要修改為:'.format(card["name"]))new_tel = input('原數據:{},要修改為:'.format(card['tel']))new_email = input('原數據:{},要修改為:'.format(card['email']))# - 把原字典的對應數據進行修改card['name'] = get_real_info(new_name, card["name"])card['tel'] = get_real_info(new_tel, card['tel'])card['email'] = get_real_info(new_email, card['email'])def delete_card(card):"""從名片列表中把字典刪除"""card_list.remove(card)def create_png(card):print('生成二維碼', card)make_qr(card["name"], card["email"], card["tel"])def run_deal_func(choice, card):"""運行用戶的選擇"""if choice == "error":print('不存在的操作指令')returnelif choice == "m":modify_card(card)elif choice == "d":delete_card(card)elif choice == "c":create_png(card)def deal_card(card):"""處理搜索成功的名片"""# - 顯示功能菜單show_deal_menu()# - 讓用戶選擇choice = deal_choice()# - 執行相關的功能函數run_deal_func(choice, card)def search_card():"""名片搜索"""# - 用戶要輸入一個搜索詞key = input('請輸入要搜索的詞(從姓名里查):') # "張"# - 依次遍歷出名片列表中的所有字典for card in card_list: # [{"name":???},{}]# card 就是一個字典{"name":???}# 獲取姓名name = card["name"] # ”張三"# 如何判斷"張" 在不在 "張三" 字符串中?if key in name:# 顯示這個結果show_search_result(card)# 處理這個結果deal_card(card)breakelse:print('查找不成功,請重新再試')def user_choice():"""用戶選擇"""# - 接收用戶的輸入choice = input('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef make_all_qr():"""把所有的名片數據生成二維碼圖片"""for card in card_list: # card 是代表了字典make_qr(card["name"], card["email"], card["tel"])def run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""# print('運行{}功能'.format(choice_num))print('-'*60)if choice_num == "1": # 新增名片分支add_card()elif choice_num == "2": # 顯示所有名片的分支show_cards()elif choice_num == "3": # 搜索名片的分支search_card()elif choice_num == "4": # 批量生成二維碼make_all_qr()def start():"""程序的入口:return:"""while True:# - 1歡迎界面show_welcome()# - 2功能菜單show_menu()# - 3用戶選擇功能choice = user_choice()if choice == "q":breakif choice == "c":continue# - 4對應的功能運行run_func(choice)# 分界符號print('\n')start()總結
以上是生活随笔為你收集整理的python 名片管理系统 200313的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word控件Spire.Doc 【邮件合
- 下一篇: 数字孪生十大问