基于Spring Boot的成績管理系統后臺實現

下面是一個完整的成績管理系統后臺實現,使用Spring Boot框架,包含學生管理、課程管理和成績管理功能。

1. 項目結構

src/main/java/com/example/grademanagement/
├── config/ ? ? ? ? ? # 配置類
├── controller/ ? ? ? # 控制器
├── dto/ ? ? ? ? ? ? ?# 數據傳輸對象
├── entity/ ? ? ? ? ? # 實體類
├── exception/ ? ? ? ?# 異常處理
├── repository/ ? ? ? # 數據訪問層
├── service/ ? ? ? ? ?# 業務邏輯層
│ ? └── impl/ ? ? ? ? # 服務實現
└── GrademanagementApplication.java ?# 啟動類

2. 主要依賴 (pom.xml)?

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 數據訪問 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 工具類 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 測試 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

3. 實體類設計

3.1 學生實體 (Student.java)

package com.example.grademanagement.entity;import jakarta.persistence.*;
import lombok.Data;import java.util.List;@Entity
@Data
@Table(name = "students")
public class Student {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String studentId;  // 學號@Column(nullable = false)private String name;@Column(nullable = false)private String gender;private String className;  // 班級@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)private List<Grade> grades;
}

3.2 課程實體 (Course.java)

package com.example.grademanagement.entity;import jakarta.persistence.*;
import lombok.Data;import java.util.List;@Entity
@Data
@Table(name = "courses")
public class Course {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false, unique = true)private String courseCode;  // 課程代碼@Column(nullable = false)private String courseName;private Integer credit;  // 學分@OneToMany(mappedBy = "course", cascade = CascadeType.ALL)private List<Grade> grades;
}

3.3 成績實體 (Grade.java)

package com.example.grademanagement.entity;import jakarta.persistence.*;
import lombok.Data;@Entity
@Data
@Table(name = "grades")
public class Grade {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOne@JoinColumn(name = "student_id", nullable = false)private Student student;@ManyToOne@JoinColumn(name = "course_id", nullable = false)private Course course;@Column(nullable = false)private Double score;  // 成績private String semester;  // 學期
}

4. 數據訪問層 (Repository)

4.1 學生倉庫 (StudentRepository.java)

package com.example.grademanagement.repository;import com.example.grademanagement.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository<Student, Long> {Student findByStudentId(String studentId);List<Student> findByNameContaining(String name);List<Student> findByClassName(String className);
}

4.2 課程倉庫 (CourseRepository.java)

package com.example.grademanagement.repository;import com.example.grademanagement.entity.Course;
import org.springframework.data.jpa.repository.JpaRepository;public interface CourseRepository extends JpaRepository<Course, Long> {Course findByCourseCode(String courseCode);List<Course> findByCourseNameContaining(String courseName);
}

4.3 成績倉庫 (GradeRepository.java)

package com.example.grademanagement.repository;import com.example.grademanagement.entity.Grade;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;import java.util.List;public interface GradeRepository extends JpaRepository<Grade, Long> {List<Grade> findByStudentId(Long studentId);List<Grade> findByCourseId(Long courseId);@Query("SELECT g FROM Grade g WHERE g.student.id = ?1 AND g.course.id = ?2")Grade findByStudentAndCourse(Long studentId, Long courseId);@Query("SELECT AVG(g.score) FROM Grade g WHERE g.course.id = ?1")Double findAverageScoreByCourse(Long courseId);
}

5. 業務邏輯層 (Service)

5.1 學生服務接口 (StudentService.java)

package com.example.grademanagement.service;import com.example.grademanagement.entity.Student;import java.util.List;public interface StudentService {Student addStudent(Student student);Student updateStudent(Long id, Student student);void deleteStudent(Long id);Student getStudentById(Long id);Student getStudentByStudentId(String studentId);List<Student> getAllStudents();List<Student> searchStudents(String keyword);
}

5.2 學生服務實現 (StudentServiceImpl.java)

package com.example.grademanagement.service.impl;import com.example.grademanagement.entity.Student;
import com.example.grademanagement.repository.StudentRepository;
import com.example.grademanagement.service.StudentService;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class StudentServiceImpl implements StudentService {private final StudentRepository studentRepository;public StudentServiceImpl(StudentRepository studentRepository) {this.studentRepository = studentRepository;}@Overridepublic Student addStudent(Student student) {if (studentRepository.findByStudentId(student.getStudentId()) != null) {throw new RuntimeException("學號已存在");}return studentRepository.save(student);}@Overridepublic Student updateStudent(Long id, Student student) {Student existingStudent = studentRepository.findById(id).orElseThrow(() -> new RuntimeException("學生不存在"));existingStudent.setName(student.getName());existingStudent.setGender(student.getGender());existingStudent.setClassName(student.getClassName());return studentRepository.save(existingStudent);}@Overridepublic void deleteStudent(Long id) {studentRepository.deleteById(id);}@Overridepublic Student getStudentById(Long id) {return studentRepository.findById(id).orElseThrow(() -> new RuntimeException("學生不存在"));}@Overridepublic Student getStudentByStudentId(String studentId) {return studentRepository.findByStudentId(studentId);}@Overridepublic List<Student> getAllStudents() {return studentRepository.findAll();}@Overridepublic List<Student> searchStudents(String keyword) {return studentRepository.findByNameContaining(keyword);}
}

5.3 成績服務接口 (GradeService.java)

package com.example.grademanagement.service;import com.example.grademanagement.entity.Grade;import java.util.List;public interface GradeService {Grade addGrade(Grade grade);Grade updateGrade(Long id, Grade grade);void deleteGrade(Long id);Grade getGradeById(Long id);List<Grade> getGradesByStudentId(Long studentId);List<Grade> getGradesByCourseId(Long courseId);Double getAverageScoreByCourse(Long courseId);Grade getGradeByStudentAndCourse(Long studentId, Long courseId);
}

6. 控制器 (Controller)

6.1 學生控制器 (StudentController.java)

package com.example.grademanagement.controller;import com.example.grademanagement.entity.Student;
import com.example.grademanagement.service.StudentService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/students")
public class StudentController {private final StudentService studentService;public StudentController(StudentService studentService) {this.studentService = studentService;}@PostMappingpublic ResponseEntity<Student> addStudent(@RequestBody Student student) {return ResponseEntity.ok(studentService.addStudent(student));}@PutMapping("/{id}")public ResponseEntity<Student> updateStudent(@PathVariable Long id, @RequestBody Student student) {return ResponseEntity.ok(studentService.updateStudent(id, student));}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteStudent(@PathVariable Long id) {studentService.deleteStudent(id);return ResponseEntity.noContent().build();}@GetMapping("/{id}")public ResponseEntity<Student> getStudentById(@PathVariable Long id) {return ResponseEntity.ok(studentService.getStudentById(id));}@GetMapping("/student-id/{studentId}")public ResponseEntity<Student> getStudentByStudentId(@PathVariable String studentId) {return ResponseEntity.ok(studentService.getStudentByStudentId(studentId));}@GetMappingpublic ResponseEntity<List<Student>> getAllStudents() {return ResponseEntity.ok(studentService.getAllStudents());}@GetMapping("/search")public ResponseEntity<List<Student>> searchStudents(@RequestParam String keyword) {return ResponseEntity.ok(studentService.searchStudents(keyword));}
}

6.2 成績控制器 (GradeController.java)

package com.example.grademanagement.controller;import com.example.grademanagement.entity.Grade;
import com.example.grademanagement.service.GradeService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/grades")
public class GradeController {private final GradeService gradeService;public GradeController(GradeService gradeService) {this.gradeService = gradeService;}@PostMappingpublic ResponseEntity<Grade> addGrade(@RequestBody Grade grade) {return ResponseEntity.ok(gradeService.addGrade(grade));}@PutMapping("/{id}")public ResponseEntity<Grade> updateGrade(@PathVariable Long id, @RequestBody Grade grade) {return ResponseEntity.ok(gradeService.updateGrade(id, grade));}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteGrade(@PathVariable Long id) {gradeService.deleteGrade(id);return ResponseEntity.noContent().build();}@GetMapping("/{id}")public ResponseEntity<Grade> getGradeById(@PathVariable Long id) {return ResponseEntity.ok(gradeService.getGradeById(id));}@GetMapping("/student/{studentId}")public ResponseEntity<List<Grade>> getGradesByStudentId(@PathVariable Long studentId) {return ResponseEntity.ok(gradeService.getGradesByStudentId(studentId));}@GetMapping("/course/{courseId}")public ResponseEntity<List<Grade>> getGradesByCourseId(@PathVariable Long courseId) {return ResponseEntity.ok(gradeService.getGradesByCourseId(courseId));}@GetMapping("/average/{courseId}")public ResponseEntity<Double> getAverageScoreByCourse(@PathVariable Long courseId) {return ResponseEntity.ok(gradeService.getAverageScoreByCourse(courseId));}@GetMapping("/student-course")public ResponseEntity<Grade> getGradeByStudentAndCourse(@RequestParam Long studentId, @RequestParam Long courseId) {return ResponseEntity.ok(gradeService.getGradeByStudentAndCourse(studentId, courseId));}
}

7. 異常處理

7.1 全局異常處理器 (GlobalExceptionHandler.java)

package com.example.grademanagement.exception;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(RuntimeException.class)public ResponseEntity<String> handleRuntimeException(RuntimeException e) {return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());}@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服務器內部錯誤: " + e.getMessage());}
}

8. 應用配置

8.1 數據庫配置 (application.properties)

# 數據庫配置
spring.datasource.url=jdbc:mysql://localhost:3306/grade_management?useSSL=false
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# JPA配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true# 服務器配置
server.port=8080

9. 啟動類

package com.example.grademanagement;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GrademanagementApplication {public static void main(String[] args) {SpringApplication.run(GrademanagementApplication.class, args);}
}

10. API文檔

系統提供以下主要API端點:

學生管理

  • POST /api/students?- 添加學生

  • GET /api/students?- 獲取所有學生

  • GET /api/students/{id}?- 獲取指定ID的學生

  • PUT /api/students/{id}?- 更新學生信息

  • DELETE /api/students/{id}?- 刪除學生

成績管理

  • POST /api/grades?- 添加成績

  • GET /api/grades/student/{studentId}?- 獲取學生所有成績

  • GET /api/grades/course/{courseId}?- 獲取課程所有成績

  • GET /api/grades/average/{courseId}?- 獲取課程平均分

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

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

相關文章

實現極限網關(INFINI Gateway)配置動態加載

還在停機更新 Gateway 配置&#xff0c;OUT 了。 今天和大家分享一個 Gateway 的功能&#xff1a;動態加載配置&#xff08;也稱熱更新或熱加載&#xff09;。 這個功能可以在 Gateway 不停機的情況下更新配置并使之生效。 配置樣例如下&#xff1a; path.data: data path.…

Mean Shift 圖像分割與 Canny 邊緣檢測教程

1. Mean Shift 簡介 Mean Shift 是一種聚類算法&#xff0c;通過尋找圖像中顏色相似的區域來實現分割。它非常適合用于場景分割或物體檢測等任務。本教程將它與 Canny 邊緣檢測結合&#xff0c;突出分割區域的邊界。 2. 圖像分割流程 我們將按照以下步驟完成圖像分割和邊緣檢…

Day15 -實例 端口掃描工具 WAF識別工具的使用

一、端口掃描工具 1、zenmap 我這里user是漢字名&#xff0c;沒有解析成功。等后續換一個英文賬戶試一試。 魔改kali的nmap nmap -p8000-9000 8.140.159.19 2、masscan cmd啟動&#xff0c;拖入exe文件。然后先寫ip&#xff0c;會報錯給提示 尋路犬系統 我們去找一下他的…

如何解決高并發場景下的性能瓶頸?實踐分享

解決高并發性能瓶頸的核心方法包括優化系統架構、合理使用緩存技術、數據庫優化及擴展策略、負載均衡設計。 其中&#xff0c;優化系統架構是根本解決性能問題的關鍵所在。良好的系統架構能夠有效支撐業務高效穩定運行&#xff0c;避免性能瓶頸帶來的損失。企業可通過微服務架構…

自動駕駛背后的數學:ReLU,Sigmoid, Leaky ReLU, PReLU,Swish等激活函數解析

隨著自動駕駛技術的飛速發展&#xff0c;深度學習在其中扮演著至關重要的角色。而激活函數作為神經網絡中的關鍵組件&#xff0c;直接影響著模型的性能和效果。前面幾篇博客 自動駕駛背后的數學&#xff1a;特征提取中的線性變換與非線性激活 , 「自動駕駛背后的數學&#xff1…

性能測試、負載測試、壓力測試的全面解析

在軟件測試領域&#xff0c;性能測試、負載測試和壓力測試是評估系統穩定性和可靠性的關鍵手段。?它們各自關注不同的測試目標和應用場景&#xff0c;理解這些差異對于制定有效的測試策略至關重要。 本文對性能測試、負載測試和壓力測試進行深入分析&#xff0c;探討其定義、…

責任鏈模式-java

1、spring依賴注入模式 @Configuration public class ChainConfig {@Beanpublic ChainSpringFactory chainSpringFactory(List<IHandler<DemoOne,Boolean>> handlerList){return new ChainSpringFactory(handlerList);}} public class DemoOne { }public abstract…

學習本地部署DeepSeek的過程(基于LM Studio)

除了使用Ollama部署DeepSeek&#xff0c;還可以使用LM Studio部署DeepSeek&#xff0c;后者是一款允許用戶在本地計算機上運行大型語言模型&#xff08;LLMs&#xff09;的桌面應用程序&#xff0c;旨在簡化本地模型的使用&#xff0c;無需云端連接或復雜配置即可體驗 AI 功能。…

CSS 尺寸 (Dimension)

CSS 尺寸 (Dimension) 在網頁設計中&#xff0c;CSS&#xff08;層疊樣式表&#xff09;的尺寸屬性是控制元素大小和位置的關鍵。本文將詳細介紹CSS尺寸相關的概念、屬性及其應用。 1. CSS 尺寸概述 CSS尺寸主要包括寬度和高度&#xff0c;這些屬性可以應用于各種HTML元素&a…

【自學筆記】ELK基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 ELK基礎知識點總覽1. ELK簡介2. Elasticsearch基礎Elasticsearch配置示例&#xff08;elasticsearch.yml&#xff09; 3. Logstash基礎Logstash配置示例&#xff08…

等差數列公式推導

前言&#xff1a; 通過實踐而發現真理&#xff0c;又通過實踐而證實真理和發展真理。從感性認識而能動地發展到理性認識&#xff0c;又從理性認識而能動地指導革命實踐&#xff0c;改造主觀世界和客觀世界。實踐、認識、再實踐、再認識&#xff0c;這種形式&#xff0c;循環往…

【MySQL】用戶賬戶、角色、口令、PAM

目錄 查看用戶賬戶設置 連接 1.本地連接 2.遠程連接 賬戶 角色 操作用戶賬戶和角色 配置口令和賬戶有效期限 手工使口令過期 配置口令有效期限 PAM身份驗證插件 客戶端連接&#xff1a;使用 PAM 賬戶登錄 在連接到MySQL服務器并執行查詢時&#xff0c;會驗證你的身…

5種生成模型(VAE、GAN、AR、Flow 和 Diffusion)的對比梳理 + 易懂講解 + 代碼實現

目錄 1 變分自編碼器&#xff08;VAE&#xff09;? 1.1 概念 1.2 訓練損失 1.3 VAE 的實現 2 生成對抗網絡&#xff08;GAN&#xff09;? 2.1 概念 2.2 訓練損失 a. 判別器的損失函數 b. 生成器的損失函數 c. 對抗訓練的動態過程 2.3 GAN 的實現 3 自回歸模型&am…

印刷電路板 (PCB) 的影響何時重要?在模擬環境中導航

我和我的同事們經常被問到關于 PCB 效應的相同問題&#xff0c;例如&#xff1a; 仿真何時需要 PCB 效果&#xff1f; 為什么時域仿真需要 PCB 效應&#xff1f; 當 PCB 效應必須包含在仿真中時&#xff0c;頻率是否重要&#xff1f; 設計人員應該在多大程度上關注 VRM 模型中包…

2024跨境電商挑戰:AI反檢測技術在避免封號中的作用

2024跨境電商挑戰&#xff1a;AI反檢測技術在避免封號中的作用 跨境電商的浪潮席卷全球&#xff0c;為商家打開了通往世界各地的大門。然而&#xff0c;隨著平臺監管的加強&#xff0c;合規性問題成為商家不得不面對的挑戰。在電商平臺的嚴格監控下&#xff0c;任何違規行為都…

QML控件 - Text

在 QML 中&#xff0c;Text 組件是用于顯示文本的核心元素&#xff0c;支持豐富的文本樣式、布局和交互功能。以下是 完整指南 和常見用法示例&#xff1a; 1. 基礎用法 import QtQuick 2.15Text {text: "Hello, QML!" // 顯示文本內容font.pixelSize: 20 // 字體…

網絡運維學習筆記(DeepSeek優化版) 024 HCIP-Datacom OSPF域內路由計算

文章目錄 OSPF域內路由計算&#xff1a;單區域的路由計算一、OSPF單區域路由計算原理二、1類LSA詳解2.1 1類LSA的作用與結構2.2 1類LSA的四種鏈路類型 三、OSPF路由表生成驗證3.1 查看LSDB3.2 查看OSPF路由表3.3 查看全局路由表 四、2類LSA詳解4.1 2類LSA的作用與生成條件4.2 2…

HTML5 SVG:圖形繪制的現代標準

HTML5 SVG:圖形繪制的現代標準 引言 隨著互聯網技術的發展,網頁的交互性和美觀性日益受到重視。HTML5 SVG作為一種強大的圖形繪制技術,在網頁設計中發揮著重要作用。本文將深入探討HTML5 SVG的原理、應用場景以及如何在實際項目中運用。 一、HTML5 SVG簡介 1.1 什么是SV…

多智能體融合(Multi-Agent Fusion)

多智能體融合&#xff08;Multi-Agent Fusion&#xff09;是指在多智能體系統&#xff08;MAS, Multi-Agent System&#xff09;中&#xff0c;多個智能體&#xff08;Agent&#xff09;通過協作、競爭或共享信息&#xff0c;實現全局最優的智能決策和任務執行。該方法廣泛應用…

[學習筆記]NC工具安裝及使用

工具簡介 Netcat&#xff08;簡稱 nc&#xff09;是一款強大的命令行網絡工具&#xff0c;被稱作瑞士軍刀&#xff0c;用來在兩臺機器之間建立 TCP/UDP 連接&#xff0c;并通過標準的輸入輸出進行數據的讀寫&#xff0c;大家也可以使用Nmap&#xff08;增強版nc工具&#xff0…