Python實現一個名片管理系統

以下就是一個名片管理系統的具體功能:有添加名片,顯示已添加的名片,搜索名片這幾個功能,並且中間能夠提供差異化處理,例如查找名片的時候可以根據不同的信息去查找,也可以綜合所有信息查找。下面我將具體介紹整個系統是如何搭建起來的。
在這裏插入圖片描述
在這裏插入圖片描述

1.框架搭建

當我們要完成一個項目的時候,第一件事應該就是有一個總體的規劃,就像是我們高中寫作文的時候,老師不是都讓我們先列個提綱的嘛,有了提綱,就有了寫作的方向。完成一個Python項目也是一樣,要先有一個大體的框架,這個程序我們要實現什麼功能,有什麼功能,每個功能要怎麼來完成,需要什麼輔助的東西,包啊,插件啊,數據庫啊等等。萬丈高樓平地起,如果不事先有個規劃,到真正做起來的時候一定會手忙腳亂。特別是當你走上了工作的崗位,開發大型的複雜的項目的時候,一上來就直接敲代碼是絕對不行的。
就這個名片管理系統得話:首先展示在用戶眼中應該是最開始的這個界面,後續所有的操作都是在這個的基礎上完成的。新增名片是一個模塊,顯示全部是一個模塊,搜索名片也是一個模塊,也就是一個函數,用戶想執行什麼操作,就調用那個模塊的函數來完成,這就是一個大體的框架,後面我們就需要根據不同的模塊來編寫具體的代碼。
在這裏插入圖片描述
這就是一個主函數的代碼,我們所要執行的具體功能都封裝在cards_tools模塊中。

import cards_tools
# 無限循環,由用戶主動決定什麼時候退出循環
while True:
    # 顯示功能菜單
    cards_tools.show_menu()
    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()
        # 顯示名片
        elif action_str == "2":
            cards_tools.show_all()
        # 查詢名片
        elif action_str == "3":
            cards_tools.search_card()
    # 0 退出系統
    elif action_str == "0":
        print("歡迎再次使用【名片管理系統】")
        break
        # 如果在開發程序時,不希望立刻編寫分支內部的代碼
        # 可以使用 pass 關鍵字,表示一個佔位符,能過保證程序的代碼結構正確
        # 程序執行時,pass關鍵字不會執行任何的操作
    # 其他內容輸入錯誤,需要提示用戶
    else:
        print("您輸入的不正確,請重新選擇")

顯示菜單

在主界面顯示歡迎信息。代碼如下:

def show_menu():
    """顯示菜單"""
    print("*" * 50)
    print("歡迎使用【名片管理系統】v1.0")
    print("")
    print("1.新增名片")
    print("2.顯示全部")
    print("3.搜索名片")
    print("")
    print("0.退出系統")
    print("*" * 50)

新增名片

新添加一個人的名片,需要哪些信息呢?姓名,電話,QQ賬號,郵箱地址。我們把每個單獨的信息作爲一個字符串,然後一個人的所有信息放在一個字典中,所有人的信息放在一個列表中,這樣是不是顯得很有條理,後面處理起來也更加的方便。

def new_card():
    """新增名片"""
    print("-" * 50)
    print("新增名片")

    # 1.提示用戶輸入名片的詳細信息
    name_str = input("請輸入姓名: ")
    phone_str = input("請輸入電話: ")
    qq_str = input("請輸入QQ: ")
    email_str = input("請輸入郵箱: ")

    # 2.使用用戶輸入的信息建立一個名片字典
    card_dict = {"name": name_str,
                 "phone": phone_str,
                 "qq": qq_str,
                 "email": email_str}

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

    # 4.提示用戶添加成功
    print("添加%s的明片成功!" % name_str)

顯示所有名片

按照姓名,電話,QQ,郵箱的順序依次顯示每一個人的信息。

ef show_all():
    """顯示所有名片"""
    print("-" * 50)
    print("顯示所有名片")
    # 判斷是否存在名片記錄,如果沒有,提示用戶並且返回
    if len(card_list) == 0:
        print("當前沒有任何名片記錄,請使用新增功能添加名片! ")
        # return 可以返回一個函數的執行結果
        # 下方的代碼不會被執行
        # 如果return 後面沒有任何的內容,表示會返回到調用函數的位置
        # 並且不返回任何的結果
        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"]))

搜索名片

搜索名片這裏特別需要注意的是:如果用戶不知道姓名,只知道郵箱,該怎麼去搜索呢?我們在搜索模塊裏面設計了一個新的輸入函數,如果用戶輸入爲空,就是直接回車得話,直接跳到下一個信息選項,目前只能搜索不相同的信息,後面我會繼續改進,這個地方是我新加入的,可能會有bug。

def search_card():
    """搜索名片"""
    print("-" * 50)
    print("搜索名片")

    # 1.提示用戶輸入要搜索的姓名
    find_name = input_search_info("請輸入要搜索的姓名: ")
    find_phone = input_search_info("請輸入要搜索的電話: ")
    find_qq = input_search_info("請輸入要搜索的qq: ")
    find_email = input_search_info("請輸入要搜索的郵箱: ")
    # 2.遍歷名片列表,查詢要搜索的姓名,如果沒有找到,需要提示用戶
    for card_dict in card_list:
        search("name", find_name)
        search("phone", find_phone)
        search("qq", find_qq)
        search("email", find_email)
        
def input_search_info(tip_message):

    result_str = input(tip_message)
    if len(result_str) > 0:
        return result_str
    else:
        pass
        
def search(infomation, find_info):
    for card_dict in card_list:
        if card_dict[infomation] == find_info:
            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"]))

            # 針對找到的名片記錄執行修改和刪除的操作
            deal_card(card_dict)
            break

處理查找到的名片

這裏是對查找到的名片進行增刪改除的操作,同樣需要注意的是如果用戶不想改直接按回車的問題。

def deal_card(find_dict):
    """
    處理查找到的名片
    :param 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"], "郵箱: ")
        print("修改名片成功!")
    if action_str == "2":
        card_list.remove(find_dict)
        print("刪除名片成功!")

def input_card_info(dict_value, tip_message):
    """
    輸入名片信息
    :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

以上就是一個完整的名片管理系統所需要的所有功能了!

最後

剛看了我們院17級輔導員恕姐的日誌,然後思考了一下自己的人生,面臨考研就業的我們真的需要提升自己啊!在我們面前的時間不多了,真的需要好好努力了!

我前面的博客已經說了,我是看it黑馬的教程學的Python,所以其中的很多代碼都有借鑑,當然我自己也有一些改進的地方,純屬自己記錄自己的學習歷程,沒有剽竊之意!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章