目录
大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是 一款基于SpringBoot+Vue的毕业设计管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品 毕设 JavaWeb SSM SpringBoot等等项目框架,源码丰富,欢迎咨询。
一、项目介绍
在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生毕业设计信息管理的提升,也为了对学生毕业设计信息进行更好的维护,毕业设计系统的出现就变得水到渠成不可缺少。通过对毕业设计系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。
毕业设计系统通过MySQL数据库与Spring Boot框架进行开发,毕业设计系统能够实现教师管理,公告类型管理,班级管理,课题信息管理,任务类型管理,选题申请管理,学院管理,课题任务管理,最终成绩管理,公告信息管理,学生管理等功能。
通过毕业设计系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。
关键字:毕业设计系统,课题,课题任务,成绩
二、开发环境
开发系统:Windows
JDK版本:Java JDK1.8(推荐)
开发工具:IDEA/MyEclipse(推荐IDEA)
数据库版本: mysql8.0(推荐)
数据库可视化工具: navicat
服务器:SpringBoot自带 apache tomcat
框架:springboot,vue
三、功能介绍
管理员功能主要包括课题信息管理、成绩统计报表、教师管理。管理员进入课题信息管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成课题信息的修改,删除等操作,管理员也能在当前界面查询课题信息,添加课题信息等;进入成绩统计报表界面之后,管理员根据各个年份来统计各个学生的成绩信息,同时,管理员可以点击成绩统计报表界面右上角的各种小图标,可以把统计图转化为折线图,柱形图等图形,管理员也能下载统计报表;进入教师管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成教师信息的修改,删除等操作;
教师功能主要包括课题申请管理、课题任务管理、最终成绩管理。教师进入选题申请管理界面之后,教师负责审核学生选题信息,也可以拒绝学生选题信息,当学生完成课题任务之后,教师需要在选题申请管理界面发布学生的最终成绩;进入课题任务管理界面之后,教师负责发布课题任务,学生就需要完成任务并上传文档,教师就负责查看学生的任务完成情况信息,然后审核学生完成的课题任务,最后对学生完成的课题任务进行打分;最终成绩管理界面之后,教师查看学生最终成绩信息,可以对学生的最终成绩信息进行查询或删除。
学生功能主要包括课题信息管理、课题任务管理、最终成绩查看。学生进入课题信息管理界面之后,学生可以查看课题信息,如果学生没有选择课题,则可以对能够申请的课题进行申请。每个学生只能选择一个课题,已经成功选择课题的学生就不能申请课题了;进入课题任务管理界面之后,学生可以查看课题任务,然后完成课题任务并上传阶段性文档;进入最终成绩查看界面之后,学生查看课题名称,查看成绩信息,可以通过课题名称,教师姓名,课题类型以及学生姓名来查询最终成绩。
四、核心代码
/**
* 课题任务
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/ketirenwu")
public class KetirenwuController {
private static final Logger logger = LoggerFactory.getLogger(KetirenwuController.class);
@Autowired
private KetirenwuService ketirenwuService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private JiaoshiService jiaoshiService;
@Autowired
private XuantishenqingService xuantishenqingService;
@Autowired
private YonghuService yonghuService;
/**
* 后端列表
*/
@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("jiaoshiId",request.getSession().getAttribute("userId"));
else if("学生".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = ketirenwuService.queryPage(params);
//字典表数据转换
List<KetirenwuView> list =(List<KetirenwuView>)page.getList();
for(KetirenwuView 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);
KetirenwuEntity ketirenwu = ketirenwuService.selectById(id);
if(ketirenwu !=null){
//entity转view
KetirenwuView view = new KetirenwuView();
BeanUtils.copyProperties( ketirenwu , view );//把实体数据重构到view中
//级联表
JiaoshiEntity jiaoshi = jiaoshiService.selectById(ketirenwu.getJiaoshiId());
if(jiaoshi != null){
BeanUtils.copyProperties( jiaoshi , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setJiaoshiId(jiaoshi.getId());
}
//级联表
XuantishenqingEntity xuantishenqing = xuantishenqingService.selectById(ketirenwu.getXuantishenqingId());
if(xuantishenqing != null){
BeanUtils.copyProperties( xuantishenqing , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setXuantishenqingId(xuantishenqing.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody KetirenwuEntity ketirenwu, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,ketirenwu:{}",this.getClass().getName(),ketirenwu.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("教师".equals(role))
ketirenwu.setJiaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<KetirenwuEntity> queryWrapper = new EntityWrapper<KetirenwuEntity>()
.eq("jiaoshi_id", ketirenwu.getJiaoshiId())
.eq("xuantishenqing_id", ketirenwu.getXuantishenqingId())
.eq("ketirenwu_name", ketirenwu.getKetirenwuName())
.eq("ketirenwu_types", ketirenwu.getKetirenwuTypes())
.eq("ketirenwu_yesno_types", ketirenwu.getKetirenwuYesnoTypes())
.eq("ketirenwu_yesno_text", ketirenwu.getKetirenwuYesnoText())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
KetirenwuEntity ketirenwuEntity = ketirenwuService.selectOne(queryWrapper);
if(ketirenwuEntity==null){
ketirenwu.setKetirenwuYesnoTypes(1);
ketirenwu.setInsertTime(new Date());
ketirenwu.setCreateTime(new Date());
ketirenwuService.insert(ketirenwu);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody KetirenwuEntity ketirenwu, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,ketirenwu:{}",this.getClass().getName(),ketirenwu.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("教师".equals(role))
// ketirenwu.setJiaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
Wrapper<KetirenwuEntity> queryWrapper = new EntityWrapper<KetirenwuEntity>()
.notIn("id",ketirenwu.getId())
.andNew()
.eq("jiaoshi_id", ketirenwu.getJiaoshiId())
.eq("xuantishenqing_id", ketirenwu.getXuantishenqingId())
.eq("ketirenwu_name", ketirenwu.getKetirenwuName())
.eq("ketirenwu_types", ketirenwu.getKetirenwuTypes())
.eq("ketirenwu_yesno_types", ketirenwu.getKetirenwuYesnoTypes())
.eq("ketirenwu_yesno_text", ketirenwu.getKetirenwuYesnoText())
.eq("insert_time", ketirenwu.getInsertTime())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
KetirenwuEntity ketirenwuEntity = ketirenwuService.selectOne(queryWrapper);
if("".equals(ketirenwu.getKetirenwuFile()) || "null".equals(ketirenwu.getKetirenwuFile())){
ketirenwu.setKetirenwuFile(null);
}
if("".equals(ketirenwu.getKetirenwuHuidaFile()) || "null".equals(ketirenwu.getKetirenwuHuidaFile())){
ketirenwu.setKetirenwuHuidaFile(null);
}
if(ketirenwuEntity==null){
KetirenwuEntity ketirenwuEntity1 = ketirenwuService.selectById(ketirenwu.getId());
if(ketirenwuEntity1.getKetirenwuYesnoTypes() == 3){
ketirenwu.setKetirenwuYesnoTypes(1);
}
ketirenwuService.updateById(ketirenwu);//根据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());
ketirenwuService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
五、效果图
六、源码获取:
同系统在主页搜索资源可下载~