Python 练手小项目-名片管理

发布时间 2023-06-06 18:38:54作者: 晓枫的春天

需求描述

需要写一段程序实现简单名片管理功能

程序启动展示主界面

  • 新建名片
  • 显示全部
  • 查询名片
  • 退出系统

主程序实现

'''
名片管理系统 主程序
'''
import cards_tools

while True:

    '''显示主界面'''
    cards_tools.show_menu()

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

    print(f'您选择的操作是: {action}')

    # 根据用户输入进行分支判断
    if action in ['1', '2', '3']:
        '''
        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("输入错误;请重试")

主功能实现

'''
工具类
'''

# 列表用于存放名片
card_list = []

def show_menu():
    '''显示主菜单'''
    print('*' * 40)
    print('欢迎使用[名片关系系统]v0.10')
    print('')
    print('1、新建名片')
    print('2、显示全部')
    print('3、查询名片')
    print('')
    print('0、退出系统')
    print('*' * 40)


def new_card():
    '''新建名片'''
    print('-' * 50)
    print('功能:新建名片')
    # 输入基本信息
    name = input('请输入姓名:')
    phone = input('请输入电话:')
    qq = input('请输入QQ:')
    email = input('请输入邮箱:')

    # 输入信息保存到字典中
    card_dict = {
        'name': name,
        'phone': phone,
        'qq': qq,
        'email': email
    }

    # 保存到列表中
    card_list.append(card_dict)
    # 测试打印
    # print(card_list)

    print(f"成功添加{card_dict['name']}名片!")


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

    # 若列表为空,直接返回
    if len(card_list) == 0:
        print("请先添加名片!")
        return

    # 打印表头
    print('姓名\t电话\tQQ\t邮箱')
    print('*' * 40)

    # 格式化输出
    for card_dict in card_list:
        print(f"{card_dict['name']}\t{card_dict['phone']}\t{card_dict['qq']}\t{card_dict['email']}")
    print('*' * 40)


def search_card():
    '''查询名片'''
    print('功能:查询名片')
    print('*' * 40)

    # 提示查询名片的键
    find_name = input("请输入要查询的姓名:")
    # 遍历查询
    for card_dict in card_list:
        if card_dict['name'] == find_name:
            # 找到了
            print("-" * 30)
            print('姓名\t电话\tQQ\t邮箱')
            print(f"{card_dict['name']}\t{card_dict['phone']}\t{card_dict['qq']}\t{card_dict['email']}")
            print("-" * 30)
            # 查询到的名片处理逻辑
            deal_card(card_dict)

            break
        else:
            print(f"{find_name} 不在名片系统中")


def deal_card(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(f"{find_dict['name']}的名片修改成功!")
    elif action_str == '2':
        card_list.remove(find_dict)
        print("删除成功!")


def input_card_info(dict_value, tlp_message):
    '''
    字典内容部分键值对修改
    :param dict_value: 字典原值
    :param tlp_message: 输入值
    :return:如果输入,返回输入内容,否则返回字段原值
    '''
    # 提示用户输入内容
    result_info = input(tlp_message)

    # 判断是否输入
    # if len(result_info.strip()) > 0:
    if len(result_info) > 0:
        # 有输入非空白返回输入内容
        return result_info
    else:
        # 无输入返回原值
        return dict_value

运行效果

****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:1
您选择的操作是: 1
--------------------------------------------------
功能:新建名片
请输入姓名:令狐冲
请输入电话:18511001236
请输入QQ:1259865
请输入邮箱:linghc@163.com
成功添加令狐冲名片!
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
功能:显示全部
姓名    电话    QQ    邮箱
****************************************
令狐冲    18511001236    1259865    linghc@163.com
****************************************
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:1
您选择的操作是: 1
--------------------------------------------------
功能:新建名片
请输入姓名:依琳
请输入电话:13110257896
请输入QQ:45685232
请输入邮箱:yilin@qq.com
成功添加依琳名片!
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
功能:显示全部
姓名    电话    QQ    邮箱
****************************************
令狐冲    18511001236    1259865    linghc@163.com
依琳    13110257896    45685232    yilin@qq.com
****************************************
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:3
您选择的操作是: 3
功能:查询名片
****************************************
请输入要查询的姓名:令狐冲
------------------------------
姓名    电话    QQ    邮箱
令狐冲    18511001236    1259865    linghc@163.com
------------------------------
请输入操作选项:1、修改/ 2、删除/ 0、返回上级菜单1
请输入姓名(回车不修改)
请输入电话(回车不修改)
请输入QQ(回车不修改)
请输入邮箱(回车不修改)linghuc@qq.com
令狐冲的名片修改成功!
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:2
您选择的操作是: 2
--------------------------------------------------
功能:显示全部
姓名    电话    QQ    邮箱
****************************************
令狐冲    18511001236    1259865    linghuc@qq.com
依琳    13110257896    45685232    yilin@qq.com
****************************************
****************************************
欢迎使用[名片关系系统]v0.10

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

0、退出系统
****************************************
请选择操作功能:0
您选择的操作是: 0
欢迎再次使用[名片管理系统]