名片管理系统设计【python练手】

目录

一.设计目标

二.所需知识点

三.系统所需的数据结构

1.基本结构

2.将具体操作抽象化

四.实现步骤

1.文件准备

2.基本代码

3.功能代码

五.主文件完整代码

六.功能文件完整代码


一.设计目标

1.搭建名片管理系统,其功能为存储多人的多种名片信息,包括姓名、电话、QQ、邮箱。

2.此系统具有一个主界面和多个分界面,主界面且支持与用户交互的3种功能:新建名片、显示全部名片、查询名片。每种功能执行完成后都会回到主菜单,在主菜单可选择退出此系统,即结束程序。

3.在查询名片界面下,对查询到的名片还支持3个功能:修改、删除、退回上一步

主界面期望形式如下图:

名片管理系统设计【python练手】_第1张图片

二.所需知识点

变量、流程控制、函数、模块

三.系统所需的数据结构

1.基本结构

使用字典记录每一张名片的信息

使用列表记录每一个字典

2.将具体操作抽象化

新建名片:将信息存入字典,再将字典作为一个元素增加入列表中

显示全部名片:循环遍历并打印列表中的元素

查询名片:循环遍历并对每一个元素的姓名进行匹配

四.实现步骤

1.文件准备

(1)新建项目(cardManageSystem)

(2)新建主文件(cards_main.py)

作用:程序的入口、与用户进行交互

(3)主菜单框架实现

要求每次用户命令交互完成后都会再次回到主菜单,所以将主程序放入死循环中,只有用户输入“4”才会跳出循环,即退出系统

(4)新建功能文件(cards_tools.py)

作用:将名片不同功能封装在不同函数

(5)定义存放名片字典的列表

A.定义在文件第一行方便后续函数调用

B.需要定义在功能文件而非主文件中,因为对此列表的操作在功能文件中

# 名片列表
card_list = []

2.基本代码

基本功能实现:显示主菜单、提示用户输入信息、选项判断

在用户输入信息部分不对输入的信息进行数字转换的原因:我们无法保证用户不输入其他字符,所以一旦转换,在用户输入非数字内容时就会报错,程序无法继续执行,而我们只想判断用户输入的是不是菜单提供的操作而已

# 将整个主菜单放入死循环中
while True:

    #  显示主菜单
    cards_tools.show_menu()

    # 提示输入操作编号
    action = input("请您输入操作编号")
    print("您选择的操作是【%s】" % action)

    # 选项判断
    if action in ["1", "2", "3"]:  # 进行对应操作
        if action == "1":  # 新建名片
            cards_tools.new_a_card()

        if action == "2":  # 显示全部名片
            cards_tools.show_all_cards()

        if action == "3":  # 查询名片
            cards_tools.search_card()

    elif action == "4":  # 退出循环
        print("感谢您的使用 再见")
        break

    else:  # 提示输入错误
        print("您输入的选项有误 请重新输入")

3.功能代码

(1)显示主菜单(show_menu)

直接使用print函数打印即可,我还使用字符串的center方法进行了标题居中处理

def show_menu():
    """显示主菜单"""
    print("*" * 50)
    print("欢迎使用【名片管理系统】".center(40) + "")  # 居中菜单标题
    print("1.新建名片")
    print("2.显示全部名片")
    print("3.查询名片")
    print("4.退出系统")
    print("*" * 50)

(2)新建名片(new_a_card)

输入信息、建立字典、新增列表、提示成功

def new_a_card():
    """新建名片"""
    print("=" * 50)
    print("新增名片 请输入信息".center(70))

    # 输入姓名、电话、qq号、邮件
    name = input("请输入您的姓名:")
    phone = input("请输入您的电话:")
    qq = input("请输入您的qq号:")
    email = input("请输入您的邮箱:")

    # 使用信息建立字典
    information = {
        "姓名": name,
        "电话": phone,
        "qq号": qq,
        "email": email
    }

    # 将字典添加到列表中
    card_list.append(information)

    # 提示用户添加成功
    print("添加%s的名片成功" % name)

(3)显示全部名片(show_all_cards)

判断空、打印表头分割线、打印信息、打印分割线

显示名片界面期望形式如下图:

名片管理系统设计【python练手】_第2张图片

def show_all_cards():
    """显示全部名片"""
    print("=" * 50)
    print("显示全部名片".center(70))

    # 判断是否为空
    if len(card_list) == 0:
        print("名片系统为空")
        return

    # 打印表头、分割线
    print("姓名\t\t\t\t电话\t\t\t\tqq号\t\t\t\temail")
    print("=" * 50)

    # 打印信息
    for i in card_list:
        print("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s" % (i["姓名"], i["电话"], i["qq号"], i["email"]))

    # 打印分割线
    print("=" * 50)

(4)查询名片(search_card)

判断空、输入、查找(打印、三种操作)

def search_card():
    """查询名片"""
    print("=" * 50)
    print("查询名片".center(70))

    # 判断是否为空
    if len(card_list) == 0:
        print("名片系统为空")
        return

    # 输入并查找
    search_name = input("请输入要查询的姓名:")

    # 打印信息
    for i in card_list:
        # 查找此人
        if i["姓名"] == search_name:
            print("姓名\t\t\t\t电话\t\t\t\tqq号\t\t\t\temail")
            print("=" * 50)
            print("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s" % (i["姓名"], i["电话"], i["qq号"], i["email"]))
            print("=" * 50)

            # 三种操作
            deal_search_one(i)
            break
    else:
        print("查无此人")

(5)查询成功后的三种操作(deal_search_one)

A.是在找到某人名片的前提下对其进行的,所以应当注意层次位置

B.操作如果写在原代码内部会非常多,所以建议使用单独的函数进行操作

C.执行完1或2操作后也希望直接返回系统主菜单

def deal_search_one(search_dictionary):
    """
    对选出的人的信息修改或删除操作
    :param search_dictionary: 找到的人的信息字典
    """
    while True:
        function_choice = input("请输入想要执行的操作:1.修改 2.删除 3.返回上级目录")

        if function_choice == "1":
            print("修改名片".center(70))
            search_dictionary["姓名"] = new_input(search_dictionary["姓名"], "姓名:")
            search_dictionary["电话"] = new_input(search_dictionary["电话"], "电话:")
            search_dictionary["qq号"] = new_input(search_dictionary["qq号"], "qq号:")
            search_dictionary["email"] = new_input(search_dictionary["email"], "邮箱:")
            break

        elif function_choice == "2":
            print("删除名片".center(70))
            card_list.remove(search_dictionary)
            break

        elif function_choice == "3":
            return

        else:
            print("没有此操作 请重新输入")

    print("处理完成")

(6)自定义输入功能(new_input)

想要在输入时实现对不想修改的内容回车跳过,需要自己定义函数

def new_input(value, tip_message):
    """
    新的输入函数,输入为空时不改变原值
    :param value: 原来的值
    :param tip_message: 提示信息
    :return:
    """
    # 提示输入内容
    input_thing = input(tip_message)

    # 如果有内容就返回,无内容返回原值
    if len(input_thing) > 0:
        return input_thing
    else:
        return value

五.主文件完整代码

# 导入功能模块文件
import cards_tools

# 将整个主菜单放入死循环中
while True:

    #  显示主菜单
    cards_tools.show_menu()

    # 提示输入操作编号
    action = input("请您输入操作编号")
    print("您选择的操作是【%s】" % action)

    # 选项判断
    if action in ["1", "2", "3"]:  # 进行对应操作
        if action == "1":  # 新建名片
            cards_tools.new_a_card()

        if action == "2":  # 显示全部名片
            cards_tools.show_all_cards()

        if action == "3":  # 查询名片
            cards_tools.search_card()

    elif action == "4":  # 退出循环
        print("感谢您的使用 再见")
        break

    else:  # 提示输入错误
        print("您输入的选项有误 请重新输入")

六.功能文件完整代码

# 名片列表
card_list = []


def show_menu():
    """显示主菜单"""
    print("*" * 50)
    print("欢迎使用【名片管理系统】".center(40) + "")  # 居中菜单标题
    print("1.新建名片")
    print("2.显示全部名片")
    print("3.查询名片")
    print("4.退出系统")
    print("*" * 50)


def new_a_card():
    """新建名片"""
    print("=" * 50)
    print("新增名片 请输入信息".center(70))

    # 输入姓名、电话、qq号、邮件
    name = input("请输入您的姓名:")
    phone = input("请输入您的电话:")
    qq = input("请输入您的qq号:")
    email = input("请输入您的邮箱:")

    # 使用信息建立字典
    information = {
        "姓名": name,
        "电话": phone,
        "qq号": qq,
        "email": email
    }

    # 将字典添加到列表中
    card_list.append(information)

    # 提示用户添加成功
    print("添加%s的名片成功" % name)


def show_all_cards():
    """显示全部名片"""
    print("=" * 50)
    print("显示全部名片".center(70))

    # 判断是否为空
    if len(card_list) == 0:
        print("名片系统为空")
        return

    # 打印表头、分割线
    print("姓名\t\t\t\t电话\t\t\t\tqq号\t\t\t\temail")
    print("=" * 50)

    # 打印信息
    for i in card_list:
        print("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s" % (i["姓名"], i["电话"], i["qq号"], i["email"]))

    # 打印分割线
    print("=" * 50)


def search_card():
    """查询名片"""
    print("=" * 50)
    print("查询名片".center(70))

    # 判断是否为空
    if len(card_list) == 0:
        print("名片系统为空")
        return

    # 输入并查找
    search_name = input("请输入要查询的姓名:")

    # 打印信息
    for i in card_list:
        # 查找此人
        if i["姓名"] == search_name:
            print("姓名\t\t\t\t电话\t\t\t\tqq号\t\t\t\temail")
            print("=" * 50)
            print("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s" % (i["姓名"], i["电话"], i["qq号"], i["email"]))
            print("=" * 50)

            # 三种操作
            deal_search_one(i)
            break
    else:
        print("查无此人")


def deal_search_one(search_dictionary):
    """
    对选出的人的信息修改或删除操作
    :param search_dictionary: 找到的人的信息字典
    """
    while True:
        function_choice = input("请输入想要执行的操作:1.修改 2.删除 3.返回上级目录")

        if function_choice == "1":
            print("修改名片".center(70))
            search_dictionary["姓名"] = new_input(search_dictionary["姓名"], "姓名:")
            search_dictionary["电话"] = new_input(search_dictionary["电话"], "电话:")
            search_dictionary["qq号"] = new_input(search_dictionary["qq号"], "qq号:")
            search_dictionary["email"] = new_input(search_dictionary["email"], "邮箱:")
            break

        elif function_choice == "2":
            print("删除名片".center(70))
            card_list.remove(search_dictionary)
            break

        elif function_choice == "3":
            return

        else:
            print("没有此操作 请重新输入")

    print("处理完成")


def new_input(value, tip_message):
    """
    新的输入函数,输入为空时不改变原值
    :param value: 原来的值
    :param tip_message: 提示信息
    :return:
    """
    # 提示输入内容
    input_thing = input(tip_message)

    # 如果有内容就返回,无内容返回原值
    if len(input_thing) > 0:
        return input_thing
    else:
        return value

你可能感兴趣的:(Python+大数据学习线路,数据结构,python,开发语言,学习)