基于javaweb+mysql的ssm+maven学生选课管理系统(java+ssm+bootstrap+javascript+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven学生选课管理系统(java+ssm+bootstrap+javascript+mysql)
项目介绍
由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离。前端主要由bootstrap完成,背景用particles.js插件。数据库交互查询用到pagehelper分页。在添加修改相关功能时通过ajax来验证其主键是否存在可用。代码层次清晰,输入框约束较高,已配置登录拦截。 项目主要分为管理员、教师、学生三种角色; 管理员角色包含以下功能: 管理员登录,学生管理,教师管理,课程管理等功能。 教师角色包含以下功能: 登录界面,查看课程,建立课程计划,管理教学课程,成绩查询结课等功能。 学生角色包含以下功能: 登录界面,选课,确认选课,查看选课结果,退选界面,查看已修课程,管理个人信息等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:是;
技术栈
- 后端:Spring+SpringMVC+Mybatis 2. 前端:JavaScript、jQuery、bootstrap、particles.js、ajax
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中applicationContext.xml配置文件中的数据库配置改为自己的配置;注:因为此处为读写分离的,需要配置2处; 4. 运行项目,输入localhost:8080/ 登录 管理员账号/密码:admin/admin 教师账号/密码: 0002/123456 学生账号/密码:201507021227/123456
return "student/queryVitaStu";
}
// 跳转页面
@RequestMapping("/moditypwstu/{sid}")
public ModelAndView teacherModi(@PathVariable(value = "sid") String sid, Model model) {
return new ModelAndView(new RedirectView("/StudentInfo/student/modityPwStu.jsp"));
}
// 修改
@RequestMapping("/moditypasswordstu/{sid}")
public ModelAndView teacherModiPw(@PathVariable(value = "sid") String tid,
@RequestParam("spassword") String spassword, Model model) {
if (studentService.modifyStudentPwd(spassword, tid) != 0) {
return new ModelAndView(new RedirectView("../queryvitastu/{sid}"));
} else {
return new ModelAndView(new RedirectView("../fail.jsp"));
}
}
public void pageIn(Model model, List list) {
PageInfo page = new PageInfo(list, 5);
model.addAttribute("pageInfo", page);
}
// 查询
@RequestMapping(value = "/queryy/{pn}", method = RequestMethod.GET)
public String redirect(@RequestParam("serc") String serc, @RequestParam("condition") String condition,
HttpServletRequest request, @PathVariable(value = "pn") String pn, Model model) {
int no = Integer.parseInt(pn);
List<Course> courseList = new ArrayList<Course>();
PageHelper.startPage(no, 5);
request.setAttribute("serc", serc);
request.setAttribute("condition", condition);
if (serc.equals("all")) {
courseList = courseService.selectCourseBySql(1, 10);
pageIn(model, courseList);
request.setAttribute("courseList", courseList);
System.out.println(courseList);
return new ModelAndView(new RedirectView("../fail.jsp"));
}
}
// 学生查询本人选课
@RequestMapping(value = "/endcourse/{sid}/{pn}", method = RequestMethod.GET)
public String endcourse(@PathVariable("sid") String sid, Grade grade, HttpServletRequest request,
@PathVariable(value = "pn") String pn, Model model) {
List<Grade> endCourseList = new ArrayList<Grade>();
endCourseList = gradeService.getEedCourseBySid(1, 10, sid);
pageIn(model, endCourseList);
request.setAttribute("endCourseList", endCourseList);
return "student/endCourse";
}
}
return new ModelAndView(new RedirectView("/StudentInfo/fail.jsp"));
}
}
//删除
@RequestMapping("/delcouplan/{courseclass}/{tid}")
public ModelAndView modityCouPlan(@PathVariable(value = "courseclass") String courseclass,
@PathVariable(value = "tid") String tid, HttpSession httpSession) {
if (coursePlanService.deleteCoursePlan(courseclass) != 0) {
httpSession.removeAttribute("couList");
httpSession.removeAttribute("coursePlanList");
return new ModelAndView(new RedirectView("/StudentInfo/TeacherHandler/managecou/{tid}/1"));
} else {
return new ModelAndView(new RedirectView("/StudentInfo/fail.jsp"));
}
}
}
/**
*
*/
@Controller
@RequestMapping("/AjaxHandler")
public class AjaxHandler {
@Autowired
CourseService courseService;
@Autowired
StudentService studentService;
@Autowired
TeacherService teacherService;
@Autowired
CoursePlanService coursePlanService;
/**
* ajax验证课程编号是否存在
* @param cid
* @param response
* @param request
* @throws IOException
*/
@RequestMapping(value="/existCid",method = RequestMethod.POST)
public void existCid(@RequestParam("cid") String cid,HttpServletResponse response,HttpServletRequest request) throws IOException{
System.out.println("课程编号="+cid);
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
System.out.println(cid+"----------");
PrintWriter out=null;
out=response.getWriter();
if(courseService.getByCouCid(cid) != null && cid !=null && !"".equals(cid)){
} else if (serc.equals("col")) {
courseList = courseService.getByCourseCol(1, 10, condition);
pageIn(model, courseList);
request.setAttribute("courseList", courseList);
System.out.println(courseList);
System.out.println("col");
return "student/selCourse";
} else if (serc.equals("type")) {
courseList = courseService.getByCourseType(1, 10, condition);
pageIn(model, courseList);
request.setAttribute("courseList", courseList);
System.out.println(courseList);
System.out.println("pro");
return "student/selCourse";
} else {
courseList = courseService.selectCourseBySql(1, 10);
pageIn(model, courseList);
request.setAttribute("courseList", courseList);
System.out.println(courseList);
return "student/selCourse";
}
}
// 查询,根据cid查询老师
@RequestMapping(value = "/selcou/{cid}", method = RequestMethod.GET)
public String selCou(@PathVariable(value = "cid") String cid, Model model) {
// 代优化
List<CoursePlan> lists = null;
lists = coursePlanService.getTidByCoursePlanCid(1, 10, cid);
System.out.println("------" + lists.size());
Teacher teacher = new Teacher();
Course course = new Course();
if (lists.size() != 0) {
System.out.println("-----进入选课");
String tid = lists.get(0).getTid();
teacher = teacherService.getByTeaTid(tid);
model.addAttribute("tname", teacher.getTname());
model.addAttribute("inroduction", teacher.getIntroduction());
System.out.println(teacher.getIntroduction() + "-----------------------");
course = courseService.getByCouCid(cid);
model.addAttribute("cname", course.getCname());
model.addAttribute("cid", cid);
return "student/seling";
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
System.out.println("afterCompletion");
}
}
/**
*
* @ProjectName: StudentInfo
* @Package: net.fuzui.StudentInfo.interceptor
* @ClassName: LoginInterceptor
* @Description: 登录拦截器
* @UpdateUser: 王泽
* @UpdateRemark: 新建
* @Version: 1.0
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
Object admin = request.getSession().getAttribute("aname");
if (admin == null) {
System.out.println("尚未登录,调到登录页面");
response.sendRedirect("/StudentInfo/index.jsp");
Object sid = request.getSession().getAttribute("tid");
if (sid == null) {
System.out.println("尚未登录,调到登录页面");
response.sendRedirect("/StudentInfo/index.jsp");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
System.out.println("afterCompletion");
}
}
/**
*
* @ProjectName: StudentInfo
* @Package: net.fuzui.StudentInfo.interceptor
request.setAttribute("cid", cid);
request.setAttribute("cname", cname);
return "teacher/printStudent";
}
// 结课查询页
@RequestMapping(value = "/endcou/{cid}/{cname}/{pn}", method = RequestMethod.GET)
public String endCourse(@PathVariable("cid") String cid, @PathVariable("cname") String cname, Model model,
HttpSession httpSession, @PathVariable(value = "pn") String pn, HttpServletRequest request) {
int no = Integer.parseInt(pn);
PageHelper.startPage(no, 5);
List<Student> lookList = new ArrayList<Student>();
lookList = selectCourseService.getByStuSid(1, 10, cid);
pageIn(model, lookList);
httpSession.setAttribute("lookList", lookList);
model.addAttribute("cname", cname);
request.setAttribute("cid", cid);
request.setAttribute("cname", cname);
return "teacher/endCourse";
}
// 结课成绩查询页
@RequestMapping(value = "/endcougrade/{cid}/{cname}/{pn}", method = RequestMethod.GET)
public String endCourseGrade(@PathVariable("cid") String cid, @PathVariable("cname") String cname, Model model,
HttpSession httpSession, @PathVariable(value = "pn") String pn, HttpServletRequest request) {
int no = Integer.parseInt(pn);
PageHelper.startPage(no, 5);
List<CourseGrade> lookList = new ArrayList<CourseGrade>();
lookList = coursePlanService.getCourseGrade(1, 10, cid);
pageIn(model, lookList);
httpSession.setAttribute("lookList1", lookList);
request.setAttribute("cname", cname);
return "teacher/endCourseGrade";
}
// 添加成绩
@RequestMapping(value = "/addGrade", method = RequestMethod.POST)
public String addGrade(@RequestParam("cid") String cid, @RequestParam("sid") String sid,
/**
* @ProjectName: StudentInfo
* @Package: net.fuzui.StudentInfo.handler
* @ClassName: AdminHandler
* @Description: admin的handler层(servlet)
* @UpdateUser: 王泽
* @UpdateRemark: 新建
* @Version: 1.0
*/
@Controller
@RequestMapping("/LoginHandler")
public class LoginHandler {
/**
*
*/
@Controller
@RequestMapping("/StudentHandler")
public class StudentHandler {
@Autowired
StudentService studentService;
@Autowired
TeacherService teacherService;
@Autowired
CoursePlanService coursePlanService;
@Autowired
CourseService courseService;
@Autowired
SelectCourseService selectCourseService;
@Autowired
GradeService gradeService;
// 查询
@RequestMapping("/queryvitastu/{sid}")
public String queryVita(@PathVariable(value = "sid") String sid, Model model) {
Grade grade = new Grade();
String credits = gradeService.queryCreditsSum(sid);
Student student = new Student();
student = studentService.getByStuSid(sid);
model.addAttribute("sid", student.getSid());
model.addAttribute("sname", student.getSname());
model.addAttribute("sidcard", student.getSidcard());
model.addAttribute("ssex", student.getSsex());
model.addAttribute("spassword", student.getSpassword());
model.addAttribute("sage", student.getSage());
model.addAttribute("classr", student.getClassr());
model.addAttribute("profession", student.getProfession());
model.addAttribute("college", student.getCollege());
model.addAttribute("credits", credits);
request.setAttribute("courseList", courseList);
return "admin/queryCourse";
}
}
//删除学生
@RequestMapping(value = "/delete/{cid}", method = RequestMethod.GET)
public String deleteStudent(@PathVariable(value = "cid") String cid, HttpServletRequest request) {
if (courseService.deleteCourse(cid) != 0) {
System.out.println("success");
queryCou(request);
return "success";
} else {
System.out.println("fail");
return "fail";
}
}
//跳转到queryCourse页面
@RequestMapping(value = "/finalPage", method = RequestMethod.GET)
public String finalPage(HttpSession httpSession,HttpServletRequest request) {
Object admin = request.getSession().getAttribute("courseList");
System.out.println(admin+"111111111111111111111111111111111111111111111111111111111111111111111111111");
return "admin/queryCourse";
}
/**
* 修改课程定位
* @param cid
* @param model
* @return
*/
@RequestMapping(value = "/moditystu/{cid}", method = RequestMethod.GET)
public String editPre(@PathVariable("cid") String cid, HttpServletRequest request) {
List<Course> courseList = new ArrayList<Course>();
courseList = courseService.getByCourseCid(1,10,cid);
request.setAttribute("courseList", courseList);
return "admin/modiCourse";
}
//修改课程信息
@RequestMapping(value = "/moditystud/{cid}", method = RequestMethod.GET)
public String update(@PathVariable("cid") String cid, Course course, Model model) {
if (courseService.modifyCourse(course) != 0) {
return "success";
@Autowired
CourseService courseService;
//添加课程方案
@RequestMapping("/doaddcouplan/{tid}")
public ModelAndView addCoursePlan(CoursePlan coursePlan, Model model,HttpSession httpSession,@PathVariable(value="tid") String tid) {
if (coursePlanService.insertCoursePlan(coursePlan) != 0) {
model.addAttribute("coursePlan", coursePlan);
System.out.println(coursePlan);
return new ModelAndView(new RedirectView("/StudentInfo/TeacherHandler/managecou/{tid}/1"));
//return "success";
} else {
return new ModelAndView(new RedirectView("/StudentInfo/fail.jsp"));
}
}
//查询课程方案
@RequestMapping(value = "/querycouplan/{cid}", method = RequestMethod.GET)
public String deleteStudent(@PathVariable(value = "cid") String cid, Model model, HttpSession session, HttpServletRequest request) {
if(coursePlanService.existsCoursePlan(cid) != null) {
request.setAttribute("msg", "该课程已经有老师代课,无法选择此课程!");
return "fail";
}
model.addAttribute("cid", cid);
System.out.println(cid);
return "teacher/doAddCou";
}
//跳转
@RequestMapping("/addquery/{pn}")
public String adStudent(@PathVariable(value = "pn") String pn,Model model,HttpSession httpSession) {
int no = Integer.parseInt(pn);
List<Course> courseList = new ArrayList<Course>();
PageHelper.startPage(no, 5);
courseList = courseService.selectCourseBySql(1,10);
pageIn(model, courseList);
httpSession.setAttribute("courseList", courseList);
return "teacher/addCou";
}
public void pageIn(Model model,List list) {
PageInfo page = new PageInfo(list, 5);
if (studentService.queryByNamePwd(sid, spassword) != null) {
httpSession.setAttribute("sid", sid);
httpSession.setAttribute("sname", student.getSname());
return new ModelAndView(new RedirectView("../student/studentFace.jsp"));
} else {
httpRequest.setAttribute("msg","账号或密码不正确,登录失败!");
return new ModelAndView(new RedirectView("../fail.jsp"));
}
}
// 学生退出登录
@RequestMapping("/studentlogout")
public ModelAndView studentLogout(HttpSession httpSession) {
httpSession.removeAttribute("sid");
httpSession.removeAttribute("sname");
httpSession.removeAttribute("courseList");
httpSession.removeAttribute("ssrList");
httpSession.removeAttribute("sesList");
return new ModelAndView(new RedirectView("/StudentInfo/index.jsp"));
}
// 教师登录
@RequestMapping("/teacherlogin")
public ModelAndView loginTeacher(@RequestParam("tid") String tid, @RequestParam("tpassword") String tpassword,
Model model, HttpSession httpSession) {
if (teacherService.queryByNamePwd(tid, tpassword) != null) {
Teacher teacher = new Teacher();
teacher = teacherService.getByTeaTid(tid);
// model.addAttribute("tid", tid);
httpSession.setAttribute("tid", tid);
httpSession.setAttribute("tname", teacher.getTname());
// httpSession.setAttribute("teachername", teacher.getTname());
return new ModelAndView(new RedirectView("../teacher/teacherFace.jsp"));
} else {
return new ModelAndView(new RedirectView("../fail.jsp"));
}
}
// 教师退出登录
@RequestMapping("/teacherlogout")
} else if (serc.equals("tid")) {
teacherList = teacherService.getByTeacherTid(1,10,condition);
pageIn(model, teacherList);
request.setAttribute("teacherList", teacherList);
System.out.println("tid");
return "admin/queryTeacher";
} else {
teacherList = teacherService.selectTeacherBySql(1,10);
pageIn(model, teacherList);
request.setAttribute("teacherList", teacherList);
return "admin/queryTeacher";
}
}
//删除教师
@RequestMapping(value = "/deleteTea/{tid}", method = RequestMethod.GET)
public String deleteTeacher(@PathVariable(value = "tid") String tid, Model model) {
if (teacherService.deleteTeacher(tid) != 0) {
System.out.println("success");
//------------------------代优化,现状:删除后需要手动刷新界面或者重新查询,不能实时刷新。---------------------------------------------------
return "success";
} else {
System.out.println("fail");
return "fail";
}
}
@RequestMapping(value = "/finalPageTea", method = RequestMethod.GET)
public String finalPageTea(HttpServletRequest request) {
queryTea(request);
return "admin/queryTeacher";
}
//修改定位,可优化
@RequestMapping(value = "/modityTea/{tid}", method = RequestMethod.GET)
public String editPreTea(@PathVariable("tid") String tid, HttpServletRequest request) {
List<Teacher> teacherList = new ArrayList<Teacher>();
teacherList = teacherService.getByTeacherTid(1,10,tid);
//model.addAttribute("teacherList", teacherList);
/**
*
* @ProjectName: StudentInfo
* @Package: net.fuzui.StudentInfo.interceptor
* @ClassName: TeacherLoginInterceptor
* @Description: 教师登录拦截
* @UpdateUser: 王泽
* @UpdateRemark: 新建
* @Version: 1.0
*/
public class TeacherLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
Object sid = request.getSession().getAttribute("tid");
if (sid == null) {
System.out.println("尚未登录,调到登录页面");
response.sendRedirect("/StudentInfo/index.jsp");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
System.out.println("afterCompletion");
}
// 添加成绩
@RequestMapping(value = "/addGrade", method = RequestMethod.POST)
public String addGrade(@RequestParam("cid") String cid, @RequestParam("sid") String sid,
@RequestParam("grade") Integer grade, Model model, HttpServletRequest request) {
Grade g = new Grade();
g.setCid(cid);
g.setSid(sid);
g.setGrade(grade);
/**
* 根据cid查学分
*/
if(grade >= 60) {
Integer credits = coursePlanService.getCreditsByCid(cid);
g.setCredits(credits);
}
gradeService.insertGrade(g);
System.out.println(g.toString());
return "teacher/endCourse";
}
}
*
* @ProjectName: StudentInfo
* @Package: net.fuzui.StudentInfo.handler
* @ClassName: CourseHandler
* @Description: 课程handler类(servlet)
* @UpdateUser: 王泽
* @UpdateRemark: 新建
* @Version: 1.0
*/
@Controller
@RequestMapping("/CourseHandler")
@SessionAttributes("courseList")
public class CourseHandler {
@Autowired
CourseService courseService;
// 添加课程
@RequestMapping("/addCourse")
public String addCourse(Course course, Model model) {
if (courseService.insertCourse(course) != 0) {
model.addAttribute("course", course);
return "success";
} else {
return "fail";
}
}
public void pageIn(Model model,List list) {
PageInfo page = new PageInfo(list, 5);
model.addAttribute("pageInfo", page);
}
public void queryCou(HttpServletRequest request) {
List<Course> courseList = new ArrayList<Course>();
courseList = courseService.selectCourseBySql(1,10);
request.setAttribute("courseList", courseList);
}
// 查询课程
@RequestMapping(value = "/query/{pn}", method = RequestMethod.GET)
public String redirect(@RequestParam("serc") String serc, @RequestParam("condition") String condition,
HttpServletRequest request,@PathVariable(value = "pn") String pn,Model model) {
int no = Integer.parseInt(pn);
List<Course> courseList = new ArrayList<Course>();
PageHelper.startPage(no, 5);
request.setAttribute("serc", serc);
request.setAttribute("condition", condition);