基于SSM实现在校学生考试系统

简介: 基于SSM实现在校学生考试系统

项目编号:BS-GX-018


本系统基于SSM框架实现开发,前端采用BootStrap+Jquery 实现页面的设计与用户的交互。开发工具使用IDEA或Eclipse,数据库采用MYSQL数据库。


在校学生考试系统是一个功能非常完整的系统,界面简洁大方,用户交互性好,完整的包含了在校学生考试需要的相关功能:像题库管理,试卷管理,组卷管理,考试安排管理,在线考试,自动阅卷等功能均包含在内,比较适合做毕业设计使用,如果你选择了它,一定是一个优秀的毕业设计。


本系统角色分为三种:


管理员:可以对各类信息进行管理操作等


教师:主要进行试卷管理,试题管理和安排考试等


学生:主要进行系统参加考试,并进看考试分析结果等


下面一 一为大家展示系统的相关功能。


管理员登陆

image.png

http://localhost:8080/admin/login.jsp      pcs  /  123123

image.png

后台管理主界面:

image.png

年级管理

image.png

科目管理

image.png

班级管理:基本信息管理

image.png

班级管理:各班人数统计

image.png

教师管理:

image.png

学生管理:基本信息管理

image.png

学生管理:学生考试信息管理

image.png

试卷管理:

image.png

试题管理:

image.png

导入试题:

image.png

考试安排:

image.png

image.png

考试记录:

image.png

二,教师登陆系统


lyinping   / 123456

考试登陆系统后一些基本信息只能查看,不能管理,但是可以管理学生、试卷、试题、安排考试,具体功能见管理员操作,不再一一截图。

三,学生登陆系统


user01  / 111111

学生在前台先注册再登陆:

image.png

image.png

进入考试中心进行考试:

image.png

答题考试

image.png

考试历史:回顾试卷

image.png

以上是在校学生考试系统的部分功能展示,所展示的各个功能模块增删改查的功能均能正常运行,功能十分强大,业务非常流畅,是一个难得的优秀系统。

系统实现的核心代码:

package com.taohan.online.exam.handler;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.gson.Gson;
import com.taohan.online.exam.service.ExamPaperInfoService;
import com.taohan.online.exam.service.StudentInfoService;
import com.taohan.online.exam.service.SubjectInfoService;
import com.taohan.online.exam.service.TeacherInfoService;
/**
  *
  * <p>Title: AdminHomeHandler</p>
  * <p>Description: 后台首页相关</p>
  * @version: 1.0
  */
@Controller
public class AdminHomeHandler {
  @Autowired
  ExamPaperInfoService examPaperInfoService;
  @Autowired
  SubjectInfoService subjectInfoService;
  @Autowired
  TeacherInfoService teacherInfoService;
  @Autowired
  StudentInfoService studentInfoService;
  @Autowired
  Gson gson;
  private Logger logger = Logger.getLogger(AdminHomeHandler.class);
  @RequestMapping("/homeInfo")
  public void homeInfo(HttpServletResponse response) throws IOException {
    logger.info("加载后台首页相关数据");
    int examPaperTotal = examPaperInfoService.getExamPpaerTotal();
    int subjectTotal = subjectInfoService.getSubjectTotal();
    int teacherTotal = teacherInfoService.getTeacherTotal();
    int studentTotal = studentInfoService.getStudentTotal();
    String json = "{\"examPaperTotal\":"+examPaperTotal+", " +
        "\"subjectTotal\":"+subjectTotal+", " +
        "\"teacherTotal\":"+teacherTotal+", " +
        "\"studentTotal\":"+studentTotal+"}";
    response.getWriter().print(json);
  }
}
package com.taohan.online.exam.handler;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import com.google.gson.Gson;
import com.taohan.online.exam.charts.StudentCount;
import com.taohan.online.exam.po.ClassInfo;
import com.taohan.online.exam.po.GradeInfo;
import com.taohan.online.exam.po.TeacherInfo;
import com.taohan.online.exam.service.ClassInfoService;
import com.taohan.online.exam.service.GradeInfoService;
import com.taohan.online.exam.service.TeacherInfoService;
/**
  *
  * <p>Title: ClassInfoHandler</p>
  * <p>Description: 班级</p>
  * @version: 1.0
  */
@Controller
@SuppressWarnings("all")
public class ClassInfoHandler {
  @Autowired
  private ClassInfoService classInfoService;
  @Autowired
  private GradeInfoService gradeInfoService;
  @Autowired
  private TeacherInfoService teacherInfoService;
  @Autowired
  private TeacherInfo teacher;
  @Autowired
  private ClassInfo classInfo;
  @Autowired
  private Gson gson;
  private Logger logger = Logger.getLogger(ClassInfoHandler.class);
  /**
   * 获取所有班级
   * @param gradeId 年级编号
   * @param className 班级名称  可用于模糊查询
   * @param classId  班级编号
   * @return
   */
  @RequestMapping(value="/classes", method=RequestMethod.GET)
  public ModelAndView getClasses(@RequestParam(value="gradeId", required=false) Integer gradeId,
      @RequestParam(value="className", required=false) String className,
      @RequestParam(value="classId", required=false) Integer classId) {
    logger.info("获取班级集合 条件:gradeId: "+gradeId+", 班级编号:"+classId+", 班级:"+className);
    ModelAndView model = new ModelAndView();
    ClassInfo classInfo = new ClassInfo();
    /*处理查询条件*/
    if (gradeId != null) {
      GradeInfo gradeInfo = new GradeInfo();
      gradeInfo.setGradeId(gradeId);
      classInfo.setGrade(gradeInfo);
    }
    if (classId != null)
      classInfo.setClassId(classId);
    if (className != null) {
      if (className.trim() != "")
        classInfo.setClassName(className);
    }
    List<ClassInfo> classes = classInfoService.getClasses(classInfo);
    model.setViewName("admin/classes");
    model.addObject("classes", classes);
    return model;
  }
  /**
   * 预添加班级处理
   * @return
   */
  @RequestMapping("/preAddClass")
  public ModelAndView preAddClass() {
    logger.info("预添加班级信息");
    ModelAndView model = new ModelAndView();
    //获取年级信息
    List<GradeInfo> grades = gradeInfoService.getGrades();
    model.setViewName("admin/classedit");
    model.addObject("grades", grades);
    //获取不是班主任的教师
    teacher.setIsWork(0);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("startIndex", null);
    map.put("pageShow", null);
    map.put("teacher", teacher);
    List<TeacherInfo> teachers = teacherInfoService.getTeachers(map);
    model.addObject("teachers", teachers);
    model.addObject("editClass", new ClassInfo());
    return model;
  }
  /**
   * 添加班级
   * @param classInfo 班级信息
   * @param request
   * @return
   */
  @RequestMapping(value="/class", method=RequestMethod.POST)
  public String isAddClass(ClassInfo classInfo, HttpServletRequest request) {
    logger.info("添加班级信息 "+classInfo);
    //修改教师班主任状态
    String returnMsg = isChangeTeacherWork(1, classInfo.getTeacher().getTeacherId());
    if (returnMsg != null) {
      request.setAttribute("error", "修改教师班主任状态 对应教师编号有误");
      return "error";
    }
    //添加
    int row = classInfoService.isAddClass(classInfo);
    if (row < 1) {
      logger.error("班级 "+classInfo+" 删除失败");
      request.setAttribute("error", "班级 "+classInfo.getClassName()+" 添加失败,请稍后再试!");
      return "../error";
    }
    return "redirect:/classes";
  }
  /**
   * 删除班级
   * @param classId 班级编号
   * @param request
   * @return
   */
  @RequestMapping(value="/del/class/{classId}", method=RequestMethod.DELETE)
  public String isDelClass(@PathVariable("classId") Integer classId, HttpServletRequest request) {
    logger.info("删除班级 "+classId);
    //将删除班级对于之前班主任改为 非班主任状态
    //需要在删除班级之前修改,如果先删除了班级,再根据班级获取教师编号,就不能获取
    ClassInfo delClass = classInfoService.getClassById(classId);
    String returnMsg = isChangeTeacherWork(0, delClass.getTeacher().getTeacherId());
    if (returnMsg != null) {
      request.setAttribute("error", "修改教师班主任状态 对应教师编号有误");
      return "error";
    }
    //删除
    int row = classInfoService.isDelClass(classId);
    if (row < 1) {
      logger.error("班级 "+classId+" 删除失败");
      request.setAttribute("error", "班级删除失败,请稍后再试!");
      return "../error";
    }
    return "redirect:/classes";
  }
  /**
   * 预修改班级处理
   * @param classId 班级编号
   * @return
   */
  @RequestMapping(value="edit/class/{classId}", method=RequestMethod.GET)
  public ModelAndView preUpdateClass(@PathVariable("classId") Integer classId) {
    logger.info("预修改班级处理");
    ModelAndView model = new ModelAndView();
    //获取要修改班级
    ClassInfo classInfo = classInfoService.getClassById(classId);
    model.setViewName("/admin/classedit");
    model.addObject("editClass", classInfo);
    List<GradeInfo> grades = gradeInfoService.getGrades();
    //获取不是班主任的教师
    teacher.setIsWork(0);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("startIndex", null);
    map.put("pageShow", null);
    map.put("teacher", teacher);
    List<TeacherInfo> teachers = teacherInfoService.getTeachers(map);
    //如果没有可用班主任
    if (teachers.size() == 0 || teachers == null) {
      teacher.setTeacherId(classInfo.getTeacher().getTeacherId());
      teacher.setTeacherName("暂无剩余教师");
      teachers.add(teacher);
    }
    model.addObject("teachers", teachers);
    model.addObject("grades", grades);
    return model;
  }
  /**
   * 修改班级信息
   * @param classInfo 班级信息
   * @param request
   * @param lastTeacherId  上一个班主任编号,修改其 班主任状态
   * @return
   */
  @RequestMapping(value="edit/class/class", method=RequestMethod.PUT)
  public String isUpdateClass(ClassInfo classInfo, HttpServletRequest request, 
      @RequestParam(value="lastTeacher", required=false) Integer lastTeacherId) {
    //修改上一教师不为班主任状态
    if (lastTeacherId != null) {
      String returnMsg = isChangeTeacherWork(0, lastTeacherId);
      if (returnMsg != null) {
        request.setAttribute("error", "修改教师班主任状态 对应教师编号有误");
        return "/error";
      }
    }
    //修改当前教师为班主任状态
    String returnMsg = isChangeTeacherWork(1, classInfo.getTeacher().getTeacherId());
    if (returnMsg != null) {
      request.setAttribute("error", "修改教师班主任状态 对应教师编号有误");
      return "/error";
    }
    logger.info("修改班级 "+classInfo);
    int row = classInfoService.isUpdateClass(classInfo);
    if (row < 1) {
      logger.error("班级 "+classInfo+" 修改失败");
      request.setAttribute("error", "班级修改失败,请稍后再试!");
      return "../error";
    }
    return "redirect:/classes";
  }
  /**
   * 获取指定年级下的班级
   * @param gradeId 年级编号
   * @param response
   * @throws IOException
   */
  @RequestMapping(value="/gradeclass/{gradeId}", method=RequestMethod.GET)
  public void getClassesByGradeId(@PathVariable("gradeId") Integer gradeId,
      HttpServletResponse response) throws IOException {
    logger.info("获取年级 "+gradeId+" 下的班级集合");
    List<ClassInfo> classes = classInfoService.getClassByGradeId(gradeId);
    String json = gson.toJson(classes);
    response.getWriter().print(json);
  }
  /**
   * 修改教师(班主任)工作状态
   * @param status 是否为班主任标识
   * @param teacherId 教师编号
   */
  private String isChangeTeacherWork(int status, Integer teacherId) {
    logger.info("修改教师 "+teacherId+" 的状态为 "+status);
    teacher.setIsWork(status);
    if (teacherId == null) {
      logger.error("修改教师班主任状态 对应教师编号有误");
      return "修改教师班主任状态 对应教师编号有误";
    }
    teacher.setTeacherId(teacherId);
    int row = teacherInfoService.updateTeacherIsWork(teacher);
    return null;
  }
  @RequestMapping("/stuCount")
  public void getStudentCountForClass(
      @RequestParam(value="gradeId", required=false) Integer gradeId,
      HttpServletResponse response) throws IOException {
    Map<String, Object> map = classInfoService.getStudentCountForClass(gradeId);
    String json = StudentCount.createBarJson(map);
    response.getWriter().print(json);
  }
  /**
   * 预添加班级处理
   * @return
   */
  @RequestMapping("/preStudentCount")
  public ModelAndView preStudentCount() {
    ModelAndView model = new ModelAndView();
    //获取年级信息
    List<GradeInfo> grades = gradeInfoService.getGrades();
    model.setViewName("admin/charts/studentCount");
    model.addObject("grades", grades);
    return model;
  }
}
package com.taohan.online.exam.handler;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import com.taohan.online.exam.po.CourseInfo;
import com.taohan.online.exam.po.GradeInfo;
import com.taohan.online.exam.service.CourseInfoService;
import com.taohan.online.exam.service.GradeInfoService;
/**
  *
  * <p>Title: CourseInfoHandler</p>
  * <p>Description: 科目</p>
  * @version: 1.0
  */
@Controller
@SuppressWarnings("all")
public class CourseInfoHandler {
  @Autowired
  private CourseInfoService courseInfoService;
  @Autowired
  private GradeInfoService gradeInfoService;
  private Logger logger = Logger.getLogger(CourseInfoHandler.class);
  /**
   * 获取科目信息
   * @param gradeId 年级编号
   * @param division 分科情况
   * @return
   */
  @RequestMapping("/courses")
  public ModelAndView getCourses(@RequestParam(value="gradeId", required=false) Integer gradeId,
      @RequestParam(value="division", required=false) Integer division) {
    logger.info("获取科目集合 年级条件 "+gradeId+" 分科条件 "+division);
    ModelAndView model = new ModelAndView();
    model.setViewName("/admin/courses");
    CourseInfo course = new CourseInfo();
    if (gradeId != null)
      course.getGrade().setGradeId(gradeId);
    if (division != null)
      course.setDivision(division);
    List<CourseInfo> courses = courseInfoService.getCourses(course);
    model.addObject("courses", courses);
    return model;
  }
  /**
   * 根据科目编号获取学科信息
   * @param courseId 科目编号
   * @return
   */
  @RequestMapping("/course/{courseId}")
  public ModelAndView getCourseById(@PathVariable("courseId") Integer courseId) {
    logger.info("获取科目信息 科目编号 "+courseId);
    ModelAndView model = new ModelAndView();
    model.setViewName("/admin/courseedit");
    CourseInfo course = courseInfoService.getCourseById(courseId);
    model.addObject("course", course);
    /** 获取所有年级列表 */
    List<GradeInfo> grades = gradeInfoService.getGrades();
    model.addObject("grades", grades);
    return model;
  }
  /**
   * 添加/修改科目信息
   * @param courseId 科目编号
   * @param isUpdate 标识是否为修改操作
   * @param courseName 科目名称
   * @param division 分科情况
   * @param gradeId 年级编号
   * @return
   */
  @RequestMapping(value="/course/course", method=RequestMethod.POST)
  public String isUpdateOrAddCourse(@RequestParam(value="courseId", required=false) Integer courseId,
      @RequestParam(value="isupdate", required=false) Integer isUpdate,
      @RequestParam("courseName") String courseName,
      @RequestParam("division") Integer division,
      @RequestParam("gradeId") Integer gradeId) {
    CourseInfo course = new CourseInfo();
      course.setCourseId(courseId);
      course.setCourseName(courseName);
      course.setDivision(division);
      GradeInfo grade = new GradeInfo();
      grade.setGradeId(gradeId);
      course.setGrade(grade);
    //修改
    if (isUpdate != null) {
      logger.info("修改科目 "+course+" 的信息");
      int row = courseInfoService.isUpdateCourse(course);     
    }
    //添加
    else {
      logger.info("添加科目 "+course+" 的信息");
      int row = courseInfoService.isAddCourse(course);
    }
    return "redirect:/courses";
  }
  /**
   * 删除科目
   * @param courseId 待删除科目编号
   * @return
   */
  @RequestMapping(value="/course/{courseId}", method=RequestMethod.DELETE)
  public String isDelTeacher(@PathVariable("courseId") Integer courseId) {
    logger.info("删除科目 "+courseId);
    int row = courseInfoService.isDelCourse(courseId);
    return "redirect:/courses";
  }
  /**
   * 预添加科目信息
   * @return
   */
  @RequestMapping("/preAddCourse")
  public ModelAndView preAddCourse() {
    logger.info("预添加科目信息");
    ModelAndView model = new ModelAndView();
    model.setViewName("/admin/courseedit");
    /** 获取年级集合 */
    List<GradeInfo> grades = gradeInfoService.getGrades();
    model.addObject("grades", grades);
    return model;
  }
}


相关文章
|
1天前
|
Java 关系型数据库 MySQL
基于SSM的学校在线考试系统的设计与实现
基于SSM的学校在线考试系统的设计与实现
32 2
|
1天前
|
前端开发 Java 关系型数据库
基于ssm框架实现的Java web在线考试系统
基于ssm框架实现的Java web在线考试系统
|
1天前
|
前端开发 Java 关系型数据库
BS-GX-018 基于SSM实现在校学生考试系统
BS-GX-018 基于SSM实现在校学生考试系统
|
6月前
|
安全 前端开发 Java
【开题报告】基于SSM的化工企业安全培训考试系统的设计与实现
【开题报告】基于SSM的化工企业安全培训考试系统的设计与实现
|
11月前
|
JavaScript Java 关系型数据库
ssm中小学信息技术课程考试系统
通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以中小学信息技术课程考试的实际应用需要出发,架构系统来改善现中小学信息技术课程考试工作流程繁琐等问题。不仅如此以操作者的角度来说,该系统的架构能够对多媒体教室进行有效的管理。本系统是利用ssm框架而设计的一款结合用户的实际情况而设计的平台,利用VUE技术来将可供教师和管理员来使用的所有界面来显示出来,利用Java语言技术来编程实现用户和管理员所执行的各类操作业务逻辑,以MySQL数据库来存取系统的数据,以管理员角色登入系统能够更加轻松简易的完成对系统内部所有的数据信息&#xff08;学
|
前端开发 Java 关系型数据库
BS-GX-018 基于SSM实现在校学生考试系统
BS-GX-018 基于SSM实现在校学生考试系统
BS-GX-018 基于SSM实现在校学生考试系统
|
Java 数据安全/隐私保护
基于SSM实现在线考试系统
基于SSM实现在线考试系统
135 1
基于SSM实现在线考试系统
|
Java 关系型数据库 MySQL
Eclipse+Java+SSM+Easyui实现网上考试系统
Eclipse+Java+SSM+Easyui实现网上考试系统
119 0
Eclipse+Java+SSM+Easyui实现网上考试系统
|
Java 关系型数据库 MySQL
假期第二天,给老板写一个基于SSM框架的在线考试系统
本文主要是基于JSP+SSM+MySQL的开发模式。该系统采用Spring框架和Mybatis框架,将该两项技术进行整合,完成系统的开发,系统采用B/S的体系结构和免费的MySQL作为数据库服务器可以降低成本,服务器方面则选择了Apache旗下开源的Tomcat 8.0版本。该系统主要实现了考生的考试功能和后台管理功能。
197 0
假期第二天,给老板写一个基于SSM框架的在线考试系统
|
1天前
|
存储 人工智能 Java
ssm637教材管理系统
ssm637教材管理系统