写在开头:自用-----06-文件名片管理系统中有详细代码(无数据库)
课程:B站
已经学习过的知识点:
变量
流程控制
函数
模块
系统需求
1.程序启动,显示名片管理系统欢迎界面,并显示功能菜单
插入1图
2.用户用数字选择不同的功能
3.用户名片需要记录用户的姓名,电话,QQ,邮件
4.如果查询到指定名片,用户可以选择修改或者删除名片
01.框架搭建
1.准备文件,确定文件名,保证能够 在需要的位置编写代码
2.编写 主运行循环,实现基本的 用户输入和判断
1.1 文件准备
1. 新建 card_main.py 保存 主程序功能代码
程序的入口
每次启动名片管理系统都通过 mian 这个文件启动
2. 新建 card_tools.py 不保存所有名片功能函数
将对名片的新增,查询,删除等功能封装在不同的函数中
1.2 编写主运行循环
在 card_main 中添加一个无限循环
①用户输入 判断 和 pass 关键字
action_str = input("请选择希望执行的操作:") print("您选择的操作是【%s】" % action_str) # 1,2,3 针对名片的操作 if action_str in ["1","2","3"]: # 如果在开发程序时,不希望立刻编写分支内部的代码 # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确 # 程序运行时, pass 不会执行任何操作 pass # 0 退出系统 elif action_str == "0": pass # 其他内容输入错误,需要提示用户 else: print("您输入的不正确,请重新选择")
②无限循环——保证用户能够重复选择需要的操作
# 无限循环,由用户决定什么时候退出循环 while True: action_str = input("请选择希望执行的操作:") print("您选择的操作是【%s】" % action_str) # 1,2,3 针对名片的操作 if action_str in ["1","2","3"]: # 如果在开发程序时,不希望立刻编写分支内部的代码 # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确 # 程序运行时, pass 不会执行任何操作 pass # 0 退出系统 elif action_str == "0": print("欢迎再次使用名片管理系统!") break # pass # 其他内容输入错误,需要提示用户 else: print("您输入的不正确,请重新选择")
③ if 循环嵌套,判断用户具体操作,预留代码位置
if action_str in ["1","2","3"]: #新增名片 if action_str == "1": pass #显示全部 elif action_str == "2": pass #查询名片 elif action_str == "3": pass # 如果在开发程序时,不希望立刻编写分支内部的代码 # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确 # 程序运行时, pass 不会执行任何操作 # pass
④显示欢迎界面和功能菜单---在 cards_tools.py 文件中定义show_menu()
def show_menu(): """显示菜单""" print("*" * 50) print("欢迎使用【名片管理系统】V 1.0") print("") print("1. 新增名片") print("2. 显示全部") print("3. 搜索名片") print("") print("0. 退出系统") print("*" * 50)
⑤在 cards_main.py 文件中引入
import cards_tools #无限循环,由用户主动决定什么时候退出循环 while True: # 显示功能菜单 cards_tools.show_menu() action_str = input("请选择希望执行的操作:") print("您选择的操作是【%s】" %action_str)
⑥准备名片操作函数,修改 cards_main.py 文件中的函数调用(将pass 关键字 替换为函数调用)
#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()
cards_tools.py 文件中
def new_card(): """新增名片""" print("新增名片") def show_all(): """显示所有名片""" print("*" * 50) print("搜索名片") def search_card(): print("搜索名片")
02.保存名片的数据结构
程序就是用来处理数据的,而变量就是用来存储数据的
使用 字典 记录 每一张名片 的详细信息
使用 列表 统一记录所有的 名片字典
定义名片列表变量
在 card_tools 文件的顶部增加一个 列表变量
#记录所有名片字典 card_list = []
注意:
1.所有名片相关操作,都需要使用这个列表,所以应该定义在程序的顶部
2.程序刚运行时,没有数据,所以是 空列表
03.新增名片功能的实现
1. 提示用户输入名片的详细信息
2. 使用用户输入的信息建立一个名片字典
3. 将名片字典添加到列表中
4. 提示用户添加成功
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 的名片成功!" %name )
04.显示全部
4.1 遍历列表显示字典明细
# 打印表头 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.2 判断列表数量,没有名片直接返回
#判断是否存在名片记录,如果没有,提示用户并且返回 if len(card_list) == 0: print("当前没有任何的名片记录,请使用新增名片功能添加名片!") # return 可以返回一个函数的执行结果 # 下方的代码不会执行 # 如果 return 后面没有任何内容,表示会返回到调用函数的位置 #并且不返回任何结果 return
05.查询名片
5.1 查询功能的实现
def search_card(): print("搜索名片") # 1.提示用户输入要搜索的姓名 find_name = input("请输入要搜索的姓名;") # 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户 for card_dict in card_list: if card_dict["name"] == find_name: print("姓名\t\t电话\t\tQQ\t\t邮箱") print("*" * 50) 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("抱歉,没有找到!")
5.2 针对用户的选择,增加判断分支
def deal_card(find_dict): # 1. 接收用户选择的操作 action_str = input("请选择要执行的操作 【1】修改 【2】删除 " "0 返回上级菜单") # 2.增加判断分支 if action_str == "1": print("修改名片") elif action_str == "2": print("删除名片") # pass
5.3 删除名片
elif action_str == "2": card_list.remove(find_dict) print("删除名片成功!")
5.4 修改名片
5.4.1 直接对字典的值进行修改
if action_str == "1":
find_dict["name"] = input("姓名:")
find_dict["phone"] = input("电话:")
find_dict["qq"] = input("QQ:")
find_dict["email"] = input("邮箱:")print("修改名片成功!")
5.4.2 细化修改名片的功能,准备新的输入函数
def input_card_info(dict_value,tip_message): # 1.提示用户输入的内容 result_str = input(tip_message) # 2.针对用户的输入进行判断,如果用户输入了内容 if len(result_str) > 0: return result_str # 3.直接返回该内容,否则返回 “字典中原有的值” else: return dict_value
# 在 card_tools.py 文件的 deal_card()的 if分支中,修改input()函数
# 2.增加判断分支 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("修改名片成功!")