基于javaweb+mysql的ssm+maven在线高中考试系统(java+ssm+jsp+mysql+maven)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven在线高中考试系统(java+ssm+jsp+mysql+maven)
项目分为前台和后台,前台主要为学生角色、后台主要为管理员角色。
管理员添加试题和发布试卷,学生负责在线考试、在线查看成绩和错题记录列表等。
管理员功能有:年级管理、课程管理、试题管理、试卷管理、学生管理等。
运行环境:jdk1.8、mysql5.x、eclipse、tomcat8.5\7.0、maven3.5\3.6。
if(inpList.size()>0){
Type type = typeService.get(8);
model.addAttribute("inpQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("inpList", inpList);
}
if(desList.size()>0){
Type type = typeService.get(9);
model.addAttribute("desQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("desList", desList);
}
model.addAttribute("paper", paper);
session.setAttribute("active", "paper");
return "/user/paperdetail";
}
/**
* 获取未考试试卷,并将为考试的试卷添加用户信息
* @param user
* @param model
* @param session
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping("/toMyPaperPage.action")
public String toMyPaperPage(User user,Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
String gradeId = loginUser.getGrade();
Grade grade = gradeService.get(Integer.parseInt(gradeId));
Map map =new HashMap();
map.put("userId", loginUser.getUserId());
map.put("gradeId", gradeId);
map.put("courseId", grade.getCourseId());
List<Paper> paper1 = paperService.getUndoPaper(map);
Map<String, Object> queryMap = new HashMap<>();
queryMap.put("userId", loginUser.getUserId());
Course course = null;
for(Paper p : paper1){
queryMap.put("paperName", p.getPaperName());
Paper findByMap = paperService.findByMap(queryMap);
if(findByMap==null) {
p.setUserId(String.valueOf(loginUser.getUserId()));
p.setPaperstate("1");
paperService.insert(p);
}
}
List<Paper> paperList = paperService.qryUndoPaper(queryMap);
for(Paper p:paperList) {
Type type = typeService.get(9);
model.addAttribute("desQ", type.getTypeName()+"("+type.getScore()+")");
model.addAttribute("desList", desList);
}
model.addAttribute("paper", paper);
return "/user/test_paper";
}
/**
* 自动评分
* @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{
User user = (User) session.getAttribute("user");
if(user==null) {
return MsgItem.error("请先登录");
}
int 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();
map.put("paperId", paperId);
map.put("userId", user.getUserId());
Paper paperInfo = paperService.getPaperDetail(map);
String []ids = paperInfo.getQuestionId().split(",");
List<Question> question = new ArrayList<Question>();
Question ques = null;
int endScore = 0;
ErrorBook book = new ErrorBook();
book.setUserId(String.valueOf(user.getUserId()));
for(int i = 2 ;i<answer.length;i++){
String[] str = answer[i].split("=");
//题号
String str1 = str[0];
courseService.insert(course);
return MsgItem.success("课程添加成功");
}
/**
* 查看课程信息
* @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";
}
/**
* 跳转到更新课程信息页面
* @param type
* @param model
* @param session
* @return
*/
@RequestMapping("/toUpdCourse.action")
public String toUpdCourse(int courseId, Model model, HttpSession session){
Course courseInfo = courseService.get(courseId);
model.addAttribute("course", courseInfo);
return "/admin/course/edit";
}
/**
* 更新课程信息
* @param type
* @param model
* @param session
* @return
*/
@ResponseBody
@RequestMapping("/editCourse.action")
public MsgItem editCourse(@Validated Course course,BindingResult bindingResult ,HttpSession session){
if(bindingResult.hasErrors()) {
return MsgItem.error("请填写正确的数据");
}
Course findByName = courseService.findByName(course.getCourseName());
if(findByName!=null) {
public class PaperMgController {
@Autowired
UserService userService;
@Autowired
GradeService gradeService;
@Autowired
PaperService paperService;
@Autowired
CourseService courseService;
@Autowired
QuestionService questionService;
@Autowired
ErrorBookService bookService;
@Autowired
private TypeService typeService;
//跳转到成绩查询页面
@RequestMapping("/toScoreQry.action")
public String toScoreQry(User user, Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
List<Paper> paper = paperService.getUserPaperById(loginUser.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);
session.setAttribute("active", "score");
return "/user/scorequery";
}
/**
* 查看试卷详情
* @param paperId
* @param userId
* @param model
* @param session
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@RequestMapping("/historyPaper.action")
public String qrypaper(String paperId,String userId,Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
Map map = new HashMap();
map.put("paperId", paperId);
@Autowired
GradeService gradeService;
@Autowired
PaperService paperService;
@Autowired
CourseService courseService;
@Autowired
QuestionService questionService;
@Autowired
ErrorBookService bookService;
@Autowired
private TypeService typeService;
//跳转到成绩查询页面
@RequestMapping("/toScoreQry.action")
public String toScoreQry(User user, Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
List<Paper> paper = paperService.getUserPaperById(loginUser.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);
session.setAttribute("active", "score");
return "/user/scorequery";
}
/**
* 查看试卷详情
* @param paperId
* @param userId
* @param model
* @param session
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@RequestMapping("/historyPaper.action")
public String qrypaper(String paperId,String userId,Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
Map map = new HashMap();
map.put("paperId", paperId);
map.put("userId", loginUser.getUserId());
Paper paper = paperService.getPaperDetail(map);
if(inpList.size()>0){
Type type = typeService.get(8);
model.addAttribute("inpQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("inpList", inpList);
}
if(desList.size()>0){
Type type = typeService.get(9);
model.addAttribute("desQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("desList", desList);
}
model.addAttribute("paper", paper);
session.setAttribute("active", "paper");
return "/user/paperdetail";
}
/**
* 获取未考试试卷,并将为考试的试卷添加用户信息
* @param user
* @param model
* @param session
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping("/toMyPaperPage.action")
public String toMyPaperPage(User user,Model model, HttpSession session){
User loginUser = (User) session.getAttribute("user");
if(loginUser==null) {
return "redirect:../../index/toLogin.action";
}
String gradeId = loginUser.getGrade();
Grade grade = gradeService.get(Integer.parseInt(gradeId));
Map map =new HashMap();
map.put("userId", loginUser.getUserId());
map.put("gradeId", gradeId);
map.put("courseId", grade.getCourseId());
List<Paper> paper1 = paperService.getUndoPaper(map);
Map<String, Object> queryMap = new HashMap<>();
queryMap.put("userId", loginUser.getUserId());
Course course = null;
for(Paper p : paper1){
queryMap.put("paperName", p.getPaperName());
Paper findByMap = paperService.findByMap(queryMap);
if(findByMap==null) {
p.setUserId(String.valueOf(loginUser.getUserId()));
p.setPaperstate("1");
paperService.insert(p);
}
}
List<Paper> paperList = paperService.qryUndoPaper(queryMap);
for(Paper p:paperList) {
/**
* 跳转到试卷管理页面
* @param course
* @param model
* @param session
* @return
*/
@RequestMapping("/toPaperPage.action")
public String toPaperPage(@RequestParam(value="page", defaultValue="1") int page,
Paper paper,Model model, HttpSession session){
PageInfo<Paper> pageInfo = paperService.findAllPage(paper, page, 5);
List<Paper> dataList = pageInfo.getList();
Course course=null;
for(Paper g : dataList){
String courseName= "";
String id = g.getCourseId();
if(id != null){
String ids[] = id.split(",");
for(int i=0;i<ids.length;i++){
course = courseService.get(Integer.parseInt(ids[i]));
courseName+=course.getCourseName()+",";
}
}
//判断最后一个字符是否为逗号,若是截取
String str = courseName.substring(courseName.length() -1, courseName.length());
if(",".equals(str)){
str = courseName.substring(0, courseName.length()-1);
}else{
str = courseName;
}
g.setCourseId(str);
Grade grade = gradeService.get(Integer.valueOf(g.getGradeId()));
g.setGradeId(grade.getGradeName());
}
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return "/admin/paper/list";
}
/**
* 跳转到试卷管理页面
* @param course
public String toQuestionPage(@RequestParam(value="page", defaultValue="1") int page,
Question question,Model model, HttpSession session){
PageInfo<Question> pageInfo = questionService.findByPage(question, page, 5);
List<Question> dataList = pageInfo.getList();
Course course=null;
Type type=null;
for(Question que : dataList){
String courseName= "";
String typeName="";
course = courseService.get(Integer.parseInt(que.getCourseId()));
type = typeService.get(Integer.parseInt(que.getTypeId()));
courseName=course.getCourseName();
typeName=type.getTypeName();
que.setCourseId(courseName);
que.setTypeId(typeName);
}
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return "/admin/question/list";
}
/**
* 跳转到题库管理页面
* @param question
* @param model
* @param session
* @return
*/
@RequestMapping("/quesPage.action")
@ResponseBody
public List<Question> quesPage(@RequestParam(value="page", defaultValue="1") int page,
Question question,Model model, HttpSession session){
PageInfo<Question> pageInfo = questionService.findByPage(question, page, 5);
List<Question> dataList = pageInfo.getList();
Course course=null;
Type type=null;
for(Question que : dataList){
String courseName= "";
String typeName="";
course = courseService.get(Integer.parseInt(que.getCourseId()));
type = typeService.get(Integer.parseInt(que.getTypeId()));
courseName=course.getCourseName();
typeName=type.getTypeName();
que.setCourseId(courseName);
que.setTypeId(typeName);
}
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return dataList;
}
/**
* 试卷综合管理
*
*/
@RequestMapping("/home/paper")
@Controller
public class PaperMgController {
@Autowired
UserService userService;
@Autowired
GradeService gradeService;
@Autowired
PaperService paperService;
@Autowired
CourseService courseService;
@Autowired
QuestionService questionService;
@Autowired
ErrorBookService bookService;
@Autowired
private TypeService typeService;
@Autowired
PaperService paperService;
@Autowired
CourseService courseService;
@Autowired
TypeService typeService;
@Autowired
GradeService gradeService;
@Autowired
QuestionService questionService;
/**
* 跳转到试卷管理页面
* @param course
* @param model
* @param session
* @return
*/
@RequestMapping("/toPaperPage.action")
public String toPaperPage(@RequestParam(value="page", defaultValue="1") int page,
Paper paper,Model model, HttpSession session){
PageInfo<Paper> pageInfo = paperService.findAllPage(paper, page, 5);
List<Paper> dataList = pageInfo.getList();
Course course=null;
for(Paper g : dataList){
String courseName= "";
String id = g.getCourseId();
if(id != null){
String ids[] = id.split(",");
for(int i=0;i<ids.length;i++){
course = courseService.get(Integer.parseInt(ids[i]));
courseName+=course.getCourseName()+",";
}
}
//判断最后一个字符是否为逗号,若是截取
String str = courseName.substring(courseName.length() -1, courseName.length());
if(",".equals(str)){
str = courseName.substring(0, courseName.length()-1);
}else{
str = courseName;
}
g.setCourseId(str);
/**
* 试题类型管理
*
*/
@RequestMapping("/admin/type")
@Controller
public class TypeController {
@Autowired
TypeService typeService;
@RequestMapping("/toTypePage.action")
public String toTypePage(@RequestParam(value="page", defaultValue="1") int page,
Type type,Model model, HttpSession session){
PageInfo<Type> pageInfo = typeService.findByPage(type, page, 5);
List<Type> dataList = pageInfo.getList();
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return "/admin/type/list";
}
/**
* 题型类型分页数据
* @param page
* @param type
* @param model
* @param session
* @return
public class GradeController {
@Autowired
GradeService gradeService;
@Autowired
CourseService courseService;
/**
* 跳转到年级页面
* @param course
* @param model
* @param session
* @return
*/
@RequestMapping("/toGradePage.action")
public String toGradePage(@RequestParam(value="page", defaultValue="1") int page,
Grade grade,Model model, HttpSession session){
PageInfo<Grade> pageInfo = gradeService.findByPage(grade, page, 5);
List<Grade> dataList = pageInfo.getList();
Course course=null;
for(Grade g : dataList){
String courseName= "";
String id = g.getCourseId();
if(id != null){
String ids[] = id.split(",");
for(int i=0;i<ids.length;i++){
course = courseService.get(Integer.parseInt(ids[i]));
courseName+=course.getCourseName()+",";
}
}
//判断最后一个字符是否为逗号,若是截取
String str = courseName.substring(courseName.length() -1, courseName.length());
if(",".equals(str)){
str = courseName.substring(0, courseName.length()-1);
}else{
str = courseName;
}
g.setCourseId(str);
}
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return "/admin/grade/list";
}
@RequestMapping("/qryAllGrade.action")
@ResponseBody
public List<Grade> qryAllGrade(@RequestParam(value="page", defaultValue="1") int page,
Grade grade,Model model, HttpSession session){
PageInfo<Grade> pageInfo = gradeService.findByPage(grade, page, 5);
List<Grade> dataList = pageInfo.getList();
Course course=null;
for(Grade g : dataList){
String courseName= "";
model.addAttribute("grade", gradeService.find(new Grade()));
model.addAttribute("type", typeService.find(new Type()));
return "/admin/paper/add";
}
/**
* 新增试卷
* @param paper
* @param model
* @param session
* @return
*/
@ResponseBody
@SuppressWarnings("unchecked")
@RequestMapping("/addPaper.action")
public MsgItem addPaper(@Validated Paper paper,@RequestParam int selectNum,@RequestParam int inputNum,
@RequestParam int descNum, HttpSession session,BindingResult bindingResult){
if(bindingResult.hasErrors()) {
return MsgItem.error("请填写正确的数据");
}
String paperName = paper.getPaperName();
if(paperService.findByName(paperName)!=null) {
return MsgItem.error("试卷名称已存在");
}
Map map = new HashMap();
List<Question> selectList = null;
List<Question> inputList = null;
List<Question> descList = null;
List<Question> paperList = new ArrayList<Question>();
map.put("gradeId", paper.getGradeId());
map.put("courseId", paper.getCourseId());
if(selectNum>0){//选择题
map.put("num", selectNum);
map.put("typeId",7);
selectList = questionService.createPaper(map);
paperList.addAll(selectList);
}
if(inputNum>0){//填空题
map.put("num", inputNum);
map.put("typeId", 8);
inputList = questionService.createPaper(map);
paperList.addAll(inputList);
}
if(descNum > 0 ){//描述题
map.put("num", descNum);
map.put("typeId", 9);
descList = questionService.createPaper(map);
paperList.addAll(descList);
}
//跳转到后台首页面
@RequestMapping("/toIndex.action")
public String toIndex(Model model, HttpSession session) {
return "/admin/index";
}
/**
* 后台登录操作
*
* @param session
* @return
*/
@ResponseBody
@RequestMapping("/userLogin.action")
public MsgItem checkUser(User user, Model model, HttpSession session) {
if (StringUtils.isEmpty(user.getUserName())) {
return MsgItem.error("请填写用户名");
}
if (StringUtils.isEmpty(user.getUserPwd())) {
return MsgItem.error("请填写密码");
}
User loginUser = userService.loginCheck(user);
if (loginUser == null) {
return MsgItem.error("用户名或密码错误");
}
if (loginUser.getUserType() != 2) {
return MsgItem.error("用户类型不匹配");
}
session.setAttribute("adminName", loginUser.getUserName());
session.setAttribute("adminUser", loginUser);
return MsgItem.success("登录成功");
}
/**
* 判断账户信息是否存在
*
* @param name
* @return
*/
@RequestMapping("/checkAccount.action")
public String checkAccount(String userId, Model model) {
User userInfo = userService.get(userId);
if (userInfo != null) {
model.addAttribute("message", "该账号已经存在");
} else {
model.addAttribute("message", "<font color='green'>验证通过</font>");
}
model.addAttribute("userId", userId);
Question question = null;
String []ids = paper.getQuestionId().split(",");
List<Question> selList = new ArrayList<Question>();
List<Question> inpList = new ArrayList<Question>();
List<Question> desList = new ArrayList<Question>();
for(int i = 0;i<ids.length;i++){
question = questionService.get(Integer.parseInt(ids[i]));
if("7".equals(question.getTypeId())){//单选
selList.add(question);
}
if("8".equals(question.getTypeId())){//填空
inpList.add(question);
}
if("9".equals(question.getTypeId())){//简答题
desList.add(question);
}
}
if(selList.size()>0){
Type type = typeService.get(7);
model.addAttribute("selectQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("selList", selList);
}
if(inpList.size()>0){
Type type = typeService.get(8);
model.addAttribute("inpQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("inpList", inpList);
}
if(desList.size()>0){
Type type = typeService.get(9);
model.addAttribute("desQ", type.getTypeName()+"("+type.getScore()+"分)");
model.addAttribute("desList", desList);
}
model.addAttribute("paper", paper);
session.setAttribute("active", "paper");
return "/user/paperdetail";
}
/**
* 获取未考试试卷,并将为考试的试卷添加用户信息
* @param user
* @param model
* @param session
/**
* 试题类型管理
*
*/
@RequestMapping("/admin/type")
@Controller
public class TypeController {
@Autowired
TypeService typeService;
@RequestMapping("/toTypePage.action")
public String toTypePage(@RequestParam(value="page", defaultValue="1") int page,
Type type,Model model, HttpSession session){
PageInfo<Type> pageInfo = typeService.findByPage(type, page, 5);
List<Type> dataList = pageInfo.getList();
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return "/admin/type/list";
}
/**
* 题型类型分页数据
* @param page
* @param type
* @param model
* @param session
* @return
*/
@RequestMapping("/typeListPage.action")
@ResponseBody
public List<Type> qryTypePage(@RequestParam(value="page", defaultValue="1") int page,
Type type,Model model, HttpSession session){
PageInfo<Type> pageInfo = typeService.findByPage(type, page, 5);
List<Type> dataList = pageInfo.getList();
model.addAttribute("dataList", dataList);
model.addAttribute("pageInfo", pageInfo);
return dataList;
@ResponseBody
public MsgItem dealPaper(Paper paper, Model model, HttpSession session) throws UnsupportedEncodingException{
User user = (User) session.getAttribute("user");
if(user==null) {
return MsgItem.error("请先登录");
}
int 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();
map.put("paperId", paperId);
map.put("userId", user.getUserId());
Paper paperInfo = paperService.getPaperDetail(map);
String []ids = paperInfo.getQuestionId().split(",");
List<Question> question = new ArrayList<Question>();
Question ques = null;
int endScore = 0;
ErrorBook book = new ErrorBook();
book.setUserId(String.valueOf(user.getUserId()));
for(int i = 2 ;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(!"9".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("9".equals(ques.getTypeId())){//为简答题的时候