基于javaweb+mysql的在线考试系统(教师、学生)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
教师:查看考试结果、编辑考试题目
学生:考试答题
老师
学生
技术框架
JSP JavaScript Bootstrap SpringBoot SpringMVC MyBatis
import java.util.List;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import tk.mybatis.mapper.annotation.KeySql;
// 试卷结果(含主观题判分结果)
@Table(name = "paper")
public class PaperAnswer {
@Id
@KeySql(useGeneratedKeys = true)
Integer id;
Integer stuId;
Date time;
String objectiveDetails;// 主观题详细信息
String objectiveScore;// 主观题得分情况
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>试卷一览</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
rel="stylesheet">
<script
src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</head>
<body>
LoginService service;
@RequestMapping("login")
public String login(HttpServletRequest request, String username, String pwd, String role) {
if ((username != null) && (pwd != null)) {
User u = new User();
u.setName(username);
u.setPwd(pwd);
u.setRole(role);
u = service.getUser(u);
if (u != null) {
HttpSession session = request.getSession();
session.setAttribute(Const.SESSION_STU, u);
// 分为学生和管理员
return userMenu(u.getRole());
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getOptiona() {
return optiona;
}
public void setOptiona(String optiona) {
this.optiona = optiona;
}
public String getOptionb() {
return optionb;
}
// 添加(进编辑页面)
// 编辑和添加都会进入同一个界面,区别是编辑会先根据id查找Bean对象传入该界面而添加不会
@RequestMapping("add")
public String addQuestion() {
return Const.PAGE_QUESTION_EDIT;
}
}
package demo.vo;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import tk.mybatis.mapper.annotation.KeySql;
// 试卷结果(含主观题判分结果)
@Table(name = "paper")
<div class="col-lg-2"></div>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>在线考试系统</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
this.list.add(answer);
}
// Getters and Setters
public Integer getId() {
return id;
}
public List<PaperSubjectiveAnswer> getList() {
return list;
}
public void setList(List<PaperSubjectiveAnswer> list) {
this.list = list;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getStuId() {
return stuId;
}
Integer nId = Integer.valueOf(id);
PaperAnswer answerDetail = service.getAnswerDetail(nId);
m.addAttribute("md", answerDetail);
return Const.PAGE_ADMIN_MARK_DETAIL;
}
}
package demo.vo;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import tk.mybatis.mapper.annotation.KeySql;
@Table(name = "question")
public class Question {
public Question() {
}
@Id
@KeySql(useGeneratedKeys = true)
private Integer id;
private String title;
private String optiona;
public User getStu() {
return stu;
}
public void setStu(User stu) {
this.stu = stu;
}
}
package demo.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import demo.utils.Const;
public class QuestionPaper {
private List<QuestionPlus> choices = new ArrayList<>();
private List<QuestionPlus> fillblanks = new ArrayList<>();
private List<QuestionPlus> judgements = new ArrayList<>();
private List<QuestionPlus> writes = new ArrayList<>();
private int rightChoices, rightFillblanks, rightJudgements, rightWrites;
private double score;
private User stu;
private String scoreCalc() {
StringBuffer sb = new StringBuffer();
if (choices.size() != 0) {
sb.append("<br>选择题正确率:" + (double) rightChoices / choices.size());
}
if (fillblanks.size() != 0) {
sb.append("<br>填空题正确率:" + (double) rightFillblanks / fillblanks.size());
private void setUserAnswer(String paraName, String typePrefix, List<QuestionPlus> qList, String userAnswer) {
// 获取试题原始对象
int len = typePrefix.length();
String i = paraName.substring(len);
int paperId = Integer.parseInt(i);// 试题编号
int index = paperId - 1;
QuestionPlus qq = qList.get(index);
// 设置题目编号
qq.setPaperId(paperId);
// 设置用户答案
qq.setStuAnswer(userAnswer);
qList.set(index, qq);
}
@RequestMapping("mark")
public String mark(Model m) {
List<PaperAnswer> paperAnswers = service.selectAllPaperAnswer();
m.addAttribute("list", paperAnswers);
public void setAnswer(String answer) {
this.answer = answer;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getUserAnswer() {
return userAnswer;
}
import demo.vo.PaperAnswer;
import demo.vo.PaperSubjectiveAnswer;
import demo.vo.QuestionPaper;
import demo.vo.QuestionPlus;
import demo.vo.User;
import demo.service.ScoreService;
import demo.utils.Const;
@Controller
@RequestMapping("question")
public class ScoreController {
@Autowired
private ScoreService service;
// 判分
@RequestMapping("score")
public String score(HttpServletRequest request, Model m) {
HttpSession session = request.getSession();
QuestionPaper paper = (QuestionPaper) session.getAttribute(Const.SESSION_PAPER);
List<QuestionPlus> choices = paper.getChoices();
List<QuestionPlus> fillblanks = paper.getFillblanks();
List<QuestionPlus> judgements = paper.getJudgements();
List<QuestionPlus> writes = paper.getWrites();
// --- 获取用户答案 ---
Enumeration<String> names = request.getParameterNames();
allQuestions.remove(nextInt);
}
session.setAttribute("paper", paper);
return Const.PAGE_PAPER;
}
}
package demo.vo;
import demo.utils.Const;
public class QuestionPlus {
private Question q;
private Integer paperId;
private String stuAnswer;
private boolean right;
public Question getQ() {
return q;
return paperId;
}
public void setPaperId(Integer paperId) {
this.paperId = paperId;
}
public String getStuAnswer() {
return stuAnswer;
}
public void setStuAnswer(String stuAnswer) {
this.stuAnswer = stuAnswer;
}
public boolean isRight() {
return right;
}
public void setRight(boolean right) {
this.right = right;