Java项目:前台+后台在线考试系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载!
一、项目简述
本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 理,人工组卷。自动组卷,教师,班级,统计等等管理功能。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等
登录控制层:
@Controller
public class LoginController {@Autowiredprivate StudentService studentService;@Autowiredprivate TeacherService teacherService;@Autowiredprivate QuestionService questionService;@Autowiredprivate PaperService paperService;@Autowiredprivate ClasseService classeService;@Autowiredprivate RecordService recordService;@RequestMapping("/")public String view(Model model){//查询所有用户int teas=teacherService.queryCountAll();int stus=studentService.queryCOuntALlstu();int alllogers=teas+stus;//统计试题int allQues=questionService.queryCountAllQues();//统计试卷int allPaps=paperService.queryCountALlPaps();model.addAttribute("allPaps",allPaps);model.addAttribute("allQues",allQues);model.addAttribute("alllogers",alllogers);return "stage/prexam";}//后台切换到前台登录@RequestMapping("/foreLogin")public String foreLogin(){return "stage/login";}//前台切换到后台登录@RequestMapping("/backLogin")public String backLogin(){return "stage/loginx";}//后台教师登录验证@ResponseBody@RequestMapping("/backLogin/check")public Object backCheck(Teacher teacher, HttpServletRequest request){AjaxResult result=new AjaxResult();HttpSession session=request.getSession();Teacher teac=teacherService.check(teacher);if(teac!=null){session.setAttribute("logerd",teac);result.setSuccess(true);}else {result.setSuccess(false);}return result;}@RequestMapping("/index")public String index(Model model){//查询所有用户int teas=teacherService.queryCountAll();int stus=studentService.queryCOuntALlstu();int alllogers=teas+stus;//统计试题int allQues=questionService.queryCountAllQues();//统计试卷int allPaps=paperService.queryCountALlPaps();List<Record> ScoreHStu=recordService.queryRankScoreRecord();List<Record> AccHStu=recordService.queryRankAccRecord();model.addAttribute("ScoreHStu",ScoreHStu);model.addAttribute("AccHStu",AccHStu);model.addAttribute("allPaps",allPaps);model.addAttribute("allQues",allQues);model.addAttribute("alllogers",alllogers);return "index";}//前台学生登录考试@ResponseBody@RequestMapping("/foreCheck/check")public Object foreCheck(Student student, HttpServletRequest request){AjaxResult result=new AjaxResult();HttpSession session=request.getSession();Student stud=studentService.check(student);if(stud!=null){session.setAttribute("loger",stud);result.setSuccess(true);}else {result.setSuccess(false);}return result;}//前台登录到展示页面@RequestMapping("/indexprexam")public String indexprexam(){return "stage/prexamed";}//退出系统@RequestMapping(value = {"*/logout","/logout","teacher/logout"})public String logout(HttpSession session) {//session里可能不止存放一个数据,移除麻烦,所以让其失效跟直接session.invalidate();return "redirect:/";}//学生注册//去添加页面@RequestMapping("/prexam/toAddStudent")public String toAddStudent(Model model){List<Classe> allClasees = classeService.getAll();model.addAttribute("allClasees",allClasees);return "stage/studentAdd";}//添加具体操作@RequestMapping("/prexam/AddStudent")public String AddStudent(Student student){studentService.AddStudent(student);return "redirect:/foreLogin";}@RequestMapping("/zhao")public String zhao(){return "stage/zhao";}
}
考试业务控制层:
@Controller
@RequestMapping("/exam")
public class ExamController {@Autowiredprivate ExamService examService;@Autowiredprivate PaperService paperService;@Autowiredprivate RecordService recordService;//前台跳转@RequestMapping("/toExam")public String toExam(Model model){List<Exam> Exams = examService.getAll();model.addAttribute("Exams",Exams);return "exam/examplan";}@RequestMapping("/toError")public String toError(Model model){List<Exam> Exams = examService.getAll();model.addAttribute("Exams",Exams);return "exam/error";}@RequestMapping("/tomError")public String tomError(Model model){List<Exam> Exams = examService.getAll();model.addAttribute("Exams",Exams);return "exam/merror";}@RequestMapping("/toHist/{id}")public String toHist(@PathVariable ("id") Integer id,Model model){List<Record> records=recordService.queryAllExamById(id);model.addAttribute("records",records);return "exam/histplan";}//从其他页面跳转到home@RequestMapping("/toHome")public String tohome(){return "redirect:/indexprexam";}//来到对应考试页面@RequestMapping("/toDoExam/{id}")public String toDoExam(@PathVariable ("id") Integer id,Model model,String examId,HttpServletRequest request){HttpSession session=request.getSession();Student stu = (Student) session.getAttribute("loger");
// if() {
// Record record=new Record();
// record.setStudentId(stu.getStudentId());
// record.setPaperId(id);List<Record> ss= recordService.queryAllExamById(stu.getStudentId());for (int i = 0; i < ss.size(); i++) {if(ss.get(i).getPaperId() ==id ) {return "redirect:/exam/tomError";}}
// }List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(id);int exId=Integer.parseInt(examId);Exam examById = examService.getExamById(exId);Paper paperName = paperService.queryPaperNameById(examById.getPaperId());model.addAttribute("paperName",paperName);model.addAttribute("examById",examById);model.addAttribute("questionPapers",questionPapers);return "exam/doExam";}//提交试卷@RequestMapping("/submitExam")public String submitExam(Integer paperId, Integer studentId, HttpServletRequest request){List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(paperId);List<String> ans=new ArrayList<>();List<String> RightAns=new ArrayList<>();for (QuestionPaper qb:questionPapers){RightAns.add(qb.getQuestion().getQuestionOpright());String parameter="";String []parameters;if(qb.getQuestion().getQuestionType().equals("y")){parameters= request.getParameterValues("optionsSelect" + qb.getQuestionId());if(parameters!=null) {for(String s:parameters){parameter+=s;}}}else {parameter = request.getParameter("optionsSelect" + qb.getQuestionId());if(parameter==null) {return "redirect:/exam/toError";}}ans.add(parameter);}//核对答案得到成绩int k=0; //哨兵Double y=0.0; //正确数int score=0; //得分int a=0; //记录单选题个数int b=0; //记录多选题个数int c=0; //记录判断题个数int totalScore=0;for (QuestionPaper qb:questionPapers){if(ans==null) {break;}//若为单选题则正确+单选题分数if(qb.getQuestion().getQuestionType().equals("x")){if(ans.get(k).equals(RightAns.get(k))){score+=qb.getPaper().getScoreSin();y++;}a++;k++;}else if(qb.getQuestion().getQuestionType().equals("y")){if(ans.get(k).equals(RightAns.get(k))){score+=qb.getPaper().getScoreChe();y++;}b++;k++;}else {if(ans.get(k).equals(RightAns.get(k))){score+=qb.getPaper().getScoreJug();y++;}c++;k++;}}int scoreSin1 = questionPapers.get(0).getPaper().getScoreSin();int scoreChe1 = questionPapers.get(0).getPaper().getScoreChe();int scoreJug1 = questionPapers.get(0).getPaper().getScoreJug();int bool=recordService.queryBooleanToscore(paperId);if (bool==0){totalScore=scoreSin1*a+scoreChe1*b+scoreJug1*c; //得到每张试卷总分Toscore toscore=new Toscore();toscore.setPaperId(paperId);toscore.setToscore(totalScore);recordService.AddToScore(toscore);}//保存答题记录String answer = String.join(",", ans);Paper paper = paperService.queryPaperNameById(paperId);String paperName = paper.getPaperName();Double recordAcc=y/k;int recordScore=score;Record record=new Record();record.setRecordName(paperName);record.setStudentId(studentId);record.setPaperId(paperId);record.setRecordAnswer(answer);record.setRecordAcc(recordAcc);record.setRecordScore(recordScore);recordService.addRecord(record);return "redirect:/exam/toExam";}/*** 考试后台* *///查看所有考试安排后台@RequestMapping("/getAllExam")public String getAllExam(Model model){List<Exam> Exams = examService.getAllS();model.addAttribute("Exams",Exams);return "exam/backexamlist";}//去往考试添加页面@RequestMapping("/toAddExam")public String toAddExam(Model model){List<Paper> papers = paperService.getAll();model.addAttribute("papers",papers);return "exam/AddExam";}//添加操作@RequestMapping("/addExam")public String addExam(Exam exam, String examBegins,String examEnds) throws ParseException {String t1 = examBegins.replace("T", " ");String t2 = examEnds.replace("T", " ");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Date begin = sdf.parse(t1);Date end = sdf.parse(t2);exam.setExamBegin(begin);exam.setExamEnd(end);examService.AddExam(exam);return "redirect:/exam/getAllExam";}@RequestMapping("/deleteExam/{id}")public String toEditExam(@PathVariable ("id") Integer id,Model model){examService.deleteById(id);return "redirect:/exam/getAllExam";}
}
记录信息控制层:
@Controller
@RequestMapping("/record")
public class RecordController {@AutowiredRecordService recordService;@AutowiredPaperService paperService;@AutowiredClasseService classeService;//获取所有记录@RequestMapping("/getAllRecord")public String getAllRecord(Model model){List<Record> records=recordService.queryAll();model.addAttribute("records",records);return "record/RecordList";}//删除记录@RequestMapping("/deleteRecore/{id}")public String deleteRecore(@PathVariable ("id") Integer id){recordService.deleteById(id);return "redirect:/record/getAllRecord";}//根据记录id获取试卷详情@RequestMapping("/toShowExamHist/{id}")public String toShowExamHist(@PathVariable ("id")Integer id,Model model){//通过记录id查找试卷和答题记录Integer papid=recordService.queryByRecordId(id);String answers=recordService.queryAnsByRecordId(id);//原始试卷List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(papid);//提交过的答案List<String> ans = Arrays.asList(answers.split(","));model.addAttribute("questionPapers",questionPapers);model.addAttribute("ans",ans);//2020-1-26-20:40return "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);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);claAcc.setAcc(acc);//每个对象添加到listclaAccRes.add(claAcc);}}model.addAttribute("claAccRes",claAccRes);return "record/claAcc";}
}
源码获取:博客首页 "资源" 里下载!
相关文章:

修改nginx服务器类型
通常nginx服务器不隐藏服务器类型及版本信息 curl -I http://www.aaa.com 获取web服务器的类型和版本代码 HTTP/1.1 200 OK Server: nginx nginx/0.8.53 Date: Tue, 14 Dec 2010 08:10:06 GMT Content-Type: text/html Content-Length: 151 Last-Modified: Mon, 13 Dec 2…

JS 自带函数
JS数组方法汇总 array数组元素的添加和删除js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr new Array();arr[0] "aaa";arr[1] "bbb";arr[2] "ccc";//alert(arr.leng…

Flink学习笔记:Operators之CoGroup及Join操作
本文为《Flink大数据项目实战》学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz 1. Window CoGroup与Join 1.1回顾RDBMS各种join 假设有两个表A和B 1.…

Rocksdb 的优秀代码(二)-- 工业级 打点系统 实现分享
文章目录前言数据结构选型打点代码设计耗时打点请求计数打点打点总结前言 一个完善的分布式系统一定是需要完善的打点统计,不论是对系统内核 还是 对系统使用者都是十分必要的。系统的客户需要直观得看到这个系统的性能相关的指标来决定是否使用以及如何最大化使用…

JVM中可生成的最大Thread数量
最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端。对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个: -Xms intial java heap s…

Java项目:在线电影售票系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 前台: 1、正在上映的电影浏览查看。 2、影院信息浏览查看。 3、新闻咨询信息浏览查看。 4、地域信息查看切换。 5、用户注册登录。 6、电影排期查看。 7、在线选座生成…

matlab正态分布
normrnd(mu, sigma, m,n) 返回m x n的随机数,正态分布均值mu,标准差sigma。 mvnrnd(mu, sigma, m) 返回m个随机数(点),是多元正太分布,mu是均值向量,sigma是协方差。 x normrnd(0,4,1,100000);…

MYSQL语句
-- 一、管理数据库-- 1.1 创建数据库CREATE DATABASE day15; SHOW DATABASES; CREATE TABLE student( id INT, NAME VARCHAR(20), age INT); -- 查看表SHOW TABLES; -- 二、管理数据-- 1.1插入数据(insert into)-- 需求: 往学生表插入数据INS…

Intel Optane PMEM 概览
文章目录前言基本架构编程模型PMDK接口架构接口概览pmdk 安装开发文档汇总PMEM性能官方性能实测性能前言 随着以PCM 为存储单元的3D XPoint 非易失存储介质 不断精进的工艺,以及 上层硬件协议栈的飞速发展,为非易失内存这样硬件的出现提供了技术工艺基础…

Java项目:新闻发布系统(java+Springboot+ssm+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 区分为管理员用户和普通用户,管理员用户能删除评论, 调整新闻显示/隐藏,修改新闻,删除普通用户,普通用户能 登陆浏…

Linux下搭建Lotus Domino集群
Linux下搭建Lotus Domino 集群本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334595)的另一个模块,所以大家首先要有以上基础之后然后继续实验。集群是 Lotus Domino Server 提供的最重要特性之…

Centos下卸载openjdk并安装自定义jdk
1、查看是否安装了openjdk java -version 2、查看需要卸载的openjdk信息,其中只需要删除红色框标记的地方 rpm -qa | grep java 3、删除openjdk rpm -e --nodeps 需要删除的java组件 4、创建文件夹java mkdir java 5、到官网下载linux版本的jdk(如果不能…

pmdk -- libpmemlog 介绍
文章目录1. libpmemlog 应用背景2. libpmemlog 使用方式2.1 基本接口2.2 接口使用3. Libpmemlog 性能3.1 write sys call 性能3.2 libpmemlog 性能1. libpmemlog 应用背景 本文介绍的是英特尔 傲腾持久化内存 pmdk中 的一个持久化日志的库。 我们正常系统中会将日志 形成一个…

Java项目:家庭财务管理系统(java+Springboot+ssm+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 家庭财务管理系统,具有收入统计,支出统计,汇总报 表,工资录入,其他收入等录入开支信息,echart图标插 …

(原创)c++primer(第五版)--1.3 注释简介
注释可以帮助人类读者理解程序。注释通常用于概述算法,确定变量的用途,或者结束晦涩难懂的代码段。编译器会忽略注释,因此注释对程序的行为或者性能不会有任何影响。 虽然编辑器会忽略注释,但读者并不会。即使系统文档的其他部分已…

BZOJ 1503 郁闷的出纳员(splay)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动删除。四种操作:(1)数列…

javascript ES6 新特性之 扩展运算符 三个点 ...
对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。 作用类似于 Object.assign() 方法,我们先来看一下 Object.assign() 方法: Obje…

字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现
文章目录1. 算法背景2. BM(Boyer-Moore)算法2.1 坏字符规则(bad character rule)2.2 好后缀规则(good suffix shift)2.3 复杂度及完整代码3. KMP(Knuth Morris Pratt)算法3.1 好前缀 和 坏字符规则3.2 高效构建 失效函数3.3 复杂度…

Java项目:中小医院信息管理系统(java+Springboot+ssm+mysql+maven+jsp)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括:实现了挂号收费,门诊管理,划价收 费,药房取药,体检管理,药房管理,系统维护等各个模块功能&a…

DB2load遇到SQL3508N错误
SQL3508N装入或装入查询期间,当存取类型为 "<文件类型>" 的文件或路径时出错。原因码:"<原因码>"。路径:"<路径/ 文件>"。 [more]解释: 装入或装入查询处理期间,在尝…

【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】
先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对android,目的…

git submodule 使用场景汇总
文章目录1. 前言2. 基础命令介绍2.1 场景一:已有仓库,添加一个子模块2.2 场景二:已有仓库,添加一个子模块的特定分支2.3 场景三:已有仓库,更新子模块内容2.4 场景四:已有仓库,变更子…

Java项目:在线商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 前台展示后台管理,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,…

自定义参数解析器,减少10%的代码
*** 赋值调用方法* 如果为空,默认调用name()方法* 该方法必须是一个不含参数的方法,否则将会调用失败* @return*/value() : value用于绑定请求参数和方法参数名一致时的对应关系。比如user?statusNo=1。方法的参数写法如下:getUser(@EnumParam(value=“statusNo”) int status) 或者 getUser(@EnumParam() int statusNo)valueMethod() : 赋值时调用枚举中的方法。

微服务全做错了!谷歌提出新方法,成本直接降9倍!
一位DataDog的客户收到6500万美元的云监控账单的消息,也再次让业界无数人惊到了。事实上有些团队在将集中式单体应用拆分为微服务时,首先进行的往往不是建立领域模型,而只是按照业务功能将原来单体应用的一个软件包拆分成多个所谓的“微服务”软件包,而这些“微服务”内的代码高度耦合,逻辑边界不清晰,长期以来,不管大厂还是小厂,微服务都被认为是云原生服务应用程序架构的事实标准,然而2023,不止那位37signals的DHH决心下云,放弃微服务,就连亚马逊和谷歌等这些云巨头,正在带头开始革了微服务的命。

简述nodejs、npm及其模块在windows下的安装与配置
nodejs的安装 登陆官网http://nodejs.org/,自行安装,不需配置环境变量,安装中自动配置了。 检测是否安装成功,使用cmd输入 node -v 即可查看。 npm的安装 如果是最新版nodejs其实不用装npm,它集成了npm,验证…

discuz,ecshop的伪静态规则(apache+nginx)
discuz(nginx): (备注:该规则也适用于二级目录) rewrite ^([^\.]*)/topic-(.)\.html$ $1/portal.php?modtopic&topic$2 last; rewrite ^([^\.]*)/article-([0-9])-([0-9])\.html$ $1/portal.php?modview&aid$2&page$3 last; rewrite ^([^\.]*)/forum-…

字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全
文章目录1. 算法背景2. Trie 树实现原理2.1 Trie 树的构建2.2 Trie树的查找2.3 Trie树的遍历2.4 Trie树的时间/空间复杂度2.5 Trie 树 Vs 散列表/红黑树3. Trie树的应用 -- 搜索词提示功能1. 算法背景 之前我们了解过单模式串匹配的相关高效算法 – BM/KMP,虽难以理…

Java项目:成绩管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 超豪华成绩管理系统,学生,教师,管理员三类用户集 成,课程表管理,成绩查询,成绩详情数据统计…

NSThread 多线程相关
1.下面的代码,有2点需要注意,1>就是 就是thread:所传得参数,这里传得的是nsarray 当然也可以传其他的类型。2> [self performSelectorOnMainThread:selector(update) withObject:nil waitUntilDone:YES]; 这个函数的作用是通知主线程进…