python名片管理系统

import time

'''
主体功能:
    功能1:显示主菜单(已完成)
    功能2:添加名片(已完成)、修改名片(已完成)、删除名片(已完成)、查询名片(已完成)、显示名片(已完成)、退出系统(已完成)、
 
'''

#装饰器
def the_ask(fn):
    def inner(user_list):
        turn = True
        while turn:
            fn(user_list)
            turn = ask()

    return inner


def main_menu():
    """
    主菜单
    :return: None
    """
    print("{:^30}".format('名片管理系统1.0'),
          '{:^}'.format('1.添加名片'),
          '{:^}'.format('2.删除名片'),
          '{:^}'.format('3.修改名片'),
          '{:^}'.format('4.查询名片'),
          '{:^}'.format('5.显示所有名片'),
          '{:^}'.format('6.退出系统'),
          sep='\n'
          )


def comm_inp():
    """
    获取用户命令输入
    :return: 返回正确的命令
    """
    while True:
        user_command = input('请输入命令:').strip()
        num_is = user_command.isdigit()
        the_floag = (num_is) and (1 <= int(user_command) <= 6)
        # 判断用户输入是否是 全数字 且在指定的范围内
        if not the_floag:
            print('抱歉,您的输入有误,请重新输入!')
        else:
            return int(user_command)


def add_user(user_list):
    '''添加名片功能'''
    user_dict = {'name': name_inp(),
                 'phone': other_inp('电话'),
                 'QQ': other_inp('QQ')}
    user_list.append(user_dict)

    print('录入完毕!将在两秒钟后返回主菜单....')
    time.sleep(2)


@the_ask
def del_user(user_list):
    '''
    删除名片功能
    :param user_list: 名片库
    :return: None
    '''

    value = input('请输入要删除的姓名:')
    if user_list == []:
        print('列表为空,删除失败!')
    for in_dex, user in enumerate(user_list):

        if user['name'] == value:
            deled = user_list.pop(in_dex)
            print('{} 信息已被删除'.format(deled))
        else:
            print('查无此人,删除失败!')


def change_user(user_list):
    '''修改名片功能'''

        @the_ask
        def index_inp(user_list):
            '''判断用户输入序号是否正确,并修改名片库'''
            while True:
                in_dex = int(input('请输入需要修改的用户序号:'))
                if 0 <= in_dex <= len(user_list) - 1:
                    user_list[in_dex]['name'] = name_inp()
                    user_list[in_dex]['phone'] = other_inp('电话')
                    user_list[in_dex]['QQ'] = other_inp('QQ')
                    return
                else:
                    print('没有该用户序号,请重新输入!')
                    time.sleep(2)
        

    # 调用list_user函数获取名片库的状态
    turn = list_user(user_list)
    if turn == 'off':
        return
    else:
        index_inp(user_list)


@the_ask
def select_user(user_list):
    """
    按照姓名查询名片库
    :param user_list: 名片库
    :return:
    """
    value = input('请输入要查询的姓名:')
    
    # 打印查询到的内容
    for in_dex, user in enumerate(user_list):
        if user['name'] == value:
            print('{:^3}|{:^6}|{:^13}|{:^13}'.format('序号', '姓名', '电话', 'QQ'))
            print('{:^3}|{:^6}|{:^13}|{:^13}'.format(in_dex, user['name'], user['phone'], user['QQ']))
            break
    else:
        print('查无此人')

    
def list_user(user_list):
    '''
    显示所有的用户
    :param user_list:用户列表
    :return:
    '''
    # 如果名片库没有信息则不输出,并且返回名片库的状态
    if user_list == []:
        print('目前没有用户信息,请添加!')
        return 'off'  #
    # 打印列标题
    print('|{:^3}|{:^6}|{:^13}|{:^13}|'.format('序号', '姓名', '电话', 'QQ'))
    # 打印内容
    for in_dex, user in enumerate(user_list):
        print('|{:^3}|{:^6}|{:^13}|{:^13}|'.format(in_dex, user['name'], user['phone'], user['QQ']))


def ask():
    '''
    询问用户是否继续
    :return: 返回bool
    '''
    change = input('是否继续当前操作?(y/n)')
    if change.upper() == 'Y':
        return True
    else:
        return False


def name_inp():
    # 获取姓名合法输入
    while True:
        key = 'name'
        value = input('请输入姓名:')
        # 判断用户输入是否合法
        if value.isalpha():
            pass
        else:
            print('您输入的姓名不合法,请重新输入!')
            continue
        # 判断是否已经录入
        if list(filter(lambda x: x[key] == value, user_list)) != []:
            print("您输入的姓名已在库中,请重新输入姓名!")
        else:
            return value


def other_inp(str_pq):
    # 获取 电话、QQ 的合法输入
    while True:
        pq_num = input('请输入{}:'.format(str_pq))

        if pq_num.isdigit():
            return pq_num
        else:
            print('您输入的{}不合法,请重新输入!'.format(str_pq))


# 名片库
user_list = []
# 主循环
while True:
    # 显示主菜单
    main_menu()
    # 获取指令
    user_command = comm_inp()
    # 判断指令
    if user_command == 1:
        add_user(user_list)
    elif user_command == 2:
        del_user(user_list)
    elif user_command == 3:
        change_user(user_list)
    elif user_command == 4:
        select_user(user_list)
    elif user_command == 5:
        list_user(user_list)
    elif user_command == 6:
        print('感谢您的使用!')
        exit(5201314)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值