引言
随着信息化教学的深入推进,学生成绩管理和分析系统已成为学校教学改革和质量提升的重要保障。这些系统可以帮助教师快速查询和分析考试成绩,从而识别学生的学习需求和差距,实施更加个性化的教学策略。
本项目正是在这种背景下产生的,旨在开发一个功能完备的学生成绩数据分析系统,实现成绩数据的统计、可视化和智能分析。 为了提高开发效率、减少重复劳动,我们在项目中引入了飞算 JavaAI 工具。飞算 JavaAI 是一款面向 Java 开发者的 AI 编程辅助工具,它能够通过智能对话帮助进行需求分析、功能设计并自动生成完整的项目源码。该工具支持一键生成可运行的 Spring Boot 工程,包括所有配置文件和代码骨架,并自动优化代码规范和逻辑错误。
这样,我们不仅可以省去大量样板代码的编写工作,还能够更专注于业务逻辑本身。同时,使用飞算 JavaAI 也符合我的个人学习目标:通过查看和优化工具生成的代码,深入理解 Spring Boot 的开发流程,并提高代码生成和优化能力。
需求分析与规划
学生成绩综合统计分析系统主要包括成绩录入、查询、统计分析和可视化展示等功能,核心模块涵盖用户管理(管理员、教师、学生角色及权限)、成绩管理(成绩录入、修改、查询、删除)和统计分析(平均分、排名等)及可视化(成绩分布图表)模块。
如示例项目所述,用户模块支持多角色登录与注册,学生模块支持教师或管理员批量导入学生并维护成绩。为满足以上需求:
- 技术选型方面可使用后端Spring Boot框架结合MySQL数据库存储数据;
- 前端可使用Thymeleaf或JavaFX实现界面逻辑,ECharts负责数据可视化图表展示。
例如:通过ECharts可直观展示成绩分布柱状图或饼图;Spring Security或SpringBoot内置认证可完成登录鉴权;数据库设计则包括用户表、学生信息表、课程/考试信息表和成绩记录表等,以支撑系统完整功能。
图1. 学生成绩综合统计分析系统数据库关系图
飞算 JavaAI 开发实录
输入提示词:
一、技术选型
使用 Spring Boot 3.x 作为后端框架
数据库使用 MySQL,请给出建表语句
使用 MyBatis-Plus 作为 ORM 框架
接口设计遵循 RESTful API 风格,统一返回 JSON
使用 Lombok 简化实体类开发
使用 Swagger/OpenAPI 自动生成接口文档
项目构建工具:Maven
二、工程结构
请生成标准分层架构,目录结构如下:
src/main/java/com/example/studentgrades
├── controller // 控制层,处理 REST 接口请求
├── service // 服务层,业务逻辑
│ └── impl // 服务实现类
├── mapper // Mapper 接口(MyBatis-Plus)
├── entity // 实体类(数据库表映射)
├── dto // 数据传输对象
├── vo // 返回给前端的视图对象
├── config // 配置类(Swagger、MyBatis等)
└── util // 工具类
src/main/resources
├── application.yml // 数据源及全局配置
├── mapper // MyBatis 映射文件(如有)
└── static/templates // 静态资源(如需要)
三、数据库设计
请生成以下建表语句:
用户表(user)
id(主键)
username(用户名)
password(密码,需加密存储)
role(角色:ADMIN、TEACHER、STUDENT)
create_time
学生表(student)
id(主键,学号或UUID)
name(姓名)
age(年龄)
class_name(班级)
create_time
课程表(course)
id(主键)
name(课程名称)
teacher_id(授课教师ID)
成绩表(score)
id(主键)
student_id(学生ID,外键)
course_id(课程ID,外键)
score(成绩值,float/int)
exam_date(考试日期)
四、功能模块
1. 用户管理模块
用户注册(管理员可创建教师、学生账户)
用户登录(JWT 认证或 Session 管理)
角色鉴权(不同角色拥有不同权限)
2. 学生管理模块
学生信息的增删改查(单个/批量导入)
按班级、学号查询学生信息
3. 成绩管理模块
教师录入/修改学生成绩(单个或批量)
按学生、课程、班级查询成绩
统计:平均分、最高分、最低分、及格率、排名
4. 统计分析模块
班级平均成绩对比
单科成绩分布(适配 ECharts JSON 数据格式)
学生成绩走势(折线图数据)
五、接口示例
用户管理
POST /api/users/register 用户注册
POST /api/users/login 用户登录
学生管理
POST /api/students 新增学生
GET /api/students/{id} 查询学生信息
PUT /api/students/{id} 修改学生信息
DELETE /api/students/{id} 删除学生
成绩管理
POST /api/scores 新增成绩
GET /api/scores/student/{studentId} 查询学生成绩
GET /api/scores/course/{courseId}/rank 查询某课程成绩排名
GET /api/scores/average 查询全体学生平均成绩
统计分析
GET /api/charts/scoreDist 成绩分布数据
GET /api/charts/classAvg 班级平均分对比
GET /api/charts/studentTrend/{studentId} 学生成绩走势
六、其他要求
生成完整 Spring Boot 工程,可直接运行
在 application.yml 中配置 MySQL 数据源(示例即可)
所有接口需返回统一响应结构:code, message, data
核心代码添加必要的注释,类名/方法名要规范
生成 Swagger 配置,支持接口在线调试
⚡ 请根据以上要求生成一个可运行的 Spring Boot 项目代码骨架,并包含对应的数据库表 SQL 建表语句。
将提示词输入后,他立马进行理解需求,并进行整理为以下模块
点击下一步,让他给我们设计接口,这里给我们了四个接口方案,看了一下,没有太大的问题
这里继续下一步,根据我们的需求设计数据库表,这里设计了三个表结构,是符合我们需求的
CREATE TABLE `users` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户唯一标识',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '用户密码(加密后)',
`role` ENUM('ADMIN', 'TEACHER', 'STUDENT') NOT NULL COMMENT '用户角色:ADMIN-管理员,TEACHER-教师,STUDENT-学生',
`status` TINYINT DEFAULT 1 COMMENT '用户状态:1-启用,0-禁用',
`create_by` VARCHAR(50) COMMENT '创建人',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) COMMENT '修改人',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE INDEX `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
CREATE TABLE `students` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学生唯一标识',
`student_no` VARCHAR(20) NOT NULL COMMENT '学号',
`name` VARCHAR(50) NOT NULL COMMENT '学生姓名',
`class_id` VARCHAR(20) NOT NULL COMMENT '班级编号',
`gender` TINYINT COMMENT '性别:1-男,2-女',
`phone` VARCHAR(20) COMMENT '联系电话',
`email` VARCHAR(100) COMMENT '电子邮箱',
`create_by` VARCHAR(50) COMMENT '创建人',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) COMMENT '修改人',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE INDEX `idx_student_no` (`student_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';
CREATE TABLE `scores` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '成绩记录唯一标识',
`student_id` BIGINT NOT NULL COMMENT '关联学生ID',
`course_name` VARCHAR(50) NOT NULL COMMENT '课程名称',
`score` DECIMAL(5,1) NOT NULL COMMENT '成绩分数',
`exam_date` DATE COMMENT '考试日期',
`semester` VARCHAR(20) COMMENT '学期',
`create_by` VARCHAR(50) COMMENT '创建人',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) COMMENT '修改人',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成绩信息表';
我们继续进行下一步,让他们为我们处理逻辑接口
用户管理
用户登录
创建教师账户
创建学生账户
修改用户状态
学生信息管理
删除学生信息
修改学生信息
查询学生信息列表
批量导入学生数据
成绩管理
修改成绩记录
删除成绩记录
记录按条件查询成绩
获取成绩统计分析结果
统计分析
获取单科成绩分布情况
获取学生成绩趋势变化数据
点击下一步之后,这里直接点击“开始生成”按钮
等待生成项目后,勾选打开项目进行部署即可,中途可能会下载相应的包,会比较慢,耐心等待即可
优化与调试
尽管飞算JavaAI生成了大量模板代码,但在实际使用中也遇到了一些问题,需要结合手工优化和工具辅助调试。首先,自动生成的代码结构有时不够合理或不符合最佳实践,我们需要根据项目实际情况手工重构包结构或接口划分。其次,一些依赖或注解可能遗漏,需要手动在 pom.xml 中添加相应依赖或在类上添加注解来保证代码可编译运行。此外,部分自动生成的SQL查询语句效率不高,我们会借助MySQL的 EXPLAIN 等分析工具查看执行计划,优化SQL语句和索引设计。在开发过程中,我们充分利用飞算JavaAI的行间会话(智能会话)功能:当遇到复杂逻辑或不明确的问题时,选中相关代码片段并提问插件,它可以根据上下文给出优化建议或实现思路。例如,对复杂的成绩计算逻辑描述需求后,飞算JavaAI往往能提供可行方案,甚至直接给出示例代码。此外,针对旧项目或遗留代码,通过行间会话询问某段代码的业务作用,插件能快速分析并解释逻辑。最后,我们使用Postman等API测试工具验证接口正确性,通过实际调用发现问题并调整代码逻辑。综合使用飞算JavaAI与传统的调试工具(数据库分析器、Postman、IDE日志等),提升了问题定位和修复效率。
图2. 系统功能模块结构示意图
成果展示
整个项目按照典型的Spring Boot分层架构组织,src/main/java 下按包区分控制层、服务层、数据访问层等;src/main/resources 包含配置文件和静态资源;编译输出在 target 目录。
核心模块类名 | 所属层/功能 | 说明 |
---|---|---|
UserController |
控制器层(用户管理) | 管理员/教师登录、用户信息管理的Web接口 |
StudentController |
控制器层(学生管理) | 学生信息增删改查、查询成绩的接口 |
ScoreService |
服务层(成绩统计) | 实现计算平均分、方差、成绩分布等业务逻辑 |
ChartController |
控制器层(可视化) | 提供成绩分布、成绩变化图表数据的REST接口 |
Student |
实体类(数据模型) | 学生基本信息(学号、姓名、年龄等) |
ScoreRecord |
实体类(数据模型) | 学生成绩记录(学号、课程、成绩等字段) |
图3. 成绩录入流程示意图
核心API接口示例(基于REST):
POST /api/users/register 用户注册
POST /api/users/login 用户登录
POST /api/students 新增学生
GET /api/students/{id} 查询学生信息
PUT /api/students/{id} 修改学生信息
DELETE /api/students/{id} 删除学生
POST /api/scores 新增成绩
GET /api/scores/student/{studentId} 查询学生成绩
GET /api/scores/course/{courseId}/rank 查询某课程成绩排名
GET /api/scores/average 查询全体学生平均成绩
GET /api/charts/scoreDist 成绩分布数据
GET /api/charts/classAvg 班级平均分对比
GET /api/charts/studentTrend/{studentId} 学生成绩走势
图4. 接口调用流程(前端→后端→数据库)
下面这个文件涵盖了四个部分server 部分、spring.datasource 部分、spring.jpa 部分、jwt 部分
1、server 部分
- port: 8080 → 指定应用运行的端口号为 8080。
- context-path: /JavaProject → 设置 Web 应用的上下文路径,访问时需要加 /JavaProject 前缀
2、spring.datasource 部分
- 配置数据库连接信息。
- url → MySQL 数据库连接地址,这里连接本地的 testdb 数据库。
- username、password → 数据库账号和密码。
- driver-class-name → MySQL 驱动类。
3、spring.jpa 部分
- ddl-auto: update → Hibernate 启动时自动根据实体类更新数据库表结构。
- show-sql: true → 控制台输出执行的 SQL 语句,方便调试。
- dialect: MySQLDialect → 指定使用 MySQL 的方言,让 Hibernate 生成符合 MySQL 语法的 SQL。
- format_sql: true → 格式化 SQL 输出。
- open-in-view: false → 避免 Open Session in View 的性能问题。
4、jwt 部分
secret → JWT(JSON Web Token)的签名密钥,用于生成和验证 token。
expiration: 86400 → token 的有效期,单位为秒,这里设置为 1 天。
server:
port: 8080
servlet:
context-path: /JavaProject
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
format_sql: true
open-in-view: false
jwt:
secret: mySecretKeyForTokenGeneration1234567890
expiration: 86400 # seconds (1 day)
总结
在整个项目开发过程中,我们深刻体会到智能辅助开发的优势与局限。
- 一方面,飞算 JavaAI 的引入确实大幅提高了开发效率,根据统计类似项目效率可提升约 10 倍;
- 另一方面,我们也发现人工经验和业务判断依然不可或缺。
工具生成的代码虽然格式规范、可读性好,但在一些特殊业务场景下仍需要人工介入进行细节调整。
比如,对于部分自定义查询逻辑,生成结果并不完全符合预期,我们需要手动修改 SQL 语句和业务代码来满足需求。总体而言,项目按期完成,开发效率和代码质量都有所提升,这与飞算 JavaAI 所宣称的效能相符。
对于飞算 JavaAI 工具的体验,我们认为它具有明显的优势,也存在一定的局限。
- 优势方面,它能够快速生成工程结构和基础代码,帮助团队快速进入开发状态,特别适合应对开发周期紧张的项目场景。同时,生成的 Spring Boot 代码遵循行业规范,提升了代码的可维护性。
- 工具也有局限:它目前主要依赖通用场景的数据训练,在处理特定业务需求或复杂需求时表现还需要提升,开发者仍需对生成结果进行审查和完善。
通过这次项目实践,我们认识到 AI 工具是强有力的辅助而非完全替代。总结而言,飞算 JavaAI 提供了一种新的开发范式,大幅降低了开发初期的重复劳动成本,但在后续的功能细化和业务实现中,仍需开发者投入专业知识进行补充和优化。
注:需要源码自取,自行开发
源码:https://github.com/Leterhong/study