Python应用小练习—名片管理系统

前言

结合之前学过的内容做一个综合练习——名片管理系统。罗马不是一天建成的!写代码也一样,需要一步一步的去写,理清思路,有计划性的逐步完成会增加你写代码的幸福感!

一、目标

实现一个可执行查询,增加、修改的名片管理系统,主页面如下:


image.png

二、搭建框架

  • 准备文件,确定文件名称及文件要实现的功能
1.1 文件准备

在pycharm中新建名片管理系统项目
新建cards_main.pycards_tools.py俩个文件
cards_main:作为主逻辑运行文件,内部主要构建循环框架
cards_tools:主要为实现功能做定义函数的编写

  • 编写主运行循环,实现基本的用户输入与判断
1.2 绘制流程图
代码执行简易流程图.jpg

三、确定要使用的数据结构

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

定义一个名片的列表变量,相当于找一个空瓶子,放在最前面,等要用到的时候直接拿来装东西。

card_list = []

四、功能实现

1.1确定主循环
  • 无限循环 wihle Ture不希望程序执行后立即退出,可以保证用户决定什么时候退出
  • pass 一个空语句,用作一个占位符,保持程序结构的完整性(在搭建代码框架时可使用pass占位代替未写的功能代码,使其不影响到主结构的运行)
    以下为cards_main.py文件内所需的代码
# 写入死循环,由用户决定什么时候退出
while True:
    # TODO(早盦呀) 显示功能菜单

    action_str = input("请输入想要选择的功能:")
    print("您选择的是 [%s]" % action_str)

    # 针对名片的操作 1 2 3
    if action_str in ["1","2","3"]:
        # 新增名片
        if action_str == "1":
            pass
        # 显示全部
        elif action_str == "2":
            pass
        # 查询名片
        else:
            pass

    # 选择0时退出
    elif action_str == "0":
        print("欢迎再次使用【名片管理系统】")
        break
      
    # 选择其他时提示输入错误
    else:
        print("您输入的不正确,请重新选择")
1.2 实现各部分功能

为了不使整个代码过于臃肿同时也可保证代码的灵活性,我们在对可实现功能的代码单独写入cards_tools.py文件,定义函数并可做模块导入使用

  • 显示菜单
def show_menu():
    """显示菜单"""
    print("*" * 50)
    print("欢迎使用名片管理系统 v1.0")
    print("")
    print("[1] 新增名片")
    print("[2] 显示全部")
    print("[3] 查询名片")
    print("")
    print("[0] 退出系统")
    print("*" * 50)
  • 新增名片
def new_card():
    """新增名片"""
    print("-" * 50)
    print("新增名片")

    # 1.提示用户输入名片的详细信息
    name_str = input("请输入姓名:")
    phone_str = input("请输入电话:")
    qq_str = input("请输入qq:")
    email_str = input("请输入邮箱:")
    # 2.使用用户输入的信息建立一个字典
    card_dict = {"name": name_str,
                 "phone": phone_str,
                 "qq": qq_str,
                 "email": email_str}
    # 3.将名片字典添加到列表中
    card_list.append(card_dict)
    print(card_list)

    # 4.提示用户添加完成
    print("添加 %s 的名片成功!" % name_str)
  • 显示全部
def show_all():
    """显示全部"""
    print("-" * 50)
    print("显示所有名片")
    # 判断是否存在名片,如果不存在,提示用户并且返回
    if len(card_list) == 0:
        print("当前没有任何的名片记录,请使用新增功能添加名片")
        # 直接返回
        return
    # 打印表头
    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"]))
  • 查询名片
def search_card():
    """查询名片"""
    print("-" * 50)
    print("查询名片")
    # 提示用户输入要搜索的姓名
    find_name = input("请输入要搜索的姓名:")
    # 遍历名片列表,查询要搜索的姓名,如果没有找到提示用户
    for card_dict in card_list:
        if card_dict["name"] == find_name:
            print("姓名\t\t电话\t\tqq\t\t邮箱")
            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("抱歉,没有找打 %s" % find_name)
  • 对查询到的名片做修改、删除等操作
def deal_card(find_dict):
    """处理查找到的名片

    :param find_dict: 查找到的名片
    """
    print(find_dict)
    action_str = input("请选择要执行的操作: "
                       "【1】 修改 【2】 删除 【0】 返回上级菜单")
    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("已修改名片")
    elif action_str == "2":
        card_list.remove(find_dict)
        print("已删除名片")
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

五、整理代码,并测试执行结果

  • 以下为cards_main.py文件完整版
import cards_tools
# 写入死循环,由用户决定什么时候退出
while True:
    # TODO(早盦呀) 显示功能菜单
    cards_tools.show_menu()

    action_str = input("请输入想要选择的功能:")
    print("您选择的是 [%s]" % action_str)

    # 针对名片的操作 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()
        # 查询名片
        else:
            cards_tools.search_card()

    # 选择0时退出
    elif action_str == "0":
        print("欢迎再次使用【名片管理系统】")
        break
        # pass
    # 选择其他时提示输入错误
    else:
        print("您输入的不正确,请重新选择")

以下为cards_tools.py文件完整版

# 记录所有的名片字典
card_list = []
def show_menu():
    """显示菜单"""
    print("*" * 50)
    print("欢迎使用名片管理系统 v1.0")
    print("")
    print("[1] 新增名片")
    print("[2] 显示全部")
    print("[3] 查询名片")
    print("")
    print("[0] 退出系统")
    print("*" * 50)
def new_card():
    """新增名片"""
    print("-" * 50)
    print("新增名片")

    # 1.提示用户输入名片的详细信息
    name_str = input("请输入姓名:")
    phone_str = input("请输入电话:")
    qq_str = input("请输入qq:")
    email_str = input("请输入邮箱:")
    # 2.使用用户输入的信息建立一个字典
    card_dict = {"name": name_str,
                 "phone": phone_str,
                 "qq": qq_str,
                 "email": email_str}
    # 3.将名片字典添加到列表中
    card_list.append(card_dict)
    print(card_list)

    # 4.提示用户添加完成
    print("添加 %s 的名片成功!" % name_str)
def show_all():
    """显示全部"""
    print("-" * 50)
    print("显示所有名片")
    # 判断是否存在名片,如果不存在,提示用户并且返回
    if len(card_list) == 0:
        print("当前没有任何的名片记录,请使用新增功能添加名片")
        # 直接返回
        return
    # 打印表头
    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"]))
def search_card():
    """查询名片"""
    print("-" * 50)
    print("查询名片")
    # 提示用户输入要搜索的姓名
    find_name = input("请输入要搜索的姓名:")
    # 遍历名片列表,查询要搜索的姓名,如果没有找到提示用户
    for card_dict in card_list:
        if card_dict["name"] == find_name:
            print("姓名\t\t电话\t\tqq\t\t邮箱")
            print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                            card_dict["phone"],
                                            card_dict["qq"],
                                            card_dict["email"]))
            # TODO 针对找到的名作执行删除和修改的操作
            deal_card(card_dict)
            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_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("已修改名片")
    elif action_str == "2":
        card_list.remove(find_dict)
        print("已删除名片")
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

你可能感兴趣的:(Python应用小练习—名片管理系统)