首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 學生成績管理系統:從需求分析到 SQLite + Qt 完整架構參考

     編輯:程式設計疑難解答

課程作業要求用 C++ 實作學生成績管理系統,功能含:成績輸入/存檔/輸出、排序、區間統計、使用者驗證、友善介面、容錯。與其從零手寫鏈表/檔案 I/O,不如採用 Qt + SQLite 成熟框架,專注業務邏輯,快速產出高品質專案。

系統架構設計

層級技術選型職責
資料層SQLite (本地檔案資料庫)學生基本資料、成績、用戶帳號持久化
資料存取層Qt Sql 模組 (QSqlDatabase, QSqlQuery)封裝 CRUD、交易、參數綁定防注入
業務邏輯層C++ 類別 (StudentService, ScoreService)驗證規則(0~100 分)、排序演算法、區間統計
表現層Qt Widgets / QML登入對話框、主視窗(表格檢視、圖表統計)、匯入匯出 CSV

核心資料表結構

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    username TEXT UNIQUE NOT NULL,
    password_hash TEXT NOT NULL
);

CREATE TABLE students (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    dept TEXT
);

CREATE TABLE scores (
    id INTEGER PRIMARY KEY,
    student_id INTEGER REFERENCES students(id),
    course TEXT NOT NULL,
    score INTEGER CHECK(score BETWEEN 0 AND 100),
    semester TEXT
);

關鍵功能實作要點

  1. 登入驗證:SELECT password_hash FROM users WHERE username=?,用 QCryptographicHash::hash(pwd, QCryptographicHash::Sha256) 比對。
  2. 成績輸入容錯:UI 用 QSpinBox(0,100) 強制限制;後端再 if (score < 0 || score > 100) throw。
  3. 排序:SQL ORDER BY score DESC 直接回傳;或記憶體 std::sort(vec.begin(), vec.end(), [](a,b){return a.score > b.score;}) 展示多種演算法。
  4. 區間統計:SELECT COUNT(*), GROUP_CONCAT(id) FROM scores WHERE score BETWEEN ? AND ?,配合 QChart 畫長條圖/圓餅圖。
  5. 匯入匯出:QFile + QTextStream 處理 CSV,編碼用 UTF-8 with BOM 相容 Excel。

現成專案參考

GitHub 搜尋 Qt SQLite student management 可找到多個開源專案,例如:
https://github.com/username/student-management-qt(示例連結)
下載後用 Qt Creator 開啟 .pro,安裝 Qt 5.15+、SQLite driver 即可編譯執行,依需求調整 UI 與業務規則。

避坑提醒

  • SQLite 連線字串:QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("data.db"); 路徑用 QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) 避免權限問題。
  • 中文亂碼:資料庫、連線、CSV 全統一 UTF-8,QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"))。
  • 單元測試:用 Qt Test 覆蓋 Service 層邏輯,確保排序、統計正確性。

採用 Qt + SQLite 架構,不只能滿足作業所有功能需求,更能練習企業級分層設計、資料庫操作與跨平台 GUI 開發,一舉多得。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved