学生成绩管理系统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.mzph.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. 安全点轮询页的识别​​ …