22_ Python基础到实战一飞冲天(二)-python基础(二十二)–名片管理系统案例:cards_tools.py文件
一、框架搭建-09-准备名片操作函数修改主文件中函数调用
1、名片管理系统 案例:框架搭建 — cards_tools.py 增加四个新函数 代码
# cards_tools.py
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
def show_all():
"""显示全部名片"""
print("-" * 50)
print("显示全部名片")
def search_card():
"""查询名片"""
print("-" * 50)
print("查询名片")
2、名片管理系统 案例:框架搭建 — cards_main.py 导入模块和调用函数 代码
# cards_main.py
import cards_tools
# 添加一个无限循环,由用户主动决定什么时候退出循环
while True:
# TODO(小明) 显示功能菜单
cards_tools.show_menu()
action_str = input("请选择希望执行的操作:")
print("您选择的操作是【%s】" % action_str)
# 1,2,3针对名片的操作
if action_str in ["1", "2", "3"]:
# 新增名片
if action_str == "1":
cards_tools.new_card()
# 显示全部
elif action_str == "2":
cards_tools.show_all()
# 查询名片
elif action_str == "3":
cards_tools.search_card()
pass
# 0 退出系统
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
# 如果在开发中,不希望立刻编写分支内部的代码,可以使用 pass 关键字
# pass 表示一个占位符,能够保证程序代码结构正确。
# 程序运行时,pass关键字不会执行任何操作。
# pass
# 其他内容输入错误,需要提示用户
else:
print("您输入的不正确,请重新选择")
3、示例
二、数据结构确定-01-确定名片管理系统的数据结构
1、【名片管理系统】案例:保存名片数据的结构
1)程序就是用来处理数据的,而变量就是用来存储数据的。
2)使用 字典 记录 每一张名片 的详细信息。
3)使用 列表 统一记录所有的 名片字典。
2、定义名片列表变量
- 在
cards_tools
文件的顶部增加一个 列表变量
# 所有名片记录的列表
card_list = []
3、注意
1)所有名片相关操作,都需要使用这个列表,所以应该 定义在程序的顶部。
2)程序刚运行时,没有数据,所以是 空列表。
4、【名片管理系统】全局列表示意图:
三、新增名片-01-新增名片功能实现
1、新增名片函数(new_card) 功能分析
1)提示用户依次输入名片信息
2)将名片信息保存到一个字典
3)将字典添加到名片列表
4)提示名片添加完成
2、实现 new_card 方法
- 根据步骤实现代码
def new_card():
"""新建名片"""
print("-" * 50)
print("功能:新建名片")
# 1. 提示用户输入名片信息
name = input("请输入姓名:")
phone = input("请输入电话:")
qq = input("请输入 QQ 号码:")
email = input("请输入邮箱:")
# 2. 将用户信息保存到一个字典
card_dict = {"name": name,
"phone": phone,
"qq": qq,
"email": email}
# 3. 将用户字典添加到名片列表
card_list.append(card_dict)
print(card_list)
# 4. 提示添加成功信息
print("成功添加 %s 的名片" % card_dict["name"])
3、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name = input("请输入姓名:")
phone = input("请输入电话:")
qq = input("请输入qq号码:")
email = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name,
"phone": phone,
"qq": qq,
"email": email}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("显示全部名片")
def search_card():
"""查询名片"""
print("-" * 50)
print("查询名片")
4、示例:
四、新增名片-02-[扩展]PyCharm技巧重命名变量名
1、技巧:在 PyCharm
中,可以使用快捷键 SHIFT + F6
统一修改变量名。
也可以选中变量,右键—》【Refactor】—》【Rename】—》【Rename code occurrences】来统一修改变量名。
2、统一修改变量名 示例
五、显示全部-01-遍历列表显示字典明细
1、显示所有名片方法函数(show_all)功能分析
- 循环遍历名片列表,顺序显示每一个字典的信息。
2、显示所有名片方法函数(show_all)基础代码实现
def show_all():
"""显示全部"""
print("-" * 50)
print("功能:显示全部")
for card_dict in card_list:
print(card_dict)
- 显示效果不好!
3、显示所有名片方法函数(show_all)增加标题和使用 \t
显示,完善代码
def show_all():
"""显示全部"""
print("-" * 50)
print("功能:显示全部")
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
4、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""查询名片"""
print("-" * 50)
print("查询名片")
5、示例:
六、显示全部-02-判断列表数量,没有名片直接返回
1、在 显示所有名片方法函数(show_all)中,增加没有名片记录判断
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
2、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""查询名片"""
print("-" * 50)
print("查询名片")
3、示例:
七、查询名片-01-查询功能实现
1、查询名片方法函数(search_card)功能分析
1)提示用户要搜索的姓名
2)根据用户输入的姓名遍历列表
3)搜索到指定的名片后,再执行后续的操作
2、查询名片方法函数(search_card)代码实现
- 查询功能实现
def search_card():
"""搜索名片"""
print("-" * 50)
print("功能:搜索名片")
# 1. 提示要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2. 遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("-" * 40)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
print("-" * 40)
# TODO(小明) 针对找到的字典进行后续操作:修改/删除
break
else:
print("没有找到 %s" % find_name)
3、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""搜索名片"""
print("-" * 50)
print("功能:搜索名片")
# 1. 提示要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2. 遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("-" * 40)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
print("-" * 40)
# TODO(小明) 针对找到的字典进行后续操作:修改/删除
break
else:
print("没有找到 %s" % find_name)
4、示例:
八、查询名片-02-准备处理名片函数
1、在cards_tools.py中,增加名片操作函数
def deal_card(find_dict):
"""操作搜索到的名片字典"""
print(find_dict)
2、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""搜索名片"""
print("-" * 50)
print("功能:搜索名片")
# 1. 提示要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2. 遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("-" * 40)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
print("-" * 40)
# TODO(小明) 针对找到的字典进行后续操作:修改/删除
deal_card(card_dict)
break
else:
print("没有找到 %s" % find_name)
def deal_card(find_dict):
"""操作搜索到的名片字典"""
print(find_dict)
3、示例:
九、处理名片-01-增加分支判断用户操作类型
1、在cards_tools.py中,增加名片操作函数修改/删除/返回主菜单
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典
"""
print(find_dict)
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上级菜单")
if action_str == "1":
print("修改名片")
elif action_str == "2":
print("删除名片")
2、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""搜索名片"""
print("-" * 50)
print("功能:搜索名片")
# 1. 提示要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2. 遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("-" * 40)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
print("-" * 40)
# TODO(小明) 针对找到的字典进行后续操作:修改/删除
deal_card(card_dict)
break
else:
print("没有找到 %s" % find_name)
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典
"""
print(find_dict)
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上级菜单")
if action_str == "1":
print("修改名片")
elif action_str == "2":
print("删除名片")
3、示例
十、处理名片-02-删除名片
1、在cards_tools.py中的增加名片操作函数()中,完成 删除 操作。
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典
"""
print(find_dict)
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上级菜单")
if action_str == "1":
print("修改名片")
elif action_str == "2":
card_list.remove(find_dict)
print("删除名片成功!")
2、名片管理系统 案例:— cards_tools.py 代码
# cards_tools.py
# 所有名片记录的列表
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V1.0")
print("")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("")
print("0.退出系统")
print("*" * 50)
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
# 1)提示用户依次输入名片信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq号码:")
email_str = input("请输入email:")
# 2)将名片信息保存到一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3)将字典添加到名片列表
card_list.append(card_dict)
# 4)提示名片添加完成
print(card_list)
print("添加用户 %s 的名片成功" % name_str)
def show_all():
"""显示全部名片"""
print("-" * 50)
print("功能:显示全部名片")
# 判断是否有名片记录,如果没有,提示用户并且返回
if len(card_list) == 0:
print("提示:没有任何名片记录")
# 在函数中使用 `return` 表示返回,下方的代码不会再执行。
# 如果在 `return` 后没有跟任何内容,表示会返回到调用函数位置,并不返回任何结果
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
print(name, end="\t\t")
print("")
# 打印分隔线
print("=" * 50)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""搜索名片"""
print("-" * 50)
print("功能:搜索名片")
# 1. 提示要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2. 遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("-" * 40)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
print("-" * 40)
# TODO(小明) 针对找到的字典进行后续操作:修改/删除
deal_card(card_dict)
break
else:
print("没有找到 %s" % find_name)
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典
"""
print(find_dict)
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上级菜单")
if action_str == "1":
print("修改名片")
elif action_str == "2":
card_list.remove(find_dict)
print("删除名片成功!")
3、名片管理系统 案例:— cards_main.py 代码
# cards_main.py
import cards_tools
# 添加一个无限循环,由用户主动决定什么时候退出循环
while True:
# TODO(小明) 显示功能菜单
cards_tools.show_menu()
action_str = input("请选择希望执行的操作:")
print("您选择的操作是【%s】" % action_str)
# 1,2,3针对名片的操作
if action_str in ["1", "2", "3"]:
# 新增名片
if action_str == "1":
cards_tools.new_card()
# 显示全部
elif action_str == "2":
cards_tools.show_all()
# 查询名片
elif action_str == "3":
cards_tools.search_card()
pass
# 0 退出系统
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
# 如果在开发中,不希望立刻编写分支内部的代码,可以使用 pass 关键字
# pass 表示一个占位符,能够保证程序代码结构正确。
# 程序运行时,pass关键字不会执行任何操作。
# pass
# 其他内容输入错误,需要提示用户
else:
print("您输入的不正确,请重新选择")
4、示例
上一节关联链接请点击:
21_ Python基础到实战一飞冲天(二)-python基础(二十一)–名片管理系统案例框架搭建