python学习告一段落,利用python自己写的名片管理系统。
代码跟大一C语言课程设计开发的系统极其类似,那时候自己很喜欢写程序,晚上和舍友搞课程设计搞到两三点,哎,想想真是怀念。
荒废的时间已经拿不回来了。
种一棵树最好的时间是十年前,其次就是现在。

开发框架

两个文件,一个main,一个tools。
使用字典记录每一张名片的详细信息
使用列表记录所有的字典名片

代码知识点

(只是个人认为重要点的知识点,不代表代码里没有别的重点= =)

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

num = "1"
if num in ["1", "2", "3"]:  # 用in进行判断字符串是否是列表的成员
   ....

3、使用input()从键盘接收代码时,如果不确定用户输入类型,则不需要进行类型转换
PS:

# 转换为int
num = int(input("请输入一个数字"))

4、鼠标右键点击某个参数refactor中rename可以对文件中同名参数进行重命名
5、无限循环
需要进行重复操作时,可以使用无限循环,知道满足某一个条件break跳出循环。

whille True:
	# 完成某一条件
	break

6、TODO注释
使用TODO强调注释,并且可以在Pycharm中查看所有TODO注释。在项目开发完毕后,务必将所有TODO删除。

# TODO 使用TODO强化提示并且可以在pycharm中查看所有TODO

7、return的使用
return可以返回一个函数执行的结果,下方的代码不会被执行。如果return后面没有任何内容,则直接返回调用函数部分并执行调用函数后方代码。
8、增加文档注释
在项目完成后,需要对新写的函数增加文档注释,保证自己以后可以回想起函数的作用。
增加方法:鼠标放到函数名上,点击小黄色灯泡,选择Insert documentation string stub.
查看文档注释方法:鼠标放到函数名上,Ctrl+q
9、SheBang
在python文件第一行增加SheBang符号(#!)+python解释器完整路径,增加之后就不需要解释器可以直接在终端中运行。
10、给一个文件增加可执行权限
chmod +x cards_main.py

全部代码

main.py

#! /usr/bin/python3

# 名片管理系统
import tools  # 导入工具模块
version = "V1.0"    # TODO(KaiSarH) 定义系统版本号
while True:         # 使用无限循环保证代码不断重复
    # 欢迎界面
    # 定义operate_str保存用户选择的操作
    operate_str = cards_tools.show_wel(version)
    if operate_str in ["1", "2", "3"]:
        # 新增名片
        if operate_str == "1":
            cards_tools.card_insert()
        # 显示全部
        elif operate_str == "2":
            cards_tools.card_show()
        # 查询名片
        elif operate_str == "3":
            cards_tools.card_search()
    elif operate_str == "0":
        print("欢迎再次使用名片管理系统!")
        break
    else:
        print("您的输入不正确,请重新选择!")

tools.py

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


def show_wel(version):
    """
    欢迎界面
    :param version:版本号
    :return: 返回选择的操作
    """
    print("*" * 50)
    print("欢迎使用名片管理系统 %s " % version, end="\n\n")
    print("1. 新建名片")
    print("2. 显示全部")
    print("3. 查询名片", end="\n\n")
    print("0. 退出系统")
    print("*" * 50)
    operate_str = input("请选择希望执行的操作:")
    print("您选择的操作是:%s" % operate_str)
    return operate_str


def card_insert():
    """
    新增名片
    """
    print("功能:新增名片")
    name_str = input("请输入姓名:")
    phone_str = input("请输入电话:")
    qq_str = input("请输入qq:")
    email_str = input("请输入e-mail:")
    card_dict = {"name": name_str,
                 "phone": phone_str,
                 "qq": qq_str,
                 "email": email_str}
    card_list.append(card_dict)
    print("添加 %s 的名片成功! " % name_str)


def card_show():
    """
    显示所有名片
    :return: 如果没有任何名片,返回空
    """
    print("功能:显示所有名片")
    # 判断是否有名片
    if len(card_list) == 0:
        print("当前名片列表中没有任何记录,请使用新增名片功能添加名片!")
        return
    # 显示表头
    for list_head in ["姓名", "电话", "QQ", "邮箱"]:
        print("%s" % list_head,end="\t\t")
    print("")
    # 显示分割线
    print("-" * 51)
    # 打印所有名片
    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"]))
    print("-" * 51)


def card_search():
    """
    查询名片
    """
    print("功能:查询名片")
    search_name = input("请输入要搜索的姓名:")
    for card_dict in card_list:
        if card_dict["name"] == search_name:
            print("姓名\t\t电话\t\tQQ\t\t邮箱\t\t")
            print("-" * 51)
            print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
                                            card_dict["phone"],
                                            card_dict["qq"],
                                            card_dict["email"]))
            print("-" * 51)
            card_deal(card_dict)
            break
    else:
        print("没有找到%s的名片记录." % search_name)


def card_deal(search_dict):
    """
    处理查找到的名片
    :param search_dict: 查找到的名片
    """
    operate_str = input("请选择要执行的操作:"
                        "1.修改 2.删除 0.返回上级菜单")
    if operate_str == "1":
        print("操作:修改名片")
        search_dict["name"] = input_card_info(search_dict["name"], "姓名:(不需要修改按回车)")
        search_dict["phone"] = input_card_info(search_dict["phone"], "电话:(不需要修改按回车)")
        search_dict["qq"] = input_card_info(search_dict["qq"], "QQ:(不需要修改按回车)")
        search_dict["e-mail"] = input_card_info(search_dict["e-mail"], "邮箱:(不需要修改按回车)")
        print("修改%s的名片成功" % search_dict["name"])
    elif operate_str == "2":
        print("操作:删除名片")
        card_list.remove(search_dict)
        print("删除%s的名片成功" % search_dict["name"])


def input_card_info(dict_info, type_mess):
    """
    输入名片信息
    :param dict_info:字典中原有值
    :param type_mess: 输入文字提示
    :return: 如果有输入,则返回输入的值
    """
    prin_info = input(type_mess)
    if len(prin_info) > 0:
        return prin_info
    else:
        return dict_info