zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    在Ubuntu 20.04 LTS Focal Fossa上安装Deluge
    如何使用命令行快速检查Linux系统的版本
    如何在Debian 10上安装NVM
    如何在CentOS 8上安装Apache ActiveMQ
    如何在Linux中引导时列出启动服务?
    如何检查Linux Mint 20磁盘错误的方法
    如何在Firewalld中打开特定IP地址的端口?
    如何在CentOS 8服务器安装oVirt开源虚拟化管理系统
    如何在Centos 8服务器上安装LogAnalyzer?
    如何在Debian中使用apt从命令行安装程序
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/10345900.html
Copyright © 2011-2022 走看看