文章目录
新的项目环境
- 新建项目
- 新建文件
- 检察解释器
- 可以开始写代码了
完成项目的架构
程序的入口
- 写一个启动函数
- 执行启动函数
流程的安排
- 欢迎界面
- 功能菜单
- 用户选择功能
- 对应的功能运行
- 重新再一次显示功能菜单
- 重新再一次用户选择功能
是否继续执行程序要看用户的选择
如果用户输入q,就让程序结束
def show_welcome():
"""欢迎菜单"""
print('欢迎使用 宏鹏名片管理系统 V1.0')
def show_menu():
"""显示功能菜单"""
print('功能菜单占位函数')
def user_choice():
"""用户选择"""
choice = input('请输入您的选择:')
return choice
def 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)
# 退出无限循环,两种方法
# break
print('循环后面的内容....')
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 choice
def 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 choice
def 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":
break
if 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 choice
def 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":
break
if 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'] = name
card_dict['tel'] = tel
card_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 choice
def 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":
break
if 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'] = name
card_dict['tel'] = tel
card_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 choice
def 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":
break
if 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'] = name
card_dict['tel'] = tel
card_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)
break
else:
print('查找不成功,请重新再试')
def user_choice():
"""用户选择"""
# - 接收用户的输入
choice = input('请输入您的选择:')
# - 验证用户的输入是否合法
# 利用成员运算符进行验证
if choice not in func_menu:
print('非法输入,请重新再试。。。。。。。。。。。。')
choice = "c" # 数据的校正,把数据修改为我们功能中有的指令
return choice
def 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":
break
if 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'] = name
card_dict['tel'] = tel
card_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 choice
def 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('不存在的操作指令')
return
elif 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)
break
else:
print('查找不成功,请重新再试')
def user_choice():
"""用户选择"""
# - 接收用户的输入
choice = input('请输入您的选择:')
# - 验证用户的输入是否合法
# 利用成员运算符进行验证
if choice not in func_menu:
print('非法输入,请重新再试。。。。。。。。。。。。')
choice = "c" # 数据的校正,把数据修改为我们功能中有的指令
return choice
def 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":
break
if 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'] = name
card_dict['tel'] = tel
card_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 choice
def 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_name
card['tel'] = new_tel
card['email'] = new_email
def delete_card(card):
print('删除名片', card)
def create_png(card):
print('生成二维码', card)
def run_deal_func(choice, card):
"""运行用户的选择"""
if choice == "error":
print('不存在的操作指令')
return
elif 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)
break
else:
print('查找不成功,请重新再试')
def user_choice():
"""用户选择"""
# - 接收用户的输入
choice = input('请输入您的选择:')
# - 验证用户的输入是否合法
# 利用成员运算符进行验证
if choice not in func_menu:
print('非法输入,请重新再试。。。。。。。。。。。。')
choice = "c" # 数据的校正,把数据修改为我们功能中有的指令
return choice
def 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":
break
if 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]: 0
In [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'] = name
card_dict['tel'] = tel
card_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 choice
def get_real_info(input_data, default_data):
"""验证用户输入的内容是否为空,返回有用的数据"""
strip_data = input_data.strip() # 把字符串的空格左右两边都去掉
if len(strip_data) == 0:
return default_data
return strip_data
def 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('不存在的操作指令')
return
elif 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)
break
else:
print('查找不成功,请重新再试')
def user_choice():
"""用户选择"""
# - 接收用户的输入
choice = input('请输入您的选择:')
# - 验证用户的输入是否合法
# 利用成员运算符进行验证
if choice not in func_menu:
print('非法输入,请重新再试。。。。。。。。。。。。')
choice = "c" # 数据的校正,把数据修改为我们功能中有的指令
return choice
def 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":
break
if choice == "c":
continue
# - 4对应的功能运行
run_func(choice)
# 分界符号
print('\n\n')
start()
功能实现:删除数据
列表.remove(数据)
封装二维码的生成函数
原始内容
from segno import helpers
qr = 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_name
print(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'] = name
card_dict['tel'] = tel
card_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 choice
def get_real_info(input_data, default_data):
"""验证用户输入的内容是否为空,返回有用的数据"""
strip_data = input_data.strip() # 把字符串的空格左右两边都去掉
if len(strip_data) == 0:
return default_data
return strip_data
def 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('不存在的操作指令')
return
elif 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)
break
else:
print('查找不成功,请重新再试')
def user_choice():
"""用户选择"""
# - 接收用户的输入
choice = input('请输入您的选择:')
# - 验证用户的输入是否合法
# 利用成员运算符进行验证
if choice not in func_menu:
print('非法输入,请重新再试。。。。。。。。。。。。')
choice = "c" # 数据的校正,把数据修改为我们功能中有的指令
return choice
def 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":
break
if choice == "c":
continue
# - 4对应的功能运行
run_func(choice)
# 分界符号
print('\n')
start()