學生成績管理系統Java實戰(Spring Boot+MyBatis Plus)

文章目錄

    • 一、系統需求分析(避坑指南)
    • 二、技術選型(2024新版)
    • 三、數據庫設計(三大核心表)
      • 1. 學生表(student)
      • 2. 課程表(course)
      • 3. 成績表(score)
    • 四、核心功能實現(附避坑代碼)
      • 1. Excel批量導入(百萬級數據不卡頓)
      • 2. 動態查詢(MyBatis Plus真香!)
      • 3. 成績分析(SQL聚合妙用)
    • 五、部署運行(避坑三連)
    • 六、擴展方向(畢業設計可用)
    • 七、總結(血淚經驗)

一、系統需求分析(避坑指南)

咱們先來盤盤這個系統的核心需求(別一上來就擼代碼!):

  1. 成績錄入模塊:支持Excel批量導入(這個坑最多!)
  2. 多維度查詢:按學生/課程/學期組合查詢(SQL要寫好索引)
  3. 統計分析:自動計算平均分/最高分/掛科率(注意浮點數精度)
  4. 權限控制:教師和管理員不同操作權限(RBAC模型安排)
  5. 數據導出:生成美觀的PDF成績單(別用iText,有坑!)

二、技術選型(2024新版)

// 技術棧配置(比傳統SSM香多了!)
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.4'
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.5'
implementation 'com.alibaba:easyexcel:3.3.3'  // Excel處理神器
implementation 'org.flywaydb:flyway-core:9.22.3'  // 數據庫版本控制
runtimeOnly 'com.mysql:mysql-connector-j:8.0.33'  // 必須用8.x驅動!

三、數據庫設計(三大核心表)

1. 學生表(student)

字段名類型說明
student_idBIGINT學號(雪花算法生成)
nameVARCHAR(20)真實姓名
genderTINYINT0-男 1-女
class_nameVARCHAR(50)班級名稱

2. 課程表(course)

CREATE TABLE `course` (`course_id` INT NOT NULL AUTO_INCREMENT,`course_name` VARCHAR(50) NOT NULL COMMENT '課程名稱',`credit` DECIMAL(3,1) NOT NULL COMMENT '學分',`teacher_id` BIGINT NOT NULL COMMENT '授課教師',PRIMARY KEY (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. 成績表(score)

注意! 這里使用聯合主鍵避免重復成績:

@Data
@TableName("score")
public class Score {@TableId(type = IdType.INPUT)private Long studentId;  // 學號private Integer courseId; // 課程IDprivate BigDecimal score; // 考試成績private String semester;  // 學期(如2023-2024-1)
}

四、核心功能實現(附避坑代碼)

1. Excel批量導入(百萬級數據不卡頓)

@PostMapping("/import")
public void importExcel(@RequestParam MultipartFile file) {EasyExcel.read(file.getInputStream(), ScoreData.class, new ScoreDataListener(scoreService)).sheet().doRead();
}// 自定義監聽器(內存優化關鍵!)
public class ScoreDataListener extends AnalysisEventListener<ScoreData> {private static final int BATCH_COUNT = 300;private List<ScoreData> cachedList = new ArrayList<>(BATCH_COUNT);@Overridepublic void invoke(ScoreData data, AnalysisContext context) {cachedList.add(data);if (cachedList.size() >= BATCH_COUNT) {saveData();cachedList.clear();}}
}

2. 動態查詢(MyBatis Plus真香!)

public Page<ScoreVO> queryScores(ScoreQuery query) {return scoreMapper.selectPage(new Page<>(query.getPage(), query.getSize()),new LambdaQueryWrapper<Score>().eq(query.getStudentId() != null, Score::getStudentId, query.getStudentId()).eq(query.getCourseId() != null, Score::getCourseId, query.getCourseId()).likeRight(StringUtils.isNotBlank(query.getSemester()), Score::getSemester, query.getSemester()).orderByDesc(Score::getScore));
}

3. 成績分析(SQL聚合妙用)

SELECT c.course_name,AVG(s.score) AS avg_score,MAX(s.score) AS max_score,COUNT(CASE WHEN s.score < 60 THEN 1 END) AS fail_count
FROM score s
JOIN course c ON s.course_id = c.course_id
WHERE s.semester = '2023-2024-1'
GROUP BY c.course_id;

五、部署運行(避坑三連)

  1. MySQL時區配置(必看!)
spring.datasource.url=jdbc:mysql://localhost:3306/score_db?serverTimezone=Asia/Shanghai&useSSL=false
  1. Flyway遷移腳本命名(格式不對全完蛋!)
V1__init_database.sql
V2__add_index.sql
  1. 啟動參數設置(內存溢出退散!)
java -jar score-system.jar --spring.profiles.active=prod -Xmx512m -XX:MaxMetaspaceSize=256m

六、擴展方向(畢業設計可用)

  • 增加成績預警模塊(掛科風險預測)
  • 集成短信通知功能(考試成績實時推送)
  • 開發可視化大屏(Echarts炫酷展示)
  • 實現多維度權限控制(Vue3+Spring Security)

七、總結(血淚經驗)

開發過程中最容易翻車的三個點:

  1. Excel導入時日期格式處理(建議統一轉時間戳)
  2. 成績保留小數位問題(BigDecimal別用double!)
  3. 并發修改成績時的樂觀鎖控制(@Version安排上)

建議大家在GitHub建立私有倉庫(別問我怎么知道的),每次實現新功能前先創建新分支。這個項目完整代碼我整理成了標準Maven工程,需要的同學可以評論區留言(看到必回)!

最后叮囑:數據庫記得每天自動備份!別等畢設答辯前夜數據丟失哭鼻子(別笑,真發生過)!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83695.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL安裝實戰指南:Mac、Windows與Docker全平臺詳解

MySQL作為世界上最流行的開源關系型數據庫&#xff0c;是每位開發者必須掌握的基礎技能。本指南將手把手帶你完成三大平臺的MySQL安裝&#xff0c;從下載到配置&#xff0c;每個步驟都配有詳細說明和截圖&#xff0c;特別適合新手學習。 一、Mac系統安裝MySQL 1.1 通過Homebre…

多模態大語言模型arxiv論文略讀(七十九)

AIM: Let Any Multi-modal Large Language Models Embrace Efficient In-Context Learning ?? 論文標題&#xff1a;AIM: Let Any Multi-modal Large Language Models Embrace Efficient In-Context Learning ?? 論文作者&#xff1a;Jun Gao, Qian Qiao, Ziqiang Cao, Zi…

[Harmony]封裝一個可視化的數據持久化工具

1.添加權限 在module.json5文件中添加權限 // 聲明應用需要請求的權限列表 "requestPermissions": [{"name": "ohos.permission.DISTRIBUTED_DATASYNC", // 權限名稱&#xff1a;分布式數據同步權限"reason": "$string:distrib…

利用html制作簡歷網頁和求職信息網頁

前言 大家好&#xff0c;我是maybe。今天下午初步學習了html的基礎知識。做了兩個小網頁&#xff0c;一個網頁是簡歷網頁&#xff0c;一個網頁是求職信息填寫網頁。跟大家分享一波~ 說明:我不打算上傳圖片。所以如果有朋友按照我的代碼運行網頁&#xff0c;會出現一個沒有圖片…

Vue 3 實現后端 Excel 文件流導出功能(Blob 下載詳解)

&#x1f4a1; 本文以告警信息導出為例&#xff0c;介紹 Vue 3 中如何通過 Axios 調用后端接口并處理文件流&#xff0c;實現 Excel 自動下載功能。 &#x1f4d1; 目錄 一、前言 二、后端接口說明 三、前端實現思路 四、導出功能完整代碼 五、常見問題處理 六、效果展示 …

HarmonyOS AVPlayer 音頻播放器

鴻蒙文檔中心&#xff1a;使用AVPlayer播放視頻(ArkTS)文檔中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback 這張圖描述的是 HarmonyOS AVPlayer 音頻播放器的狀態流轉過程&#xff0c;展示了 AVPlayer 在不同狀態之間的切換條件和關鍵操作…

Java面試場景:從音視頻到AI應用的技術探討

面試場景&#xff1a;音視頻與AI應用技術的碰撞 在某互聯網大廠的面試中&#xff0c;面試官王先生與求職者明哥展開了一場關于音視頻技術與AI應用的對話。 第一輪提問&#xff1a;音視頻場景 面試官&#xff1a;明哥&#xff0c;你能談談在音視頻場景中&#xff0c;Spring B…

【深度學習】殘差網絡(ResNet)

如果按照李沐老師書上來&#xff0c;學完 VGG 后還有 NiN 和 GoogLeNet 要學&#xff0c;但是這兩個我之前聽都沒聽過&#xff0c;而且我看到我導師有發過 ResNet 相關的論文&#xff0c;就想跳過它們直接看后面的內容。 現在看來這不算是不踏實&#xff0c;因為李沐老師說如果…

Vue3學習(組合式API——父、子組件間通信詳解)

目錄 一、組合式API下的父組件傳子組件。(自定義屬性) &#xff08;1&#xff09;基本思想。 &#xff08;2&#xff09;核心注意點。(defineProps) &#xff08;3&#xff09;傳遞簡單類型數據。 &#xff08;4&#xff09;傳遞對象類型數據。(v-bind"對象類型數據"…

W5500使用ioLibrary庫創建TCP客戶端

1、WIZnet全硬件TCP/IP協議棧 WIZnet全硬件TCP/IP協議棧,支持TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE協議。 以太網&#xff1a;支持BSD和WIZCHIP&#xff08;W5500/W5300/W5200/W5100/W5100S&#xff09;的SOCKET APIs驅動程序。 互聯網&#xff1a; DHCP客戶端 DNS客戶端 FTP客…

管理Oracle Data Guard的最佳實踐

Oracle Data Guard的中文名字叫數據衛士&#xff0c;顧名思義&#xff0c;它是生產庫的一道保障。所以管理Data Guard是DBA的一項重要工作之一&#xff0c;管理Data Guard時主要有以下幾個注意點需要引起重視。 備份庫的歸檔日志積壓 一般情況下&#xff0c;生產庫的歸檔日志是…

BootCDN介紹(Bootstrap主導的前端開源項目免費CDN加速服務)

文章目錄 BootCDN前端開源項目CDN加速服務全解析什么是BootCDN技術原理與架構CDN技術基礎BootCDN架構特點1. 全球分布式節點網絡2. 智能DNS解析系統3. 高效緩存管理機制4. 自動同步更新機制5. HTTPS和HTTP/2協議支持 BootCDN的核心優勢速度與穩定性開源免費資源豐富度技術規范遵…

2025 Java 微信小程序根據code獲取openid,二次code獲取手機號【工具類】拿來就用

一、controller調用 /*** 登錄** author jiaketao* since 2024-04-10*/ RestController RequestMapping("/login") public class LoginController {/*** 【小程序】登錄獲取session_key和openid** param code 前端傳code* return*/GetMapping("/getWXSessionKe…

軟件架構風格系列(3):管道 - 過濾器架構

文章目錄 前言一、從生活場景到架構原理&#xff0c;看懂管道 - 過濾器的核心邏輯&#xff08;一&#xff09;什么是管道 - 過濾器架構&#xff1f;&#xff08;二&#xff09;核心組件拆解 二、架構設計圖&#xff1a;一圖看懂管道 - 過濾器架構全貌三、Java 示例代碼&#xf…

【VIM】vim 常用命令

文章目錄 插入模式光標移動拷貝/粘貼/刪除/撤銷塊操作分屏代碼縮進命令組合使用其他PowerVim 前言&#xff1a;本文內容大部分摘抄自酷殼和博客園 ? – ? CoolShell – 陳皓 ? 博客園 – 易先訊 插入模式 a → 在光標后插入o → 在當前行后插入一個新行O → 在當前行前插…

polarctf-web-[簡單rce]

考點&#xff1a; (1)RCE(eval函數) (2)執行函數(passthru函數) (3)/頂級(根)目錄查看 (4)sort排序查看函數 題目來源&#xff1a;Polarctf-web-[簡單rce] 解題&#xff1a; 代碼審計 <?php/*?PolarD&N CTF?*/highlight_file(__FILE__);function no($txt){ # …

HarmonyOs開發之———使用HTTP訪問網絡資源

謝謝關注&#xff01;&#xff01; 前言&#xff1a;上一篇文章主要介紹HarmonyOs開發之———Video組件的使用:HarmonyOs開發之———Video組件的使用_華為 video標簽查看-CSDN博客 HarmonyOS 網絡開發入門&#xff1a;使用 HTTP 訪問網絡資源 HarmonyOS 作為新一代智能終端…

Vue 圖片預覽功能(含縮略圖)

眾所周知&#xff0c;常見的組件庫如Element、Ant Design&#xff0c;自帶的圖片預覽功能都沒有縮略圖&#xff0c;所以 需要單獨封裝一個圖片預覽的服務。 第三方庫&#xff1a;v-viewer 安裝&#xff1a; npm install v-viewer viewerjs 若使用報錯&#xff0c;可安裝指定…

手寫tomcat:基本功能實現(4)

邏輯架構 HTTP 請求與 Socket&#xff1a; 左側的 “HTTP 請求” 箭頭指向 “socket”&#xff0c;表示客戶端發送的 HTTP 請求通過 socket 傳輸到服務器。Socket 負責接收請求&#xff0c;并提取出其中的 請求路徑&#xff08;如 /first&#xff09;和 請求方法&#xff08;如…

jvm安全點(一)openjdk17 c++源碼垃圾回收安全點信號函數處理線程阻塞

1. 信號處理入口?? ??JVM_HANDLE_XXX_SIGNAL?? 是 JVM 處理信號的統一入口&#xff0c;負責處理 SIGSEGV、SIGBUS 等信號。??javaSignalHandler?? 是實際注冊到操作系統的信號處理函數&#xff0c;直接調用 JVM_HANDLE_XXX_SIGNAL。 ??2. 安全點輪詢頁的識別?? …