第30天:項目總結與實戰項目
課程簡介
今天是課程的最後一天,我們將回顧過去 30 天所學的核心內容,並通過一個實戰項目來鞏固所學知識。這個項目將涉及變數、條件語句、迴圈、函數、面向對象設計、文件處理、例外處理、資料庫操作和單元測試等概念,讓大家綜合運用 Python 技術,完成一個完整的應用程式。
學習內容
1. 30 天知識回顧
首先,讓我們快速回顧過去 30 天的內容,並梳理學習過的核心概念:
- 基礎概念:變數、資料型態、運算符和表達式
- 流程控制:條件語句、迴圈(for、while)
- 函數與模組:函數定義、模組導入、裝飾器和匿名函數
- 資料結構:列表、字典、集合和元組
- 面向對象程式設計:類別、繼承、多型
- 錯誤處理:try-except、raise 自定義例外
- 檔案處理:檔案讀寫、目錄操作
- 網絡請求與 API:基礎的網絡請求操作
- 多線程與多進程:基礎的併發編程
- 資料庫操作:SQLite 資料庫基本操作
- 單元測試:撰寫測試用例,確保程式功能正確
2. 實戰項目:圖書管理系統
我們將構建一個簡單的「圖書管理系統」,該系統能夠執行以下操作:
- 添加新書
- 查詢書籍(通過書名或作者)
- 更新書籍資料(如書籍狀態)
- 刪除書籍
- 顯示所有書籍
- 資料庫儲存:系統資料保存在 SQLite 資料庫中
- 單元測試:為主要功能撰寫單元測試
項目實作步驟
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 技術點整合成一個完整項目。
- 資料庫與文件處理:利用資料庫儲存和管理數據,確保系統資料的持久化。
- 單元測試:確保主要功能正常,並且在更新功能後快速檢測潛在問題。
任務
- 完成圖書管理系統,並確保所有功能運行正常。
- 編寫單元測試,至少覆蓋新增、查找、更新、刪除書籍等核心功能。
- 可選挑戰:設計一個 CLI 界面,讓用戶可以直接通過命令行互動操作系統。
本文章以 CC BY 4.0 授權