项目编号:BS-GX-042
一,项目简介
本项目主要实现一下为学校各学科举办的竞赛进行信息化管理,通过springboot来实现后台管理系统的开发,通过Node+Vue+ElementUI实现前端页面的开发和交互,并提供了小程序端供参赛者使用查看相关的比赛信息。系统的整个业务流程十分完整,功能也比较完整,适合做毕业设计使用。
系统共涉及四个角色的使用人员:学校管理员、院系管理员、老师、学生
系统采用前后端分离开发模式开发设计,并使用三层架构和MVC设计模式。
学校管理员登陆系统:
- 查看公告
- 管理竞赛:发布竞赛,审核各院系的竞赛申请,查看参赛项目等
- 项目管理:主要查看各院系上报的参赛项目信息
- 竞赛申请管理:主要管理各院系自己添加的竞赛申请,进行审批查看等
- 公告管理:发布和管理学校公告信息
- 通知管理:查看和阅读各种系统通知信息
- 信息统计:以图形报表方式来展示各处参赛信息
院系管理员登陆系统:
- 查看公告
- 项目管理:管理本院各老师申报的项目并进行审批
- 作品管理:对各参栋队伍上传的作品进行打分
- 竞赛列表:查看学校发布的各种竞赛信息并进和申报
- 信息管理
- 信息统计
老师登陆系统:
- 个人中心:查看个人参加的比赛并管理个人信息
- 查看公告
- 项目管理:查看和申报本院申请的参赛项目,并可以加入各项目团队
- 竞赛列表:查看本院申请的比赛,可以带队申请比赛
- 我的申请管理:主要查看和审批老师申请的学校项目,学生加入我的项目的申请,我加入的别的老师的项目申请审核状态
- 信息管理
学生登陆系统:
- 查看公告
- 项目列表:查看学院发布的各种比赛项目,可以申请加入团队
- 作品管理:上传和管理自己的作品
- 竞赛列表:查看各类竞赛信息
- 我的申请管理:主要是查看学生申请的项目加入审批情况
- 信息管理
微信小程序端:
- 查看所有竞赛信息
- 查看院系的项目、我参与的项目、我的竞赛申请审批情况
- 个人中心:查看个人的参栋总数、积分情况、参赛历史情况等
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat+Nodejs
开发工具:IDEA、VSCODE、微信小程序
开发技术:
后台开发:springboot
前端开发:Nodejs+vue+ElementUI+微信小程序
三,系统展示
后台管理人员登陆
管理员登陆
查看系统公告
竞赛管理
项目查看
竞赛申请与审报审核结果
公告管理
通知管理
信息统计
各院系管理员登陆系统
个人中心
项目管理
作品管理
竞赛列表
学院端申请管理
信息统计
学生登陆系统
个人中心
项目列表
作品管理
竞赛列表
我的申请管理
信息通知管理
老师登陆系统
个人中心
项目管理
竞赛列表:
我的申请管理
学生申请
老师申请
学生登陆小程序端
个人中心
四,核心代码展示
package com.sang.subjectcompetition.controller; import com.sang.subjectcompetition.entity.Comp; import com.sang.subjectcompetition.entity.Project; import com.sang.subjectcompetition.entity.Teacher_Project; import com.sang.subjectcompetition.entity.resultInfo.CompResult; import com.sang.subjectcompetition.service.CompService; import com.sang.subjectcompetition.service.ProjectService; import org.apache.logging.log4j.util.PropertySource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Comparator; import java.util.List; @RestController @RequestMapping("/comp") public class CompController { @Autowired private CompService compService; @Autowired private ProjectService projectService; /** * 返回全部的竞赛信息 * @return */ @PostMapping("/getAllComps") public List<Comp> selectAllComp(){ List<Comp> allComps = compService.getAllComps(); allComps.sort(Comparator.naturalOrder()); return allComps; } /** * 发布竞赛/更新 * @param comp * @return */ @PostMapping("/addComp") public String addComp(Comp comp){ CompResult compResult = compService.createComp(comp); return compResult.getMessage(); } /** * 多条件模糊查询 * @return */ @PostMapping("/moreSearch") public List<Comp> moreSearch(Comp comp){ String compName=comp.getCompName(); String organizer=comp.getOrganizer(); Integer level=comp.getLevel(); String subjectType=comp.getSubjectType(); String place=comp.getPlace(); Integer compState=comp.getCompState(); return compService.getCompsBySelf(compName,organizer,level,subjectType,place,compState); } /** * 根据Id返回竞赛的项目 */ @GetMapping("/getProjectLists/{compId}") public List<Project> getProjectLists(@PathVariable Integer compId){ List<Project> projectsBycompId = projectService.getProjectsBycompId(compId); return projectService.getProjectsBycompId(compId); } }
package com.sang.subjectcompetition.controller; import com.sang.subjectcompetition.entity.*; import com.sang.subjectcompetition.entity.resultInfo.MessageResult; import com.sang.subjectcompetition.respository.AdminRepository; import com.sang.subjectcompetition.respository.CollegeRepository; import com.sang.subjectcompetition.respository.StudentRepository; import com.sang.subjectcompetition.respository.TeacherRepository; import com.sang.subjectcompetition.service.MessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/msg") public class MessageController { @Autowired private MessageService messageService; @Autowired private AdminRepository adminRepository; @Autowired private StudentRepository studentRepository; @Autowired private CollegeRepository collegeRepository; @Autowired private TeacherRepository teacherRepository; @GetMapping("/getUnReadListPopup/{receiver}") public List<Message> getUnReadListPopup(@PathVariable String receiver ){ return messageService.findUnReadMessage(receiver); } @GetMapping("/getUnReadList/{receive}") public List<Map<String ,Object>> getUnReadList(@PathVariable String receive){ List<Map<String ,Object>> result=new ArrayList<>(); List<Message> unReadMessage = messageService.findUnReadMessage(receive); for (Message message : unReadMessage) { Map<String ,Object> map=new HashMap<>(); map.put("id",message.getId()); map.put("date",message.getMsgDate()); map.put("title",message.getTitle()); map.put("content",message.getContent()); if(message.getSenderRole()==0){ Student student = studentRepository.findStudentByTargetId(message.getSender()); map.put("sendUsername",student.getUsername()); map.put("sendName",student.getNickname()); }else if(message.getSenderRole()==1){ Teacher teacher = teacherRepository.findTeacherByTargetId(message.getSender()); map.put("sendUsername",teacher.getUsername()); map.put("sendName",teacher.getNickname()); }else if(message.getSenderRole()==2){ College college = collegeRepository.findCollegeByTargetId(message.getSender()); map.put("sendUsername",college.getUsername()); map.put("sendName",college.getNickname()); }else{ Admin admin = adminRepository.findAdminByTargetId(message.getSender()); map.put("sendUsername",admin.getUsername()); map.put("sendName",admin.getNickname()); } result.add(map); } return result; } @GetMapping("/getReadList/{receive}") public List<Map<String ,Object>> getReadList(@PathVariable String receive){ List<Map<String ,Object>> result=new ArrayList<>(); List<Message> readMessage = messageService.findReadMessage(receive); for (Message message : readMessage) { Map<String ,Object> map=new HashMap<>(); map.put("id",message.getId()); map.put("date",message.getMsgDate()); map.put("title",message.getTitle()); map.put("content",message.getContent()); if(message.getSenderRole()==0){ Student student = studentRepository.findStudentByTargetId(message.getSender()); map.put("sendUsername",student.getUsername()); map.put("sendName",student.getNickname()); }else if(message.getSenderRole()==1){ Teacher teacher = teacherRepository.findTeacherByTargetId(message.getSender()); map.put("sendUsername",teacher.getUsername()); map.put("sendName",teacher.getNickname()); }else if(message.getSenderRole()==2){ College college = collegeRepository.findCollegeByTargetId(message.getSender()); map.put("sendUsername",college.getUsername()); map.put("sendName",college.getNickname()); }else{ Admin admin = adminRepository.findAdminByTargetId(message.getSender()); map.put("sendUsername",admin.getUsername()); map.put("sendName",admin.getNickname()); } result.add(map); } return result; } @GetMapping("/markMessage/{messageId}") public MessageResult markMessage(@PathVariable Integer messageId){ return messageService.markRead(messageId); } @GetMapping("/deleteMessage/{messageId}") public MessageResult deleteMessage(@PathVariable Integer messageId){ return messageService.deleteMessage(messageId); } }
package com.sang.subjectcompetition.controller; import com.sang.subjectcompetition.entity.Project; import com.sang.subjectcompetition.entity.resultInfo.ProResult; import com.sang.subjectcompetition.service.ProjectService; import com.sang.subjectcompetition.service.StudentService; import com.sang.subjectcompetition.service.TeacherService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Comparator; import java.util.List; import java.util.TreeSet; /** * 项目管理 */ @RestController @RequestMapping("/project") public class ProjectController { @Autowired private ProjectService projectService; @Autowired private TeacherService teacherService; @Autowired private StudentService studentService; /** * 得到参加项目的老师 * @param projectId * @return */ @GetMapping("/getProjectJoinTeacher/{projectId}") public List getProjectJoinTeacher(@PathVariable Integer projectId){ return projectService.getProjectJoinTeacher(projectId); } /** * 得到参加项目的学生 * @param projectId * @return */ @GetMapping("/getProjectJoinStudent/{projectId}") public List getProjectJoinStudent(@PathVariable Integer projectId){ return projectService.getProjectJoinStudent(projectId); } /** * 根据学院id来得到模糊查询 * @param project * @param collegeId * @return */ @PostMapping("/getMoreSearchProjectByCollege") public List<Project> getMoreSearchProjectByCollege(Project project,Integer collegeId){ List<Project> moreSearchProjectByCollege = projectService.getMoreSearchProjectByCollege(collegeId, project); moreSearchProjectByCollege.sort(Comparator.naturalOrder()); return moreSearchProjectByCollege; } /** * 根据学院id来得到模糊查询 * @param project * @param teacherId * @return */ @PostMapping("/getMoreSearchProjectByTeacher") public List<Project> getMoreSearchProjectByTeacher(Project project,Integer teacherId){ Integer collegeId=teacherService.getTeacherById(teacherId).getCollege().getId(); List<Project> projects = projectService.getMoreSearchProjectByCollege(collegeId, project); projects.sort(Comparator.naturalOrder()); return projects; } /** * 根据学院id来得到模糊查询 * @param project * @param studentId * @return */ @PostMapping("/getMoreSearchProjectByStudent") public List<Project> getMoreSearchProjectByStudent(Project project,Integer studentId){ Integer collegeId=studentService.getStudentById(studentId).getCollege().getId(); List<Project> moreSearchProjectByCollege = projectService.getMoreSearchProjectByCollege(collegeId, project); moreSearchProjectByCollege.sort(Comparator.naturalOrder()); return moreSearchProjectByCollege; } /** * 根据学院id来得到模糊查询 * @param project * @return */ @PostMapping("/getMoreSearchAllProjects") public List<Project> getMoreSearchAllProjects(Project project){ List<Project> moreSearchAllProject = projectService.getMoreSearchAllProject(project); moreSearchAllProject.sort(Comparator.naturalOrder()); return moreSearchAllProject; } /** * 得到学生参与的项目集合 * @param studentId * @return */ @GetMapping("/getStudentProjects/{studentId}") public List<Project> getStudentProjects(@PathVariable Integer studentId){ List<Project> studentProjects = projectService.getStudentProjects(studentId); studentProjects.sort(Comparator.naturalOrder()); return studentProjects; } /** * 得到教师领队的项目 * @param teacherId * @return */ @GetMapping("/getTeacherJoinProjects/{teacherId}") public List<Project> getTeacherJoinProjects(@PathVariable Integer teacherId){ List<Project> teacherJoinProjects = projectService.getTeacherJoinProjects(teacherId); teacherJoinProjects.sort(Comparator.naturalOrder()); return teacherJoinProjects; } /** * 解散项目组 * @param projectId * @return */ @GetMapping("/invokeProject/{projectId}") public ProResult invokeProject(@PathVariable Integer projectId) { return teacherService.invokeProject(projectId); } }
五,项目总结
本项目设计功能丰富,所使用的技术比较符合现在毕业设计的要求,使用springboot开发后台服务接口,使用Node+Vue开发前端操作界面,并使用微信小程序开发小程序端供用户使用。项目比较适合做毕业设计使用。