Python从入门到精通 第八章(案例——名片管理系统)

一、main.py文件

import cards_tools

# 在开发软件时,如果不希望程序执行后立即退出,可以在程序中增加一个无限循环,由用户来决定退出程序的时机

while True:

    # 显示功能菜单
    cards_tools.show_menu()

    # 没有使用 int 转换用户输入,可以避免 一旦用户输入的不是数字,导致程序运行出错
    action_str = input("请选择希望执行的操作:")
    print("您选择的操作是【%s】" % action_str)

    # 输入0表示退出系统,1/2/3是针对名片的操作
    # 使用 in 针对列表判断,避免使用 or 拼接复杂的逻辑条件
    if action_str in ["1", "2", "3"]:
        pass  # 如果在开发程序时不希望立刻编写分支代码,可以用pass关键字占位

        if action_str == "1":
            cards_tools.add_card()
        elif action_str == "2":
            cards_tools.search_card()
        elif action_str == "3":
            cards_tools.show_all()

    elif action_str == "0":
        break
    else:
        print("您输入的不正确,请重新选择!")

print("欢迎下次使用名片管理系统!")
exit(0)

二、cards_tools.py文件

# 记录所有的名片字典
card_list = []


def show_menu():

    """显示菜单"""

    print("*" * 50)
    print("欢迎使用【名片管理系统】")
    print("")
    print("1. 新增名片")
    print("2. 搜索名片")
    print("3. 显示全部")
    print("")
    print("0. 退出系统")
    print("*" * 50)


def add_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)

    # 4. 提示用户添加成功
    print(" %s的名片添加成功!" % name)


def show_all():

    """显示所有名片"""

    # 判断是否存在名片记录,如果没有则直接返回
    if len(card_list) == 0:
        print("当前没有名片记录!")
        return  # 如果在 return 后没有跟任何内容,只是表示该函数执行到此就不再执行后续的代码

    print("-" * 50)
    print("功能:显示所有名片")

    # 打印表头
    for name in ["姓名", "电话", "QQ号码", "邮箱"]:
        print("%-12s" % name, end="")

    print("")
    print("=" * 50)

    # 遍历名片列表,依次输出字典信息
    for card in card_list:
        print("%-12s %-12s %-12s %-12s" % (card["name"],
                                           card["phone"],
                                           card["qq"],
                                           card["email"]))


def search_card():

    """搜索名片"""

    # 判断是否存在名片记录,如果没有则直接返回
    if len(card_list) == 0:
        print("当前没有名片记录!")
        return  # 如果在 return 后没有跟任何内容,只是表示该函数执行到此就不再执行后续的代码

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

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

    # 2. 遍历名片列表,查询要搜索的姓名(假设没有重名现象)
    for card_dict in card_list:
        if card_dict["name"] == find_name:
            for name in ["姓名", "电话", "QQ号码", "邮箱"]:
                print(name, end="\t\t")
            print("")
            print("=" * 50)
            print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                            card_dict["phone"],
                                            card_dict["qq"],
                                            card_dict["email"]))

            # 针对找到的名片记录执行修改或删除
            deal_card(card_dict)

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


def deal_card(find_dict):

    """针对找到的名片记录执行修改或删除

    :param find_dict:找到的名片字典
    """

    print("1 --- 对该名片进行修改;"
          "2 --- 对该名片进行删除;"
          "3 --- 不作处理")
    select = input("请选择接下来需要执行的操作:")

    if select == "1":
        find_dict["name"] = input_card_list(find_dict["name"], "姓名")
        find_dict["phone"] = input_card_list(find_dict["phone"], "电话")
        find_dict["qq"] = input_card_list(find_dict["qq"], "QQ号码")
        find_dict["email"] = input_card_list(find_dict["email"], "邮箱")
        print("%s 的名片修改成功" % find_dict["name"])
    elif select == "2":
        card_list.remove(find_dict)
        print("删除成功!")
    elif select == "3":
        pass


def input_card_list(dict_value, tip_message):

    """输入名片信息

    :param dict_value: 字典原有值
    :param tip_message: 输入提示信息
    :return: 如果输入,返回输入内容,否则返回字典原有值
    """

    # 提示用户输入内容
    print("请输入%s:(如不修改直接按下回车键)" % tip_message)
    value = input()

    # 针对用户的输入进行判断
    if len(value) > 0:
        return value  # 如果用户有输入内容,返回“输入的值”
    else:
        return dict_value  # 如果用户没有输入内容,返回“字典中原有的值”

你可能感兴趣的:(Python从入门到精通,python)