Python入门综合应用---名片管理系统

写在开头:自用-----06-文件名片管理系统中有详细代码(无数据库)

课程:B站

已经学习过的知识点:

变量

流程控制

函数

模块

系统需求

1.程序启动,显示名片管理系统欢迎界面,并显示功能菜单

插入1图

2.用户用数字选择不同的功能

3.用户名片需要记录用户的姓名,电话,QQ,邮件

4.如果查询到指定名片,用户可以选择修改或者删除名片

01.框架搭建

1.准备文件,确定文件名,保证能够 在需要的位置编写代码

2.编写 主运行循环,实现基本的 用户输入和判断

1.1 文件准备

     1. 新建 card_main.py 保存 主程序功能代码

           程序的入口

           每次启动名片管理系统都通过 mian 这个文件启动

      2. 新建 card_tools.py 不保存所有名片功能函数

           将对名片的新增,查询,删除等功能封装在不同的函数中

1.2 编写主运行循环

        在 card_main 中添加一个无限循环

        ①用户输入 判断pass 关键字

action_str = input("请选择希望执行的操作:")
print("您选择的操作是【%s】" % action_str)

# 1,2,3 针对名片的操作
if action_str in ["1","2","3"]:

    # 如果在开发程序时,不希望立刻编写分支内部的代码
    # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确
    # 程序运行时, pass 不会执行任何操作
    pass
# 0 退出系统
elif action_str == "0":

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

        ②无限循环——保证用户能够重复选择需要的操作

# 无限循环,由用户决定什么时候退出循环
while True:
    action_str = input("请选择希望执行的操作:")
    print("您选择的操作是【%s】" % action_str)

    # 1,2,3 针对名片的操作
    if action_str in ["1","2","3"]:

        # 如果在开发程序时,不希望立刻编写分支内部的代码
        # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确
        # 程序运行时, pass 不会执行任何操作
        pass
    # 0 退出系统
    elif action_str == "0":

        print("欢迎再次使用名片管理系统!")
        break

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

        ③ if 循环嵌套,判断用户具体操作,预留代码位置

if action_str in ["1","2","3"]:

    #新增名片
    if action_str == "1":
        pass
    #显示全部
    elif action_str == "2":
        pass
    #查询名片
    elif action_str == "3":
        pass

    # 如果在开发程序时,不希望立刻编写分支内部的代码
    # 可以使用 pass 关键字,表示一个占位符,能够保证程序代码结构正确
    # 程序运行时, pass 不会执行任何操作
    # pass

         ④显示欢迎界面和功能菜单---在 cards_tools.py 文件中定义show_menu()

def show_menu():
    """显示菜单"""
    print("*" * 50)
    print("欢迎使用【名片管理系统】V 1.0")
    print("")
    print("1. 新增名片")
    print("2. 显示全部")
    print("3. 搜索名片")
    print("")
    print("0. 退出系统")
    print("*" * 50)

         ⑤在 cards_main.py 文件中引入

import cards_tools

#无限循环,由用户主动决定什么时候退出循环
while True:

    # 显示功能菜单
    cards_tools.show_menu()

    action_str = input("请选择希望执行的操作:")
    print("您选择的操作是【%s】" %action_str)

         ⑥准备名片操作函数,修改 cards_main.py 文件中的函数调用(将pass 关键字 替换为函数调用)

#1,2,3针对名片的操作
if action_str in ["1","2","3"]: 

    # 新增名片
    if action_str == "1":
        cards_tools.new_card()
    # 显示全部
    elif action_str == "2":
        cards_tools.show_all()
    # 查询名片
    elif action_str == "3":
        cards_tools.search_card()

         cards_tools.py 文件中

def new_card():
    """新增名片"""
    print("新增名片")

def show_all():
    """显示所有名片"""
    print("*" * 50)
    print("搜索名片")

def search_card():
    print("搜索名片")

 02.保存名片的数据结构

      程序就是用来处理数据的,而变量就是用来存储数据的

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

        使用 列表 统一记录所有的 名片字典

      定义名片列表变量

          在 card_tools 文件的顶部增加一个 列表变量

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

 注意:

        1.所有名片相关操作,都需要使用这个列表,所以应该定义在程序的顶部

        2.程序刚运行时,没有数据,所以是 空列表

03.新增名片功能的实现

        1. 提示用户输入名片的详细信息

        2. 使用用户输入的信息建立一个名片字典

        3. 将名片字典添加到列表中

        4. 提示用户添加成功

def new_card():

    """新增名片"""
    print("-" * 50)
    print("新增名片")

    # 1. 提示用户输入名片的详细信息
    name = input("请输入姓名:")
    phone = input("请输入电话:")
    qq = input("请输入QQ:")
    email = input(("请输入邮箱:"))

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

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

    print(card_list)

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

 04.显示全部

        4.1 遍历列表显示字典明细

# 打印表头
for name in ["姓名","电话","QQ","邮箱"]:
    print(name, end="\t\t")
print("")

# 打印分割线
print("=" * 50)
#遍历名片列表依次输出字典信息
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"]))

        4.2  判断列表数量,没有名片直接返回

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

    # return 可以返回一个函数的执行结果
    # 下方的代码不会执行
    # 如果 return 后面没有任何内容,表示会返回到调用函数的位置
    #并且不返回任何结果
    return

 05.查询名片

        5.1 查询功能的实现

        

def search_card():
    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("*" * 50)
            print("%s\t\t%s\t\t%s\t\t%s" %(card_dict["name"],
                                           card_dict["phone"],
                                           card_dict["qq"],
                                           card_dict["email"]))

            # TODO 针对找到的名片记录进行修改/删除操作

            break
    else:
        print("抱歉,没有找到!")

         5.2 针对用户的选择,增加判断分支

def deal_card(find_dict):

    # 1. 接收用户选择的操作
    action_str = input("请选择要执行的操作 【1】修改 【2】删除 "
                       "0 返回上级菜单")

    # 2.增加判断分支
    if action_str == "1":
        print("修改名片")

    elif action_str == "2":
        print("删除名片")
    

    # pass

       

         5.3 删除名片

elif action_str == "2":
    
    card_list.remove(find_dict)
    
    print("删除名片成功!")

         5.4 修改名片

                5.4.1 直接对字典的值进行修改

if action_str == "1":

    find_dict["name"] = input("姓名:")
    find_dict["phone"] = input("电话:")
    find_dict["qq"] = input("QQ:")
    find_dict["email"] = input("邮箱:")

    print("修改名片成功!")

                5.4.2 细化修改名片的功能,准备新的输入函数

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

 #  在 card_tools.py 文件的  deal_card()的 if分支中,修改input()函数

# 2.增加判断分支
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("修改名片成功!")
上一篇:rails 项目如何根据页面设置 菜单样式为active


下一篇:2021-10-21