news 2026/10/18 11:50:46

Java学生成绩管理系统毕业设计:源码+SQL+部署视频全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java学生成绩管理系统毕业设计:源码+SQL+部署视频全解析

简介:这份资源是面向高校计算机相关专业学生与Java初学者的一套学生成绩管理系统毕业设计完整方案,围绕成绩录入、查询、统计与分析等教务核心场景展开,帮助读者解决从选题到落地部署的全流程问题。压缩包共9个文件,约122.79MB,包含4个mp4演示与部署录屏、1个sql数据库脚本、1个doc设计文档、1个zip源代码包及若干说明文本,覆盖代码、数据库、文档与视频四类材料。目前已有663人学习下载。读者可借助源码理解MVC分层、JDBC数据库操作、Servlet与JSP请求处理等Java Web关键知识点,参照SQL脚本快速还原表结构与数据关系,并通过部署视频直观掌握环境配置、服务启动与乱码排查等实操环节,适合作为课程设计参考或工程实践练手项目。

1. 从一份 Java 毕业设计压缩包说起:成绩管理系统到底能跑通什么

如果你正在找一份能直接跑起来的 Java Web 毕业设计,又不想从零搭环境、写 SQL、调乱码,那这个基于 Java 的学生成绩管理系统压缩包值得先看一眼。它把源代码、数据库脚本、部署文档和部署视频一起打包,核心功能围绕成绩录入、查询、统计和分析展开,技术栈是典型的 Servlet + JSP + JDBC + MySQL 组合,IDE 侧适配 Eclipse 或 IntelliJ IDEA,服务器用 Tomcat 或 Jetty。适合谁?适合需要快速交付毕设、想对照完整项目理解 MVC 分层、或者被“程序访问数据库乱码”卡住的人。下面我按实际拆包顺序,把能复现的步骤和容易翻车的地方一次讲清。

2. 拆包先看结构:代码、SQL、文档、视频各管什么

拿到压缩包别急着双击运行,先按目录把资源归位。这个包的结构很直白:2-代码下是StudentScore.zip,3-文档里是学生成绩管理系统文档,4-SQL放score.sql,5-视频有四个 mp4,分别对应系统演示、代码结构、部署运行和乱码处理。很多人一上来就导入项目,结果数据库没建、表名对不上,控制台直接抛Table 'xxx' doesn't exist,这就是没先读 SQL 的代价。

2.1 代码包与数据库脚本的对应关系

StudentScore.zip解压后通常是一个 Eclipse 动态 Web 项目结构,包含src、WebContent(或webapp)、lib等目录。score.sql是配套的建库建表脚本,里面一般会先CREATE DATABASE,再建学生表、课程表、成绩表,最后插入几条测试数据。关键点在于:代码里的 JDBC 连接串、库名、用户名、密码必须和score.sql以及你本地 MySQL 的实际配置一致。常见做法是先把score.sql在 MySQL 客户端里执行一遍,确认库和表都出来了,再去改代码里的连接参数。

-- 先看 score.sql 里有没有指定库名,比如 student_score CREATE DATABASE IF NOT EXISTS student_score DEFAULT CHARACTER SET utf8mb4; USE student_score; -- 典型的学生表结构,字段名要和 Java 实体类对应 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, sno VARCHAR(20) NOT NULL UNIQUE, sname VARCHAR(50) NOT NULL, gender VARCHAR(10), class_name VARCHAR(50) ); -- 成绩表通常用外键关联学生和课程 CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, sno VARCHAR(20), course_name VARCHAR(50), score DECIMAL(5,2), exam_time DATE );

上面这段 SQL 是常见写法,实际以score.sql为准。执行时注意字符集:如果脚本里写的是utf8而你的 MySQL 8 默认utf8mb4,一般不影响建表,但插入中文时可能出问题。我一般会先把脚本里的utf8统一改成utf8mb4,再执行,省得后面查数据发现姓名是问号。

2.2 部署文档和视频的正确打开顺序

3-文档里的.doc文件通常写明了环境要求、数据库配置、Tomcat 部署步骤。但文档有时和代码版本有细微出入,所以更稳的做法是:先看5-视频里的01-学生考试成绩系统的演示.mp4,确认功能长什么样;再看03-项目代码结构以及功能.mp4,把包名、类名和数据库表对应起来;然后看02-项目的部署运行.mp4,跟着走一遍部署;最后如果遇到乱码,直接看04-程序访问数据库乱码问题.mp4。这个顺序能避免“文档说用 Tomcat 8,你装了 Tomcat 10 导致 Servlet 包名从javax.servlet变成jakarta.servlet而报 404”这类版本坑。

提示:视频文件建议用本地播放器打开,不要在线转码播放,否则关键配置界面可能糊到看不清。

3. 环境搭建与数据库初始化:把 JDBC 连接串调通

环境这一步决定后面能不能跑,重点就三件事:JDK 版本、Tomcat 版本、MySQL 连接。这个项目基于 Servlet + JSP,属于传统 Java Web 技术栈,JDK 8 或 11 都能跑,Tomcat 用 8.5 或 9 最稳。MySQL 用 5.7 或 8.0 都行,但驱动包版本要匹配:MySQL 8 需要mysql-connector-java-8.x.jar,MySQL 5.7 用 5.1.x 也可以。很多人导入项目后ClassNotFoundException: com.mysql.jdbc.Driver,就是驱动包没放进WEB-INF/lib或者版本不对。

3.1 导入项目与配置 Tomcat

在 Eclipse 里选File -> Import -> Existing Projects into Workspace,指向StudentScore解压后的目录。如果项目没有自动识别为 Web 项目,检查.project和.classpath文件是否存在。然后在Servers视图里新建一个 Tomcat 实例,把项目添加到服务器。IntelliJ IDEA 的话,用File -> New -> Project from Existing Sources,选Web Application: Exploded,再在Run/Debug Configurations里配 Tomcat。关键参数:Application context一般设为/StudentScore或/,看视频里演示的访问路径。

# 检查 JDK 版本,建议 1.8 或 11 java -version # 检查 MySQL 服务是否启动,Windows 下 net start | findstr MySQL # 登录 MySQL 并执行 score.sql mysql -u root -p < score.sql

上面命令里,mysql -u root -p < score.sql是把脚本直接灌进数据库,适合脚本里已经写好CREATE DATABASE的情况。如果脚本里没有建库语句,先手动CREATE DATABASE student_score;再USE student_score;然后source score.sql。执行完用SHOW TABLES;确认表都建好了。

3.2 修改 JDBC 连接参数并处理乱码

代码里连接数据库的地方通常是一个DBUtil或BaseDao类,里面写着url、username、password。把url改成jdbc:mysql://localhost:3306/student_score?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai。注意serverTimezone在 MySQL 8 里必须加,否则报The server time zone value '...' is unrecognized。characterEncoding建议用utf8或utf8mb4,和数据库字符集保持一致。

// 典型的 JDBC 工具类片段,参数按本地环境改 public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/student_score" + "?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"; private static final String USER = "root"; private static final String PASSWORD = "你的密码"; public static Connection getConnection() throws SQLException { try { Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 8 驱动 return DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { throw new SQLException("驱动未找到", e); } } }

这段代码里,Class.forName加载驱动,MySQL 8 用com.mysql.cj.jdbc.Driver,MySQL 5.7 用com.mysql.jdbc.Driver。serverTimezone设成Asia/Shanghai避免时区报错。如果部署后页面显示中文乱码,除了 JDBC 连接串,还要检查 JSP 页面顶部有没有<%@ page contentType="text/html;charset=UTF-8" %>,以及 Tomcat 的server.xml里Connector有没有加URIEncoding="UTF-8"。视频04-程序访问数据库乱码问题.mp4讲的就是这个,跟着改一遍基本能解决。

4. 功能模块与 MVC 分层:成绩录入、查询、统计怎么串起来

这个系统按 MVC 分了三层:模型层是实体类和 DAO,视图层是 JSP,控制层是 Servlet。成绩录入对应一个AddScoreServlet,查询对应QueryScoreServlet,统计对应StatScoreServlet。理解这个分层,改功能时才知道该动哪个文件。比如要加一个“按班级查平均分”,就在 DAO 里写 SQL,在 Servlet 里调,在 JSP 里展示,而不是把 SQL 写到 JSP 里。

4.1 Servlet 接收请求与 DAO 执行 SQL

以成绩录入为例,前端 JSP 表单提交到AddScoreServlet,Servlet 用request.getParameter拿学号、课程、分数,封装成实体类,再调 DAO 的insert方法。DAO 里用PreparedStatement执行INSERT INTO score ...。这里有个常见坑:分数字段用double或BigDecimal接收,如果前端传空字符串,Double.parseDouble("")会抛NumberFormatException,所以 Servlet 里要先判空。

// AddScoreServlet 核心逻辑,注意参数校验 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String sno = request.getParameter("sno"); String course = request.getParameter("course"); String scoreStr = request.getParameter("score"); if (sno == null || sno.trim().isEmpty() || scoreStr == null || scoreStr.trim().isEmpty()) { request.setAttribute("msg", "学号和分数不能为空"); request.getRequestDispatcher("addScore.jsp").forward(request, response); return; } double score = Double.parseDouble(scoreStr); Score s = new Score(sno, course, score); ScoreDao dao = new ScoreDao(); boolean ok = dao.insert(s); response.sendRedirect(ok ? "queryScore" : "addScore.jsp"); }

这段代码里,request.setCharacterEncoding("UTF-8")解决 POST 中文乱码,PreparedStatement在 DAO 里防 SQL 注入。sendRedirect跳转到查询列表,避免刷新重复提交。如果插入失败,检查数据库字段长度和类型是否匹配,比如score字段是DECIMAL(5,2),你传100.5没问题,传1000就超范围。

4.2 查询与统计的 SQL 写法

查询模块一般支持按学号、课程、班级组合筛选,SQL 用动态拼接或WHERE 1=1加条件。统计模块常见的是算总分、平均分、最高分,用GROUP BY和聚合函数。注意在 DAO 里不要用字符串拼接传参,否则容易被注入,也容易因为单引号报错。

-- 按班级统计平均分和最高分 SELECT class_name, AVG(score) AS avg_score, MAX(score) AS max_score FROM score s JOIN student st ON s.sno = st.sno GROUP BY class_name; -- 按学号查询个人成绩,参数用 ? 占位 SELECT course_name, score, exam_time FROM score WHERE sno = ? ORDER BY exam_time DESC;

上面第一条 SQL 用了JOIN把学生表和成绩表关联,按班级分组。第二条用?占位,在 Java 里ps.setString(1, sno)。如果统计结果为空,先确认score表里有没有数据,再确认sno字段类型和student表是否一致。常见问题是student表里sno是VARCHAR,score表里写成了INT,关联时隐式转换导致查不到。

5. 避坑与排查:部署和运行阶段最容易翻车的五件事

这个项目本身不复杂,但环境差异会让它在不同机器上表现完全不同。下面五条是我拆这类包时最常遇到的,每条按现象、原因、解决写,照着排查能省不少时间。

5.1 启动 Tomcat 报 404,项目访问不到

现象:Tomcat 启动没报错,但浏览器访问http://localhost:8080/StudentScore显示 404。原因通常是Application context配错,或者web.xml里url-pattern和访问路径不一致。解决:在 Tomcat 配置里确认Path是/StudentScore,然后看web.xml里servlet-mapping的url-pattern,比如登录页可能是/login,那访问地址就是http://localhost:8080/StudentScore/login。如果用了注解@WebServlet("/login"),检查web.xml的metadata-complete是不是true,是的话注解不生效。

5.2 数据库连接报 Access denied 或 Unknown database

现象:控制台抛Access denied for user 'root'@'localhost'或Unknown database 'student_score'。原因:密码不对,或者score.sql没执行,库根本没建。解决:先用mysql -u root -p登录,执行SHOW DATABASES;看有没有student_score。没有就重新执行score.sql。密码不对就改DBUtil里的PASSWORD,或者用ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';改 MySQL 密码。

5.3 页面中文乱码,数据库里存进去是问号

现象:JSP 页面显示中文正常,但插入数据库后变成???,或者查询出来是乱码。原因:JDBC 连接串没加characterEncoding,或者数据库、表、字段的字符集不是utf8mb4。解决:连接串加useUnicode=true&characterEncoding=utf8,数据库执行ALTER DATABASE student_score CHARACTER SET utf8mb4;,表也改ALTER TABLE score CONVERT TO CHARACTER SET utf8mb4;。Tomcat 的server.xml里Connector加URIEncoding="UTF-8"。

5.4 驱动包版本不匹配,ClassNotFoundException

现象:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver或com.mysql.cj.jdbc.Driver。原因:WEB-INF/lib下没有 MySQL 驱动 jar,或者驱动版本和代码里写的类名不对应。解决:MySQL 5.7 用mysql-connector-java-5.1.x.jar,类名com.mysql.jdbc.Driver;MySQL 8 用mysql-connector-java-8.x.jar,类名com.mysql.cj.jdbc.Driver。把 jar 复制到WEB-INF/lib,在 Eclipse 里右键项目Refresh,再Project -> Clean。

5.5 视频里能跑,自己跑就报错

现象:跟着部署视频一步步做,视频里正常,自己机器上就是不行。原因:JDK、Tomcat、MySQL 版本和视频不一致,或者系统环境变量没配。解决:先对齐版本,视频里如果用的是 JDK 8 + Tomcat 8.5 + MySQL 5.7,你就别用 JDK 17 + Tomcat 10 + MySQL 8。Tomcat 10 的 Servlet 包名是jakarta.servlet,老项目用javax.servlet会直接编译不过。要么换 Tomcat 9,要么改包名,但改包名工作量大,换 Tomcat 更省事。

注意:如果项目里用了javax.servlet而你又必须用 Tomcat 10,可以在WEB-INF/lib里加javax.servlet-api兼容包,但更推荐直接换 Tomcat 9。

6. 进阶用法:把这份毕设改成能写进简历的项目

如果你不只是想跑通,还想拿它当简历项目或继续开发,有几个方向可以动手。第一,把 JDBC 换成 MyBatis 或 Hibernate,体会 ORM 和手写 SQL 的差别;第二,加一个登录拦截器,用Filter或Session控制权限,区分管理员和学生角色;第三,把统计结果用 ECharts 在前端画出来,比纯表格更有展示度。这些改动不需要推翻原项目,在现有 MVC 结构上增量做就行。

6.1 用 Filter 加登录校验

在src下新建一个LoginFilter,实现javax.servlet.Filter,在doFilter里判断session有没有用户信息,没有就跳登录页。然后在web.xml里配filter-mapping,拦截/addScore、/queryScore等路径。这样直接访问功能页会被拦下来,逻辑更完整。

public class LoginFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(false); if (session == null || session.getAttribute("user") == null) { response.sendRedirect(request.getContextPath() + "/login.jsp"); return; } chain.doFilter(req, res); } }

这段代码里,getSession(false)表示没有会话就不新建,避免无意义创建。getContextPath()拿到项目根路径,保证跳转地址正确。配web.xml时<url-pattern>/*</url-pattern>会拦截所有请求,记得放行登录页和静态资源,否则登录页自己也进不去。

6.2 验证改动是否生效的检查清单

改完代码别急着说“好了”,按下面几步走一遍:先Project -> Clean重新编译,再重启 Tomcat,然后清浏览器缓存或开无痕窗口访问。看控制台有没有SQLException,看数据库里数据有没有真的变。如果加了 Filter,先访问一个受保护页面,确认跳登录;登录后再访问,确认能进。最后把score.sql重新执行一遍,确认脚本本身没有语法错误,这样别人拿到你的包也能跑起来。

检查项预期结果常见异常
项目编译无红叉,Build Path 完整缺 jar 包,JDK 版本不对
Tomcat 启动无报错,端口不冲突8080 被占用,改 8081
数据库连接能查到数据密码错,库名错,时区错
页面访问登录页正常显示404,500,乱码
功能操作增删改查生效SQL 语法错,字段类型不匹配

这张表可以当部署后的自检清单用,每项过了再往下走。我自己的习惯是:每次改完 JDBC 参数或 SQL,都先把score.sql在干净库上重跑一遍,确认脚本能独立建库建表,再启动项目。从那以后我每次拿到这类毕设包,都强制走一遍“先跑 SQL、再改连接、后启 Tomcat”的顺序,基本没再被环境问题卡住。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 11:49:22

30岁程序员转行指南:从技能迁移到赛道切换的20条实操建议

30岁这个数字&#xff0c;在程序员圈子里仿佛自带警报声。我见过太多人半夜私信问我&#xff1a;“30&#xff0b;程序员想转行还来得及吗&#xff1f;”每次看到这个问题&#xff0c;我脑子里浮现的都是同一个画面&#xff1a;一个能力不差、经验不少的人&#xff0c;被“35岁…

作者头像 李华
网站建设 2026/10/18 11:48:30

AI前端岗面试实战:流式渲染、虚拟列表与简历策略

十月中旬&#xff0c;我的一位前同事A同学来找我复盘。他面了七八家公司的AI前端岗位&#xff0c;结果挂了大半&#xff0c;最多的死在一面二面。我翻了下他的简历&#xff0c;项目经历写得倒是真实&#xff1a;某AI对话产品的前端开发&#xff0c;负责聊天页面、消息列表、接口…

作者头像 李华
网站建设 2026/10/18 11:48:26

VGG-16迁移学习实战:马铃薯叶片病害图像分类全流程解析

前段时间我拿经典分类网络VGG-16做了一次完整的马铃薯叶片病害识别实验&#xff0c;目标是给一张叶片照片&#xff0c;判断它属于健康、早疫病还是晚疫病。这个实验的初衷很简单&#xff1a;我想找一个“结构足够经典、调参不会太难、任务本身有真实应用价值”的图像分类项目&a…

作者头像 李华
网站建设 2026/10/18 11:47:56

Ubuntu终端配置中文语言环境完全指南:locale命令与配置文件详解

1. 方案背景&#xff1a;为什么要绕开图形界面配置中文先简单交代一下来由。绝大多数人在Ubuntu上配中文&#xff0c;路径都是“设置 → 区域与语言 → 管理已安装的语言”&#xff0c;点几下鼠标&#xff0c;把“汉语”拖到第一位&#xff0c;然后等系统自动下载语言包&#x…

作者头像 李华
网站建设 2026/10/18 11:45:55

基于知识图谱的豆瓣书籍推荐可视化与问答系统实战

简介&#xff1a;面向大二课程设计的完整项目&#xff0c;基于知识图谱实现豆瓣书籍推荐可视化与智能问答&#xff0c;适合计算机、人工智能、通信工程等专业学生用于课程设计、毕业设计或知识图谱入门进阶。项目覆盖数据爬取、知识三元组构建、图数据库存储、前端可视化与问答…

作者头像 李华
网站建设 2026/10/18 11:45:39

微信小程序毕业设计:宠物店商城系统实战指南

简介&#xff1a;本资源是一套完整的微信小程序毕业设计项目——宠物店商城系统&#xff0c;面向计算机专业本科生及Java全栈初学者&#xff0c;解决课程设计与毕设中前后端协同开发、多角色权限管理、电商功能落地等典型实践难题。压缩包共1659个文件&#xff0c;48.38MB&…

作者头像 李华