18_Python基础_实战(一)_名片管理系统

目录

 

1. 目标

2.系统需求

 3.开发步骤

4.开发过程

4.1 框架搭建

 4.1.1 文件准备

4.1.2 编写主运行循环

 

4.2 数据结构的确定

4.3 各个模块函数的编写

4.3.1 显示菜单函数

4.3.2 新增名片函数

4.3.3 显示全部名片函数

4.3.4  搜索名片函数

4.3.5 补充函数

5.完整代码

5.1 cards_main.py:

5.2 cards.tools.py:


1. 目标

综合已经学过的知识点:

  1. 变量
  2. 函数
  3. 模块
  4. 流程控制

开发 名片管理系统

2.系统需求

 3.开发步骤

  1. 框架搭建
  2. 新增名片
  3. 显示所有名片
  4. 查询名片
  5. 查询后修改、删除名片

4.开发过程

4.1 框架搭建

目标:搭建系统框架

  1. 准备文件,确定文件名,保证能够在需要位置编写代码
  2. 编写 主运行循环,实现基本的用户输入和判断

 4.1.1 文件准备

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

  1. 程序入口
  2. 每次启动系统时,通过main这个文件启动

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

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

4.1.2 编写主运行循环

(1)caeds_main.py 中添加一个无限循环,提示用户操作,并对对应操作做出反应。

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
    # 其他内容,提示用户:输入错误
    else:
        print("你输入的不正确,请重新选择")

知识补充:

1.空操作:pass

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

   2. 字符串判断

if action in ["1","2","3"]


if action=="1" or action=="2" or action=="3"
  •   使用 in 针对列表判断,避免使用 or 拼接
  • 没有使用 int 进行数据类型转换的用户,可以避免错用

  3.无限循环:while True:

   

Pycharm 注释技巧:

1.TODO 注释

在 # 后跟上 TODO ,用于标记需要去做的工作

# TODO(作者/邮件)具体解释

(2) cards_tools.py 中写好所需的功能函数模块

def show_menu():
    '''显示菜单'''
    
def new_card():
    '''新增名片'''
    print("新增名片")

def show_all():
    '''显示所有名片'''
    print("显示所有名片")

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

 (3)完善 cards_main( ) 主运行文件,之后就只专注功能函数的开发

import cards_tools
while True:
    # TODO(孔言) 显示菜单
    cards_tools.show_menu()
    # todo(孔言) 提示用户操作
    action_str = input("请选择希望执行的操作:")
    print("您选择的操作为【%s】" % action_str)

    # 1,2,3 针对名片的操作
    if action_str in ["1","2","3"]:
       # 新增名片
       if action_str == "1":
           cards_tools.new_card()
       # 显示全部
       if action_str == "2":
           cards_tools.show_all()
       # 查询名片
       if action_str == "3":
           cards_tools.search_card()
       pass
    # 0 退出系统
    elif action_str == "0":
        print("欢迎再次使用【名片管理系统】")
        break
    # 其他内容,提示用户:输入错误
    else:
        print("你输入的不正确,请重新选择")

 

4.2 数据结构的确定

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

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

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

(1) 定义名片列表变量

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

# 所有名片记录的列表

cards_list = [ ]

 注意:

  1. 所有名片相关的操作,都要使用这个列表,所以应该 定义在程序的顶部
  2. 程序刚运行时,没有数据,所以是 空列表

4.3 各个模块函数的编写

4.3.1 显示菜单函数

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

4.3.2 新增名片函数

def new_card():
    '''新增名片'''
    print("新增名片")
    # 1.提示用户输入名片的详细信息
    name = input("请输入姓名:")
    phone = input("请输入电话:")
    qq = input("请输入QQ:")
    email = input("请输入邮箱:")
    # 2.使用用户的信息创立一个名片字典
    cards_dict = {"name":name,
                  "phone":phone,
                  "qq":qq,
                  "email":email}
    # 3.将名片字典添加到列表中
    cards_list.append(cards_dict)
    print(cards_list)
    # 4.提示用户添加成功
    print("添加%s的名片成功!" % name)

pycharm 使用技巧:整体修改变量名称

 

4.3.3 显示全部名片函数

def show_all():
    '''显示所有名片'''
    print("显示所有名片")
    # 打印表头
    for name in ["姓名","电话","QQ","邮箱"]:
        # \t 为制表位,类似空格
        print(name,end="\t\t")

    print("")
    # 判断是否存在名片记录,如果没有,提示用户并返回
    if len(cards_list) == 0:
        print("无任何名片记录,请使用新增名片功能添加名片!")
        # return 可以返回一个函数的执行结果
        # 如果 return 后面没有任何内容,表示会返回到调用函数的位置,并且不返回任何结果
        return
    # 打印分割线
    print("="*50)
    # 遍历名片列表依次输出字典信息
    # 遍历第一个变量名任取,其类型取决于后面
    for cards_dict in cards_list:
        print("%s\t\t%s\t\t%s\t\t%s" % (cards_dict["name"],
                                        cards_dict["phone"],
                                        cards_dict["qq"],
                                        cards_dict["email"]))

 知识补充:return 作用

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

4.3.4  搜索名片函数

def search_card():
    '''搜索名片'''
    print("搜索名片")
    # 1.提示用户输入搜索姓名
    find_name = input("请输入要搜索的姓名:")
    # 2.遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
    # 此处card_dict 数据类型为字典
    for cards_dict in cards_list:
        if cards_dict["name"] == find_name:
            print("姓名\t\t电话\t\tQQ\t\t邮箱")
            print("="*50)
            print("%s\t\t%s\t\t%s\t\t%s" % (cards_dict["name"],
                                            cards_dict["phone"],
                                            cards_dict["qq"],
                                            cards_dict["email"]))
            # todo 针对找到的名片记录执行修改、删除操作
            deal_card(cards_dict)
            break

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

4.3.5 补充函数

  • 为了保证主要函数完整性,增加可读性,所以函数内部需要的特殊功能单独再封装为一个函数。
  • 函数定义可前可后,不影响调用。

1. 处理找到的名片:deal_card( )

def deal_card(find_dict):
    '''
    处理查找到名片
    :param find_dict: 查找到的名片
    :return:
    '''
    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"],"Email:")
        print("修改名片成功")
    elif action_str == "2":
        cards_list.remove(find_dict)
        print("删除名片成功")
2.修改名片补充函数:input_card_info( )
def input_card_info(dict_value,tip_message):
    '''
    解决修改时必须一一输入的问题,丰富版input()
    :param dict_value: 字典中原有的值
    :param tip_message: 输入的提示文字
    :return: 如果用户输入了内容,就返回内容,否则返回
    '''
    # 1.提示用户输入内容
    result_str = input(tip_message)
    # 2.针对用户输入进行判断,如果用户输入了内容,直接返回结果
    if len(result_str) > 0:
        return result_str
    # 3.如果用户没有输入内容,返回字典中原有的值
    else:
        return dict_value

5.完整代码

5.1 cards_main.py:

import cards_tools

while True:
    # TODO(孔言) 显示菜单
    cards_tools.show_menu()
    # todo(孔言) 提示用户操作
    action_str = input("请选择希望执行的操作:")
    print("您选择的操作为【%s】" % action_str)

    # 1,2,3 针对名片的操作
    if action_str in ["1","2","3"]:
       # 新增名片
       if action_str == "1":
           cards_tools.new_card()
       # 显示全部
       if action_str == "2":
           cards_tools.show_all()
       # 查询名片
       if action_str == "3":
           cards_tools.search_card()

    # 0 退出系统
    elif action_str == "0":
        print("欢迎再次使用【名片管理系统】")
        break
    # 其他内容,提示用户:输入错误
    else:
        print("你输入的不正确,请重新选择")

5.2 cards.tools.py:

# 记录所有的名片字典
cards_list = []
def show_menu():
    '''显示菜单'''
    print("*" * 50)
    print("欢迎使用【名片管理系统】V1.0")
    print("")
    print("1.新增名片")
    print("2.显示全部")
    print("3.搜索名片")
    print("0.退出系统")
    print("*" * 50)
    '''显示菜单'''

def new_card():
    '''新增名片'''
    print("新增名片")
    # 1.提示用户输入名片的详细信息
    name = input("请输入姓名:")
    phone = input("请输入电话:")
    qq = input("请输入QQ:")
    email = input("请输入邮箱:")
    # 2.使用用户的信息创立一个名片字典
    cards_dict = {"name":name,
                  "phone":phone,
                  "qq":qq,
                  "email":email}
    # 3.将名片字典添加到列表中
    cards_list.append(cards_dict)
    print(cards_list)
    # 4.提示用户添加成功
    print("添加%s的名片成功!" % name)

def show_all():
    '''显示所有名片'''
    print("显示所有名片")
    # 打印表头
    for name in ["姓名","电话","QQ","邮箱"]:
        # \t 为制表位,类似空格
        print(name,end="\t\t")

    print("")
    # 判断是否存在名片记录,如果没有,提示用户并返回
    if len(cards_list) == 0:
        print("无任何名片记录,请使用新增名片功能添加名片!")
        # return 可以返回一个函数的执行结果
        # 如果 return 后面没有任何内容,表示会返回到调用函数的位置,并且不返回任何结果
        return
    # 打印分割线
    print("="*50)
    # 遍历名片列表依次输出字典信息
    # 遍历第一个变量名任取,其类型取决于后面
    for cards_dict in cards_list:
        print("%s\t\t%s\t\t%s\t\t%s" % (cards_dict["name"],
                                        cards_dict["phone"],
                                        cards_dict["qq"],
                                        cards_dict["email"]))

def search_card():
    '''搜索名片'''
    print("搜索名片")
    # 1.提示用户输入搜索姓名
    find_name = input("请输入要搜索的姓名:")
    # 2.遍历名片列表,查询要搜索的姓名,如果没找到,提示用户
    # 此处card_dict 数据类型为字典
    for cards_dict in cards_list:
        if cards_dict["name"] == find_name:
            print("姓名\t\t电话\t\tQQ\t\t邮箱")
            print("="*50)
            print("%s\t\t%s\t\t%s\t\t%s" % (cards_dict["name"],
                                            cards_dict["phone"],
                                            cards_dict["qq"],
                                            cards_dict["email"]))
            #  针对找到的名片记录执行修改、删除操作
            deal_card(cards_dict)
            break

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

def deal_card(find_dict):
    '''
    处理查找到名片
    :param find_dict: 查找到的名片
    :return:
    '''
    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"],"Email:")
        print("修改名片成功")
    elif action_str == "2":
        cards_list.remove(find_dict)
        print("删除名片成功")
def input_card_info(dict_value,tip_message):
    '''
    解决修改时必须一一输入的问题,丰富版input()
    :param dict_value: 字典中原有的值
    :param tip_message: 输入的提示文字
    :return: 如果用户输入了内容,就返回内容,否则返回
    '''
    # 1.提示用户输入内容
    result_str = input(tip_message)
    # 2.针对用户输入进行判断,如果用户输入了内容,直接返回结果
    if len(result_str) > 0:
        return result_str
    # 3.如果用户没有输入内容,返回字典中原有的值
    else:
        return dict_value

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值