1. 程式人生 > >綜合應用——名片管理系統

綜合應用——名片管理系統

def 基本 action color style 模塊 一次 輸入 運行時

目的:

綜合應用已經學過的 變量 流程控制 函數 模塊

開發名片管理系統

系統需求

1.程序啟動,顯示名片管理系統歡迎界面,並顯示功能菜單

**************************************************

歡迎使用[名片管理系統]V1.0

1.新建名片

2.顯示全部

3.查詢名片

0.退出系統

**************************************************

2.用戶用數字選擇不同的選擇

3.根據功能選擇,執行不同的功能

4.用戶名片需要記錄用戶的 姓名、電話、QQ、郵件

5.如果查詢到指定的名片,用戶可以選擇修改或者刪除名片

步驟

1.框架搭建

2.新增名片

3.顯示所有名片

4.查詢名片

5.查詢成功後修改、刪除名片

6.讓Python程序能夠直接運行

01.框架搭建

目標

搭建名片管理系統框架結構

  1.準備文件、確定文件名、保證能夠在需要的位置編寫代碼

  2.編寫主運行循環,實現基本的用戶輸入和判斷

1.1文件準備

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

  程序的入口

  每一次啟動名片管理系統都通過main這個文件啟動

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

  將對名片的新增、查詢、修改、刪除等功能封裝在不同的函數中

1.2編寫主運行循環

在 cards_main 中添加一個無限循環

# 無限循環,由用戶主動決定什麽時候退出循環  在軟件開發時,如果不希望程序執行後立即退出
# 可以在程序中增加一個無限循環,有用戶決定退出程序的時機
while True: # while循環 直接指定條件為true,會不停的一直循環直到break直接退出循環 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("您輸入的不正確,請重新選擇")

字符串判斷

if action_str in ["1","2","3"]: #該方法更好
if action_str == "1" or action_str =="2" or action_str == "3":
# 1.使用in針對列表判斷,避免使用or拼接復雜的邏輯條件
# 2.沒有使用int轉換用戶輸入,可以避免一旦用戶輸入的不是數字,導致程序運行錯誤
       

TODO註釋

    # 在#後跟上TODO,用於標記需要去做的工作
    # TODO(作者/郵件)顯示系統菜單

定義函數 導入模塊 調用模塊中的函數

# 在cards_tools.py文件中定義一個顯示菜單的函數
def show_menu():
    """顯示菜單"""
    print("*" * 50)
    print("歡迎使用【名片管理系統】V 1.0")
    print("")
    print("1.新增名片")
    print("2.顯示全部")
    print("3.搜索名片")
    print("")
    print("0.退出系統")
    print("*" * 50)
#調用導入工具模塊
import cards_tools
    # 調用導入的工具模塊中的函數
    cards_tools.show_menu()

02.保存名片數據的數據結構

# 程序時用來處理數據的,而變量就是用來存儲數據的
#   使用字典記錄每一張名片的詳細信息
#  使用列表統一記錄所有的名片字典

定義名片列表變量

# 在cards_tools文件的頂部增加一個列表變量
# 所有名片記錄的列表
card_list = []
# 註意
# 1.所有名片相關操作,都需要使用這個列表,所以應該定義在程序的頂部
# 2.程序剛運行時,沒有數據,所以是空列表

cards_main.py

import cards_tools
# 無限循環,由用戶主動決定什麽時候退出循環
while True:
    # while循環 直接指定條件為true,會不停的一直循環直到break直接退出循環

    # 顯示功能菜單
    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()
        # 顯示全部
        if action_str == "2":
            cards_tools.show_all()
        # 查詢名片
        if action_str == "3":
            cards_tools.search_card()
        # pass
        # 如果在開發程序時,不希望立刻編寫分支內部的代碼
        # 可以使用pass關鍵字,表示一個占位符,能夠保證程序的代碼結構正確
        # 程序運行時,pass關鍵字不會執行任何操作
    # 0 退出系統
    elif action_str == "0":
        print("歡迎再次使用【名片管理系統】")
        break

    # 其他內容輸入錯誤,需要提示用戶
    else:
        print("您輸入的不正確,請重新選擇")

cards_tools.py

# 記錄所有的名片字典
card_list = []

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

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)

def 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"]))

def search_card():
    """搜索名片"""
    print("*" * 50)
    print("搜索名片")
    # 1.提示用戶輸入要搜索的姓名
    find_name = input("請輸入要搜索的姓名:")
    # 2.遍歷名片列表,查詢要搜索的姓名,如果沒有找到,需要提示用戶
    for card_dict in card_list:
        if card_dict["name"] == find_name:
            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
    else:
        print("抱歉沒有找到 %s" % find_name)

def deal_card(find_dict):

    """處理查找到的名片

    :param find_dict:查找到的名片
    """
    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"],"郵箱:")
        print("修改名片成功!")

    elif 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

綜合應用——名片管理系統