综合应用 - 名片管理系统
目标
综合应用已经学习过的知识点
- 变量
- 流程控制
- 函数
- 模块
开发 名片管理系统
系统需求
- 1,程序启动,显示名片管理系统欢迎界面,并显示功能菜单
*********************************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
*********************************************************************
- 2,用户用数字选择不同的功能
- 3,根据功能选择,执行不同的功能
- 4,用户名片需要记录用户的 姓名、绰号、能力、出身、地位、悬赏金
- 5,如果查询到指定的名片,用户可以选择 修改 或者 删除 名片
步骤
1,框架搭建
2,新增名片
3,显示所有名片
4,查询名片
5,查询成功后修改、删除名片
6,让python程序能够直接运行
1,框架搭建
目标
-
搭建 名片管理系统 框架结构
1,准备文件,确定文件名,保证能够 在需要的位置 编写代码
2,编写 主运行循环,实现基本的 用户输入和判断
1.1 文件准备
1,新建cards_main.py
保存 主程序功能代码
- 程序入口
- 每一次启动名片管理系统通过
main
这个文件启动
2,新建cards_tools.py
保存 所有名片功能函数
- 将对名片的 新增、查询、修改、删除 等功能封装在不同的函数中
1.2 编写主运行循环
- 在
cards_main
中添加一个无限循环
while True:
# TODO(作者/邮件) 显示系统菜单
action_str = input("请选择操作功能:")
print("您选择的操作是: %s" % action_str)
# 根据用户输入决定后续的操作
if action_str in ["1", "2", "3"]:
pass
# 1,新建名片
if action_str == "1":
pass
# 2,显示全部
if action_str == "2":
pass
# 3,搜索名片
if action_str == "3":
pass
elif action_str == "0":
# 0,退出系统
print("欢迎再次使用【名片管理系统】")
break
else:
print("输入错误,请重新输入")
# 结果呈现
请选择操作功能:6
您选择的操作是: 6
输入错误,请重新输入
请选择操作功能:1
您选择的操作是: 1
请选择操作功能:0
您选择的操作是: 0
欢迎再次使用【名片管理系统】
字符串判断
if action in ["1", "2", "3"]:
if action == "1" or action == "2" or action == "3":
1,使用 in
针对 列表 判断,避免使用 or
拼接复杂的逻辑条件
2,没有使用 int
转换用户输入,可以避免 一旦用户输入的不是数字 ,导致程序运行报错
pass
pass
就是一个空语句,不做任何事情,一般用做占位语句- 是为了保持程序结构的完整性
无限循环
- 在开发软件时,如果 不希望程序执行后 立即退出
- 可以在程序增加一个 无限循环
- 由用户来决定 退出程序的时机
TODO注释
- 在
#
后跟上TODO
,用于标记需要去做 工作
# TODO(作者/邮件) 显示系统菜单
1.3 编写函数集合文件
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_tools
文件的顶部增加了一个 列表变量
# 所有名片记录的列表
card_list = []
注意
1,所有名片相关操作 ,都需要使用这个列表,所以应该 定义在程序的顶部
2,程序刚运行时,没有数据 ,所以是个 空列表
完善cards_tools 函数脚本
# 记录所有的名片字典
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("请输入姓名:")
nickname_str = input("请输入绰号:")
ability_str = input("请输入能力:")
origin_str = input("请输入出身:")
status_str = input("请输入地位:")
reward_str = input("请输入悬赏金:")
# 2,使用用户提供的信息创建一个字典
card_dict = {
"name": name_str,
"nickname": nickname_str,
"ability": ability_str,
"origin": origin_str,
"status": status_str,
"reward": reward_str
}
# 3,将名片字典添加到列表中
card_list.append(card_dict)
# 4,提示用户添加成功
print("添加成功 %s" % name_str)
def show_all():
"""显示全部"""
print("-" * 50)
print("显示全部")
# 判断是否存在名片记录,如果不存在,则提示用户并返回信息
if len(card_list) == 0:
print("当前没有任何名片记录,请使用新增功能添加名片")
# return 可以返回一个函数的执行结果
# 下方的代码不会被执行
# 如果 return 后面没有任何的内容,表示返回到调用函数的位置
# 并且不会返回任何的结果
return
# 打印表头
for n in ["姓名", "绰号", "能力", "出身", "地位", "悬赏金"]:
print(n, end=" ")
print("")
# 打印分割线
print("-" * 50)
# 遍历名片依次输出字典信息
for card_dict in card_list:
for info in card_dict:
print("%s" % card_dict[info], end=" ")
print("")
print("-" * 50)
def search_card():
"""搜索名片"""
print("-" * 50)
print("搜索名片")
search_name = input("搜索的名字:")
for card_dict in card_list:
if search_name == card_dict["name"]:
# 打印表头
for n in ["姓名", "绰号", "能力", "出身", "地位", "悬赏金"]:
print(n, end=" ")
print("")
# 打印分割线
print("-" * 50)
# 遍历名片依次输出字典信息
for info in card_dict:
print("%s" % card_dict[info], end=" ")
print("")
print("-" * 50)
# 针对找到的名片记录执行修改和删除操作
deal_card(card_dict)
break
else:
print("抱歉,没有找到:%s" % search_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("请修改姓名:")
# find_dict["nickname"] = input("请修改绰号:")
# find_dict["ability"] = input("请修改能力:")
# find_dict["origin"] = input("请修改出身:")
# find_dict["status"] = input("请修改出身:")
# find_dict["reward"] = input("请修改悬赏金:")
for info in find_dict:
temp_dict = {"name": "姓名",
"nickname": "绰号",
"ability": "能力",
"origin": "出身",
"status": "地位",
"reward": "悬赏金"}
for n in temp_dict:
if n == info:
find_dict[info] = input_card_info(find_dict[info], "请输入要修改的%s:" % temp_dict[n])
# break
print("修改名片")
if action_str == "2":
card_list.remove(find_dict)
print("删除名片")
def input_card_info(dict_value, tip_message):
"""输入名片信息
:param dict_value: 字典中原有的值
:param tip_message: 输入的提示文字
:return:如果用户输入了内容,就返回tip_message,否则返回dict_value
"""
# 1,提示用户输入内容
result_str = input(tip_message)
# 2,针对用户的输入进行判断,如果用户输入了内容,直接返回结果
if len(result_str) > 0:
return result_str
# 3,如果用户没有输入内容,返回`字典原有的值`
else:
return dict_value
# 结果呈现
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:1
您选择的操作是: 1
--------------------------------------------------
新增名片
请输入姓名:娜美
请输入绰号:小贼猫
请输入能力:武器天候棒
请输入出身:东海-可可亚西村
请输入地位:航海士
请输入悬赏金:六千六百万
添加成功 娜美
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
显示全部
姓名 绰号 能力 出身 地位 悬赏金
--------------------------------------------------
娜美 小贼猫 武器天候棒 东海-可可亚西村 航海士 六千六百万
--------------------------------------------------
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:3
您选择的操作是: 3
--------------------------------------------------
搜索名片
搜索的名字:娜美
姓名 绰号 能力 出身 地位 悬赏金
--------------------------------------------------
娜美 小贼猫 武器天候棒 东海-可可亚西村 航海士 六千六百万
--------------------------------------------------
请选择要执行的操作 [1] 修改 [2] 删除 [0] 返回上级菜单,请选择: 1
请输入要修改的姓名:
请输入要修改的绰号:
请输入要修改的能力:
请输入要修改的出身:
请输入要修改的地位:
请输入要修改的悬赏金:六千六百六十六万
修改名片
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
显示全部
姓名 绰号 能力 出身 地位 悬赏金
--------------------------------------------------
娜美 小贼猫 武器天候棒 东海-可可亚西村 航海士 六千六百六十六万
--------------------------------------------------
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:3
您选择的操作是: 3
--------------------------------------------------
搜索名片
搜索的名字:娜美
姓名 绰号 能力 出身 地位 悬赏金
--------------------------------------------------
娜美 小贼猫 武器天候棒 东海-可可亚西村 航海士 六千六百六十六万
--------------------------------------------------
请选择要执行的操作 [1] 修改 [2] 删除 [0] 返回上级菜单,请选择: 2
删除名片
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
显示全部
当前没有任何名片记录,请使用新增功能添加名片
**************************************************
欢迎使用【名片管理系统】v1.0
1,新建名片
2,显示全部
3,查询名片
0,退出系统
**************************************************
请选择操作功能:0
您选择的操作是: 0
欢迎再次使用【名片管理系统】