Python综合应用名片管理系统案例详解


Posted in Python onJanuary 03, 2020

本文实例讲述了Python综合应用名片管理系统。分享给大家供大家参考,具体如下:

综合应用已经学习过的知识点:

  • 变量
  • 流程控制
  • 函数
  • 模块

开发 名片管理系统

系统需求

  1. 程序启动,显示名片管理系统欢迎界面,并显示功能菜单
**************************************************
欢迎使用【名片管理系统】V1.0

1. 新建名片
2. 显示全部
3. 查询名片

0. 退出系统
**************************************************
    1. 用户用数字选择不同的功能
    1. 根据功能选择,执行不同的功能
    1. 用户名片需要记录用户的 姓名、电话、QQ、邮件
    1. 如果查询到指定的名片,用户可以选择 修改 或者 删除 名片

步骤

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

01. 框架搭建

目标

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

1.1 文件准备

  1. 新建 cards_main.py 保存 主程序功能代码
    • 程序的入口
    • 每一次启动名片管理系统都通过 main 这个文件启动
  2. 新建 cards_tools.py 保存 所有名片功能函数
    • 将对名片的 新增、查询、修改、删除 等功能封装在不同的函数中

1.2 编写主运行循环

  • 在 cards_main 中添加一个 无限循环
while True:

  # TODO(小明) 显示系统菜单

  action = input("请选择操作功能:")

  print("您选择的操作是:%s" % action)

  # 根据用户输入决定后续的操作
  if action in ["1", "2", "3"]:
    pass
  elif action == "0":
    print("欢迎再次使用【名片管理系统】")

    break
  else:
    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(作者/邮件) 显示系统菜单

1.3 在 cards_tools 中增加四个新函数

def show_menu():

  """显示菜单
  """
  pass

def new_card():

  """新建名片
  """
  print("-" * 50)
  print("功能:新建名片")


def show_all():

  """显示全部
  """
  print("-" * 50)
  print("功能:显示全部")


def search_card():

  """搜索名片
  """
  print("-" * 50)
  print("功能:搜索名片")

1.4 导入模块

  • 在 cards_main.py 中使用 import 导入 cards_tools 模块
import cards_tools

修改 while 循环的代码如下:

import cards_tools

while True:

  cards_tools.show_menu()

  action = input("请选择操作功能:")

  print("您选择的操作是:%s" % action)

  # 根据用户输入决定后续的操作
  if action in ["1", "2", "3"]:

    if action == "1":
      cards_tools.new_card()

    elif action == "2":
      cards_tools.show_all()

    elif action == "3":
      cards_tools.search_card()

  elif action == "0":
    print("欢迎再次使用【名片管理系统】")

    break
  else:
    print("输入错误,请重新输入:")

至此:cards_main 中的所有代码全部开发完毕!

1.5 完成 show_menu 函数

def show_menu():

  """显示菜单
  """
  print("*" * 50)
  print("欢迎使用【菜单管理系统】V1.0")
  print("")
  print("1. 新建名片")
  print("2. 显示全部")
  print("3. 查询名片")
  print("")
  print("0. 退出系统")
  print("*" * 50)

02. 保存名片数据的结构

程序就是用来处理数据的,而变量就是用来存储数据的

  • 使用 字典 记录 每一张名片 的详细信息

  • 使用 列表 统一记录所有的 名片字典
    Python综合应用名片管理系统案例详解
    定义名片列表变量

  • 在 cards_tools 文件的顶部增加一个 列表变量

# 所有名片记录的列表
card_list = []

注意

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

03. 新增名片

3.1 功能分析

  1. 提示用户依次输入名片信息
  2. 将名片信息保存到一个字典
  3. 将字典添加到名片列表
  4. 提示名片添加完成

3.2 实现 new_card 方法

  • 根据步骤实现代码
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 的名片" % card_dict["name"])

技巧:在 PyCharm 中,可以使用 SHIFT + F6 统一修改变量名

04. 显示所有名片

4.1 功能分析

  • 循环遍历名片列表,顺序显示每一个字典的信息

4.2 基础代码实现

def show_all():

  """显示全部
  """
  print("-" * 50)
  print("功能:显示全部")

  for card_dict in card_list:

    print(card_dict)
  • 显示效果不好!

4.3 增加标题和使用 \t 显示

def show_all():
  """显示全部
  """
  print("-" * 50)
  print("功能:显示全部")

  # 打印表头
  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.4 增加没有名片记录判断

def show_all():
  """显示全部
  """
  print("-" * 50)
  print("功能:显示全部")

  # 1. 判断是否有名片记录
  if len(card_list) == 0:
    print("提示:没有任何名片记录")

    return

注意

  • 在函数中使用 return 表示返回
  • 如果在 return 后没有跟任何内容,只是表示该函数执行到此就不再执行后续的代码

05. 查询名片

5.1 功能分析

  1. 提示用户要搜索的姓名
  2. 根据用户输入的姓名遍历列表
  3. 搜索到指定的名片后,再执行后续的操作

5.2 代码实现

  • 查询功能实现
def search_card():

  """搜索名片
  """
  print("-" * 50)
  print("功能:搜索名片")

  # 1. 提示要搜索的姓名
  find_name = input("请输入要搜索的姓名:")

  # 2. 遍历字典
  for card_dict in card_list:

    if card_dict["name"] == find_name:

      print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
      print("-" * 40)
      
      print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (
        card_dict["name"],
        card_dict["phone"],
        card_dict["qq"],
        card_dict["email"]))

      print("-" * 40)
      
      # TODO(小明) 针对找到的字典进行后续操作:修改/删除

      break
  else:
    print("没有找到 %s" % find_name)

增加名片操作函数:修改/删除/返回主菜单

def deal_card(find_dict):

  """操作搜索到的名片字典

  :param find_dict:找到的名片字典
  """
  print(find_dict)

  action_str = input("请选择要执行的操作 "
            "[1] 修改 [2] 删除 [0] 返回上级菜单")

  if action == "1":
    print("修改")
  elif action == "2":
    print("删除")

06. 修改和删除

6.1 查询成功后删除名片

  • 由于找到的字典记录已经在列表中保存
  • 要删除名片记录,只需要把列表中对应的字典删除即可
elif action == "2":
    card_list.remove(find_dict)

    print("删除成功")

6.2 修改名片

由于找到的字典记录已经在列表中保存

  • 要修改名片记录,只需要把列表中对应的字典中每一个键值对的数据修改即可
if action == "1":

    find_dict["name"] = input("请输入姓名:")
    find_dict["phone"] = input("请输入电话:")
    find_dict["qq"] = input("请输入QQ:")
    find_dict["email"] = input("请输入邮件:")

    print("%s 的名片修改成功" % find_dict["name"])

修改名片细化

  • 如果用户在使用时,某些名片内容并不想修改,应该如何做呢?—— 既然系统提供的 input 函数不能满足需求,那么就新定义一个函数 input_card_info 对系统的 input 函数进行扩展
def input_card_info(dict_value, tip_message):

  """输入名片信息

  :param dict_value: 字典原有值
  :param tip_message: 输入提示信息
  :return: 如果输入,返回输入内容,否则返回字典原有值
  """
  # 1. 提示用户输入内容
  result_str = input(tip_message)

  # 2. 针对用户的输入进行判断,如果用户输入了内容,直接返回结果
  if len(result_str) > 0:

    return result_str
  # 3. 如果用户没有输入内容,返回 `字典中原有的值`
  else:

    return dict_value

07. LINUX 上的 Shebang 符号(#!)

  • #!这个符号叫做 Shebang 或者 Sha-bang
  • Shebang 通常在 Unix 系统脚本的中 第一行开头 使用
  • 指明 执行这个脚本文件 的 解释程序

使用 Shebang 的步骤

    1. 使用 which 查询 python3 解释器所在路径
$ which python3

修改要运行的 主 python 文件,在第一行增加以下内容

#! /usr/bin/python3

修改 主 python 文件 的文件权限,增加执行权限

$ chmod +x cards_main.py

在需要时执行程序即可

./cards_main.py

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中字符编码简介、方法及使用建议
Jan 08 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
Python数据类型详解(二)列表
May 08 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 Python
python traceback捕获并打印异常的方法
Aug 31 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
简单了解python的break、continue、pass
Jul 08 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 Python
Python tkinter常用操作代码实例
Jan 03 #Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 #Python
nginx搭建基于python的web环境的实现步骤
Jan 03 #Python
Python如何使用字符打印照片
Jan 03 #Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 #Python
如何基于python实现画不同品种的樱花树
Jan 03 #Python
Python基础之变量基本用法与进阶详解
Jan 03 #Python
You might like
php基于session实现数据库交互的类实例
2015/08/03 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
总结Python中逻辑运算符的使用
2015/05/13 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
学校火灾防控方案
2014/06/09 职场文书
高中教师个人工作总结
2015/02/10 职场文书
运动会通讯稿600字
2015/07/20 职场文书
如何书写邀请函?
2019/06/24 职场文书