Java面向对象课程设计:学生成绩管理系统 一、项目简介本项目为Java面向对象课程设计由三人小组协作开发学生成绩管理系统。项目遵循多层分层架构思想基于MySQL实现数据持久化依托JDBC完成程序与数据库交互使用Swing搭建可视化GUI界面。项目全程采用Git协同开发严格遵循阿里Java开发规范。系统不仅完成学生信息、成绩管理、数据统计、条件查询、数据校验等全部基础功能还拓展模糊查询txt文本文档导出成绩汇总表的扩展功能。项目最终可打包为Jar独立运行无需依赖IDE环境功能完善、运行稳定完全满足课程设计考核要求。二、开发环境与技术栈开发环境开发工具Eclipse、Navicat、Git运行环境JDK11数据库MySQL 8.0核心技术核心基础JavaSE、JDBC数据库开发界面开发Swing图形界面、事件监听、JTable表格渲染架构设计Entity实体层、Util工具层、DAO数据访问层、Service业务层、View视图层分层架构开发规范阿里巴巴Java开发编码规范三、项目整体包结构四、项目需求分析基础功能需求管理员账号密码登录校验拦截非法登录并弹窗提示学生信息管理新增、删除、修改、学号姓名精准查询成绩管理学生各科目成绩录入、修改、删除实现学生与成绩数据绑定数据统计自动计算学生总分、班级单科平均分、班级总平均分支持班级成绩排序数据持久化所有数据持久化存储程序重启数据不丢失数据校验完善的数据校验机制拦截空值、分数越界、等错误数据拓展功能需求txt文本文档支持文本文件批量导入、导出学生成绩数据姓名学号模糊查询仅输入姓名学号部分可以查询到有关的全部成绩信息五、数据库设计本系统使用Navicat软件共设计四张核心数据表分别为管理员表、学生信息表、成绩表课程表。数据库采用主外键关联设计成绩表通过学生学号关联学生表实现多表联合查询保证数据关联性与完整性。表结构设计管理员表 (admin)username (用户名)password (密码)学生信息表 (student)sid (学号)sname (姓名)gender (性别)sclass(班级)birthday生日成绩表 (score)sid 学号cid课程号score (成绩)4.课程表coursecid课程号cname课程名称在这里插入图片描述cteacher课程教师六、团队详细分工七、核心功能演示视频学生成绩管理演示视频八、核心代码片段展示组长李思琦 核心代码 (Java)publicclassStudentService{privateStudentDaostudentDaonewStudentDao();// 自动生成唯一学号 STU8位随机字符publicStringgenerateSid(){StringrandomUUID.randomUUID().toString().substring(0,8).toUpperCase();returnSTUrandom;}// 新增学生自动生成学号校验唯一性完全不操作成绩数据publicStringaddStudent(Studentstudent){StringnewSidgenerateSid();student.setSid(newSid);StudentrepeatstudentDao.findById(newSid);if(repeat!null){return学号冲突新增失败;}introwstudentDao.addStudent(student);returnrow0?新增成功学生学号newSid:新增学生失败;}// 修改学生强制锁定学号前端无法修改sidpublicStringupdateStudent(Studentstudent){StudentoldStustudentDao.findById(student.getSid());if(oldStunull){return不存在该学生修改失败;}// 强制使用原学号防止篡改student.setSid(oldStu.getSid());introwstudentDao.update(student);returnrow0?学生信息修改成功:修改失败;}// 删除学生保留合法级联删除移除冗余ScoreDao依赖publicStringdeleteStudent(Stringsid){StudentstustudentDao.findById(sid);if(stunull){return学生不存在删除失败;}introwstudentDao.deleteById(sid);returnrow0?学生及对应成绩全部删除成功:删除失败;}// 根据学号查询单个学生publicStudentgetStudentBySid(Stringsid){returnstudentDao.findById(sid);}// 姓名模糊匹配查询学生列表publicListStudentsearchStudentByName(StringnameKey){returnstudentDao.findLikeName(nameKey);}// 查询全部学生publicListStudentgetAllStudent(){returnstudentDao.findAll();}// 对外提供获取全部非空的学生-课程-成绩有效数据publicListReportVOgetAllStuScore(){returnstudentDao.selectAllStuScoreInfo();}}组员叶颖 核心代码 (Java)//数据库交互设计publicclassDBUtil{//A本机连接IP固定写localhostprivatestaticfinalStringURLjdbc:mysql://localhost:3306/score_manage?useSSLfalseserverTimezoneAsia/Shanghai;privatestaticfinalStringUSERroot;//这里密码填A自己本地MySQL密码privatestaticfinalStringPWD123456;static{try{Class.forName(com.mysql.cj.jdbc.Driver);}catch(ClassNotFoundExceptione){e.printStackTrace();}}//获取连接方法publicstaticConnectiongetConn(){Connectionconnnull;try{connDriverManager.getConnection(URL,USER,PWD);conn.setAutoCommit(true);System.out.println(A本机数据库连接成功);}catch(SQLExceptione){e.printStackTrace();System.out.println(连接失败);}returnconn;}publicstaticvoidclose(Connectionconn,PreparedStatementpstmt,ResultSetrs){try{if(rs!null)rs.close();if(pstmt!null)pstmt.close();if(conn!null)conn.close();}catch(SQLExceptione){e.printStackTrace();}}publicstaticvoidclose(Connectionconn,PreparedStatementpstmt){close(conn,pstmt,null);}//测试入口publicstaticvoidmain(String[]args){getConn();}}组员于梓萱 核心代码 (Java)//登录界面设计publicclassLoginViewextendsJFrame{privatestaticfinallongserialVersionUID1L;privateJTextFieldusernameFieldnewJTextField(20);privateJPasswordFieldpasswordFieldnewJPasswordField(20);privateJButtonloginButtonnewJButton(登录);// 模拟存储用户账号密码实际项目可替换为数据库读取privatestaticfinalHashMapString,StringUSER_MAPnewHashMap();static{USER_MAP.put(admin,123456);// 可以在这里加更多测试账号}publicLoginView(){// 基础窗口设置setTitle(学生成绩管理系统 - 用户登录);setSize(450,300);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 登录面板布局JPanelpanelnewJPanel(newGridBagLayout());GridBagConstraintsgbcnewGridBagConstraints();gbc.insetsnewInsets(10,10,10,10);// 添加账号标签和输入框gbc.gridx0;gbc.gridy0;panel.add(newJLabel(用户名),gbc);gbc.gridx1;panel.add(usernameField,gbc);// 添加密码标签和输入框gbc.gridx0;gbc.gridy1;panel.add(newJLabel(密 码),gbc);gbc.gridx1;panel.add(passwordField,gbc);// 添加登录按钮gbc.gridx1;gbc.gridy2;panel.add(loginButton,gbc);add(panel);// 登录按钮点击事件已经加好了跳转代码loginButton.addActionListener(e-{StringusernameusernameField.getText().trim();StringpasswordnewString(passwordField.getPassword());// 账号验证if(USER_MAP.containsKey(username)USER_MAP.get(username).equals(password)){JOptionPane.showMessageDialog(this,登录成功);// 这里已经提前加好跳转主界面的代码了MainView.currentLoginUserusername;// 把当前登录的账号先存起来newMainView().setVisible(true);this.dispose();}else{JOptionPane.showMessageDialog(this,用户名或密码错误请重试);passwordField.setText();}});}publicstaticvoidmain(String[]args){// 启动登录界面SwingUtilities.invokeLater(()-{newLoginView().setVisible(true);});}}九、Git版本管理说明项目Git仓库地址(https://gitee.com/level-seven/score-management-system.git)团队采用分层协同开发模式底层数据库代码优先开发提交业务层拉取代码迭代开发最后界面层对接接口开发。全员独立分支开发定期合并主分支通过Git完成版本迭代、代码备份与冲突解决保证项目高效协作开发。十、项目部署运行步骤环境准备本地安装配置JDK、MySQL数据库环境数据库初始化使用Navicat执行项目SQL脚本完成数据库初始化配置修改修改数据库工具类中本地MySQL账号密码配置依赖导入将lib目录下所有依赖Jar包导入项目构建路径运行系统运行登录界面主程序输入管理员账号密码即可使用系统打包部署项目整体打包Jar文件可脱离IDE独立双击运行十一、项目亮点支持模糊查询一键导出带统计数据的成绩报表十二、项目总结与收获技术收获本次项目开发让我熟练掌握JDBC数据库开发全过程理解数据持久化底层原理能够独立完成数据库搭建、CRUD开发与资源优化。熟练掌握Swing桌面可视化开发熟悉GUI组件布局、事件监听与页面交互逻辑。深入理解多层分层架构的设计思想理清视图、业务、数据库三层的调用逻辑与解耦思路。同时掌握POI文件处理、批量数据生成、数据统计可视化等拓展技术极大提升了Java综合编码与问题排查能力。团队协作收获本次三人分工开发模式让我体会到模块化开发的优势分层开发有效降低项目难度、提升开发效率。熟练掌握Git多人协同开发技巧学会代码提交、合并、版本管理与冲突解决。在多层联调、接口对接、bug排查过程中提升了团队沟通、任务对接、协同攻坚的能力积累了完整的小型团队项目开发经验。

相关新闻

最新新闻

清理未使用样式、删除空白行:文档批量瘦身记

清理未使用样式、删除空白行:文档批量瘦身记

讲一次翻车复盘。上个月接手一份八十多页的标书,前手是三个人接力改出来的:样式表里堆了六十多个样式,实际用到的不到十五个;正文里夹着上百个空段落;模板改了四轮,每一轮都留下几个"样式尸体"。…

2026/8/28 9:34:52
Windows系统文件Windows.Cortana.ProxyStub.dll丢失找不到问题解决

Windows系统文件Windows.Cortana.ProxyStub.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/8/28 9:34:52
Witty-Insight ATIF 导出指南:三步把 AI 代理轨迹变成标准数据

Witty-Insight ATIF 导出指南:三步把 AI 代理轨迹变成标准数据

Witty-Insight ATIF 导出指南:三步把 AI 代理轨迹变成标准数据 【免费下载链接】witty-insight The witty-insight is an eBPF-based observability framework for tracing agent execution pipelines. 项目地址: https://gitcode.com/openeuler/witty-insight …

2026/8/28 9:34:52
C++模板编程核心:typename用法、函数模板与默认参数详解

C++模板编程核心:typename用法、函数模板与默认参数详解

1. 从“typename”说起:一个被误解的关键字 如果你写过C模板,尤其是涉及嵌套依赖类型的时候,大概率见过编译器抛出一个令人困惑的错误,然后你按照提示,在某个标识符前加上 typename ,错误就神奇地消失了。…

2026/8/28 9:34:52
Podcastfy:把网页和文档快速变成多人对话播客的开源工具

Podcastfy:把网页和文档快速变成多人对话播客的开源工具

Podcastfy:把网页和文档快速变成多人对话播客的开源工具 【免费下载链接】podcastfy An Open Source Python alternative to NotebookLMs podcast feature: Transforming Multimodal Content into Captivating Multilingual Audio Conversations with GenAI 项目地…

2026/8/28 9:34:52
可视化方案的选型验证

可视化方案的选型验证

可视化方案的选型验证图表库选择应服务于数据规模、交互需求和团队维护成本。先明确要回答的问题,再决定图形形式。 先明确要解决的问题 本文聚焦测量与回归。示例用于说明实现思路,不对应某次线上事故,也不代表固定的性能结果。 边界条件写清…

2026/8/28 9:29:52