基于javaweb的SpringBoot在线考试系统(java+springboot+vue+mysql+maven)

运行环境

Java≥8、MySQL≥5.7、Node.js≥14

开发工具

后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可

❗没学过node.js的不要搞前后端分离项目

适用

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

功能说明

222223270309

232223270309

252223270309

262223270309

272223270309

282223270309

292223270309

302223270309

312223270309

322223270309

基于javaweb的SpringBoot在线考试系统(java+springboot+vue+mysql+maven)

线上考试前端系统

介绍

  • 本系统通过教师用户创建班级编写试卷信息然后发布到班级。学生用户进入班级,在线作答,考试结果数据通过网络回收,系统自动进行判分,生成考试成绩和统计数据。教师用户也可以再次批阅试卷,确定最后得分。
  • 试卷支持单选、多选、判断、填空、简答五大题型,可以选项是否允许题目复制、题目乱序功能、是否启动自动批改功能

软件架构

  • 这是一款基于前后端分离的线上考试系统
  • 前端采用vue框架,搭配vue-cli、axios、vuex、element-ui组件库。
  • 后端采用springBoot框架、jwt、swagger、持久层mybatis,mysql数据库。

环境运行

  • node.js v14.6.0
  • jdk 1.8
  • mysql 8.0.22

前端启动命令:npm run serve

老师(管理员):
13000000000 123456

学生:
注册即可

前端前修改后端application.properties中的web.uploadpath配置,指向本机的实际位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    page.build((List) result.getData());
return ResultUtil.success(page);
}

@ApiOperation(value = "获取班级下的试卷列表")
@GetMapping("/getExamByClasses")
public Msg getExamByClassesId(HttpServletRequest request,@RequestParam Integer classesId,@RequestParam int pageSize,@RequestParam int currentPage){
String token = request.getHeader("token");

//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

Msg result = examService.selectByClassesId(classesId, u_id);
Page page = new Page(pageSize,currentPage);
page.build((List) result.getData());
return ResultUtil.success(page);
}

@ApiOperation(value = "获取学生已完成的试卷列表")
@GetMapping("/getFinishExam")
public Msg getFinishExam(HttpServletRequest request,@RequestParam int pageSize,@RequestParam int currentPage){
String token = request.getHeader("token");

//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return examService.selectFinishExamList(u_id, pageSize,currentPage);
}

//通过试卷id获取试卷信息(教师角色)
@ApiOperation(value = "获取试卷信息(教师角色)")
@GetMapping("/getTestPaperByTp_id")
public Msg getTestPaperByTp_id(HttpServletRequest request,@RequestParam int examId){
String token = request.getHeader("token");
if(!JwtUtil.getUserStatus(token).equals("teacher")){
return ResultUtil.error(400,"用户身份不正确");
}
int userId = Integer.parseInt(JwtUtil.getUserId(token));
return examService.tchSelectByPrimaryKey(userId,examId);
}

//通过试卷id,班级id获取试卷信息(学生角色)
@ApiOperation(value = "获取试卷信息(学生角色)")
@GetMapping("/getTestPaper")
public Msg getTestPaper(HttpServletRequest request,@RequestParam int examId ,@RequestParam int classesId){
String token = request.getHeader("token");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    if(keyword == null){
keyword = "";
}
String token = request.getHeader("token");
//获取token中的id
int u_id=Integer.parseInt(Objects.requireNonNull(JwtUtil.getUserId(token)));

Msg result = examService.selectByCreatorId(u_id,keyword);
Page page = new Page(pageSize,currentPage);
page.build((List) result.getData());
return ResultUtil.success(page);
}

@ApiOperation(value = "获取班级下的试卷列表")
@GetMapping("/getExamByClasses")
public Msg getExamByClassesId(HttpServletRequest request,@RequestParam Integer classesId,@RequestParam int pageSize,@RequestParam int currentPage){
String token = request.getHeader("token");

//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

Msg result = examService.selectByClassesId(classesId, u_id);
Page page = new Page(pageSize,currentPage);
page.build((List) result.getData());
return ResultUtil.success(page);
}

@ApiOperation(value = "获取学生已完成的试卷列表")
@GetMapping("/getFinishExam")
public Msg getFinishExam(HttpServletRequest request,@RequestParam int pageSize,@RequestParam int currentPage){
String token = request.getHeader("token");

//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return examService.selectFinishExamList(u_id, pageSize,currentPage);
}

//通过试卷id获取试卷信息(教师角色)
@ApiOperation(value = "获取试卷信息(教师角色)")
@GetMapping("/getTestPaperByTp_id")
public Msg getTestPaperByTp_id(HttpServletRequest request,@RequestParam int examId){
String token = request.getHeader("token");
if(!JwtUtil.getUserStatus(token).equals("teacher")){
return ResultUtil.error(400,"用户身份不正确");
}
int userId = Integer.parseInt(JwtUtil.getUserId(token));
return examService.tchSelectByPrimaryKey(userId,examId);
}

//通过试卷id,班级id获取试卷信息(学生角色)
@ApiOperation(value = "获取试卷信息(学生角色)")
@GetMapping("/getTestPaper")
public Msg getTestPaper(HttpServletRequest request,@RequestParam int examId ,@RequestParam int classesId){
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    //更改试卷
@ApiOperation(value = "更改试卷")
@PostMapping(value = "/updateTestPaper" )
public Msg updateTestPaper(@RequestBody ExamTopicTchDTO examTopicTchDTO,HttpServletRequest request){
//获取token
String token = request.getHeader("token");

if(!JwtUtil.getUserStatus(token).equals("teacher")){
return ResultUtil.error(400,"用户身份不正确");
}

//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return examService.updateByPrimaryKeySelective(examTopicTchDTO,u_id);

}



//提交试卷(学生角色)
@ApiOperation(value = "提交试卷(学生角色)")
@PostMapping(value = "/submitTestPaper" )
public Msg submitTestPaper(@RequestBody StuSubmitExamDTO stuSubmitExamDTO, HttpServletRequest request){
System.out.println(stuSubmitExamDTO);
String token = request.getHeader("token");
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return markExamService.submitTestPaper(stuSubmitExamDTO,u_id);
}


}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return userService.changeRole(u_id);
}

@DeleteMapping(value = "/deleteUser")
public String deleteUser(int id){
int result=userService.deleteUser(id);
if(result==1){
return "注销成功";
}else {
return "注销失败";
}
}
}



@RestController
public class ReleaseExamController {
@Autowired
private ReleaseExamService releaseExamService;
@Autowired
private ExamClassesDao examClassesDao;

@ApiOperation(value = "获取发布考试信息")
@GetMapping(value = "/getReleaseInfo")
public Msg getReleaseInfo(HttpServletRequest request,@RequestParam Integer classesId,@RequestParam Integer examId){
String token = request.getHeader("token");

return releaseExamService.getReleaseInfo(classesId,examId);
}

@ApiOperation(value = "发布考试")
@PostMapping(value = "/releaseTest")
public Msg releaseTest(HttpServletRequest request, @RequestBody ReleasExamVO releasExamVO){
System.out.println(releasExamVO);
String token = request.getHeader("token");

if(!JwtUtil.getUserStatus(token).equals("teacher")){
return ResultUtil.error(400,"用户身份不正确");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    String token =  request.getHeader("token");
//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

Msg result=userService.queryUserByC_id(c_id, u_id);
Page<List> page = new Page(pageSize,currentPage);
page.build((List) result.getData());
return ResultUtil.success(page);
}


@ApiOperation(value = "修改用户信息")
@PutMapping(value = "/updateUser")
public Msg updateUser(@RequestBody User user){
int result=userService.updateUser(user);
if(result>0){
return ResultUtil.success();
}else{
return ResultUtil.error(100,"修改失败");
}
}

@ApiOperation(value = "获取用户权限")
@GetMapping(value = "getRole")
public Msg getRole(HttpServletRequest request){
String token = request.getHeader("token");
//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));
return userService.getRole(u_id);
}

@ApiOperation(value = "切换用户角色")
@PutMapping(value = "changeRole")
public Msg changeRole(HttpServletRequest request){
String token = request.getHeader("token");
//获取token中的id
int u_id=Integer.parseInt(JwtUtil.getUserId(token));

return userService.changeRole(u_id);
}

@DeleteMapping(value = "/deleteUser")
public String deleteUser(int id){
int result=userService.deleteUser(id);
if(result==1){
return "注销成功";
}else {
return "注销失败";
}


项目链接:
https://javayms.github.io?id=362223270309201dz
https://javayms.pages.dev?id=362223270309201dz