日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 名片管理系统 200313

發布時間:2023/12/29 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 名片管理系统 200313 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 新的項目環境
  • 完成項目的架構
    • 程序的入口
    • 流程的安排
  • 詳細的功能設計 功能菜單設計
  • 功能:用戶輸入
  • 進入功能分支 根據用戶的選擇
  • 數據存儲結構的分析
  • 功能實施:新增名片
  • 功能實施:查詢所有名片
  • 功能實現:搜索名片
  • 名片搜索出來后 相關操作
  • 功能:修改名片
  • 功能調優:修改名片 不輸入內容不修改
  • 功能實現:刪除數據
  • 封裝二維碼的生成函數
  • 功能:批量生成二維碼
  • 文件的讀寫操作

新的項目環境

  • 新建項目
  • 新建文件
  • 檢察解釋器
  • 可以開始寫代碼了

完成項目的架構

程序的入口

  • 寫一個啟動函數
  • 執行啟動函數

流程的安排

  • 歡迎界面
  • 功能菜單
  • 用戶選擇功能
  • 對應的功能運行
  • 重新再一次顯示功能菜單
  • 重新再一次用戶選擇功能

是否繼續執行程序要看用戶的選擇
如果用戶輸入q,就讓程序結束

def show_welcome():"""歡迎菜單"""print('歡迎使用 宏鵬名片管理系統 V1.0')def show_menu():"""顯示功能菜單"""print('功能菜單占位函數')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:# - 歡迎界面show_welcome()# - 功能菜單show_menu()# - 用戶選擇功能choice = user_choice()print('用戶輸入的是{}'.format(choice))# - 對應的功能運行run_func(choice)# 退出無限循環,兩種方法# breakprint('循環后面的內容....')start()

詳細的功能設計 功能菜單設計

  • 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()

功能:用戶輸入

  • 接收用戶的輸入
  • 驗證用戶的輸入是否合法
  • 同時給出一些提示
  • 非法輸入會再給輸入的機會
# 功能菜單 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('請輸入您的選擇:')# - 驗證用戶的輸入是否合法# 利用成員運算符進行驗證if choice not in func_menu:print('非法輸入,請重新再試。。。。。。。。。。。。')choice = "c" # 數據的校正,把數據修改為我們功能中有的指令return choicedef run_func(choice_num):"""根據用戶的選擇,啟動相應的功能"""print('運行{}功能'.format(choice_num))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\n')start()

進入功能分支 根據用戶的選擇

  • 根據用戶的選擇不同會啟動不同的函數
  • 通過分支的方式進行指向
# 功能菜單 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 add_card():"""新增名片功能"""print('這是添加名片的功能!!!!!!!!!!')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()

數據存儲結構的分析

思考 新增的名片放在哪里

名片管理系統會放多個人的信息

它應該是一個數據容器

思考,學到現在的數據空器有哪些

  • 列表
  • 元組
  • 字典

使用列表作為數據容器的理由

數據往列表中扔的時候,不用給數據想鍵的名字

需要存入列表中,直接通過 列表.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()

功能實施:查詢所有名片

  • 從存儲的列表中遍歷取出每一個字典
  • 格式化輸入每一個字典中的內容
# 功能菜單 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 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。