前言
结合之前学过的内容做一个综合练习——名片管理系统。罗马不是一天建成的!写代码也一样,需要一步一步的去写,理清思路,有计划性的逐步完成会增加你写代码的幸福感!
一、目标
实现一个可执行查询,增加、修改的名片管理系统,主页面如下:
二、搭建框架
- 准备文件,确定文件名称及文件要实现的功能
1.1 文件准备
在pycharm中新建名片管理系统项目
新建cards_main.py
与cards_tools.py
俩个文件
cards_main
:作为主逻辑运行文件,内部主要构建循环框架
cards_tools
:主要为实现功能做定义函数的编写
- 编写主运行循环,实现基本的用户输入与判断
1.2 绘制流程图
三、确定要使用的数据结构
- 使用字典记录名片的每一张信息
- 使用列表统一记录所有名片列表
定义一个名片的列表变量,相当于找一个空瓶子,放在最前面,等要用到的时候直接拿来装东西。
card_list = []
四、功能实现
1.1确定主循环
- 无限循环
wihle Ture
不希望程序执行后立即退出,可以保证用户决定什么时候退出 - pass 一个空语句,用作一个占位符,保持程序结构的完整性(在搭建代码框架时可使用pass占位代替未写的功能代码,使其不影响到主结构的运行)
以下为cards_main.py
文件内所需的代码
# 写入死循环,由用户决定什么时候退出
while True:
# TODO(早盦呀) 显示功能菜单
action_str = input("请输入想要选择的功能:")
print("您选择的是 [%s]" % action_str)
# 针对名片的操作 1 2 3
if action_str in ["1","2","3"]:
# 新增名片
if action_str == "1":
pass
# 显示全部
elif action_str == "2":
pass
# 查询名片
else:
pass
# 选择0时退出
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
# 选择其他时提示输入错误
else:
print("您输入的不正确,请重新选择")
1.2 实现各部分功能
为了不使整个代码过于臃肿同时也可保证代码的灵活性,我们在对可实现功能的代码单独写入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("新增名片")
# 1.提示用户输入名片的详细信息
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入qq:")
email_str = input("请输入邮箱:")
# 2.使用用户输入的信息建立一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
print(card_list)
# 4.提示用户添加完成
print("添加 %s 的名片成功!" % name_str)
- 显示全部
def show_all():
"""显示全部"""
print("-" * 50)
print("显示所有名片")
# 判断是否存在名片,如果不存在,提示用户并且返回
if len(card_list) == 0:
print("当前没有任何的名片记录,请使用新增功能添加名片")
# 直接返回
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("查询名片")
# 提示用户输入要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 遍历名片列表,查询要搜索的姓名,如果没有找到提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t电话\t\tqq\t\t邮箱")
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
# TODO 针对找到的名作执行删除和修改的操作
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":
find_dict["name"] = input_card_info(find_dict["name"], "修改姓名:")
find_dict["phone"] = input_card_info(find_dict["phone"], "修改电话:")
find_dict["qq"] = input_card_info(find_dict["qq"], "修改qq:")
find_dict["email"] = input_card_info(find_dict["email"], "修改邮箱:")
print("已修改名片")
elif action_str == "2":
card_list.remove(find_dict)
print("已删除名片")
def input_card_info(dict_value, tip_message):
"""输入名片信息
:param dict_value:字典中原有的值
:param tip_message:输入的提示文字
:return:如果用户输入了内容就返回内容,如果没有就返回原有字典中的值
"""
# 1.提示用户输入
result_str = input(tip_message)
# 2.判断用户输入的内容,如果有,输出输入内容
if len(result_str) > 0:
return result_str
# 3.如果没有,则返回原有的值
else:
return dict_value
五、整理代码,并测试执行结果
- 以下为
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()
# 查询名片
else:
cards_tools.search_card()
# 选择0时退出
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
# pass
# 选择其他时提示输入错误
else:
print("您输入的不正确,请重新选择")
以下为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("请输入邮箱:")
# 2.使用用户输入的信息建立一个字典
card_dict = {"name": name_str,
"phone": phone_str,
"qq": qq_str,
"email": email_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
print(card_list)
# 4.提示用户添加完成
print("添加 %s 的名片成功!" % name_str)
def show_all():
"""显示全部"""
print("-" * 50)
print("显示所有名片")
# 判断是否存在名片,如果不存在,提示用户并且返回
if len(card_list) == 0:
print("当前没有任何的名片记录,请使用新增功能添加名片")
# 直接返回
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("查询名片")
# 提示用户输入要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 遍历名片列表,查询要搜索的姓名,如果没有找到提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t电话\t\tqq\t\t邮箱")
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
# 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":
find_dict["name"] = input_card_info(find_dict["name"], "修改姓名:")
find_dict["phone"] = input_card_info(find_dict["phone"], "修改电话:")
find_dict["qq"] = input_card_info(find_dict["qq"], "修改qq:")
find_dict["email"] = input_card_info(find_dict["email"], "修改邮箱:")
print("已修改名片")
elif action_str == "2":
card_list.remove(find_dict)
print("已删除名片")
def input_card_info(dict_value, tip_message):
"""输入名片信息
:param dict_value:字典中原有的值
:param tip_message:输入的提示文字
:return:如果用户输入了内容就返回内容,如果没有就返回原有字典中的值
"""
# 1.提示用户输入
result_str = input(tip_message)
# 2.判断用户输入的内容,如果有,输出输入内容
if len(result_str) > 0:
return result_str
# 3.如果没有,则返回原有的值
else:
return dict_value