基于spring boot实现的成绩分析系统
一、开发目的
随着现代化社会的发展,每年都会有大量苦读寒窗的考生参加高考,但是由于竞争压力大,很多考生由于成绩不理想不能报考自己心仪的高等院校,一方面是由于自身能力不足,另一方面,在平常学习过程种,教师没能够一对一判断出不同学生的不足。于是为了提高学校的教学质量,通过考试成绩能够及时较为准确的得出学生成绩分析数据,具体到每一个同学的不足,引导教师能够较为准确的明白学生在学习过程中遇到的问题,于是开发了这款成绩分析系统。
二、项目背景
中学成绩分析系统能够将学生成绩进行可视化数据分析,辅助教学,提高教学质量。
三、涉及技术
-
基本平台 :JDK1.8+MySql8.0
-
浏览器 :IE9+,谷歌,火狐,360,搜狗等大部分浏览器
3.1 方案一:单体项目(首选)
-
前端 :html+css+js+jquery+echart
-
后端 :SpringBoot+SpringDataJpa+SpringSecurity+POI+MySql
3.2 方案二:前后端分离项目
-
前端 :React+Axios+ElementUI+echart
-
后端 :SpringBoot+MyBatisPlust+POI+MySql+Jwt
四、项目需求
4.1 用户模块
-
提供管理员、教师两种角色的登录
-
提供教师账号由管理员注册及表格批量导入注册
-
提供管理员、教师自我信息修改。管理员修改教师信息,教师修改学生基本信息。
4.2 学生模块
-
提供学生账号由教师或者管理员注册及表格批量导入注册
-
学生账号由科任教师添加、编辑成绩
4.3 成绩分析模块
- 对数据表中的数据进行分析,提供JSON数据,前端通过echart等数据可视化框架展示数据。
五.系统设计
5.1 数据库设计
5.1.1 表结构设计
学习成绩表
班级表
考试信息表
学生表
权限表
用户表
用户权限表
5.1.2 E-R图
5.2 系统设计
5.2.1 业务代码
```java
/*
* 根据考试id 获取成绩单页面
*
* @param id
* @return
/
@RequestMapping("achievement/school_report_clazz")
public String schoolReportClazz(Long id, Model model) {
List
/**
* 成绩导入页面
*
* @param id 考试 id
* @return
*/
@RequestMapping("achievement/importAchievementPage")
public String importAchievementPage(Long id, Model model) {
ExamInfo examInfo = examInfoService.findById(id);
model.addAttribute("examInfo", examInfo);
return "import_achievement";
}
/**
* 教师下载学生成绩导入模板
*
* @param id
* @param httpResponse
* @throws Exception
*/
@ResponseBody
@RequestMapping("achievement/downloadClazzXls")
public void downloadClazzXls(Long id, HttpServletResponse httpResponse) throws Exception {
ExamInfo examInfo = examInfoService.findById(id);
Clazz clazz = examInfo.getClazzes().get(0);
Integer type = clazz.getType();
Long clazzId = clazz.getId();
Workbook workbook = null;
List<Student> studentList = studentService.getStudentsByClazzId(clazzId);
String name = examInfo.getName() + "成绩导入模板";
try {
if (type == 0) {
List<AchievementImportExcelW> list = new ArrayList<>();
studentList.forEach(student -> {
AchievementImportExcelW achievementImportExcelW = new AchievementImportExcelW();
achievementImportExcelW.setStudentId(student.getId());
achievementImportExcelW.setStudentName(student.getName());
list.add(achievementImportExcelW);
});
ExportParams exportParams = new ExportParams(name, name, ExcelType.XSSF);
workbook = ExcelExportUtil.exportBigExcel(exportParams, AchievementImportExcelW.class, list);
} else if (type == 1) {
List<AchievementImportExcelL> list = new ArrayList<>();
studentList.forEach(student -> {
AchievementImportExcelL achievementImportExcelL = new AchievementImportExcelL();
achievementImportExcelL.setStudentId(student.getId());
achievementImportExcelL.setStudentName(student.getName());
list.add(achievementImportExcelL);
});
ExportParams exportParams = new ExportParams(name, name, ExcelType.XSSF);
workbook = ExcelExportUtil.exportBigExcel(exportParams, AchievementImportExcelL.class, list);
}
} finally {
if (workbook != null) {
//此处必须要关闭,否则会导致stream closed异常
ExcelExportUtil.closeExportBigExcel();
}
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream(1024)) {
assert workbook != null;
workbook.write(os);
ExcelUtil.writeIO(httpResponse, os, name);
} catch (IOException e) {
throw new Exception("导出报表失败");
}
}
/**
* 教师导入本班学生考试成绩
*
* @param id
* @param multipartFile
* @param response
* @throws Exception
*/
@ResponseBody
@RequestMapping("achievement/uploadClazzXls")
public void uploadClazzXls(Long id, @RequestParam("file") MultipartFile multipartFile, HttpServletResponse response) throws Exception {
response.setCharacterEncoding("utf-8");
long size = multipartFile.getSize();
if (size <= 0) {
response.getWriter().write("空!");
return;
}
ExamInfo examInfo = examInfoService.findById(id);
Clazz clazz = examInfo.getClazzes().get(0);
Integer type = clazz.getType();
ImportParams params = new ImportParams();
params.setHeadRows(1);
params.setTitleRows(1);
if (type == 0) {
List<AchievementImportExcelW> result = null;
result = ExcelImportUtil.importExcel(multipartFile.getInputStream(),
AchievementImportExcelW.class, params);
result.forEach(item -> {
Student student = studentService.queryById(item.getStudentId());
Achievement achievement = new Achievement();
achievement
.setChinese(item.getChinese())
.setMath(item.getMath())
.setEnglish(item.getEnglish())
.setPolitics(item.getPolitics())
.setHistory(item.getHistory())
.setGeography(item.getGeography())
.setExamInfo(examInfo)
.setStudent(student);
achievementRepository.save(achievement);
});
} else if (type == 1) {
List<AchievementImportExcelL> result = null;
result = ExcelImportUtil.importExcel(multipartFile.getInputStream(),
AchievementImportExcelL.class, params);
result.forEach(item -> {
Student student = studentService.queryById(item.getStudentId());
Achievement achievement = new Achievement();
achievement
.setChinese(item.getChinese())
.setMath(item.getMath())
.setEnglish(item.getEnglish())
.setPhysics(item.getPhysics())
.setChemistry(item.getChemistry())
.setBiology(item.getBiology())
.setExamInfo(examInfo)
.setStudent(student);
achievementRepository.save(achievement);
});
}
response.getWriter().write("导入成功!");
}
} ```
5.2.2 前端代码
```html
```
六、项目演示
登录
主页
成绩单
班级管理
学生管理
用户管理
班级管理
导入模板
考试发布
文件操作
打印成绩单
参考文献
- 基于B/S结构的学生成绩管理系统的设计与实现(吉林大学·印明阳)
- 基于JavaEE和Weka的学生成绩管理系统的分析与实现(沈阳师范大学·陈思蒙)
- 计算机知识考试系统的设计与实现(电子科技大学·楼凤珍)
- 基于Spring MVC的高校奖学金评定系统的设计与实现(内蒙古大学·杨晓蒙)
- 面向学生成绩分析的数据挖掘系统设计与实现(苏州大学·夏华)
- 基于B/S模式的小学成绩管理系统设计与实现(厦门大学·加沙拉提·白斯汉)
- 职业学校学生成绩管理系统的设计实现(河北科技大学·黄丽娟)
- 黑旋风绩效考核系统的设计实现与测试(华中科技大学·陈小丽)
- 黑旋风绩效考核系统的设计实现与测试(华中科技大学·陈小丽)
- 基于平衡计分卡的绩效管理系统的设计与实现(北京交通大学·张峰)
- 泰安银行绩效考核系统的设计与实现(山东大学·王雷琪)
- 基于B/S结构的学生成绩管理系统的设计与实现(吉林大学·印明阳)
- 基于B/S结构的学生成绩管理系统的设计与实现(吉林大学·印明阳)
- 基于平衡计分卡的绩效管理系统的设计与实现(北京交通大学·张峰)
- 基于SSH框架高校教工业绩绩效测评管理系统设计与实现(吉林大学·滕婵娟)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码助手 ,原文地址:https://bishedaima.com/yuanma/35570.html