python 名片管理系统 200313

新的项目环境

  • 新建项目
  • 新建文件
  • 检察解释器
  • 可以开始写代码了

完成项目的架构

程序的入口

  • 写一个启动函数
  • 执行启动函数

在这里插入图片描述

流程的安排

  • 欢迎界面
  • 功能菜单
  • 用户选择功能
  • 对应的功能运行
  • 重新再一次显示功能菜单
  • 重新再一次用户选择功能

是否继续执行程序要看用户的选择
如果用户输入q,就让程序结束

def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    print('功能菜单占位函数')


def user_choice():
    """用户选择"""
    choice = input('请输入您的选择:')
    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    if choice_num == "q":
        print('用户输入的是退出指令,程序结束')
        exit()
    print('运行{}功能'.format(choice_num))


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 欢迎界面
        show_welcome()
        # - 功能菜单
        show_menu()
        # - 用户选择功能
        choice = user_choice()
        print('用户输入的是{}'.format(choice))
        # - 对应的功能运行
        run_func(choice)
        # 退出无限循环,两种方法
        # break
    print('循环后面的内容....')

start()

详细的功能设计 功能菜单设计

  • 1 新增名片
  • 2 查询所有名片
  • 3 搜索名片
  • q 退出程序

打印功能菜单的实现

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key,val))



def user_choice():
    """用户选择"""
    choice = input('请输入您的选择:')
    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    if choice_num == "q":
        print('用户输入的是退出指令,程序结束')
        exit()
    print('运行{}功能'.format(choice_num))


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        print('用户输入的是{}'.format(choice))
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n\n')


start()

功能:用户输入

  • 接收用户的输入
  • 验证用户的输入是否合法
  • 同时给出一些提示
  • 非法输入会再给输入的机会
# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key,val))



def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令



    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n\n')


start()

进入功能分支 根据用户的选择

  • 根据用户的选择不同会启动不同的函数
  • 通过分支的方式进行指向
# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    print('这是添加名片的功能!!!!!!!!!!')


def show_cards():
    print('显示所有名片的功能!!!!!!!!!!')


def search_card():
    print('搜索名片的功能!!!!')


def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

数据存储结构的分析

思考 新增的名片放在哪里

名片管理系统会放多个人的信息

它应该是一个数据容器

思考,学到现在的数据空器有哪些

  • 列表
  • 元组
  • 字典

使用列表作为数据容器的理由

数据往列表中扔的时候,不用给数据想键的名字

需要存入列表中,直接通过 列表.append(数据)

决定 使用列表来存我们的数据

在这里插入图片描述

功能实施:新增名片

  • 定义一个全局的列表,可被每一个函数所有使用
  • 每一次新增了用户的信息以后,把信息添加到列表中

效果图

在这里插入图片描述

代码

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 所有的数据列表,保存所有的名片信息
card_list = []


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)



def show_cards():
    print('显示所有名片的功能!!!!!!!!!!')


def search_card():
    print('搜索名片的功能!!!!')


def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

功能实施:查询所有名片

  • 从存储的列表中遍历取出每一个字典
  • 格式化输入每一个字典中的内容
# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 所有的数据列表,保存所有的名片信息
card_list = [
    {"name":"张三", "tel":"15977777777","email":"777777@qq.com"}
]


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)



def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name,tel,email))



def search_card():
    print('搜索名片的功能!!!!')


def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

功能实现:搜索名片

  • 用户要输入一个搜索词
  • 依次遍历出名片列表中的所有字典
  • 比对一下字典中的name键的值,看值里面有没有搜索词
  • 如果有,就把这个字典作业结果展现出来

效果:
如果搜索的结果有多个,我们只取第一个(因为简单,目标是不弄太复杂免得更晕)

代码:

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 所有的数据列表,保存所有的名片信息
card_list = [
    {"name":"张三", "tel":"15977777777","email":"777777@qq.com"}
]


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)



def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name,tel,email))


def show_search_result(card):
    print('搜索结果:******************')
    print('姓名\t电话\t\t邮箱\t')
    print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))



def search_card():
    """名片搜索"""
    # - 用户要输入一个搜索词
    key = input('请输入要搜索的词(从姓名里查):') # "张"
    # - 依次遍历出名片列表中的所有字典
    for card in card_list:  # [{"name":???},{}]
        # card 就是一个字典{"name":???}
        # 获取姓名
        name = card["name"]  # ”张三"
        # 如何判断"张" 在不在 "张三" 字符串中?
        if key in name:
            # 那么,这一轮遍历出来的字典就是要找的字典
            # print(card)
            # 显示这个结果
            show_search_result(card)
            break
        else:
            print('查找不成功,请重新再试')



def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

名片搜索出来后 相关操作

  • 生成二维码
  • 从数据列表中删除
  • 修改名片的数据

写一个函数专门的负责搜索出来的名片的结果处理

deal_card(card)

deal_card函数它的职能

  • 显示功能菜单
  • 让用户选择
  • 执行相关的功能函数

布局代码

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 搜索结果的处理菜单
deal_menu = {
    "m":"修改名片",
    "d":"删除名片",
    "c":"生成二维码",
}

# 所有的数据列表,保存所有的名片信息
card_list = [
    {"name":"张三", "tel":"15977777777","email":"777777@qq.com"}
]


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)



def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name,tel,email))


def show_search_result(card):
    print('搜索结果:******************')
    print('姓名\t电话\t\t邮箱\t')
    print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))

def show_deal_menu():
    """显示处理的菜单"""
    for key,val in deal_menu.items():
        print("{}----{}".format(key,val))


def deal_choice():
    """用户选择想要的操作"""
    # 接收用户的输入
    choice = input('请选择对该名片的操作:')
    # 验证用户的输入
    if choice not in deal_menu:
        choice = 'error'
    return choice


def modify_card(card):
    print('修改名片', card)


def delete_card(card):
    print('删除名片', card)


def create_png(card):
    print('生成二维码', card)

def run_deal_func(choice, card):
    """运行用户的选择"""
    if choice == "error":
        print('不存在的操作指令')
        return
    elif choice == "m":
        modify_card(card)
    elif choice == "d":
        delete_card(card)
    elif choice == "c":
        create_png(card)

def deal_card(card):
    """处理搜索成功的名片"""
    # - 显示功能菜单
    show_deal_menu()
    # - 让用户选择
    choice = deal_choice()
    # - 执行相关的功能函数
    run_deal_func(choice, card)


def search_card():
    """名片搜索"""
    # - 用户要输入一个搜索词
    key = input('请输入要搜索的词(从姓名里查):') # "张"
    # - 依次遍历出名片列表中的所有字典
    for card in card_list:  # [{"name":???},{}]
        # card 就是一个字典{"name":???}
        # 获取姓名
        name = card["name"]  # ”张三"
        # 如何判断"张" 在不在 "张三" 字符串中?
        if key in name:
            # 显示这个结果
            show_search_result(card)
            # 处理这个结果
            deal_card(card)

            break
        else:
            print('查找不成功,请重新再试')



def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

功能:修改名片

思路分析

我们有什么?

有一个名片字典

我们要什么?

修改它

修改哪些?

所有的数据都可以让用户修改

如何让用户修改?

input函数接收内容

操作步骤

  • 接收新的数据:姓名,电话,邮箱
  • 把原字典的对应数据进行修改
  • 功能完成,进行检察

代码

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 搜索结果的处理菜单
deal_menu = {
    "m":"修改名片",
    "d":"删除名片",
    "c":"生成二维码",
}

# 所有的数据列表,保存所有的名片信息
card_list = [
    {"name":"张三", "tel":"15977777777","email":"777777@qq.com"}
]


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)



def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name,tel,email))


def show_search_result(card):
    print('搜索结果:******************')
    print('姓名\t电话\t\t邮箱\t')
    print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))

def show_deal_menu():
    """显示处理的菜单"""
    for key,val in deal_menu.items():
        print("{}----{}".format(key,val))


def deal_choice():
    """用户选择想要的操作"""
    # 接收用户的输入
    choice = input('请选择对该名片的操作:')
    # 验证用户的输入
    if choice not in deal_menu:
        choice = 'error'
    return choice


def modify_card(card):
    """
    修改名片,本质就是修改字键中键所对应的值
    :param card:
    :return:
    """
    # - 接收新的数据:姓名,电话,邮箱
    new_name = input('原数据:{},要修改为:'.format(card["name"]))
    new_tel = input('原数据:{},要修改为:'.format(card['tel']))
    new_email = input('原数据:{},要修改为:'.format(card['email']))
    # - 把原字典的对应数据进行修改
    card['name'] = new_name
    card['tel'] = new_tel
    card['email'] = new_email




def delete_card(card):
    print('删除名片', card)


def create_png(card):
    print('生成二维码', card)

def run_deal_func(choice, card):
    """运行用户的选择"""
    if choice == "error":
        print('不存在的操作指令')
        return
    elif choice == "m":
        modify_card(card)
    elif choice == "d":
        delete_card(card)
    elif choice == "c":
        create_png(card)

def deal_card(card):
    """处理搜索成功的名片"""
    # - 显示功能菜单
    show_deal_menu()
    # - 让用户选择
    choice = deal_choice()
    # - 执行相关的功能函数
    run_deal_func(choice, card)


def search_card():
    """名片搜索"""
    # - 用户要输入一个搜索词
    key = input('请输入要搜索的词(从姓名里查):') # "张"
    # - 依次遍历出名片列表中的所有字典
    for card in card_list:  # [{"name":???},{}]
        # card 就是一个字典{"name":???}
        # 获取姓名
        name = card["name"]  # ”张三"
        # 如何判断"张" 在不在 "张三" 字符串中?
        if key in name:
            # 显示这个结果
            show_search_result(card)
            # 处理这个结果
            deal_card(card)

            break
        else:
            print('查找不成功,请重新再试')



def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

功能调优:修改名片 不输入内容不修改

需求 用户如果不输入内容,那么就不修改

验证办法

验证长度,如果长度为0 代表用户是空输入

In [104]: m.strip()
Out[104]: ''

In [105]: len(m.strip())
Out[105]: 0

In [106]: m
Out[106]: '     '

实现想法

  • 对接收到的数据进行去空白操作
  • 对去空白操作了的内容进行长度验证,如果长度为0那么就是空数据

函数的需求

需要一个函数

帮我验证上面的功能

如果用户输入的是空的,那么返回一个原来的数据

如果用户输入的是非空的,那么就返回用户输入的值

实现代码

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "q": "退出程序"
}

# 搜索结果的处理菜单
deal_menu = {
    "m": "修改名片",
    "d": "删除名片",
    "c": "生成二维码",
}

# 所有的数据列表,保存所有的名片信息
card_list = [
    {"name": "张三", "tel": "15977777777", "email": "777777@qq.com"}
]


def show_welcome():
    """欢迎菜单"""
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)


def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name, tel, email))


def show_search_result(card):
    print('搜索结果:******************')
    print('姓名\t电话\t\t邮箱\t')
    print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))


def show_deal_menu():
    """显示处理的菜单"""
    for key, val in deal_menu.items():
        print("{}----{}".format(key, val))


def deal_choice():
    """用户选择想要的操作"""
    # 接收用户的输入
    choice = input('请选择对该名片的操作:')
    # 验证用户的输入
    if choice not in deal_menu:
        choice = 'error'
    return choice


def get_real_info(input_data, default_data):
    """验证用户输入的内容是否为空,返回有用的数据"""
    strip_data = input_data.strip()  # 把字符串的空格左右两边都去掉
    if len(strip_data) == 0:
        return default_data
    return strip_data


def modify_card(card):
    """
    修改名片,本质就是修改字键中键所对应的值
    :param card:
    :return:
    """
    # - 接收新的数据:姓名,电话,邮箱
    new_name = input('原数据:{},要修改为:'.format(card["name"]))
    new_tel = input('原数据:{},要修改为:'.format(card['tel']))
    new_email = input('原数据:{},要修改为:'.format(card['email']))
    # - 把原字典的对应数据进行修改

    card['name'] = get_real_info(new_name, card["name"])
    card['tel'] = get_real_info(new_tel, card['tel'])
    card['email'] = get_real_info(new_email, card['email'])


def delete_card(card):
    print('删除名片', card)


def create_png(card):
    print('生成二维码', card)


def run_deal_func(choice, card):
    """运行用户的选择"""
    if choice == "error":
        print('不存在的操作指令')
        return
    elif choice == "m":
        modify_card(card)
    elif choice == "d":
        delete_card(card)
    elif choice == "c":
        create_png(card)


def deal_card(card):
    """处理搜索成功的名片"""
    # - 显示功能菜单
    show_deal_menu()
    # - 让用户选择
    choice = deal_choice()
    # - 执行相关的功能函数
    run_deal_func(choice, card)


def search_card():
    """名片搜索"""
    # - 用户要输入一个搜索词
    key = input('请输入要搜索的词(从姓名里查):')  # "张"
    # - 依次遍历出名片列表中的所有字典
    for card in card_list:  # [{"name":???},{}]
        # card 就是一个字典{"name":???}
        # 获取姓名
        name = card["name"]  # ”张三"
        # 如何判断"张" 在不在 "张三" 字符串中?
        if key in name:
            # 显示这个结果
            show_search_result(card)
            # 处理这个结果
            deal_card(card)

            break
        else:
            print('查找不成功,请重新再试')


def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    print('运行{}功能'.format(choice_num))
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n\n')


start()

功能实现:删除数据

列表.remove(数据)

封装二维码的生成函数

原始内容

from segno import helpers


qr = helpers.make_mecard(
    name='whalecode',
    email='1510284616@qq.com',
    phone='15977777777'
)

qr.save('whalecode电话.png', scale=5)

封装办法

  • 先写一个函数
  • 把功能代码全部都放到函数里面
  • 把变化的内容做成形参
  • 调用的时候传递实参

封装的结果

from segno import helpers

# 手动配置一下
dir_path = r'D:\card2020\png\\'

def make_qr(name, email, phone):
    qr = helpers.make_mecard(
        name=name,
        email=email,
        phone=phone
    )
    file_name = name + ".png"  # "张三.png“
    file_path = dir_path + file_name
    print(file_path)
    qr.save(file_path, scale=5)


make_qr("诸葛亮2", "1111@163.com", "1334444554")

功能:批量生成二维码

遍历列表,得到字典

利用二维码生成的函数

文件的读写操作

  • 写一个函数用于保存数据到文件中(添加名片后保存)
  • 写一个函数用于读取文件的内容(读文件内容并且把内容返回给调用者)

最终的代码

from segno import helpers

# 功能菜单
func_menu = {
    "1": "新增名片",
    "2": "查询所有名片",
    "3": "搜索名片",
    "4": "批量生成二维码",
    "q": "退出程序"
}

# 搜索结果的处理菜单
deal_menu = {
    "m": "修改名片",
    "d": "删除名片",
    "c": "生成二维码",
}


def load_data():
    """读取文件的内容"""
    # 1,打开文件,读模式
    f = open('card.db', 'r', encoding='utf8')
    # 2,读取内容(读的一定是str类型)
    con = f.read()
    # 3,关闭文件
    f.close()
    # 4,激活被封印的列表
    con_li = eval(con)
    # 5,返回这个列表给调用者
    return con_li


# 所有的数据列表,保存所有的名片信息
card_list = load_data()



# 手动配置一下
dir_path = r'D:\card2020\png\\'


def make_qr(name, email, phone):
    qr = helpers.make_mecard(
        name=name,
        email=email,
        phone=phone
    )
    file_name = name + ".png"  # "张三.png“
    file_path = dir_path + file_name
    # print(file_path)
    qr.save(file_path, scale=5)


def show_welcome():
    """欢迎菜单"""
    print('*'*60)
    print('欢迎使用 宏鹏名片管理系统 V1.0')


def show_menu():
    """显示功能菜单"""
    # 遍历功能菜单字典 同时得到字典的键与值
    for key, val in func_menu.items():
        # print(key,'----',val)
        print('{}----{}'.format(key, val))


def save_data():
    """保存列表的数据到文件中"""
    # 文件打开
    f = open('card.db','w',encoding='utf8')
    # 内容存进去
    con = str(card_list)
    f.write(con)
    # 文件关闭
    f.close()

def add_card():
    """新增名片功能"""
    # 定义了一个用户名片的空字典
    card_dict = {}
    # 接收用户的输入
    name = input('请输入姓名:')
    tel = input('请输入电话:')
    email = input('请输入邮箱:')
    # 空字典中添加内容
    card_dict['name'] = name
    card_dict['tel'] = tel
    card_dict['email'] = email
    # 所有名片的列表添加名片字典
    card_list.append(card_dict)
    # 保存数据到文件中
    save_data()


def show_cards():
    # print('显示所有名片的功能!!!!!!!!!!')
    # 打印表头
    print('姓名\t电话\t\t邮箱\t')
    # print(card_list)  # [{},{}]
    # 遍历全部名片列表,依次获取每一个字典
    for card in card_list:  # card是代表了一个字典
        name = card['name']
        tel = card['tel']
        email = card['email']
        # print(name,tel,email)
        print('{}\t{}\t{}'.format(name, tel, email))


def show_search_result(card):
    print('搜索结果:******************')
    print('姓名\t电话\t\t邮箱\t')
    print('{}\t{}\t{}'.format(card['name'], card['tel'], card['email']))


def show_deal_menu():
    """显示处理的菜单"""
    for key, val in deal_menu.items():
        print("{}----{}".format(key, val))


def deal_choice():
    """用户选择想要的操作"""
    # 接收用户的输入
    choice = input('请选择对该名片的操作:')
    # 验证用户的输入
    if choice not in deal_menu:
        choice = 'error'
    return choice


def get_real_info(input_data, default_data):
    """验证用户输入的内容是否为空,返回有用的数据"""
    strip_data = input_data.strip()  # 把字符串的空格左右两边都去掉
    if len(strip_data) == 0:
        return default_data
    return strip_data


def modify_card(card):
    """
    修改名片,本质就是修改字键中键所对应的值
    :param card:
    :return:
    """
    # - 接收新的数据:姓名,电话,邮箱
    new_name = input('原数据:{},要修改为:'.format(card["name"]))
    new_tel = input('原数据:{},要修改为:'.format(card['tel']))
    new_email = input('原数据:{},要修改为:'.format(card['email']))
    # - 把原字典的对应数据进行修改

    card['name'] = get_real_info(new_name, card["name"])
    card['tel'] = get_real_info(new_tel, card['tel'])
    card['email'] = get_real_info(new_email, card['email'])


def delete_card(card):
    """从名片列表中把字典删除"""
    card_list.remove(card)


def create_png(card):
    print('生成二维码', card)
    make_qr(card["name"], card["email"], card["tel"])


def run_deal_func(choice, card):
    """运行用户的选择"""
    if choice == "error":
        print('不存在的操作指令')
        return
    elif choice == "m":
        modify_card(card)
    elif choice == "d":
        delete_card(card)
    elif choice == "c":
        create_png(card)


def deal_card(card):
    """处理搜索成功的名片"""
    # - 显示功能菜单
    show_deal_menu()
    # - 让用户选择
    choice = deal_choice()
    # - 执行相关的功能函数
    run_deal_func(choice, card)


def search_card():
    """名片搜索"""
    # - 用户要输入一个搜索词
    key = input('请输入要搜索的词(从姓名里查):')  # "张"
    # - 依次遍历出名片列表中的所有字典
    for card in card_list:  # [{"name":???},{}]
        # card 就是一个字典{"name":???}
        # 获取姓名
        name = card["name"]  # ”张三"
        # 如何判断"张" 在不在 "张三" 字符串中?
        if key in name:
            # 显示这个结果
            show_search_result(card)
            # 处理这个结果
            deal_card(card)

            break
        else:
            print('查找不成功,请重新再试')


def user_choice():
    """用户选择"""
    # - 接收用户的输入
    choice = input('请输入您的选择:')
    # - 验证用户的输入是否合法
    # 利用成员运算符进行验证
    if choice not in func_menu:
        print('非法输入,请重新再试。。。。。。。。。。。。')
        choice = "c"  # 数据的校正,把数据修改为我们功能中有的指令

    return choice


def make_all_qr():
    """把所有的名片数据生成二维码图片"""
    for card in card_list:  # card 是代表了字典
        make_qr(card["name"], card["email"], card["tel"])


def run_func(choice_num):
    """根据用户的选择,启动相应的功能"""
    # print('运行{}功能'.format(choice_num))
    print('-'*60)
    if choice_num == "1":  # 新增名片分支
        add_card()

    elif choice_num == "2":  # 显示所有名片的分支
        show_cards()

    elif choice_num == "3":  # 搜索名片的分支
        search_card()

    elif choice_num == "4":  # 批量生成二维码
        make_all_qr()


def start():
    """
    程序的入口
    :return:
    """
    while True:
        # - 1欢迎界面
        show_welcome()
        # - 2功能菜单
        show_menu()
        # - 3用户选择功能
        choice = user_choice()
        if choice == "q":
            break
        if choice == "c":
            continue
        # - 4对应的功能运行
        run_func(choice)
        # 分界符号
        print('\n')


start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值