一、系统介绍
1.开发环境
开发工具:IDEA2018
JDK版本:jdk1.8
Mysql版本:8.0.13
2.技术选型
Java+Spring+SpringMVC+Mybatis+Boostrap
3.系统功能
管理员
1.学生管理
2.课程管理
3.班级管理
4.更改密码
用户
1.查看课表
2.选课
二、系统展示
1.登录系统
2.管理员-首页
3.管理员-学生管理
4.管理员-课程管理
5.管理员-班级管理
6.管理员-更改密码
7.用户-首页
8.用户-查看课表
9.用户-选课
三、部分代码
ClassesController
package com.offcn.controller; import java.io.File; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.offcn.pojo.Classes; import com.offcn.pojo.Student; import com.offcn.pojo.StudentExt; import com.offcn.pojo.User; import com.offcn.service.ClassesService; import com.offcn.service.StudentService; /** * <p>Company: offcn</p> * @author zgf * @date 2017年5月22日 * @version 1.0 */ @Controller @RequestMapping("/cla")//用来处理请求地址映射的注解 public class ClassesController { @Resource ClassesService classesService; @Resource StudentService studentService; /* * 列表与分页Action */ @RequestMapping("/list") //声明一个list方法,返回一个String类型 public String list(Model model,@RequestParam(required=false,defaultValue="1") int pageNO){ int size=3; model.addAttribute("size",size); model.addAttribute("pageNO",pageNO); model.addAttribute("count",classesService.getClassesCount()); model.addAttribute("clalist", classesService.getClassPager(pageNO, size)); return "class/list"; } /* * 删除单个对象Action */ @RequestMapping("/delete/{id}") public String delete(Model model,@PathVariable int id,@RequestParam(required=false,defaultValue="1") int pageNO,RedirectAttributes redirectAttributes){ if(classesService.delete(id)>0) { //redirectAttributes:重定向之后还能带参数跳转 //隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面” 获取message参数值。其原理就是放到session中,session在跳到页面后马上移除对象。 redirectAttributes.addFlashAttribute("message", "删除成功!"); }else{ redirectAttributes.addFlashAttribute("message", "删除失败!"); } return "redirect:/cla/list?pageNO="+pageNO; } /* * 删除多个对象Action */ @RequestMapping("/deletes") public String deletes(Model model,@RequestParam int[] id,@RequestParam(required=false,defaultValue="1") int pageNO,RedirectAttributes redirectAttributes){ //执行删除 System.out.println("批量删除"+id.toString()); int rows=classesService.deletes(id); if(rows>0) { redirectAttributes.addFlashAttribute("message", "删除"+rows+"行记录成功!"); }else{ redirectAttributes.addFlashAttribute("message", "删除失败!"); } return "redirect:/cla/list?pageNO="+pageNO; } /* * 添加学生 */ @RequestMapping("/add") public String add(Model model){ model.addAttribute("entity", new Classes()); return "class/add"; } /* * 添加保存 */ @RequestMapping("/addSave") //@ModelAttribute:绑定请求参数到指定对象 public String addSave(Model model,@ModelAttribute("entity") @Valid Classes entity,BindingResult bindingResult){ //如果模型中存在错误 if(bindingResult.hasErrors()){ model.addAttribute("entity", entity); return "class/add"; }else{ classesService.insert(entity); return "redirect:/cla/list"; } } /* * 编辑 */ @RequestMapping("/edit/{id}") //@PathVariable可以用来映射URL中的占位符到目标方法的参数中 public String edit(Model model,@PathVariable int id){ model.addAttribute("entity", classesService.getCLassId(id)); return "class/edit"; } /* * 编辑保存 */ @RequestMapping("/editSave") //@Valid的参数后必须紧挨着一个BindingResult 参数 //Spring验证的错误返回 public String editSave(Model model,@ModelAttribute("entity") @Valid Classes entity,BindingResult bindingResult){ //如果模型中存在错误 if(bindingResult.hasErrors()){ model.addAttribute("entity", entity); return "/class/edit"; }else{ classesService.update(entity); return "redirect:list"; } } @RequestMapping("search/{id}") public String search(@PathVariable int id,Model model) { List<StudentExt> slist=studentService.getStuByCid(id); model.addAttribute("slist", slist); return "class/stulist"; } @RequestMapping("search1/{id}") public String search1(@PathVariable int id,Model model) { /*List<StudentExt> slist=studentService.getStuByCid(id); model.addAttribute("slist", slist);*/ Classes classes=classesService.getStuByid(id); model.addAttribute("classes", classes); return "class/stulist1"; } }
CourseController
package com.offcn.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.validation.Valid; import org.springframework.http.HttpRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.offcn.mapper.CtcMapper; import com.offcn.pojo.Classes; import com.offcn.pojo.Course; import com.offcn.pojo.CtcKey; import com.offcn.pojo.Teacher; import com.offcn.pojo.User; import com.offcn.service.ClassesService; import com.offcn.service.CourseService; import com.offcn.service.TeacherService; import java.util.ArrayList; import java.util.List; /** * <p>Company: offcn</p> * @author zgf * @date 2017年5月22日 * @version 1.0 */ @Controller @RequestMapping("/cou") public class CourseController { @Resource CourseService courseService; @Resource TeacherService teacherService; @Resource ClassesService classesService; /* @Resource CtcService ctcService;*/ /* @Resource GradeService gradeService;*/ /* * 列表与分页Action */ @RequestMapping("/list") public String list(Model model,@RequestParam(required=false,defaultValue="1") int pageNO){ int size=3; model.addAttribute("size",size); model.addAttribute("pageNO",pageNO); model.addAttribute("count",courseService.getCourseCount()); model.addAttribute("coulist", courseService.getCoursePager(pageNO, size)); return "course/list"; } /* * 删除单个对象Action */ @RequestMapping("/delete/{id}") public String delete(Model model,@PathVariable int id,@RequestParam(required=false,defaultValue="1") int pageNO,RedirectAttributes redirectAttributes){ if(courseService.delete(id)>0) { redirectAttributes.addFlashAttribute("message", "删除成功!"); }else{ redirectAttributes.addFlashAttribute("message", "删除成功!"); } return "redirect:/cou/list?pageNO="+pageNO; } /* * 删除多个对象Action */ @RequestMapping("/deletes") public String deletes(Model model,@RequestParam int[] id,@RequestParam(required=false,defaultValue="1") int pageNO,RedirectAttributes redirectAttributes){ //执行删除 System.out.println("批量删除"+id.toString()); int rows=courseService.deletes(id); if(rows>0) { redirectAttributes.addFlashAttribute("message", "删除"+rows+"行记录成功!"); }else{ redirectAttributes.addFlashAttribute("message", "删除失败!"); } return "redirect:/cou/list?pageNO="+pageNO; } /* * 添加 */ @RequestMapping("/add") public String add(Model model){ model.addAttribute("entity", new Course()); return "course/add"; } /* * 添加保存 */ @RequestMapping("/addSave") public String addSave(Model model,@ModelAttribute("entity") @Valid Course entity,BindingResult bindingResult){ //如果模型中存在错误 if(bindingResult.hasErrors()){ model.addAttribute("entity", entity); return "course/add"; }else{ courseService.insert(entity); return "redirect:/cou/list"; } } /* * 编辑 */ @RequestMapping("/edit/{id}") public String edit(Model model,@PathVariable int id){ model.addAttribute("entity", courseService.getCourseId(id)); return "course/edit"; } /* * 编辑保存 */ @RequestMapping("/editSave") public String editSave(Model model,@ModelAttribute("entity") @Valid Course entity,BindingResult bindingResult){ //如果模型中存在错误 if(bindingResult.hasErrors()){ model.addAttribute("entity", entity); return "/course/edit"; }else{ courseService.update(entity); return "redirect:list"; } } //排课 @RequestMapping("/setTeacher/{id}") public String setTeacher(Model model,@PathVariable int id){ Course course=courseService.getCourseId(id); model.addAttribute("entity",course); List<Teacher> tlist=teacherService.getAllTeacher(); List<Classes> clist=classesService.getAllClasses(); model.addAttribute("tlist", tlist); model.addAttribute("clist", clist); return "course/setct"; } @RequestMapping("editSavect") public String editSavect(Model model,@ModelAttribute("entity") Course entity,RedirectAttributes redirectAttributes){ //Course course=entity; String classid=entity.getClasses(); String[] classids=classid.split(","); List<CtcKey> ctclist=new ArrayList<CtcKey>(); for(int i=0;i<classids.length;i++){ CtcKey c=new CtcKey(); c.setCouid(entity.getId()); c.setClaid(Integer.parseInt(classids[i])); c.setTid(entity.getTeacher().getId()); ctclist.add(c); } try{ courseService.insertBatch(ctclist); }catch(Exception e){ redirectAttributes.addFlashAttribute("msg", "排课存在冲突,请核对后重新选!"); } return "redirect:/cou/list"; } @RequestMapping("toChangePassword") public String toChangePassword(){ return "course/changePassword"; } @ResponseBody @RequestMapping("changePassword") public int changePassword(String password,String oldPass,int id,HttpServletRequest re){ HttpSession session = re.getSession(); User user = (User)session.getAttribute("user"); if(user.getPassword().equals(oldPass)) { courseService.changePassword(password,id,user); return 1; }else return 2; } }