文章

第30天:項目總結與實戰項目

課程簡介

今天是課程的最後一天,我們將回顧過去 30 天所學的核心內容,並通過一個實戰項目來鞏固所學知識。這個項目將涉及變數、條件語句、迴圈、函數、面向對象設計、文件處理、例外處理、資料庫操作和單元測試等概念,讓大家綜合運用 Python 技術,完成一個完整的應用程式。


學習內容

1. 30 天知識回顧

首先,讓我們快速回顧過去 30 天的內容,並梳理學習過的核心概念:

  • 基礎概念:變數、資料型態、運算符和表達式
  • 流程控制:條件語句、迴圈(for、while)
  • 函數與模組:函數定義、模組導入、裝飾器和匿名函數
  • 資料結構:列表、字典、集合和元組
  • 面向對象程式設計:類別、繼承、多型
  • 錯誤處理:try-except、raise 自定義例外
  • 檔案處理:檔案讀寫、目錄操作
  • 網絡請求與 API:基礎的網絡請求操作
  • 多線程與多進程:基礎的併發編程
  • 資料庫操作:SQLite 資料庫基本操作
  • 單元測試:撰寫測試用例,確保程式功能正確

2. 實戰項目:圖書管理系統

我們將構建一個簡單的「圖書管理系統」,該系統能夠執行以下操作:

  1. 添加新書
  2. 查詢書籍(通過書名或作者)
  3. 更新書籍資料(如書籍狀態)
  4. 刪除書籍
  5. 顯示所有書籍
  6. 資料庫儲存:系統資料保存在 SQLite 資料庫中
  7. 單元測試:為主要功能撰寫單元測試

項目實作步驟

1. 資料庫設計

建立 books 資料表,包含以下欄位:

  • id:書籍 ID(主鍵,自動增長)
  • title:書名
  • author:作者
  • year:出版年份
  • status:書籍狀態(如 “在庫” 或 “借出”)

2. 編寫主程式邏輯

定義包含圖書管理功能的 Library 類別,主要方法如下:

  • add_book(title, author, year):添加新書
  • find_book_by_title(title):根據書名查找書籍
  • find_book_by_author(author):根據作者查找書籍
  • update_status(book_id, status):更新書籍的狀態
  • delete_book(book_id):刪除書籍
  • list_all_books():顯示所有書籍

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sqlite3

class Library:
    def __init__(self, db_name='library.db'):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.create_table()

    def create_table(self):
        self.cursor.execute('''
            CREATE TABLE IF NOT EXISTS books (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                title TEXT NOT NULL,
                author TEXT NOT NULL,
                year INTEGER,
                status TEXT DEFAULT '在庫'
            )
        ''')
        self.conn.commit()

    def add_book(self, title, author, year):
        self.cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)", (title, author, year))
        self.conn.commit()

    def find_book_by_title(self, title):
        self.cursor.execute("SELECT * FROM books WHERE title LIKE ?", ('%' + title + '%',))
        return self.cursor.fetchall()

    def update_status(self, book_id, status):
        self.cursor.execute("UPDATE books SET status = ? WHERE id = ?", (status, book_id))
        self.conn.commit()

    # 其他方法類似,可自行擴充

3. 撰寫單元測試

使用 unittest 撰寫測試用例來驗證圖書管理系統的功能。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import unittest

class TestLibrary(unittest.TestCase):
    def setUp(self):
        self.library = Library(':memory:')  # 使用內存中的暫存資料庫

    def test_add_book(self):
        self.library.add_book("Python 程式設計", "作者 A", 2023)
        books = self.library.find_book_by_title("Python")
        self.assertEqual(len(books), 1)
        self.assertEqual(books[0][1], "Python 程式設計")
    
    def test_update_status(self):
        self.library.add_book("Python 程式設計", "作者 A", 2023)
        books = self.library.find_book_by_title("Python")
        book_id = books[0][0]
        self.library.update_status(book_id, "借出")
        updated_book = self.library.find_book_by_title("Python")[0]
        self.assertEqual(updated_book[4], "借出")

if __name__ == "__main__":
    unittest.main()

4. 優化與擴展

可以進一步優化項目,增加輸入檢查、錯誤處理,甚至可以設計一個簡單的 CLI 或 GUI 界面,使項目更易於使用。


教學重點

  • 綜合應用知識:掌握將多個 Python 技術點整合成一個完整項目。
  • 資料庫與文件處理:利用資料庫儲存和管理數據,確保系統資料的持久化。
  • 單元測試:確保主要功能正常,並且在更新功能後快速檢測潛在問題。

任務

  1. 完成圖書管理系統,並確保所有功能運行正常。
  2. 編寫單元測試,至少覆蓋新增、查找、更新、刪除書籍等核心功能。
  3. 可選挑戰:設計一個 CLI 界面,讓用戶可以直接通過命令行互動操作系統。
本文章以 CC BY 4.0 授權