07名片管理系统

1.  系统需求

  • 程序启动, 显示名片管理系统欢迎界面, 并显示功能菜单
  • 用户用数字选择不同的功能
  • 根据功能选择,  执行不能的功能
  • 用户名片需要记录用户的 姓名 , 电话 , QQ ,邮件
  • 如果查询到指定的名片,  用户可以选择 修改 或者 删除 名片

步骤

  1. 框架搭建
  2. 新增名片
  3. 显示所有名片
  4. 查询名片
  5. 查询成功后修改, 删除名片
  6. 让 Python 程序能够直接运行

2.  框架搭建
目标

  • 搭建名片管理系统 框架结构
  1. 准备文件,  确定文件名,  保证能够  在需要的位置 编写代码
  2. 编写 主运行循环,  实现基本的 用户输入和判断

2.1  文件准备

1. 新建 cards_main.py 保存 主程序功能代码

程序的入口
2. 新建 cards_tools.py 保存 所有名片功能函数

  • 将对名片的 新增, 查询, 修改, 删除 等功能封装在不同的函数中

2.2  编写主运行循环

  1. 在 cards_main 中添加一个 无限循环
 1 while True:
 2 
 3     # 显示功能菜单
 4 
 5     action_str = input("请选择希望执行的操作: ")
 6 
 7     print("您选择的操作是 %s" % action_str)
 8 
 9     # 根据用户输入决定后续的操作
10     if action_str in ["1", "2", "3"]:
11         pass
12     # 0 退出系统
13     elif action_str == "0":
14 
15         print("欢迎再次使用【名片管理系统】")
16 
17         break
18         # 如果在开发程序时, 不希望立刻写分支内部的代码
19         # 可以使用 pass 关键字, 表示一个占位符, 能够保证程序的代码结构正确!
20         # 程序运行时, pass 关键字不会执行任何的操作!
21         # pass
22     # 其他内容输入错误, 需要提示用户
23     else:
24         print("您输入的不正确, 请重新选择")

字符串判断

    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注释 去掉
# TODO (作者 / 邮件) 显示系统菜单
在 PyCharm 左下角可以查找到哪些地方做过 TODO 注释 ,然后点击跳转, 就可以直接开始写代码了

3.  保存名片数据的结构 
程序就是用来处理数据的,  而变量就是用来存储数据的

  • 使用 字典 记录 每一张名片 的详细信息
  • 使用 列表 统一记录所有的 名片字典

定义名片列表变量 

在 cards_tools 文件的顶部增加一个 列表变量
# 记录所有名片的列表
card_list = []
注意 :

所有名片相关操作,  都需要使用这个列表,  所以应该 定义在程序的顶部
程序刚运行时,  没有数据,  所以是 空列表

 1 import cards_tools
 2 
 3 while True:
 4 
 5     # 显示功能菜单
 6     cards_tools.show_menu()
 7 
 8     action_str = input("请选择希望执行的操作: ")
 9 
10     print("您选择的操作是 %s" % action_str)
11 
12     # 根据用户输入决定后续的操作
13     if action_str in ["1", "2", "3"]:
14 
15         # 新增名片
16         if action_str == "1":
17             cards_tools.new_card()
18         # 显示全部
19         elif action_str == "2":
20             cards_tools.show_all()
21         # 查询名片
22         elif action_str == "3":
23             cards_tools.search_card()
24         pass
25     # 0 退出系统
26     elif action_str == "0":
27 
28         print("欢迎再次使用【名片管理系统】")
29 
30         break
31         # 如果在开发程序时, 不希望立刻写分支内部的代码
32         # 可以使用 pass 关键字, 表示一个占位符, 能够保证程序的代码结构正确!
33         # 程序运行时, pass 关键字不会执行任何的操作!
34         # pass
35     # 其他内容输入错误, 需要提示用户
36     else:
37         print("您输入的不正确, 请重新选择")
  1 # 记录所有名片的列表
  2 card_list = []
  3 
  4 
  5 def show_menu():
  6     """显示菜单"""
  7     print("*" * 30)
  8     print("欢迎使用【名片管理系统】v 8.0")
  9     print("")
 10     print("1 . 新建名片")
 11     print("2 . 显示全部")
 12     print("3 . 搜索名片")
 13     print("")
 14     print("0 . 退出系统")
 15     print("*" * 30)
 16 
 17 
 18 def new_card():
 19     """新增名片"""
 20     print("-" * 30)
 21     print("新增名片")
 22     # 1. 提示用户输入名片的详细信息
 23     name_str = input("请输入姓名: ")
 24     phone_str = input("请输入电话: ")
 25     qq_str = input("请输入QQ: ")
 26     email_str = input("请输入邮箱: ")
 27     # 2. 使用用户输入信息建立一个名片字典
 28     card_dict = {
 29         "name": name_str,
 30         "phone": phone_str,
 31         "qq": qq_str,
 32         "email": email_str
 33     }
 34 
 35     # 3. 将名片字典添加到列表中
 36     card_list.append(card_dict)
 37 
 38     print(card_list)
 39 
 40     # 4. 提示用户添加名片成功
 41     print("添加 %s 的名片成功" % card_dict['name'])
 42 
 43 
 44 def show_all():
 45     """显示所有名片"""
 46     print("-" * 30)
 47     print("显示所有名片")
 48     # 判断是否存在名片记录, 如果没有, 提示用户并且返回
 49     if len(card_list) == 0:
 50         print("当前没有任何的名片记录, 请使用新增功能添加名片")
 51 
 52         # return 可以返回一个函数的执行结果
 53         # 下方的代码不会被执行
 54         # 如果 return 后面没有任何的内容, 表示会返回到调用函数的位置
 55         # 并且不返回任何的结果
 56         return
 57 
 58     # 打印表头
 59     for name in ["姓名", "电话", "QQ", "邮箱"]:
 60         print(name, end="		")
 61     print("")
 62 
 63     # 打印分割线
 64     print("=" * 30)
 65 
 66     # 遍历名片列表一次输入字典信息
 67     for card_dict in card_list:
 68         # 遍历名片信息
 69         for item in card_dict:
 70             print(card_dict[item], end="		")
 71         print("")
 72 
 73 
 74 def search_card():
 75     """搜索名片"""
 76     print("-" * 30)
 77     print("搜索名片")
 78 
 79     # 1. 提示用户输入要搜索的姓名
 80     find_name = input("请输入要搜索的姓名: ")
 81 
 82     # 2. 遍历名片列表, 查询要搜索的姓名, 如果没有找到, 需要提示用户
 83     for card_dict in card_list:
 84 
 85         if card_dict["name"] == find_name:
 86             print("姓名		电话		QQ		邮箱")
 87             print("=" * 30)
 88             print("%s		%s		%s		%s" % (card_dict["name"],
 89                                             card_dict["phone"],
 90                                             card_dict["qq"],
 91                                             card_dict["email"]))
 92 
 93             # 针对找到的名片记录执行修改和删除的操作
 94             deal_card(card_dict)
 95 
 96             break
 97 
 98     else:
 99 
100         print("抱歉, 没有找到 %s" % find_name)
101 
102 
103 def deal_card(find_dict):
104     """处理查找到的名片
105     :param find_dict: 查找到的名片
106     """
107     print(find_dict)
108 
109     #
110     action_str = input("请输入对名片的操作: 1. 修改 2. 删除 0. 返回上级菜单")
111 
112     if action_str == "1":
113         find_dict['name'] = input_card_info(find_dict['name'], "姓名: ")
114         find_dict['phone'] = input_card_info(find_dict['phone'], "电话: ")
115         find_dict['qq'] = input_card_info(find_dict['qq'], "QQ: ")
116         find_dict['email'] = input_card_info(find_dict['email'], "邮箱: ")
117 
118         print("修改名片成功! ")
119     elif action_str == "2":
120 
121         card_list.remove(find_dict)
122 
123         print("删除名片成功!")
124 
125 
126 def input_card_info(dict_value, tip_message):
127     """输入名片信息
128     :param dict_value: 字典中原有的值
129     :param tip_message: 输入的提示文字
130     :return:
131     """
132 
133     # 1. 提示用户输入内容
134     result_str = input(tip_message)
135     # 2. 针对用户的输入进行判断, 如果用户输入了内容, 直接返回结果
136     if len(result_str) > 0:
137         return result_str
138     # 3.如果用户没有输入内容, 返回 "字典中原有的值"
139     else:
140         return dict_value
原文地址:https://www.cnblogs.com/xinmomoyan/p/10345900.html