Python实现内存名片管理系统

发布时间:2024年01月19日

注意(已经实现,见文章结尾)

此代码未实现输入是否合法的判断,统一使用字符串类型来存储输入的数据

名片管理系统功能介绍

主要功能有4个

1、新建名片

需要使用键盘输入姓名、年龄、电话

2、显示全部名片

判断名片库中是否有名片

如果有名片就输出所有名片信息

如果没有名片就引导用户新建名片

3、查询名片

通过姓名进行查询,如果名片库为空也会引导用户新建名片

名片库不为空就查询,将查询到的名片信息返回

如果没有查询到就打印查无此人提示信息,并返回上一层

4、退出

主程序为while死循环,当用户选择退出功能时就跳出循环结束程序。

模块设计

程序分为主程序模块cards_main.py和功能程序模块cards_tolols.py

cards_main.py代码如下

import cards_tools
"""主程序,只负责调用模块"""
while True:
    cards_tools.huanying()
    temp = input("请输入功能序号:")
    if temp == "1":
        cards_tools.create_card()
    elif temp == "2":
        cards_tools.show_all_cards()
    elif temp == "3":
        cards_tools.search_card()
    elif temp == "0":
        print("感谢您的本次使用,欢迎下次光临!")
        print("*" * 50)
        break
    else:
        print("*" * 50)
        print("输入有误,请重新输入")

cards_tools.py代码如下

# 欢迎界面
def huanying():
    print("*" * 50)
    print("欢迎使用名片管理系统 V1.0")
    print("1.新建名片")
    print("2.显示全部")
    print("3.查询名片")
    print("")
    print("0.退出系统")
    print("*" * 50)

# 使用列表嵌套字典来存储名片
cards_list = []


def create_card():
    """增加名片"""
    print("=" * 50)
    # TODO 没用实现数据的校验
    # 使用input获取键盘的输入,全部存储为字符串类型
    name_str = input("请输入姓名:")
    age_int = input("请输入年龄:")
    phone_int = input("请输入手机号:")
    # 将值传出字典
    card_dict = {"name": name_str, "age": age_int, "phone": phone_int}
    # 将字典添加到列表中
    cards_list.append(card_dict)
    print("%s的名片添加成功!!!" % card_dict["name"])


def show_all_cards():
    """显示所有名片"""
    # 判断名片库是否为空
    if len(cards_list) <= 0:
        print("名片库为空")
        # 新增还是返回,输入错误自动返回
        temp = input("【1】新增/【2】返回")
        if temp == "1":
            create_card()
        elif temp == 2:
            return
        else:
            print("输入有误,自动返回")
            return
    # 因为有return的存在,名片库不为空是才执行下面的代码
    # 将所有的名片列出
    # 输出表头
    for i in ["姓名", "年龄", "电话"]:
        print(i, end="\t\t\t")
    print("")
    print("=" * 50)
    # 输出名片数据
    for card in cards_list:
        print("%s\t\t\t%s\t\t\t%s" % (card["name"], card["age"], card["phone"]))


def search_card():
    """查询名片"""
    # 判断名片库是否为空
    if len(cards_list) <= 0:
        print("名片库为空")
        # 新增还是返回,输入错误自动返回
        temp = input("【1】新增/【2】返回")
        if temp == "1":
            create_card()
        elif temp == 2:
            return
        else:
            print("输入有误,自动返回")
            return
    # 名片库不为空时允许查询
    name = input("请输入要查询的姓名:")
    # 遍历列表查询
    for find_card in cards_list:
        # 将名片库中的姓名与输入内容对比,存在输出,并选择操作修改、删除、返回
        if find_card["name"] == name:
            print("姓名\t\t\t年龄\t\t\t电话")
            print("=" * 50)
            print("%s\t\t\t%s\t\t\t%s" % (find_card["name"], find_card["age"], find_card["phone"]))
            while True:
                # 查询到数据后是否进行操作
                temp_select = input("请选择您的操作:【1】修改【2】删除【0】返回")
                if temp_select == '1':
                    # 修改操作
                    find_card["name"] = select_card(find_card["name"], input("姓名:(回车不修改)"))
                    find_card["age"] = select_card(find_card["age"], input("年龄:(回车不修改)"))
                    find_card["phone"] = select_card(find_card["phone"], input("电话:(回车不修改)"))
                    print("名片修改成功!!!")
                elif temp_select == '2':
                    # 删除操作
                    cards_list.remove(find_card)
                    print("名片删除成功!!!")
                    return
                elif temp_select == '0':
                    # 返回操作
                    return
                else:
                    print("输入有误!!!")
        # 没有查询到输出提示信息并返回上一层
        else:
            print("查无此人!!!")
            return


def select_card(value, tip_message):
    """对查询后的操作扩展"""
    # 如果不输入内容,继续使用之前的值
    if len(tip_message) <= 0:
        return value
    # 如果有内容输入就,将会修改之前的值
    else:
        return tip_message

效果图如下

?

完善了数据校验功能

cards_main.py

import cards_tools

"""主程序,只负责调用模块"""
while True:
    cards_tools.huanying()
    temp = input("请输入功能序号:")
    try:
        if temp == "1":
            cards_tools.create_card()

        elif temp == "2":
            cards_tools.show_all_cards()
        elif temp == "3":
            cards_tools.search_card()
        elif temp == "0":
            print("感谢您的本次使用,欢迎下次光临!")
            print("*" * 50)
            break
        else:
            print("*" * 50)
            print("输入有误,请重新输入")
    except ValueError:
        print("数据类型错误,修改失败")
    except Exception as result:
        print(result)

?cards_tools.py

def huanying():
    """欢迎界面"""
    print("*" * 50)
    print("欢迎使用名片管理系统 V2.0")
    print("1.新建名片")
    print("2.显示全部")
    print("3.查询名片")
    print("")
    print("0.退出系统")
    print("*" * 50)


# 使用列表嵌套字典来存储名片
cards_list = []


def len_check(len_num, num):
    """检测数据长度方法"""
    # 需要传入一个规定长度,和数据
    # 如果数据长度超过规定长度,就会抛出异常,提示用户数据超长
    # 如果符合长度就返回数据
    num = str(num)
    if len(num) > len_num:
        ex = Exception("数据超出规定长度,修改失败")
        raise ex
    return num


def create_card():
    """增加名片"""
    print("=" * 50)

    # 使用input获取键盘的输入,全部存储为字符串类型
    name_str = input("请输入姓名:")
    # 先调用len_check方法检查数据长度
    """长度合法后将数据转换为符合的数据类型
        如果类型转换时出现错误就说明,用户传入的数据类型违规
        利用异常的传递性,将异常信息传递到调用的函数处
        终止本次创建名片,并提示用户"""
    age_int = int(len_check(2, input("请输入年龄:")))
    phone_int = int(len_check(11, input("请输入手机号:")))
    # 将值传出字典
    card_dict = {"name": name_str, "age": age_int, "phone": phone_int}
    # 将字典添加到列表中
    cards_list.append(card_dict)
    print("%s的名片添加成功!!!" % card_dict["name"])


def show_all_cards():
    """显示所有名片"""
    # 判断名片库是否为空
    if len(cards_list) <= 0:
        print("名片库为空")
        # 新增还是返回,输入错误自动返回
        temp = input("【1】新增/【2】返回")
        if temp == "1":
            create_card()
        elif temp == "2":
            return
        else:
            print("输入有误,自动返回")
            return
    # 因为有return的存在,名片库不为空是才执行下面的代码
    # 将所有的名片列出
    # 输出表头
    for i in ["姓名", "年龄", "电话"]:
        print(i, end="\t\t\t")
    print("")
    print("=" * 50)
    # 输出名片数据
    for card in cards_list:
        print("%s\t\t\t%s\t\t\t%s" % (card["name"], card["age"], card["phone"]))


def search_card():
    """查询名片"""
    # 判断名片库是否为空
    if len(cards_list) <= 0:
        print("名片库为空")
        # 新增还是返回,输入错误自动返回
        temp = input("【1】新增/【2】返回")
        if temp == "1":
            create_card()
        elif temp == 2:
            return
        else:
            print("输入有误,自动返回")
            return
    # 名片库不为空时允许查询
    name = input("请输入要查询的姓名:")
    # 遍历列表查询
    for find_card in cards_list:
        # 将名片库中的姓名与输入内容对比,存在输出,并选择操作修改、删除、返回
        if find_card["name"] == name:
            print("姓名\t\t\t年龄\t\t\t电话")
            print("=" * 50)
            print("%s\t\t\t%s\t\t\t%s" % (find_card["name"], find_card["age"], find_card["phone"]))
            while True:
                # 查询到数据后是否进行操作
                temp_select = input("请选择您的操作:【1】修改【2】删除【0】返回")
                if temp_select == '1':
                    # 修改操作
                    find_card["name"] = select_card(find_card["name"], input("姓名:(回车不修改)"))
                    # 使用异常来检测数据
                    find_card["age"] = int(len_check(2, select_card(find_card["age"], input("年龄:(回车不修改)"))))
                    find_card["phone"] = int(len_check(11, select_card(find_card["phone"], input("电话:(回车不修改)"))))
                    print("名片修改成功!!!")
                elif temp_select == '2':
                    # 删除操作
                    cards_list.remove(find_card)
                    print("名片删除成功!!!")
                    return
                elif temp_select == '0':
                    # 返回操作
                    return
                else:
                    print("输入有误!!!")
        # 没有查询到输出提示信息并返回上一层
        else:
            print("查无此人!!!")
            return


def select_card(value, tip_message):
    """对查询后的操作扩展"""
    # 如果不输入内容,继续使用之前的值
    if len(tip_message) <= 0:
        return value
    # 如果有内容输入就,将会修改之前的值
    else:
        return tip_message

文章来源:https://blog.csdn.net/weixin_59912996/article/details/135634345
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。