博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
07名片管理系统
阅读量:6679 次
发布时间:2019-06-25

本文共 5932 字,大约阅读时间需要 19 分钟。

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         pass12     # 0 退出系统13     elif action_str == "0":14 15         print("欢迎再次使用【名片管理系统】")16 17         break18         # 如果在开发程序时, 不希望立刻写分支内部的代码19         # 可以使用 pass 关键字, 表示一个占位符, 能够保证程序的代码结构正确!20         # 程序运行时, pass 关键字不会执行任何的操作!21         # pass22     # 其他内容输入错误, 需要提示用户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         pass25     # 0 退出系统26     elif action_str == "0":27 28         print("欢迎再次使用【名片管理系统】")29 30         break31         # 如果在开发程序时, 不希望立刻写分支内部的代码32         # 可以使用 pass 关键字, 表示一个占位符, 能够保证程序的代码结构正确!33         # 程序运行时, pass 关键字不会执行任何的操作!34         # pass35     # 其他内容输入错误, 需要提示用户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="\t\t") 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="\t\t") 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("姓名\t\t电话\t\tQQ\t\t邮箱") 87             print("=" * 30) 88             print("%s\t\t%s\t\t%s\t\t%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_str138     # 3.如果用户没有输入内容, 返回 "字典中原有的值"139     else:140         return dict_value

 

转载于:https://www.cnblogs.com/xinmomoyan/p/10345900.html

你可能感兴趣的文章
GCD多线程使用
查看>>
[转载] 格式化字符串漏洞原理介绍
查看>>
python小项目之微信远程控制
查看>>
Mysql本地安装多实例后启动遇到的问题
查看>>
用 RPM 打包软件,第 1 部分
查看>>
POJ题目(转)
查看>>
js使用闭包时,内部函数是直接访问外部函数的实际变量而非复制一份新变量...
查看>>
P3622 [APIO2007]动物园
查看>>
HBase原理和设计
查看>>
map通过value获取对应key
查看>>
day24 异常处理
查看>>
day28 classmethod 装饰器
查看>>
jquery 实现弹出框 打开与关闭
查看>>
LESS 学习整理总结
查看>>
QName
查看>>
LeetCode OJ:Reverse Linked List II(反转链表II)
查看>>
LeetCode OJ:Binary Tree Zigzag Level Order Traversal(折叠二叉树遍历)
查看>>
海量数据、高并发优化方案
查看>>
会计的思考(35):会计数据之殇
查看>>
10多媒体
查看>>