功能概览

**************************************************
欢迎使用【名片管理系统】V1.0

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

0. 退出系统
**************************************************

文件准备

  • cards_main.py:主程序
  • cards_tools.py:各种子功能函数

cards_main.py

主循环

while True:

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

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

    if action in ["1", "2", "3"]:

        pass

    elif action == "0":

        print("欢迎再次使用【名片管理系统】")
        break

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

如果在开发程序时,不希望立刻编写分支内部的代码,可以使用 pass 关键字表示一个占位符,不会执行任何的操作,只保证程序的代码结构正确。

if action in ["1", "2", "3"]:

也可以写为

if action == "1" or action == "2" or action == "3":

但是明显变得复杂,所以能用 in 就用 in,避免用 or

TODO 注释

# 后跟上 TODO,用于标记需要去做的工作,如

# TODO(作者/邮件) 显示系统菜单

在 PyCharm 的左下角可以点出 TODO 列表,这样就能很方便地

导入模块

import cards_tools

这样一来,主循环就修改为:

if action_str in ["1", "2", "3"]:

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

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

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

cards_tools.py

函数概览

其中,card_list 作为全局变量使用。
开发程序就是用来处理数据的,所以要事先考虑好数据结构。

show_menu()

之所以专门定义一个函数用来显示功能界面,是为了尽量简化主函数,增加可读性。

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

new_card()

print("-" * 50)
print("新增名片")

name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入QQ:")
email_str = input("请输入邮箱:")

card_dict = {"name": name_str,
             "phone": phone_str,
             "qq": qq_str,
             "email": email_str}

card_list.append(card_dict)

print(card_list)

print("添加 %s 的名片成功!" % name_str)

PyCharm 中右键 → Refactor → Rename,可以方便地一次性修改单个变量的所有名字。

show_all()

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

    if len(card_list) == 0:

        print("当前没有任何的名片记录,请使用新增功能添加名片!")
        return

    for title in ["姓名", "电话", "QQ", "邮箱"]:

        print(title, 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"]))

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("=" * 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)

deal_card(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("删除名片成功!")

input_card_info(dict_value, tip_message)

result_str = input(tip_message)

if len(result_str) > 0:

    return result_str
# 如果用户没有输入内容,直接回车,则保持原数据不变
else:

    return dict_value