基于javaweb的SpringBoot学生在线考试管理系统(java+springboot+thymleaf+bootstrap+html+mysql+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

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

适用

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

功能说明

530023072402

540023072402

550023072402

560023072402

570023072402

580023072402

590023072402

000023082402

基于javaweb的SpringBoot学生在线考试管理系统(java+springboot+thymleaf+bootstrap+html+mysql+maven)

项目介绍

学生在线考试管理系统,分为管理员与老师、学生三种角色;

教师/管理员主要功能:

1. 学生管理:查看所有学生的基本信息,管理员则还可以对学生的基本信息(除了账号和密码外)进行修改和对学生的删除操作。

2. 教师管理:查看所有教师的基本信息(除密码外),并修改自己的基本信息,而管理员除了以上功能还可以对所有教师的所有信息进行修改删除操作,也能添加教师。

3. 班级管理:要能对班级的信息进行管理。

4. 试题管理:首先要能对试题进行增删改查,并且应该对试题进行不同科目的分类以方便试卷的生成。

5. 试卷管理:试卷的主体是试题,然后用户能对试卷进行增删改查操作。

6. 考试管理:可以选择相应的试卷设置时间进行考试。考试一旦生成后无法修改。

7. 记录管理:查看试卷的考试情况;以班级为单位根据班级考试情况生成每个考试的不同班级的及格率以方便排名。

学生主要功能:

1. 学生注册:学生可以通过注册一个账号,然后可以用于登陆系统。

2. 参与考试:学生要可以参与考试

3. 查询历史考试情况:学生在考完试后系统便会记录它的考试得分,进行准确率的分析,并提供试卷详情查看,且这此的考试信息会存入数据库中以便于下次查看。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。

2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;

4.数据库:MySql 5.7版本;

技术栈

  1. 后端:SpringBoot+Mybatis

  2. 前端:Thymleaf+BootStrap+Html

使用说明

访问地址:http://localhost:8080

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

//修改具体操作
@RequestMapping("/EditClasse")
public String EditClasse(Classe classe){
classeService.editClasse(classe);
return "redirect:/classe/getAllClasse";
}

//班级删除
@RequestMapping("/deleteClasse/{id}")
public String deleteClasseById(@PathVariable("id") Integer id){
classeService.deleteClasseById(id);
return "redirect:/classe/getAllClasse";
}

}
package edu.ccsfu.quiz.controller;



@Controller
@RequestMapping("/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
@Autowired
private ClasseService classeService;
//查看所有教师
@RequestMapping("/getAllTeacher")
public String getAllTeacher(Model model){
List<Teacher> teachers = teacherService.getAll();
//查找classe表中已存在的教师,将用于表单教师是否可以删除
List<Classe> classes=classeService.queryAllTeacherId();
List<Integer> teaId=new ArrayList<>();
for(Classe cla:classes){
teaId.add(cla.getTeacherId());
}
model.addAttribute("teaId",teaId);
model.addAttribute("teachers",teachers);
return "teacher/teacherList";
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
        List<Integer> teaId=new ArrayList<>();
for(Classe cla:classes){
teaId.add(cla.getTeacherId());
}
model.addAttribute("teaId",teaId);
model.addAttribute("teachers",teachers);
return "teacher/teacherList";
}
//教师添加或者修改操作,先去添加页面
@RequestMapping("/toAddTeacher")
public String toAddTeacher(){
return "teacher/teacherAdd";
}

//添加或者修改具体操作
@RequestMapping("/addTeacher")
public String addTeacher(Teacher teacher){
int teacherId = teacher.getTeacherId();
if(teacherId==0){
/*若id为0即是刚添加未分配,要进行增加操作*/
teacherService.addTeacher(teacher);
}else {
/*若id已存在,是要进行修改操作*/
teacherService.editTeacher(teacher);
}
return "redirect:/teacher/getAllTeacher";
}

//教师去修改页面
@RequestMapping("/{id}")
public String toEditTeacher(@PathVariable("id") Integer id,Model model){
Teacher teacher=teacherService.getTeacherById(id);
model.addAttribute("teacher",teacher);
return "teacher/teacherAdd";
}
//教师删除
@RequestMapping("/deleteTeacher/{id}")
public String deleteTeacherById(@PathVariable("id") Integer id,Model model){
teacherService.deleteTeacherById(id);
return "redirect:/teacher/getAllTeacher";
}

}
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
    //原始试卷
List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(papid);
//提交过的答案
List<String> ans = Arrays.asList(answers.split(","));
model.addAttribute("questionPapers",questionPapers);
model.addAttribute("ans",ans);
return "record/showExamHist";
}

//显示所有班级记录
@RequestMapping("/showClaAcc")
public String showClaAcc(Model model){
//查询所有测试名称
List<Record> records=recordService.queryAllExam();
List<ClaAcc> claAccRes=new ArrayList<>();
//按照测试名称查询所有班级
for(Record rec:records){
//通过记录对应考试paperid查找总分***
int paperid=rec.getPaperId();
int toscore=recordService.queryToscore(paperid);
//记录考试名
String exaName=rec.getRecordName();
List<Classe> clas=recordService.queryAllClass(exaName);
//初始化所有人和及格人数
int allScore=0;
int accScore=0;
for(Classe cla:clas){
int claId=cla.getClasseId();
//班级信息
Classe claName=classeService.queryClaNameById(claId);
if (claName ==null){
log.error("找不到id为"+claId+"的班级");
continue;
}
RecordExam recordExam=new RecordExam();
recordExam.setClaId(claId);
recordExam.setExaName(exaName);
double setToscore=toscore*0.6;
recordExam.setToscore(setToscore);
//对应每一个班级,查询考试人数和及格人数
allScore=recordService.queryAllScore(recordExam);
//及格人数默认>60***
accScore=recordService.queryAccScore(recordExam);
double accre=(double)accScore/allScore;
//四舍五入保留2位
double acc = (double) Math.round(accre * 100) / 100;

ClaAcc claAcc=new ClaAcc();
claAcc.setExamName(exaName);
claAcc.setClaName(claName.getClasseName());
claAcc.setToscPer(allScore);
claAcc.setAcscPer(accScore);
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
//去往随机组题页面
@RequestMapping("/toRandomQuestion/{id}")
public String toRandomQuestion(@PathVariable ("id") Integer papid,Question question,Model model){
List<Question> questionCourses=questionService.queryAllCourse();
questionCourses.add(new Question("bug","all"));
//查找所有题目课程和所有类型,且去重
//用于条件查询题库中尚未分配的题有多少道
int TotalQuestionNums=questionService.queryAllQuestionNums();
List<Map> maps = questionService.queryNumOfQuestionType();
List<String> course=new ArrayList<>();
List<Integer> count=new ArrayList<>();
for (Map map:maps){
for (Object key : map.keySet()) {
if(map.get(key) instanceof String){
course.add(map.get(key).toString());
}else{
count.add(Integer.parseInt(map.get(key).toString()));
}
}
}
Paper paperName=paperService.queryPaperNameById(papid);
model.addAttribute("paperName",paperName.getPaperName());
model.addAttribute("count",count);
model.addAttribute("course",course);
model.addAttribute("TotalQuestionNums",TotalQuestionNums);
model.addAttribute("paperId",papid);
model.addAttribute("questionCourses",questionCourses);
return "paper/RandomQuestion";
}

//指定试卷id和课程随机生成试题
@RequestMapping("/RandomADDQuestion/{id}")
public String RandomADDQuestion(@PathVariable ("id") Integer papid,String questionCourse,int QuesNums){
//找到试卷所有未分配的试题
PapIdQuesCourse papIdQuesCourse=new PapIdQuesCourse();
papIdQuesCourse.setPapid(papid);
papIdQuesCourse.setQuestionCourse(questionCourse);
List<Question> questionsNodivIds=questionService.queryAllQueIdNotInPaperById(papIdQuesCourse);
List<Integer> list=new ArrayList<>();
for(Question question:questionsNodivIds){
list.add(question.getQuestionId());
}
Collections.shuffle(list);
List<QuestionPaper> questionPapers=new ArrayList<>();
for(int i=0;i<QuesNums;i++){
QuestionPaper questionPaper=new QuestionPaper(list.get(i),papid);
questionPapers.add(questionPaper);
}
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


@Controller
@RequestMapping("/classe")
public class ClasseController {
@Autowired
private ClasseService classeService;
@Autowired
private TeacherService teacherService;
//查看所有班级
@RequestMapping("/getAllClasse")
public String getAllClasse(Model model){
List<Classe> classes = classeService.getAll();
model.addAttribute("classes",classes);
return "classe/classeList";
}

//班级添加或者修改操作,先去添加页面
@RequestMapping("/toAddClasse")
public String toAddClasse(Model model){
List<Teacher> teachers=teacherService.queryTeacherNotAdvisor();
model.addAttribute("teachers",teachers);
return "classe/classeAdd";
}

//添加具体操作
@RequestMapping("/addClasse")
public String addClasse(Classe classe){
classeService.addClasse(classe);
return "redirect:/classe/getAllClasse";
}

//班级去修改页面
@RequestMapping("/toEditClasse/{id}")
public String toEditClasse(@PathVariable("id") Integer id,Model model){
//根据id查询班级
Classe classe=classeService.getClasseById(id);
//过去班级的班主任,回显
int teacherIdd=classe.getTeacherId();
Teacher teacherold=teacherService.getTeacherById(teacherIdd);
//查询可分配班主任得教师
List<Teacher> teachers=teacherService.queryTeacherNotAdvisor();
teachers.add(teacherold);
model.addAttribute("teachers",teachers);
model.addAttribute("classe",classe);
return "classe/classeEdit";
}


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