基于javaweb的在线考试系统(java+ssm+bootstrap+jsp+jquery+mysql)

基于javaweb的在线考试系统(java+ssm+bootstrap+jsp+jquery+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

20220819210204

20220819210205

20220819210206

20220819210207

20220819210208

20220819210210

20220819210211

20220819210212

基于javaweb+mysql的在线考试系统(java+SSM+bootstrap+JSP+jQuery+Mysql)

项目介绍

这个项目是一个基于SSM的在线考试系统,分为考试用户和管理员两种角色。

考试用户功能包括: 个人信息中心 成绩查询 在线答题 我的错题本 我的试卷

管理员功能包括: 试题管理 题型管理 用户管理 年级管理 课程管理 试卷管理

环境需要

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项目:是;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+css+javascriipt+jQuery+bootstrap

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入http://localhost:8080/online_exam_ssm/toLogin.action 登录 学生账户:zhangsan/123456 后管登录地址:http://localhost:8080/online_exam_ssm/admin/login.action 管理员账户:admin/123456

学生管理控制层:

@Controller

public class StuController {

@Autowired

UserService userService;

@Autowired

GradeService gradeService;

//跳转到前台登录页面

@RequestMapping(“/toLogin.action”)

public String toUserLogin(User user, Model model, HttpSession session){

if(session.getAttribute(“userName”)!= null){

return “/user/index.jsp”;

if(session.getAttribute(“user”)== null){

session.setAttribute(“user”, userService.get(user.getUserId()));

List dataList = userService.find(user);

model.addAttribute(“dataList”, dataList);

return “/user/login.jsp”;

/**

  • 前台用户登录

  • @param user

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/user/toIndex.action”)

public String toIndex(User user, Model model, HttpSession session){

if(session.getAttribute(“userName”)!= null){

return “/user/index.jsp”;

}else{

return “forward:/toLogin.action”;

/**

  • 用户账号密码检查

  • @param user

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/checkPwd.action”)

@ResponseBody

public MsgItem checkPwd(User user, Model model, HttpSession session){

MsgItem item = new MsgItem();

User loginUser = userService.login(user);

if(loginUser!=null && loginUser.getUserType() ==0){

if(loginUser.getUserState()==0 ){

item.setErrorNo(“1”);

item.setErrorInfo(“该账号尚未通过审核!”);

}else{

item.setErrorNo(“0”);

item.setErrorInfo(“登录成功!”);

session.setAttribute(“userName”, loginUser.getUserName());

session.setAttribute(“user”, loginUser);

}else{

item.setErrorNo(“1”);

item.setErrorInfo(“账号不存在或用户名密码错误!”);

return item;

@RequestMapping(“/toRegistPage.action”)

public String toRegistPage(Model model, HttpSession session){

List list = gradeService.find(new Grade());

model.addAttribute(“grade”, list);

return “/user/regist.jsp”;

/**

  • 添加用户信息

  • @param user

  • @param model

  • @return

*/

@RequestMapping(“/addUserInfo.action”)

public String addUserInfo(User user, Model model, HttpSession session){

userService.insert(user);

return “redirect:/toLogin.action”;

//跳转到前台登录页面

@RequestMapping(“/toUserInfo.action”)

public String toUserInfo(User user, Model model, HttpSession session){

User loginUser = (User) session.getAttribute(“user”);

user = userService.getStu(loginUser);

Grade grade = gradeService.get(Integer.parseInt(user.getGrade()));

user.setGrade(grade.getGradeName());

model.addAttribute(“user”, user);

return “/user/userinfo.jsp”;

/**

  • 更新学生信息

  • @param user

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/updateUserInfo.action”)

public String updateUserInfo(String newPwd,User user, Model model, HttpSession session){

if(newPwd!= null && newPwd.trim().length()>0){

user.setUserPwd(newPwd);

userService.update(user);

user = userService.get(user.getUserId());

if(session.getAttribute(“user”)== null){

session.setAttribute(“user”, userService.getStu(user));

return “redirect:/user/toIndex.action”;

//跳转到登录页面

@RequestMapping(“/user/exitSys.action”)

public String exitSystem(User user, Model model, HttpSession session){

if(session.getAttribute(“userName”)!= null){

session.removeAttribute(“userName”);

return “redirect:/toLogin.action”;

return “redirect:/toLogin.action”;

//跳转到前台登录页面

@RequestMapping(“/toAbout.action”)

public String toAbout(User user, Model model, HttpSession session){

User loginUser = (User) session.getAttribute(“user”);

model.addAttribute(“user”, loginUser);

return “/user/about.jsp”;

试卷综合管理控制层:

/**

  • 试卷综合管理

*/

@Controller

public class PaperMgController {

@Autowired

UserService userService;

@Autowired

GradeService gradeService;

@Autowired

PaperService paperService;

@Autowired

CourseService courseService;

@Autowired

QuestionService questionService;

@Autowired

ErrorBookService bookService;

//跳转到成绩查询页面

@RequestMapping(“/toScoreQry.action”)

public String toScoreQry(User user, Model model, HttpSession session){

if(“”.equals(user.getUserId()) || user==null){

user = (User) session.getAttribute(“user”);

if(session.getAttribute(“user”)== null){

session.setAttribute(“user”, userService.get(user.getUserId()));

user = userService.getStu(user);

List paper = paperService.getUserPaperById(user.getUserId());

Course course = null;

for(Paper p : paper){

course = courseService.get(Integer.parseInt(p.getCourseId()));

p.setCourseId(course.getCourseName());

model.addAttribute(“user”, user);

model.addAttribute(“paper”, paper);

return “/user/scorequery.jsp”;

/**

  • 查看试卷详情

  • @param paperId

  • @param userId

  • @param model

  • @param session

  • @return

*/

@SuppressWarnings({ “rawtypes”, “unchecked” })

@RequestMapping(“/qrypaper.action”)

public String qrypaper(String paperId,String userId,Model model, HttpSession session){

Map map = new HashMap();

map.put(“paperId”, paperId);

map.put(“userId”, userId);

Paper paper = paperService.getPaperDetail(map);

Question question = null;

String []ids = paper.getQuestionId().split(“,”);

List selList = new ArrayList();

List inpList = new ArrayList();

List desList = new ArrayList();

for(int i = 0;i<ids.length;i++){

question = questionService.get(Integer.parseInt(ids[i]));

if(“1”.equals(question.getTypeId())){//单选

selList.add(question);

if(“4”.equals(question.getTypeId())){//填空

inpList.add(question);

if(“5”.equals(question.getTypeId())){//简答题

desList.add(question);

if(selList.size()>0){

model.addAttribute(“selectQ”, “单项选择题(每题5分)”);

model.addAttribute(“selList”, selList);

if(inpList.size()>0){

model.addAttribute(“inpQ”, “填空题(每题5分)”);

model.addAttribute(“inpList”, inpList);

if(desList.size()>0){

model.addAttribute(“desQ”, “简答题(每题5分)”);

model.addAttribute(“desList”, desList);

model.addAttribute(“paper”, paper);

return “/user/qrypaper.jsp”;

/**

  • 自动评分

  • @param paper

  • @param model

  • @param session

  • @return

  • @throws UnsupportedEncodingException

*/

@SuppressWarnings(“unchecked”)

@RequestMapping(“/dealPaper.action”)

@ResponseBody

public MsgItem dealPaper(Paper paper, Model model, HttpSession session) throws UnsupportedEncodingException{

String paperId = paper.getPaperId();

//答案临时存放

String ans = paper.getScore();

ans = URLDecoder.decode(ans,“UTF-8”);

String [] answer = null;

if(ans.contains(“&”)){

answer = ans.split(“&”);

Map map = new HashMap();

User user = (User) session.getAttribute(“user”);

map.put(“paperId”, paperId);

map.put(“userId”, user.getUserId());

Paper paperInfo = paperService.getPaperDetail(map);

String []ids = paperInfo.getQuestionId().split(“,”);

List question = new ArrayList();

Question ques = null;

int endScore = 0;

ErrorBook book = new ErrorBook();

book.setUserId(user.getUserId());

for(int i = 1 ;i<answer.length;i++){

String[] str = answer[i].split(“=”);

//题号

String str1 = str[0];

ques = questionService.get(Integer.parseInt(str1));

//数据库对应的答案

String answer1 = ques.getAnswer();

if(str.length>1){

//学生的答案

String str2 = str[1];

if(!“5”.equals(ques.getTypeId())){//判断是否为简答题

if(str2.equals(answer1)){//如果用户答案和数据库中的答案一致

endScore+=5;

}else{//插入错题本

book.setQuestion(ques);

book.setCourseId(ques.getCourseId());

book.setGradeId(ques.getGradeId());

book.setUserAnswer(str2);

bookService.insert(book);

if(“5”.equals(ques.getTypeId())){//为简答题的时候

String strA = answer1;

String strB = URLDecoder.decode(str2, “UTF-8”);//转码

//计算相似

double d = Computeclass.SimilarDegree(strA, strB);

BigDecimal bg = new BigDecimal(d*5).setScale(1, RoundingMode.DOWN);

d = bg.doubleValue();

endScore+=d;

if(d<=2){//如果小于2分,认定错误

book.setQuestion(ques);

book.setCourseId(ques.getCourseId());

book.setGradeId(ques.getGradeId());

book.setUserAnswer(str2);

bookService.insert(book);

System.out.println(“最后得分:”+endScore);

SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

Date currentTime = new Date();//得到当前系统时间

String endTime = formatter.format(currentTime); //将日期时间格式化

map.put(“beginTime”, paper.getBeginTime());

map.put(“endTime”, endTime);

map.put(“score”, endScore);

//将考试的试卷状态改为2

map.put(“paperState”, “2”);

paperService.updateUserPaper(map);

if(session.getAttribute(“user”)== null){

session.setAttribute(“user”, user);

MsgItem msgItem = new MsgItem();

msgItem.setErrorNo(“1”);

msgItem.setErrorInfo(“试卷提交成功,本次考试得分:”+endScore +“分”);

return msgItem;

/**

  • 考试页面

  • @param paperId

  • @param userId

  • @param model

  • @param session

  • @return

*/

@SuppressWarnings({ “rawtypes”, “unchecked” })

@RequestMapping(“/qryPaperDetail.action”)

public String qryPaperDetail(String paperId,String userId,Model model, HttpSession session){

Map map = new HashMap();

map.put(“paperId”, paperId);

map.put(“userId”, userId);

Paper paper = paperService.getPaperDetail(map);

Question question = null;

String []ids = paper.getQuestionId().split(“,”);

List selList = new ArrayList();

List inpList = new ArrayList();

List desList = new ArrayList();

for(int i = 0;i<ids.length;i++){

question = questionService.get(Integer.parseInt(ids[i]));

if(“1”.equals(question.getTypeId())){//单选

selList.add(question);

if(“4”.equals(question.getTypeId())){//填空

inpList.add(question);

if(“5”.equals(question.getTypeId())){//简答题

desList.add(question);

if(selList.size()>0){

model.addAttribute(“selectQ”, “单项选择题(每题5分)”);

model.addAttribute(“selList”, selList);

if(inpList.size()>0){

model.addAttribute(“inpQ”, “填空题(每题5分)”);

model.addAttribute(“inpList”, inpList);

if(desList.size()>0){

model.addAttribute(“desQ”, “简答题(每题5分)”);

model.addAttribute(“desList”, desList);

model.addAttribute(“paper”, paper);

return “/user/paperdetail.jsp”;

/**

  • 获取未考试试卷,并将为考试的试卷添加用户信息

  • @param user

  • @param model

  • @param session

  • @return

*/

@SuppressWarnings({ “unchecked”, “rawtypes” })

@RequestMapping(“/toMyPaperPage.action”)

public String toMyPaperPage(User user,Model model, HttpSession session){

if(“”.equals(user.getUserId()) || user.getUserId()==null){

user = (User) session.getAttribute(“user”);

if(session.getAttribute(“user”)== null){

session.setAttribute(“user”, userService.get(user.getUserId()));

user = userService.getStu(user);

Map map =new HashMap();

map.put(“userId”, user.getUserId());

//List paper = paperService.getUserPaperById(user.getUserId());

List paper1 = paperService.getUndoPaper(map);

Course course = null;

for(Paper p : paper1){

course = courseService.get(Integer.parseInt(p.getCourseId()));

p.setUserId(user.getUserId());

p.setPaperstate(“1”);

paperService.insert§;

p.setCourseId(course.getCourseName());

List paper = paperService.qryUndoPaper(map);

for(Paper p : paper){

course = courseService.get(Integer.parseInt(p.getCourseId()));

p.setCourseId(course.getCourseName());

model.addAttribute(“user”, user);

model.addAttribute(“paper”, paper);

return “/user/mypaper.jsp”;

课程管理控制层:

@Controller

public class CourseController {

@Autowired

CourseService courseService;

/**

  • 跳转到课程页面

  • @param course

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/toCoursePage.action”)

public String toCoursePage(@RequestParam(value=“page”, defaultValue=“1”) int page,

Course course,Model model, HttpSession session){

//List dataList = courseService.find(course);

PageInfo pageInfo = courseService.findByPage(course, page, 5);

List dataList = pageInfo.getList();

model.addAttribute(“dataList”, dataList);

model.addAttribute(“pageInfo”, pageInfo);

return “/admin/course-mgt.jsp”;

@RequestMapping(“/qryCoursePage.action”)

@ResponseBody

public List qryCoursePage(@RequestParam(value=“page”, defaultValue=“1”) int page,

Course course,Model model, HttpSession session){

//List dataList = courseService.find(course);

PageInfo pageInfo = courseService.findByPage(course, page, 5);

List dataList = pageInfo.getList();

model.addAttribute(“dataList”, dataList);

model.addAttribute(“pageInfo”, pageInfo);

return dataList;

/**

  • 删除课程信息

  • @param courseId 课程编号,删除多个是,id用逗号分隔开

  • @param model

  • @return

*/

@RequestMapping(“/deleteCourse.action”)

public String deleteCourse(String courseId, Model model){

if(courseId != null){

String ids[] = courseId.split(“,”);

for(int i=0;i<ids.length;i++){

courseService.delete(Integer.parseInt(ids[i]));

return “redirect:/toCoursePage.action”;

/**

  • 跳转到添加课程信息页面

  • @param course

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/toAddCourse.action”)

public String toAddType(Course course, Model model, HttpSession session){

List dataList = courseService.find(course);

model.addAttribute(“dataList”, dataList);

return “/admin/course-reg.jsp”;

/**

  • 添加课程信息

  • @param user

  • @param model

  • @return

*/

@RequestMapping(“/addCourse.action”)

public String addType(Course course, Model model){

course.setCourseState(“0”);

courseService.insert(course);

return “redirect:/toCoursePage.action”;

/**

  • 查看题型信息

  • @param type

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/toQryCourse.action”)

public String toQryType(int courseId, Model model, HttpSession session){

Course courseInfo = courseService.get(courseId);

model.addAttribute(“course”, courseInfo);

return “/admin/course-qry.jsp”;

/**

  • 跳转到更新题型信息页面

  • @param type

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/toUpdCourse.action”)

public String toUpdType(int courseId, Model model, HttpSession session){

Course courseInfo = courseService.get(courseId);

model.addAttribute(“course”, courseInfo);

return “/admin/course-upd.jsp”;

/**

  • 更新题型信息

  • @param type

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/updCourse.action”)

public String updType(Course course, Model model, HttpSession session){

courseService.update(course);

return “redirect:/toCoursePage.action”;

/**

  • 删除题型信息

  • @param type

  • @param model

  • @param session

  • @return

*/

@RequestMapping(“/delCourse.action”)

public String delCourse(int courseId, Model model, HttpSession session){

courseService.delete(courseId);

return “redirect:/toCoursePage.action”;


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要II Abstract III 第一章 引言 1 1.1 课题背景 1 1.2 课题目的和意义 1 1.3 本文结构 1 第二章 系统应用的关键技术 2 2.1 JSP技术介绍 2 2.1.1 JSP的概述 2 2.1.3 JSP的强势与劣势 3 2.1.4 JSP与ASP的比较 3 2.2 Java组件JavaBeans 4 2.2.1 什么是JavaBeans 4 2.2.2 JSPJavaBeans的关系 4 2.3 J2EE概述 4 2.4关于Struts 5 2.4.1 Struts简介 5 2.4.2 Struts的主要功能 5 2.4.3 Struts工作原理 6 2.5 关于Spring 7 2.5.1 Spring简介 7 2.5.2 为什么需要Spring 8 2.5.3 Spring带给我们什么 8 2.6 关于B/S开发模式 9 2.6.1为什么引入B/S开发模式 9 2.7.1 mysql的特点 9 2.7.2 mysql的安装和配置(部分截图)[12] 10 2.8 Tomcat服务器 12 2.8.1 Tomcat 服务器简介 12 2.8.2 Tomcat的特点 12 2.8.3 Tomcat的优势 12 2.8.4 Tomcat服务器的安装和配置 12 小结 13 第三章 系统需求分析和总体设计 14 3.1 系统功能需求 14 3.2 系统角色及其功能分析 14 3.2.1 系统的2个角色: 14 3.2.2 系统角色的功能 14 3.3 总体设计思想概述 15 3.4 数据库设计 16 3.4.1 E-R图 16 3.4.2数据表的设计 16 3.5 系统的类设计 18 3.5.1 DAO类设计 18 3.5.2 connDB类设计(部分) 18 3.5.3 过滤器类设计 19 3.5.4 监听器类设计 19 3.6系统的用例图 20 3.6.1 总体用例分析 20 3.6.2 用户管理用例分析 21 3.6.3 考试管理用例分析 21 3.6.4 考试题目管理用例分析 22 3.6.5 成绩管理用例分析 22 小结 22 第四章 系统的详细设计 23 4.1 数据库与connDB类映射的实现 23 4.2 主要模块的设计说明与界面 24 4.2.1用户管理模块 24 4.2.2考试管理模块 29 4.2.3 题目管理模块 31 4.3 系统的测试 37 小结 38 第五章 总结与展望 38 5.1 工作总结 38 5.2 后续工作展望 39 参考文献 40 附录 41 致谢 44
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值