基于python基础知识整合的名片管理系统练习

                当学完一些基础知识之后就可以试着做一个最简单的名片管理系统,起码一些知识是用的上的。

一:文件结构如图:

                                              基于python基础知识整合的名片管理系统练习_第1张图片

     可以从文件结构看出来,card_tools.py这个文件是提供card_main.py实现功能的工具模块。那么我们这个名片管理系统实际上的需求大家都懂,无非是增删改查。


二:思路分析:

    首先该名片管理系统只是一个简单的练习,目的只是为了梳理最基本的知识。大家可以想一下,那么此次做的这个练习就可以不用把数据写入文件之中,我们只需要实现一次运行程序的过程之中实现增删改查就OK,后续的爬虫里面会把这文件操作这部分也写进去。

    那么我们在记录这个名片信息的时候要用什么样的数据结构去存呢?,首先,在python中能够存储不同类型数据,并且可以做到键与值一一对应的结构就是字典。那么这里存在一个问题,字典与字典之间又怎么进行串联。答案就是列表。这样,整个主体数据结构就分析出来了,要想存储名片信息,并且可以实现增删改查,应该用一个大列表,里面的元素是各个名片信息的字典。运行效果如下所示:

                                                        ******************************
                                                        欢迎使用【名片管理系统V 1.0】
                                                        1. 新增名片 
                                                        2. 显示全部 
                                                        3. 搜索名片
                                                        0. 退出系统
                                                        ******************************

                                                        请选择希望执行的操作:

当我们分别输入不同的数字之时,就会执行不同的操作。

三 :card_mains.py文件代码展示以及讲解:

import card_tools

while True:

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

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

            card_tools.new_card()

        elif action_str == '2':

            card_tools.show_all()

        elif action_str == '3':

            card_tools.search_card()

    elif action_str == '0':
        break
    else:
        print("您输入的不正确,请重新选择")
print("您已退出程序")

    从上述代码可以看出,主文件的代码很简单,这也是程序设计的本来初衷。那么现在由于是对于基础知识的梳理,所以并没有用到类的概念。所以目前还是在以一种面向过程的思想来解决问题。就是用无数的函数去解决问题。把解决一大类函数封装到一个文件内部,在Linux可以做成.so或.a的库以供调用。那么在这个小练习中,运用的就是这个思想,那么下面我们一行代码一行代码分析

1 ,首先import为导入包的操作,我们要保证路径的正确,才可以保证包被正确的导入,由于该文件结构为同目录下,所以不用添加上级目录

2,由于主界面要每次都显示在屏幕上,所以我们主体的框架搭建必然是个死循环,那么在python中跳出死循环的方式与C一样都是break。在python中获取输入参数的方法是input,这个方法的返回值是字符串,所以我们在底下循环判断时也要用判断字符串与字符串的相等关系。剩下的就是判断以及调用方法来实现功能了,没什么好说的,主要看card_tools.py文件。

四 card_tools.py代码讲解:

    

card_list = []

def show_menu():
    """显示菜单"""
    print("*" * 30)
    print("欢迎使用【名片管理系统V 1.0】")
    print("1. 新增名片 ")
    print("2. 显示全部 ")
    print("3. 搜索名片")
    print("0. 退出系统")
    print("*" * 30)
def new_card():
    """新增名片"""
    name_str = input("请输入姓名:")
    phone_str = input("请输入电话:")
    qq_str = input("请输入QQ:")
    email_str = input("请输入邮箱:")

    card_dict = {"name": name_str,
                 "phone": phone_str,
                 "qq": qq_str,
                 "email": email_str}
    card_list.append(card_dict)
    print(card_list)
    print("添加 %s 的名片成功" % name_str)


def show_all():
    """显示所有名片"""
    if len(card_list) == 0:
        print("当前没有任何名片记录,请添加")
        return
    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"]))

def deal_card(find_dict):
    print(find_dict)
    action_str = input('请选择要执行的操作 '
                       '1'' 修改 '
                       '2   删除 '
                       '0   返回上级菜单')
    if action_str == '1':
        print("修改名片")
    elif action_str == '2':
        card_list.remove(find_dict)

def search_card():
    """搜索名片"""
    print("搜索名片")
    find_name = input("请输入要搜索的姓名:")

    for card_dict in card_list:
        if card_dict['name'] == find_name:
            print("找到了")
            deal_card(card_dict)
            break
    else:
        print("抱歉,没有找到 %s" % (find_name))

函数 show_menu()

    该函数功能便是输出主界面的显示信息,这里涉及到几个知识点。第一个就是*符号代表多重的意思,可以用它很方便的输出多个相同字符,亦或者列表变量,亦或者字符串。在python中print函数已经为我们做好了换行,就不用在跟着\n转义符。如果想连续输出。可以这么操作print("edefff",end = ""),end后面可以跟着你想要的。

函数 new_card()

    该函数的功能为新增名片。通过上面的分析我们知道,我们主要的数据结构为一个列表里存储着信息字典。但是由于几个函数都要对列表进行操作。所以,我们把列表定义成全局变量。这里再引深一个知识点,在我们定义全局变量的时候,如果是字符串与普通数值类型的,我们会发现你是改变不了这个全局变量的值的。这里就和上上节说的可变类型和不可变类型的变量的区别了,那么我们如果修改不可变类型的全局变量,需要在变量前用global。该函数剩下的就没什么了。无非就是把输入的信息分别输入组成了字典添加到了列表里。

函数 show_all()

    这个函数是输出当前所有字典信息,但是呢,我们这里对格式做了一定的优化,print()函数里面的\t转义符是使得每个元素都垂直输出。之后就是用for迭代器遍历列表中每个元素,再把字典里的值按键-值对应输出。


    


你可能感兴趣的:(python,python全栈开发)