名片管理系统--python入门项目

声明

该项目是针对python入门的项目,此项目是python所有基础知识的整合,内容可能有些繁琐,讲的比较细,希望能认真看完,然后再自己敲一遍来巩固基础

功能展示

主界面
在这里插入图片描述
查询所有名片
在这里插入图片描述
修改和删除
在这里插入图片描述

开发前准备

由于该系统功能比较多,用一个文件显示出来会比较难看,这里我们用多个文件来展示,并用调用文件的方法来实现系统功能。这里我创建了两个python文件,一个是cards_main.py 主要作为显示系统和功能的文件,另一个是cards_tool.py 来作为主文件的工具文件

系统框架构建

开发此项目时,我们第一件要做的事就是编写程序的框架,构建框架之后才能为我们后面开发功能做好准备。首先我们先确定名片管理系统的功能:
当我们进入系统后,系统会让我们输入想执行的操作,这里我们用数字代替:
输入1的时候,系统会让我们新增名片;
输入2的时候,系统会显示全部名片;
输入3的时候,系统会显示查询名片;
输入0的时候,系统会退出系统。
执行完后系统又会返回主界面,让用户重新输入,后续我们会添加名片删除,名片修改等功能。
这里我们先看一下名片管理系统的大致框架:
下图是cards_main.py的文件

# cards_main.py

# 导入cards_tool文件
import cards_tool
# while True 会不停循环,除非输入0,break退出循环
while True:
	# 导入cards_tool.py 文件里的show_menu功能
    cards_tool.show_menu()
	
    action_str = input('请选择希望执行的操作:')

    print("您选择的操作是【%s】" % action_str)

    # 如果在开发程序时,不希望立刻编写内部分支结构的代码,可以用pass
    # 1,2,3 争对名片的操作
    if action_str in ['1', '2', '3']:
        
        # 新增名片
        if action_str == '1':
            cards_tool.new_card()

        # 显示全部名片
        elif action_str == '2':
            cards_tool.show_all()

        # 查询名片
        elif action_str == '3':
            cards_tool.search_card()

    # 0 退出系统
    elif action_str == '0':

        print('欢迎再次使用【名片管理系统】')
        break

    # 其他内容输入错误,提示用户
    else:
        print("您输入的不正确,请重新选择")


这里我们既然想要系统在我们每次执行完之后放回主界面,我们就要用到while循环,while True 会一直循环,除非我们输入break退出循环,这正是我们想要的效果,确定循环之后,我们再来用 if 和 elif的嵌套来完成后续输入的数字和功能相匹配。

下图是cards_tool.py的文件内容
创建一个显示主页面的函数show_menu()
创建一个新增名片的函数new_card()
创建一个显示全部名片的函数show_all()
创建一个搜索名片的函数search_card()

# cards_tool.py

# 主要作为显示系统主页面的功能
def show_menu():
    """显示菜单"""
    print('*' * 50)
    print('欢迎使用【名片管理系统】')
    print("")
    print("1. 新增名片")
    print("2. 显示全部")
    print("3. 搜索名片")
    print("")
    print("0. 退出系统")
    print('*' * 50)

# 新增名片
def new_card():
    """新增名片"""
    print('-' * 50)
    print("新增名片")


# 显示所有名片
def show_all():
    """显示所有名片"""
    print('-' * 50)
    print("显示所有名片")


# 搜索名片
def search_card():
    """搜索名片"""
    print('-' * 50)
    print("搜索名片")

系统框架到这就开发的差不多了,后面就主要集中在功能的开发上,也就是主要在cards_tool.py 文件里做文章,把每个功能文件完善。

注意:
1.这里我用导入cards_tool.py文件里的show_menu()的方法来实现显示主菜单的功能。
2. 导入文件里面函数的方法就是直接文件名.函数就可以了,例:cards_tool.new_card()

保存名片数据的结构

保存名片数据我们可以用一个列表来保存名片,名片的内容的我们可以用字典来保存,后面我们就可以直接用card_list 来执行所有操作
下图是cards_tool.

# cards_tool.py
# 记录所有名片字典
card_list = []

注意:card_list[] 一定要定义在文件的顶部,因为python是解释性语言,会从上向下解释代码。

新增名片功能

下图是cards_tool.py文件里的new_card()函数

# 新增名片功能
def new_card():
    """新增名片"""
    print('-' * 50)
    print("新增名片")

    # 1. 提示用户输入名片的详细信息
    name_str = input('请输入姓名:')
    phone_str = input('请输入电话:')
    QQ_str = input('请输入QQ号码:')
    email_str = input('请输入邮箱地址')

    # 2.使用用户输入的信息建立一个名片字典
    card_dict = {
    
    "name": name_str,
                 "phone": phone_str,
                 "QQ": QQ_str,
                 "email": email_str}

    # 3.将名片字典添加到列表中
    card_list.append(card_dict)

    print(card_list)

    # 4.提示用户添加成功
    print("添加 %s 的名片成功!" % name_str)

看完全部代码我们再来分布解读一下代码所对应的功能:
1.首先存储用户信息,我们要想到字典存储,然后再用列表存储字典,为此我们建立了一个card_list 和card_dict
2.提示用户输入名片的详细信息,用input()来解决
3.使用用户输入的信息建立一个名片字典
4.将名片字典添加到列表中
5.最后直接输出列表就可以看见刚才输入的信息了

显示全部名片功能

下图是cards_tool.py文件里的show_all()函数

# 显示所有名片功能
def show_all():
    """显示所有名片"""
    print('-' * 50)
    print("显示所有名片")

    # 判断是否存在名片记录,如果没有,提示用户并返回
    if len(card_list) == 0:
        print("当前没有任何的名片记录,请使用新增功能添加名片!")
        
        # return下方的代码不会被执行
        # 如果return 后面没有任何内容,就会返回到调用函数的位置
        return

    # 打印表头
    for name in ["姓名", "电话", "QQ", "邮箱"]:
        # 让输出更美观可以用类似表格的形式输出,用end="" 使name输出后不换行
        # \t的作用是为了让表头之间增加两个制表符的距离,更美观
        print(name, end="\t\t")

    # 这个print是作为换行的作用,换行后输出结果
    print('')

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

该功能比较复杂,我们一步一步来解读:
1.当名片列表里没有任何数据时,输出 “当前没有任何的名片记录,请使用新增功能添加名片!” ,并且不会输出后面的打印表头的内容,这时候就要用到return ,return不仅可以作为返回值,如果没有返回值的时候会直接跳到定义函数的位置,最最最重要的:python不会执行return后面的代码

2.为了使输出名片更美观,可以将输出结果的形式转换为表格的格式,end=""的作用是为了让姓名,电话,QQ,邮箱这四个表头不换行,保持一条直线,\t 是一个制表符的距离,可以用两个制表符距离,这样更美观。

3.print(“”)是为了换行,使输出结果在表头的下面。

查询名片功能

下图是cards_tool.py文件里的show_all()函数

# 搜索名片功能
def search_card():
    """搜索名片"""
    print('-' * 50)
    print("搜索名片")

    # 1.提示用户输入要搜索的姓名
    find_name = input("请输入要搜索的姓名:")

    # 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户
    for card_dict in card_list:
        if card_dict["name"] == find_name:

            print("姓名\t\t电话\t\tQQ\t\t邮箱")
            print('=' * 60)
            print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                            card_dict["phone"],
                                            card_dict["QQ"],
                                            card_dict["email"]))

            break

    else:
        print("抱歉,没有找到 %s" % find_name)

搜索名片比较简单,就是搜索的姓名有就输出找到了,并把信息输出,输出格式可以参考显示全部名片功能,没有就输出没有找到

到这里基本名片的管理系统就到此为止了,下面主要就是对系统的完善,添加修改和删除功能

删除和修改名片

# 删除和修改名片
def deal_card(find_dict):

    print(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("修改名片成功")

    elif action_str == '2':

        card_list.remove(find_dict)
        print("删除名片成功")


def input_card_info(dict_value, tip_message):

    # 1.提示用户输入内容
    result_str = input(tip_message)

    # 2.针对用户的输入内容进行判断,如果用户输入了内容,直接返回结果
    if len(result_str) > 0:
        return result_str

    # 3.如果用户没有输入内容,返回字典中原有的值
    else:
        return dict_value

删除和修改名片,我是基于查询名片里的,首先我们先确定修改和删除名片的详细功能:
1.当我们查询名片之后可以删除整个名片
2.查询玩名片后我们可以针对想修改的值进行修改,不想修改的直接取原来的值

确定完功能之后我们现在来完成上述功能

1.由于是基于查询功能,所以我们在查询功能里插入一个函数,再对函数进行定义
注意:这里可以先在一个函数里面使用再在此函数的外面定义
在这里插入图片描述
在这里我们先传给函数一个想修改或删除的字典,然后再到deal_card()函数里面接受和修改

2.我们先进行删除功能的执行,删除比较简单,如果我们选择删除,直接用remove()函数进行删除就可以

3.对于修改功能,我们描述的是可以针对想修改的值进行修改,不想修改的直接取原来的值
所以肯定不能直接用input()来输入,这样就会导致不想修改的内容也必须重新给它赋一便值。所以现在我们应该要想到:如果我不输入,它就直接接受原来字典里的值,如果输入就会接受输入的值
再这里我们再创建一个新函数input_card_info()主要来判断我们有没有输入值它里面的两个形参,一个是dict_value,主要是当我们没有输入内容返回原来的值,另一个tip_message,主要是提示我们当前输入的东西,比如姓名,QQ。最后我们直接把input_card_info()这个函数带入deal_card()函数里进行判断即可。

代码展示

cards_main.py文件

# cards_main.py

# 导入cards_tool文件
import cards_tool
# while True 会不停循环,除非输入0,break退出循环
while True:

    # 导入cards_tool.py 文件里的show_menu功能
    cards_tool.show_menu()

    action_str = input('请选择希望执行的操作:')

    print("您选择的操作是【%s】" % action_str)

    # 如果在开发程序时,不希望立刻编写内部分支结构的代码,可以用pass
    # 1,2,3 争对名片的操作
    if action_str in ['1', '2', '3']:

        # 新增名片
        if action_str == '1':
            cards_tool.new_card()

        # 显示全部名片
        elif action_str == '2':
            cards_tool.show_all()

        # 查询名片
        elif action_str == '3':
            cards_tool.search_card()

    # 0 退出系统
    elif action_str == '0':

        print('欢迎再次使用【名片管理系统】')
        break

    # 其他内容输入错误,提示用户
    else:
        print("您输入的不正确,请重新选择")

cards_tool.py文件

# cards_tool.py
# 记录所有名片字典
card_list = []


# 主要作为显示系统主页面的功能
def show_menu():
    """显示菜单"""
    print('*' * 50)
    print('欢迎使用【名片管理系统】')
    print("")
    print("1. 新增名片")
    print("2. 显示全部")
    print("3. 搜索名片")
    print("")
    print("0. 退出系统")
    print('*' * 50)


# 新增名片功能
def new_card():
    """新增名片"""
    print('-' * 50)
    print("新增名片")

    # 1. 提示用户输入名片的详细信息
    name_str = input('请输入姓名:')
    phone_str = input('请输入电话:')
    QQ_str = input('请输入QQ号码:')
    email_str = input('请输入邮箱地址')

    # 2.使用用户输入的信息建立一个名片字典
    card_dict = {
    
    "name": name_str,
                 "phone": phone_str,
                 "QQ": QQ_str,
                 "email": email_str}

    # 3.将名片字典添加到列表中
    card_list.append(card_dict)

    print(card_list)

    # 4.提示用户添加成功
    print("添加 %s 的名片成功!" % name_str)


# 显示所有名片功能
def show_all():
    """显示所有名片"""
    print('-' * 50)
    print("显示所有名片")

    # 判断是否存在名片记录,如果没有,提示用户并返回
    if len(card_list) == 0:
        print("当前没有任何的名片记录,请使用新增功能添加名片!")

        # return下方的代码不会被执行
        # 如果return 后面没有任何内容,就会返回到调用函数的位置
        return

    # 打印表头
    for name in ["姓名", "电话", "QQ", "邮箱"]:
        # 让输出更美观可以用类似表格的形式输出,用end="" 使name输出后不换行
        # \t的作用是为了让表头之间增加两个制表符的距离,更美观
        print(name, end="\t\t")

    # 这个print是作为换行的作用,换行后输出结果
    print('')

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

    # 遍历名片列表依次输出字典信息
    for card_dict in card_list:

        print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                        card_dict["phone"],
                                        card_dict["QQ"],
                                        card_dict["email"]))


# 搜索名片功能
def search_card():
    """搜索名片"""
    print('-' * 50)
    print("搜索名片")

    # 1.提示用户输入要搜索的姓名
    find_name = input("请输入要搜索的姓名:")

    # 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户
    for card_dict in card_list:
        if card_dict["name"] == find_name:

            print("姓名\t\t电话\t\tQQ\t\t邮箱")
            print('=' * 60)
            print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                            card_dict["phone"],
                                            card_dict["QQ"],
                                            card_dict["email"]))

            deal_card(card_dict)

            break

    else:
        print("抱歉,没有找到 %s" % find_name)


# 删除和修改名片
def deal_card(find_dict):

    print(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("修改名片成功")

    elif action_str == '2':

        card_list.remove(find_dict)
        print("删除名片成功")


def input_card_info(dict_value, tip_message):

    # 1.提示用户输入内容
    result_str = input(tip_message)

    # 2.针对用户的输入内容进行判断,如果用户输入了内容,直接返回结果
    if len(result_str) > 0:
        return result_str

    # 3.如果用户没有输入内容,返回字典中原有的值
    else:
        return dict_value

总结

名片管理系统到这就差不多完成了,这些功能可能还不是很完善,可能也会存在一些bug,希望在你们一点一点敲的时候能理解这些函数和变量的意思,理解他们的功能,完全掌握后,能给它增加新的功能。

猜你喜欢

转载自blog.csdn.net/m0_64041302/article/details/127871019