文章目录

  • 新的项目环境
  • 完成项目的架构
    • 程序的入口
    • 流程的安排
  • 详细的功能设计 功能菜单设计
  • 功能:用户输入
  • 进入功能分支 根据用户的选择
  • 数据存储结构的分析
  • 功能实施:新增名片
  • 功能实施:查询所有名片
  • 功能实现:搜索名片
  • 名片搜索出来后 相关操作
  • 功能:修改名片
  • 功能调优:修改名片 不输入内容不修改
  • 功能实现:删除数据
  • 封装二维码的生成函数
  • 功能:批量生成二维码
  • 文件的读写操作

新的项目环境

  • 新建项目
  • 新建文件
  • 检察解释器
  • 可以开始写代码了

完成项目的架构

程序的入口

  • 写一个启动函数
  • 执行启动函数

流程的安排

  • 欢迎界面
  • 功能菜单
  • 用户选择功能
  • 对应的功能运行
  • 重新再一次显示功能菜单
  • 重新再一次用户选择功能

是否继续执行程序要看用户的选择
如果用户输入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相关推荐

  1. python简单名片管理器,一个简单的Python名片管理系统

    字符串和列表学完,自己试着写了一个非常简单的Python名片管理系统. 新萌尝试,大佬们不要喷. 修改名片的功能我偷了个懒,因为我不知道怎么通过定义下标,然后通过下标来修改列表内的字符串. 我的思路是 ...

  2. Python 名片管理系统(文件版,可存档读档)

    Python 名片管理系统(文件版,可存档读档) 相比于函数版的程序,文件版增加了存档读档操作 函数版的可以参考Python名片管理系统(列表.字典和函数的综合应用) 以下是新增部分的代码(不包括调用 ...

  3. python名片管理系统_Python名片管理系统

    1.Python之cards_mail.py #!/usr/bin/python3 import cards_tools # 无限循环,由用户主动决定什么时候退出循环! while True: # 显 ...

  4. python名片管理系统2.0_python名片管理系统代码

    最近看到有朋友在讨论python的名片管理系统的实现问题,那么这一篇文章中,我就有提到要实现个简单的名片管理系统了.这个是没有界面化,就单纯的在控制台操作而已.所以,总体来说,很简单,实现起来不难. ...

  5. python名片管理系统_用python实现名片管理系统

    python的基础练习案例--名片管理系统,一个控制台程序的案例练习,平台为pycharm2017.代码是看着python视频学的时候写的,pycharm运行没有问题. 系统需求 1.程序启动,显示名 ...

  6. python 名片管理系统

    名片管理系统 前言: 写这个主要是复习之前学过的python基础,比较想练习一下装饰器,所以大部分功能都有装饰器.题目大概是按照下面这个视频做的一个类似的名片管理系统: 链接: link. 做的比较简 ...

  7. python名片管理系统2.0_Python:名片管理系统2.0(增加登录功能)

    1 defmingpian():2 name =[]3 name_fl =04 while name_fl ==0:5 print("="*50)6 print("欢迎进 ...

  8. python名片管理系统难点总结_Python 知识要点:名片管理系统 2.0

    主程序cards_main.py调用cards_tools.py里的方法,实现名片管理的功能,代码上更加简洁. [cards_main.py] 复制代码 ! /usr/bin/python3 impo ...

  9. python名片管理系统的总结_名片管理系统(Python)

    1.# 记录所有名片字典 card_list = [] def show_menu(): print("*" * 50) print("欢迎使用[名片管理系统]" ...

最新文章

  1. 2021年春季学期-信号与系统-第十五次作业参考答案-第七小题参考答案
  2. 程序员要避免的五种程序注释方式
  3. AgileEAS.NET平台之ORM设计器
  4. TP5 行为Behavior用法说明
  5. 用Go语言建立一个简单的区块链part7:网络
  6. Arrays.copyOf()、Arrays.copyOfRange()与System.arraycopy()用法
  7. 经典C语言程序100例之八
  8. matlab::mex::ArgumentList outputs的创建
  9. scala 方法重载_Scala中的方法重载
  10. 智能门禁(2)---安检人脸识别人证验证系统解决方案
  11. Struts.xml配置返回JSON数据
  12. centos java进程号_centos中分析java占用大量CPU资源的原因
  13. 易语言大漠插件模块制作后台找字FindStrExS和FindStrFastExS
  14. html如何显示ppt首页,aspx怎样显示ppt转换的html页面
  15. 《天池龙珠 - Python训练营》03.Python基础进阶:从函数到高级魔法方法
  16. DSP28335入门教程:寄存器手册的下载
  17. Python基于OpenCV的指针式表盘检测系统(附带源码&技术文档)
  18. 洛谷:P3092 [USACO13NOV]No Change G(状压+二分,独特的状态定义,不写会后悔一辈子的题)
  19. CIC 滤波器——不同长度的单级CIC滤波器的频谱特性
  20. matlab使用杂谈4-偏微分方程求解之pdede函数使用

热门文章

  1. 苹果6屏幕多大_给iPhone8P换完新屏幕,我觉得新iPhoneSE不香了
  2. 为什么总是显示服务器或网络错误怎么办,为什么电脑老是没网络异常怎么办啊...
  3. 简单对比4G的两种模式
  4. html文件转换Excel2016文件,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)...
  5. PS 学习笔记 17-模糊工具组
  6. 击败一半参赛程序员,DeepMind 重磅推出 AlphaCode
  7. Exadata 的诊断工具之 sundiag.sh
  8. python分割函数_Python应用——自定义函数:分割PDF文件函数
  9. 【Java开发】命令解析框架CommandX
  10. Virtual-Key Codes 键盘编码 微软 重要 C++ 键盘监听和仿真