课程设计个人博客学生成绩管理系统核心模块开发实战一、项目概述本次课程设计基于 Java Swing SQLite 开发桌面端学生成绩管理系统整体采用 MVCDAO 分层架构使用 Gitee 完成源码托管与团队协同开发。系统划分管理员、学生双角色权限覆盖学生信息管理、成绩 CRUD、多维度数据统计、CSV 报表导出、成绩可视化图表、批量模拟测试数据生成等完整业务功能。我个人主要负责五大核心模块开发报表交互面板ReportPanel、报表统计导出业务ReportService、正态分布测试数据生成DataGenerator、Java2D 成绩柱状图ChartPanel、用户实体与登录校验层UserUserDAO全程独立完成界面交互、业务算法、文件 IO、底层绘图、数据库校验全链路代码实现。源码托管地址https://gitee.com/car-racing-team/students-grade-manage.git团队博客地址https://blog.csdn.net/2501_94692612/article/details/162336642?spm1011.2415.3001.10575sharefrommp_manage_link二、项目整体分层架构项目采用清晰分包分层实现界面、业务、数据库完全解耦ui 视图层存放所有 Swing 可视化界面我负责 ReportPanel 报表面板承载统计展示、排序切换、导出按钮交互service 业务层封装全部业务计算逻辑包含我开发的ReportService报表业务、DataGenerator测试数据生成工具model 实体层数据库映射实体独立完成 User 用户实体类封装dao 数据访问层SQLite 数据库操作封装完成 UserDAO 登录账号校验模块util 工具层通用辅助工具自研 ChartPanel 基于 Java2D 绘制成绩分布柱状图dao.DatabaseManager全局统一 SQLite 连接管理工具。完整调用链路UI 界面触发操作 → Service 处理业务计算 → DAO 层执行数据库读写分层隔离大幅降低代码耦合度后期新增功能无需修改原有模块代码。三、本人负责模块开发详解一ReportPanel 报表界面交互模块模块功能定位作为成绩统计可视化操作界面页面划分为三大区域成绩数据表格、均值统计展示区、功能操作按钮区实现三项核心交互单科平均分实时展示、总分升降序切换、CSV 文件导出弹窗交互。开发难点与解决方案问题点击导出按钮执行文件 IO 时Swing 主线程阻塞界面直接卡死无响应解决将 CSV 文件读写逻辑新开独立子线程执行UI 线程仅负责弹窗提示、表格刷新问题大量成绩数据刷新表格时渲染卡顿解决数据统计、排序逻辑全部下沉至ReportService界面仅做数据渲染减少界面计算压力交互逻辑设计均值展示下拉切换科目后自动调用业务层计算平均分并展示在文本框总分排序下拉框切换升序 / 降序重新拉取排序后数据刷新表格导出按钮弹出本地文件保存窗口选择路径后触发导出逻辑完成后弹窗提示成功 / 异常信息。二ReportService 统计计算与 CSV 导出核心业务该模块是报表功能的业务核心分为成绩统计、CSV 文件导出两大核心逻辑不依赖任何界面代码可被多个面板复用。成绩统计算法单科均值遍历全部成绩实体累加分数后计算平均分保留两位小数总分排序循环计算每名学生各科总分通过集合排序实现升序、降序切换。原生 CSV 文件导出无第三方 POI纯 Java IO 实现格式规范自动拼接表头对包含逗号、换行符的成绩字段使用双引号转义避免表格错乱中文乱码处理文件写入时添加 UTF-8 BOM 头Windows 下 Excel、WPS 可直接正常打开中文性能优化使用BufferedWriter缓冲流写入减少磁盘 IO 访问次数大批量数据导出速度大幅提升。踩坑总结初期未做字符转义带有逗号的学生姓名会导致表格列偏移查阅 CSV 标准格式规范后完善转义逻辑。三DataGenerator 正态分布测试数据生成工具手动录入上百条测试数据效率极低独立开发数据生成工具类DataGenerator一键批量生成百条符合真实考试规律的成绩数据。核心实现采用正态分布随机算法控制分数集中在 60~90 区间低分、高分占比偏少贴合真实考试分数分布数据库优化整合多条插入 SQL 批量提交避免逐条循环连接数据库大幅提升百条数据入库速度使用方式程序启动后一键调用自动生成学生、对应科目成绩并写入 SQLite 数据库快速填充系统测试样本。四ChartPanel 基于 Java2D 原生绘图成绩柱状图项目未引入第三方图表框架基于 Java 原生 Java2D 绘图 API 自研可视化组件嵌入ReportPanel实现成绩分段分布可视化。功能逻辑接收业务层统计后的分数分段人数数组自动自适应面板尺寸动态计算坐标轴、柱状图坐标、刻度间距绘图内容横轴划分 0-60、60-70、70-80、80-90、90-100 分数段纵轴为对应人数搭配彩色柱状图直观展示成绩分布开发难点动态数据下坐标轴文字重叠、柱状图比例失衡解决方案根据数据量动态调整刻度间隔、画布边距自动缩放柱状宽度。五User 实体类 UserDAO 账号登录校验模块负责系统登录认证、角色权限区分是系统安全入口模块。model.User实体私有化账号、加密密码、角色属性提供 get/set 封装承载用户登录数据dao.UserDAO数据库校验封装登录查询方法数据库仅存储 MD5 加密密码登录时将前端输入密码加密后与库中数据比对匹配成功返回用户角色管理员 / 学生界面根据角色开放对应操作权限安全优化界面先做账号密码非空校验校验通过后再访问数据库减少无效数据库查询避免非法频繁访问消耗资源。四、开发收获与踩坑总结分层架构思维落地开发初期曾将 SQL 查询、文件写入逻辑直接写在 Swing 按钮事件内代码臃肿难以维护完整落地 MVCDAO 分层后界面、业务、数据库完全隔离新增图表、导出功能时无需改动原有登录、学生管理代码深刻理解分层解耦的开发价值。Swing 多线程避坑Swing 所有界面渲染操作必须在主线程执行耗时 IO、计算任务需新开子线程本次 CSV 导出界面卡死问题让我掌握了 GUI 程序多线程开发规范。底层技术实操能力提升纯原生 Java IO 实现 CSV 导出、手写 Java2D 绘图、正态分布随机数算法、JDBC 数据库批量操作全程无第三方工具封装吃透了文件流、绘图、数据库底层基础原理。团队 Git 协同开发使用 GiteeGit 分支管理开发通过 Issue 分配任务解决多模块代码合并冲突熟练掌握多人并行开发流程规范提交记录追溯每一个功能开发节点。五、现有功能不足与后续优化展望当前模块存在缺陷CSV 导出仅支持全量成绩导出缺少按班级、分数段筛选导出柱状图表样式单一仅支持分数分布柱状图无折线图、饼图切换测试数据生成参数固定无法自定义生成条数、分数区间用户密码仅单层 MD5 加密账号安全强度不足数据库无连接池大批量数据查询、插入时访问性能较差。后续拓展优化计划功能优化在ReportPanel增加多条件筛选框实现按需筛选导出报表完善ChartPanel新增多图表切换、图表保存为本地图片功能给DataGenerator增加自定义参数入口灵活控制测试数据规则升级密码加密方式为加盐 MD5。代码重构抽取 CSV 导出、正态随机数通用工具类消除ReportService、DataGenerator重复代码抽象ChartPanel通用绘图父类简化后续新增图表开发成本。技术拓展学习学习数据库连接池、JUnit 单元测试框架为 DAO、Service 层增加自动化单元测试后续尝试将本桌面 Swing 项目改造为 Web 前后端项目对比桌面程序与 B/S 架构开发差异。六、课程设计感悟本次课程设计从界面交互、业务算法、文件处理、底层绘图到数据库访问完整走完了一套小型管理系统的开发流程不再是零散的语法练习而是真实落地工程化分层开发思想。独立解决 CSV 乱码、Swing 线程阻塞、Java2D 坐标换算、正态数据分布等多个难题的过程锻炼了自主查阅文档、调试排错、逻辑优化的能力同时团队 Git 协同开发让我体会到规范代码管理、清晰模块分工对小组项目的重要意义。项目也暴露出我在多线程、数据库性能优化、底层绘图方面知识储备不足后续会针对性补齐短板夯实 Java 开发基础。