项目介绍
在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对班级事务信息管理的提升,也为了对班级事务信息进行更好的维护,班级事务管理系统的出现就变得水到渠成不可缺少。通过对班级事务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。
班级事务管理系统通过MySQL数据库与idea工具进行开发,班级事务管理系统能够实现奖惩管理,成绩管理,班级管理,请假管理,作业管理,考勤管理等功能。
通过班级事务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。
4.2功能结构设计
本系统主要是基于数据的增加,修改,删除等操作,使用者能够通过提前设定的登录功能进入指定的操作区,这里对使用者设计的功能进行结构展示。
管理员功能结构图的绘制结果见图4-1。管理员登录进入本系统操作的功能包括管理考勤,奖惩,请假,成绩,班级以及老师,学生,作业等信息。
老师功能结构图的绘制结果见图4-2。老师登录进入本系统操作的功能包括审核请假,管理作业,管理成绩,管理奖惩和考勤。
学生功能结构图的绘制结果见图4-3。学生登录进入本系统操作的功能包括查看成绩,考勤,奖惩信息,下载作业,申请请假等。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序/vue/爬虫/c#/asp.net
系统实现
5.1管理员功能实现
5.1.1 老师管理
管理员进入如图5-1所示的老师管理界面之后,管理员点击信息显示栏中最右侧的修改,删除,重置密码按钮可依次完成老师信息的修改,删除,密码重置等操作,管理员也能在当前界面查询老师信息,添加老师信息等。
图5-1 老师管理界面
5.1.2 学生管理
管理员进入如图5-2所示的学生管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成学生信息的修改,删除等操作,管理员在当前界面也能添加学生,查询学生。
图5-2 学生管理界面
5.1.3 奖惩管理
管理员进入如图5-3所示的奖惩管理界面之后,管理员查看学生的奖惩类型,奖惩日期等信息,下载学生奖惩方面的文件,可以修改学生的奖惩信息等。
图5-3 奖惩管理界面
5.1.4 考勤管理
管理员进入如图5-4所示的考勤管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成考勤信息的修改,删除操作,管理员在本界面也能查询学生考勤信息,添加学生考勤信息等。
图5-4 考勤管理界面
5.2老师功能实现
5.2.1 成绩管理
老师进入如图5-5所示的成绩管理界面之后,老师更改学生的成绩,删除需要删除的学生成绩信息,对学生的成绩分数进行查询。
图5-5 成绩管理界面
5.2.2 请假管理
老师进入如图5-6所示的请假管理界面之后,老师点击信息显示栏右侧的审核按钮即可对学生的请假进行线上审核。
图5-6 请假管理界面
5.2.3 作业管理
老师进入如图5-7所示的作业管理界面之后,老师新增作业,对发布的作业信息进行删除或更改。
图5-7 作业管理界面
5.3学生功能实现
5.3.1 请假管理
学生进入如图5-8所示的请假管理界面之后,学生申请请假之后,在本界面查看老师的审核结果以及审核意见。
图5-8 请假管理界面
5.3.2 作业管理
学生进入如图5-9所示的作业管理界面之后,学生需要下载老师发布的作业文件,同时,学生可以查询作业信息。
图5-9 作业管理界面
5.3.3 考勤查看
学生进入如图5-10所示的考勤查看界面之后,学生对自己的考勤信息进行查看,包括考勤类型,考勤日期等信息。
图5-10 考勤查看界面
核心代码
package com.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.HuidaEntity;
import com.entity.XueshengEntity;
import com.entity.ZuoyeEntity;
import com.entity.view.HuidaView;
import com.service.*;
import com.utils.PageUtils;
import com.utils.PoiUtil;
import com.utils.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.URL;
import java.util.*;
/**
* 回答
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/huida")
public class HuidaController {
private static final Logger logger = LoggerFactory.getLogger(HuidaController.class);
@Autowired
private HuidaService huidaService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private XueshengService xueshengService;
@Autowired
private ZuoyeService zuoyeService;
@Autowired
private LaoshiService laoshiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("学生".equals(role))
params.put("xueshengId",request.getSession().getAttribute("userId"));
else if("老师".equals(role))
params.put("laoshiId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = huidaService.queryPage(params);
//字典表数据转换
List<HuidaView> list =(List<HuidaView>)page.getList();
for(HuidaView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
HuidaEntity huida = huidaService.selectById(id);
if(huida !=null){
//entity转view
HuidaView view = new HuidaView();
BeanUtils.copyProperties( huida , view );//把实体数据重构到view中
//级联表
XueshengEntity xuesheng = xueshengService.selectById(huida.getXueshengId());
if(xuesheng != null){
BeanUtils.copyProperties( xuesheng , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setXueshengId(xuesheng.getId());
}
//级联表
ZuoyeEntity zuoye = zuoyeService.selectById(huida.getZuoyeId());
if(zuoye != null){
BeanUtils.copyProperties( zuoye , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setZuoyeId(zuoye.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody HuidaEntity huida, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,huida:{}",this.getClass().getName(),huida.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("学生".equals(role))
huida.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<HuidaEntity> queryWrapper = new EntityWrapper<HuidaEntity>()
.eq("zuoye_id", huida.getZuoyeId())
.eq("xuesheng_id", huida.getXueshengId())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HuidaEntity huidaEntity = huidaService.selectOne(queryWrapper);
if(huidaEntity==null){
huida.setCreateTime(new Date());
huidaService.insert(huida);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody HuidaEntity huida, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,huida:{}",this.getClass().getName(),huida.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("学生".equals(role))
// huida.setXueshengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
Wrapper<HuidaEntity> queryWrapper = new EntityWrapper<HuidaEntity>()
.notIn("id",huida.getId())
.andNew()
.eq("zuoye_id", huida.getZuoyeId())
.eq("xuesheng_id", huida.getXueshengId())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HuidaEntity huidaEntity = huidaService.selectOne(queryWrapper);
if("".equals(huida.getHuifuFile()) || "null".equals(huida.getHuifuFile())){
huida.setHuifuFile(null);
}
if(huidaEntity==null){
huidaService.updateById(huida);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
huidaService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save(String fileName){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
try {
List<HuidaEntity> huidaList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
HuidaEntity huidaEntity = new HuidaEntity();
// huidaEntity.setZuoyeId(Integer.valueOf(data.get(0))); //作业 要改的
// huidaEntity.setXueshengId(Integer.valueOf(data.get(0))); //学生 要改的
// huidaEntity.setHuifuFile(data.get(0)); //回答文件 要改的
// huidaEntity.setCreateTime(date);//时间
huidaList.add(huidaEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
huidaService.insertBatch(huidaList);
return R.ok();
}
}
}
}catch (Exception e){
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
}
论文参考
目 录
第一章 绪论 1
1.1 选题背景 1
1.2 选题意义 1
1.3 研究内容 2
第二章 开发环境 3
2.1 Java语言 3
2.2 MYSQL数据库 3
2.3 Eclipse开发工具 4
2.4 SSM框架 4
第三章 系统分析 5
3.1可行性分析 5
3.1.1技术可行性 5
3.1.2操作可行性 5
3.1.3经济可行性 5
3.2系统流程分析 6
3.3系统性能分析 9
3.3.1系统安全性 9
3.3.2数据完整性 10
3.3.3系统可扩展性 10
3.4系统功能分析 10
第四章 系统设计 14
4.1 系统设计目标 14
4.2功能结构设计 15
4.3数据库设计 17
4.3.1 数据库概念设计 17
4.3.2 数据库物理设计 20
第五章 系统实现 24
5.1管理员功能实现 24
5.1.1 老师管理 24
5.1.2 学生管理 24
5.1.3 奖惩管理 25
5.1.4 考勤管理 25
5.2老师功能实现 26
5.2.1 成绩管理 26
5.2.2 请假管理 27
5.2.3 作业管理 27
5.3学生功能实现 28
5.3.1 请假管理 28
5.3.2 作业管理 28
5.3.3 考勤查看 29
第六章 系统测试 30
6.1系统测试的特点 30
6.2 系统功能测试 30
6.2.1 学生登录测试 30
6.2.2 班级查询功能测试 31
6.3 系统测试结果 31
结 论 32
致 谢 34
参考文献 35