Python名片管理系统(面向对象)--根据用户需求每次新增多条名片记录,输入任一信息全局查找名片,并可选择指定序号修改名片

本文介绍了一个基于Python的名片管理系统的设计与实现,该系统具备添加、显示、查询、修改和删除名片的功能,通过实例代码详细解释了每个功能的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个管理系统主要包括三个部分,1、新建n个名片(包括姓名、电话、QQ、邮箱);2、显示全部名片;3、查询名片(键入要查询的信息,若查到则可以选择指定名片进行修改/删除操作,若未则不)

将下面do_cards.py(第一段代码)和hello_users.py(第二段代码)放在同一文件目录下,运行hello_users.py:

# do_cards.py
class Execute(object):
    def __init__(self, data):
        self.data = data

    def add_new_cards(self, num):
        """
        添加名片
        :param num: 需要添加的名片个数
        :return: 返回名片添加后的结果
        """
        index = 1
        keys = ['姓名', '电话', 'QQ', '邮箱']
        while index <= num:
            print('输入第%d个数据:' % index)
            new_dict = dict.fromkeys(keys)
            for key in new_dict:
                new_dict[key] = input(key + '为:')
            self.data.append(new_dict)
            index += 1

        return self.data

    def query_card(self, search_name):
        """
        查找名片
        :param search_name: 需要查找的内容
        :return: 返回查找结果(找到/未找到)
        """
        find = []
        for one_dict in self.data:
            for key, value in one_dict.items():
                if value == search_name:
                    find.append(one_dict)
                    break
        if find:
            return find
        else:
            return '未找到'

    def delete_cards(self, num: int, search_name):
        """
        删除指定序号名片
        :param num: 要删除的名片(在列表中的序号)
        :param search_name: 查询到的内容
        :return: 删除后的数据
        """
        item = self.query_card(search_name)
        for i in self.data[:]:
            if i == item[num]:
                self.data.remove(i)

        return self.data

    def update_cards(self, num, search_name):
        """
        更新名片(先删除,后添加)
        :param num: 要修改的名片(在列表中的序号)
        :param search_name: 需要更新的名片
        :return: 更新后的数据
        """
        '''
        self.delete_cards(num, search_name)
        new_data = self.add_new_cards(1)
        '''
        item = self.query_card(search_name)
        for i in self.data:
            if i == item[num]:
                for key in i:
                    user_input = input(key + '为(回车不修改):')
                    if len(user_input) > 0:
                        i[key] = user_input

        return self.data


if __name__ == '__main__':
    news = [{'姓名': '小明', '电话': '110', 'QQ': '12345', '邮箱': '12345@qq.com'},
            {'姓名': '小花', '电话': '120', 'QQ': '54321', '邮箱': '54321@qq.com'}]
    cards = Execute(news)
    print(cards.query_card('110'))
    print(cards.update_cards(0, '110'))
    # print(cards.delete_cards(0, '110'))
# hello_users.py
import do_cards

# keys = ['姓名', '电话', 'QQ', '邮箱']     # 用于新增名片dict
user_list = []      # 存储用户输入的名片
cards = []      # 存储用户查找的名片
with_cards = do_cards.Execute(user_list)


def hello_users():
    """
    名片管理系统的主界面
    :return:
    """
    print('*' * 50)
    print('欢迎使用【名片管理系统】')
    print('1、新建名片')
    print('2、显示全部')
    print('3、查询名片')
    print('')
    print('0、退出系统')
    print('*' * 50)


def add_cards():
    """
    记录用户的姓名、电话、QQ、邮件
    :return:卡片列表
    """
    add_num = input('请您输入需要添加用户的个数:')
    while not add_num.isdecimal() or len(add_num) < 0 or add_num == '0':
        print('输入有误,请重新输入')
        add_num = input('请您输入需要添加用户的个数:')
    with_cards.add_new_cards(int(add_num))
    return user_list


def show_cards(card: list):
    """
    显示名片
    :param card: 需要显示的内容
    :return:
    """
    count = 1   # 用于名片序号的展示
    # 若存在名片,则显示名片,否则提示用户添加数据
    if card:
        for m, n in enumerate(card):
            # 显示表头
            if m == 0:
                print('{0:<20}'.format('序号'), end='\t')
                for find_key, find_value in n.items():
                    print('{0:<20}'.format(find_key), end='\t')
            print('')
            # 显示数据
            print('{0:<20}'.format(count), end='\t')
            for find_key, find_value in n.items():
                print('{0:<20}'.format(find_value), end='\t')

            count += 1
        print('')
    else:
        print('暂无数据,请添加数据!')


hello_users()
choice = input('请选择操作功能:')
while choice != '0':
    # 若输入有误,则提示用户重新输入
    if (choice not in ['0', '1', '2', '3']) or (len(choice) < 1):
        while (choice not in ['0', '1', '2', '3']) or (len(choice) < 1):
            print('您输入的内容有误,请重新输入!')
            choice = input('请选择操作功能:')
    else:
        print('您选择的操作是:%d' % int(choice))
        # 添加数据
        if choice == '1':
            cards = add_cards()
            print('添加成功!')

        # 显示所有数据
        elif choice == '2':
            show_cards(cards)

        # 查询数据(修改/删除)
        elif choice == '3':
            if not cards:
                print('暂无数据,请添加数据!')
            else:
                search_name = input('请输入你要查找的姓名/电话/QQ/邮箱:')
                message = with_cards.query_card(search_name)    # 获取用户查找的名片
                if message == '未找到':
                    print('未找到内容!')
                else:
                    # 若找到名片,展示找到的名片,并可以选择继续操作
                    show_cards(message)
                    edit_choice = input('请选择操作(0:不操作,1:修改名片,2、删除名片):')
                    while len(edit_choice) < 1 or edit_choice not in ['0', '1', '2']:
                        print('输入有误,请重新输入')
                        edit_choice = input('请选择操作(0:不操作,1:修改名片,2、删除名片):')

                    # 用户根据需求修改/删除指定序号的名片
                    if edit_choice in ['1', '2']:
                        num = input('请选择需要修改的名片序号:')
                        while len(num) < 1 or num > str(len(message)) or num == '0':
                            print('臣妾做不到啊!')
                            num = input('请选择需要修改的名片序号:')
                        else:
                            if edit_choice == '1':
                                with_cards.update_cards(int(num)-1, search_name)
                                print('修改成功!')
                            elif edit_choice == '2':
                                with_cards.delete_cards(int(num)-1, search_name)
                                print('删除成功!')

        print('')
        hello_users()
        choice = input('请选择操作功能:')
else:
    print('退出系统!')

欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值