基于SSM的在线考试系统

news2024/11/24 8:19:09

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

在线考试借助于网络来进行,传统考试所必备的考场和监考对于在线考试来说并不是必要项目,因此可以有效减少组织考试做需要的成本以及设施。同时,由于在线考试系统本身具有智能阅卷的功能,也大大减少了考试组织者在考试结束后阅卷集成绩统计所需要进行的工作。考生参加考试并不一定要被聚集在线下考场,而是可以使用电脑或手机等电子设备在任何场景参加考试。
  由于在线考试是在考试形式上发生了翻天覆地的变化,因此也会相对带来一系列的问题,比如在缺失考场和监考的环境下,如何保证成绩的真实性?这就需要借助于远程视频监控和考生桌面监控来解决了。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  3. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  4. Jsp:JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
  5. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  6. Bootstrap:Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。
  7. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。

    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:admin(admin)

字段名类型默认值列注释
idintNULL
namevarcharNULL姓名
numbervarcharNULL工号
passwordvarcharNULL密码
role_idintNULL角色id
last_login_timedatetimeNULL最后登录时间

2:announce(announce)

字段名类型默认值列注释
idintNULL
titlevarcharNULL公告标题
contenttextNULL公告内容
author_idvarcharNULL作者id
role_idintNULL作者身份id:教师_3,管理员_1
author_namevarcharNULL作者名
create_timedatetimeNULL公告创建时间

3:course(course)

字段名类型默认值列注释
idintNULL
course_namevarcharNULL
teacher_namevarcharNULL任课老师姓名
teacher_idintNULL该门课的出题老师(默认一门课一个老师出题)

4:disk(disk)

字段名类型默认值列注释
idintNULL
namevarcharNULL在网盘上看到的文件名
save_namevarcharNULL文件真实的名字
byte_sizedoubleNULL
p_idintNULL父id
typevarcharNULL文件类型
create_timetimestampNULL
file_sizevarcharNULL
teacher_idintNULL
download_countintNULL
passwordvarcharNULL
md5varcharNULL

5:major(major)

字段名类型默认值列注释
idintNULL
majorvarcharNULL专业班级
academyvarcharNULL学院

6:paper(paper)

字段名类型默认值列注释
idintNULL
paper_namevarcharNULL试卷名称
course_idintNULL课程id
question_idvarcharNULL问题id组合
begin_timevarcharNULL试卷开始时间
end_timevarcharNULL试卷结束时间
allow_timevarcharNULL考试时长
scorevarcharNULL试卷总分
paper_statevarcharNULL考试状态:未开始,进行中,已结束
paper_typevarcharNULL试卷类型:正式,模拟
major_idintNULL专业班级id
paper_form_idintNULL试卷组成id
teacher_idintNULL出卷老师id

7:paper_form(paper_form)

字段名类型默认值列注释
idintNULL
q_choice_numvarcharNULL单选题数目
q_choice_scorevarcharNULL单选题分数
q_mul_choice_numvarcharNULL多选题数目
q_mul_choice_scorevarcharNULL多选题分数
q_tof_numvarcharNULL判断题数目
q_tof_scorevarcharNULL判断题分数
q_fill_numvarcharNULL填空题数目
q_fill_scorevarcharNULL填空题分数
q_SAQ_numvarcharNULL简答题数目
q_SAQ_scorevarcharNULL简答题分数
q_program_numvarcharNULL编程题数目
q_program_scorevarcharNULL编程题分数

8:question(question)

字段名类型默认值列注释
idintNULL
question_nametextNULL题目名称
option_avarcharNULL选项a
option_bvarcharNULL选项b
option_cvarcharNULL选项c
option_dvarcharNULL选项d
type_idintNULL题目类型id
answertextNULL题目答案
course_idintNULL课程id
difficultyvarcharNULL题目难度:容易,中等,较难
remarktextNULL题目解析

9:role(role)

字段名类型默认值列注释
idintNULL角色id:管理员_1,学生_2,老师_3
role_namevarcharNULL角色姓名

10:score(score)

字段名类型默认值列注释
idintNULL
stu_idintNULL考生id
paper_idintNULL试卷id
paper_namevarcharNULL试卷名称
scorevarcharNULL试卷分数
wrong_idsvarcharNULL错题id集合

11:stu_answer_record(stu_answer_record)

字段名类型默认值列注释
idintNULL
paper_idintNULL试卷id
stu_idintNULL学生id
question_idintNULL题目id
answervarcharNULL题目答案

12:student(student)

字段名类型默认值列注释
idintNULL
namevarcharNULL学生姓名
passwordvarcharNULL学生登录密码
stu_numbervarcharNULL学号
majorvarcharNULL专业班级
role_idintNULL角色id
sexvarcharNULL性别

13:teacher(teacher)

字段名类型默认值列注释
idintNULL
namevarcharNULL姓名
work_numbervarcharNULL工号
passwordvarcharNULL密码
role_idintNULL角色id
jobvarcharNULL职位

14:type(type)

字段名类型默认值列注释
idintNULL
type_namevarcharNULL题目类型
scorevarcharNULL各个类型题目的分数
remarkvarcharNULL该类型题目说明

五、功能模块:

  1. 用户登录:包含老师学生管理员登录

    用户登录

  2. 试题管理:教师可以通过添加试题丰富题库,也可以对已存在的题目进行修改和删除操作。

    试题管理

  3. 试卷管理:教师首先创建或选择试卷模版,系统会根据模版自动从题库中抽取题目进行组卷。

    试卷管理

  4. 试卷复查:考生的主观题答案会被保存到数据库中,教师可以对其进行复查。

    试卷复查

  5. 成绩统计分析:本系统可以根据特定课程或特定班级使用柱状图,折线图,数据罗列等方式帮助教师更直观得了解学生成绩情况。

    成绩统计分析

  6. 系统网盘:教师可以上传资料到网盘供学生下载学习

    系统网盘

  7. 学生-我的考试:学生进入后会看到试卷信息,当有需要参加的考试时,点击进入即可来到考试界面。
    考试结束系统会自动提交考卷并完成自动改卷任务。

    学生-我的考试

  8. 考试详情:考试详情

    考试详情

  9. 我的成绩:展示每门考试的成绩列表。

    我的成绩

  10. 成绩分析:系统会统计出该生本学期参加每门考试的成绩,以及该门课程的平均成绩,使用雷达图进行对比。

    成绩分析

六、代码示例:

 @Autowired
    private PaperService paperService;

    @GetMapping
    public String list(@RequestParam(name = "p", required = false, defaultValue = "1") Integer pageNo,
                       Model model, HttpSession session) {
        Integer teacherId = (Integer) session.getAttribute("teacherId");
        PageInfo<Paper> pageInfo = paperService.pageForPaperList(teacherId, pageNo);
        model.addAttribute("page", pageInfo);
        return "paper/list";
    }

    @GetMapping("/show/{id:\\d+}")
    public String show(@PathVariable Integer id, Model model) {
        Paper paper = paperService.findById(id);
        Course course = paperService.findCourseById(paper.getCourseId());
        Major major = paperService.findMajorById(paper.getMajorId());
        model.addAttribute("paper", paper);
        model.addAttribute("course", course);
        model.addAttribute("major", major);
        return "paper/show";
    }

    @GetMapping("/newPaperForm")
    public String addPaperForm() {
        return "paper/newPaperForm";
    }

    /**
     * 添加试卷组成模版
     * @param paperForm
     * @return
     */
    @PostMapping("/newPaperForm")
    public String addPaperForm(PaperForm paperForm) {
        paperService.newPaperForm(paperForm);
        return "redirect:/paper/newPaper/" + paperForm.getId();
    }

    /**
     * 添加试卷 组卷
     * @param model
     * @param id (paperForm的id,默认模版为1)
     * @param session
     * @return
     */
    @GetMapping("/newPaper/{id:\\d+}")
    public String add(Model model, @PathVariable Integer id, HttpSession session) {
        Integer teacherId = (Integer) session.getAttribute("teacherId");
        List<Course> courseList = paperService.findCourseListByTeacherId(teacherId);
        model.addAttribute("courseList", courseList);
        return "paper/newPaper";
    }

    @PostMapping("/newPaper/{paperFormId:\\d+}")
    public String add(Paper paper, @PathVariable("paperFormId") Integer paperFormId,
                      String major, RedirectAttributes redirectAttributes,
                      HttpSession session) {
        paper.setPaperFormId(paperFormId);
        Major majorObj = paperService.findMajorByMajorName(major);
        paper.setMajorId(majorObj.getId());
        try {
            paperService.newPaper(paper);
            return "redirect:/paper/show/" + paper.getId();
        } catch (ServiceException e) {
            e.printStackTrace();
            redirectAttributes.addFlashAttribute("message", e.getMessage());
            Teacher teacher = (Teacher) session.getAttribute("teacher");
            return "redirect:/teacher/home/" + teacher.getId();
        }

    }

    /**
     * 展示所有试卷模版列表
     * @param model
     * @return
     */
    @GetMapping("/showPaperForm")
    public String showPaperForm(Model model) {
        List<PaperForm> formList = paperService.findAllPaperForm();
        model.addAttribute("formList", formList);
        return "paper/showPaperForm";
    }

    /**
     * Ajax删除模版不跳转页面
     * @param id
     * @return
     */
    @GetMapping("/delPaperForm/{id:\\d+}")
    @ResponseBody
    public AjaxResult delPaperForm(@PathVariable Integer id) {
        try {
            paperService.delPaperFormById(id);
            return AjaxResult.success();
        } catch (Exception e) {
            return AjaxResult.error(e.getMessage());
        }

    }

    /**
     * 级联删除试卷、分数、答案记录
     * @param id
     * @return
     */
    @GetMapping("/delete/{id:\\d+}")
    public String delPaper(@PathVariable Integer id) {
        paperService.delPaperById(id);
        return "redirect:/paper";
    }

七、项目总结:

基于SSM的在线考试系统的整体功能模块的实现,主要是对自己在大学这几年时间所学内容的一个测试,对于系统,主要是通过现在智能化的基于SSM的在线考试系统进行开始系统的实现,经过一个学期的毕业设计的实现完成已接近尾声,到目前为止,当我回想起整个学期的系统开发日,收获颇丰。毕业设计的主要任务是建立一个智能化的基于SSM的在线考试系统 ,主要使用JAVA和Mysql数据库的开发工具,对系统的每个功能模块进行相对应的操作,最后,系统调试结果表明系统基本可以满足功能要求。

基于SSM的在线考试系统平台的开发对我大学学习的改进有很大帮助。它使我能够学习计算机知识的相关技术方面问题及与人交往的沟通交流方面,让我意识到无论我们做什么,我们都需要坚持不懈,努力工作,只有这样尝试了并且坚持去做了,我们才可以成功,才可以获得成功的喜悦,如果没有尝试,知识想,那连成功的机会都没有,实际操作进行做了,才会越来越近的靠近成功,随着道路一路向前,未来的路是美好的。对于驾校管理平台的实现,是自己第一次完成的设计一个管理系统。在项目的设计过程中,我克服了各种困难,并且在面对这些困难,我积极的面对,想办法解决问题,并且更好的掌握了理论知识和动手操作实践能力,从系统的开发到设计完成,我完成了一个更全面、更完善、更安全的平台管理系统,这也让我取得了很大的成就感,也使我对未来的生活更有信心。

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7个银行的软件测试项目实战,别再说简历项目不知道怎么写了

目录 前言 项目描述1&#xff1a;上海华瑞银行直连票据项目 项目描述2&#xff1a;平安金服风控中台系统 项目描述3&#xff1a;众安创展APP项目 项 目4&#xff1a; 招商银行VTM自助渠道服务系统 项 目5&#xff1a;招商银行票据支付 项 目6&#xff1a; 平安银行风控系…

6.9关键字static,final的使用

关键字&#xff1a;static 概念 是java中的一个关键字 用于修饰成员&#xff08;成员变量和成员方法&#xff09; 类属性、类方法的设计思想 概念&#xff1a; 当我们编写一个类时&#xff0c;其实就是在描述其对象的属性和行为&#xff0c;而并没有产生实 质上的对象&#x…

带启动参数的启动idea

-Dspring.profiles.activedev -Dserver.addr192.168.1.153:8848

立即修复!华硕曝路由器的关键漏洞

近日&#xff0c;华硕针对多种路由器型号的漏洞&#xff0c;发布了安全固件更新&#xff0c;并敦促客户立即更新设备或限制WAN访问&#xff0c;以保证其设备安全。 华硕方面表示&#xff0c;新发布的固件中包含九个安全漏洞的修复程序&#xff0c;包括高漏洞和关键漏洞。其中最…

ZYNQ——锁相环(PLL)实验

文章目录 一、介绍二、添加时钟 IP三、设计源代码四、仿真测试五、添加 ILA IP六、分配引脚七、板上验证八、示波器输出九、问题汇总 一、介绍 ZYNQ开发板上只有一个50MHz的时钟输入&#xff0c;如果要用到其他频率的时钟&#xff0c;就需要通过FPGA芯片内部集成的PLL(Phase L…

认识磁盘及磁盘的读写原理

认识磁盘 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘&#xff08;Floppy Disk&#xff0c;简称软盘&#xff09;&#xff0c;如今常用的磁盘是硬磁盘&#xff08;Hard disk&…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境&#xff0c;需要执行以下步骤&#xff1a; 1、安装 Python CentOS 7 自带的 Python 版本较老&#xff0c;建议使用 EPEL 库或源码安装 Python 3。例如&#xff0c;使用 EPEL 库安装 Python 3&#xff1a; sud…

【C语言初阶】循环语句的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello米娜桑&#xff0c;这里是君兮_&#xff0c;今天又抽空为大家更新我们的主线0基础C语言啦&#xff01;今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话&#xff0c;建议先看看下面两篇博客哦&#…

普通人接了人生第一单

大家好&#xff0c;我是 “秋意零” &#xff0c;全网同名&#xff08;某平台多了一个数字0 “如&#xff1a;秋意零0”&#xff09;。 你&#xff0c;相信天上掉馅饼吗&#xff1f; 40 分钟赚 150 你敢信&#xff1f; 现在我突然有点信了&#xff0c;为什么呢&#xff1f;请…

ESP-C3入门19. RSA算法加密、解密的实现

ESP-C3入门19. RSA算法加密、解密的实现 一、概述二、重要函数1. mbedtls_pk_parse_public_key和mbedtls_pk_parse_key函数原型&#xff1a;函数参数&#xff1a; 2. mbedtls_pk_encrypt函数原型&#xff1a;函数参数&#xff1a;函数功能&#xff1a; 三、实现过程1. CMakeLis…

@Param注解的用法

1、使用Param注解的原因 在 Mapper接口中&#xff0c;当方法的参数为多个字面量类型&#xff0c;此时mybatis会将这些参数存储在一个Map集合中&#xff0c;以两种方式进行存储 1、以arg0.arg1…为键&#xff0c;以参数为值2、以param1&#xff0c;param2…为键&#xff0c;以…

解读Linux常用命令使用方法

文章目录 1.前言1.1 定义1.2 特点 2.常用命令介绍2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm2.8 cp2.9 mv2.10 man&#xff08;联机手册&#xff09;2.11 vim2.12 grep2.13 ps2.14 netstat 1.前言 1.1 定义 Linux是一套免费使用和自由传播的类Unix操作系统&#xf…

【百套源码】HTML5期末大作业 - 各类网页作业源码合集

文章目录 持续更新文章记录1️⃣ 个人介绍类相关源码1.1 html实现个人简历1.2 科技风个人简历1.3 网站风个人简历1.4 多种风格个人主页模板1.5 html好看的个人简历明星版1.6 专属个人主页-系列11.7 专属个人主页-系列21.8 专属个人主页-系列31.9 专属个人主页-系列41.10 专属个…

uniapp和springboot微信小程序开发实战:前端架构之微信小程序主页实现

文章目录 主页效果前端代码后端实现主页效果 前端代码 具体代码实现如下: <template><view><!--首页轮播图--><view class="uni-banner-wrap"><swiper class="swiper" circular :indicator-dots="indicatorDots" …

数字信号处理11:变换

之前好长一段时间都在写软著、写一些结课作业&#xff0c;就断断续续的在学&#xff0c;很少有时间把东西串起来&#xff0c;前些博文主要就是讲的说&#xff0c;做这个Z变换&#xff0c;今天就主要来看看其他的变换&#xff0c;当然&#xff0c;最重要的还是傅里叶变换&#x…

有哪些优秀好用的网站SEO文章采集软件?

有哪些优秀好用的网站SEO文章采集软件?Ai智能采集文章操作教程及txt转Word教程#资源变现 #资源采集 我为什么会死磕seo并利用采集站seo赚到了第一个100W&#xff1f; 两个原因&#xff1a; 第一就是seo就是目前网络上免费的获取精准用户最牛逼&#xff0c;最有效的引流吸粉手…

linux下express+puppeteer安装部署并用PM2守护进程

背景 承上篇 puppeteer-不需重构&#xff0c;无痛加强vue单页面应用的SEO&#xff0c;提升百度收录排名,是在本地nginx部署前端&#xff0c;本地另起express服务进行测试&#xff0c;下面我们来讲讲如何部署express到linux服务器&#xff0c;并用PM2守护进程。 node 16.14.1 p…

java 学习交流社区平台系统Myeclipse开发mysql数据库web结构jsp编程计算机servlet网页项目

一、源码特点 JSP 学习交流社区平台系统 是一套完善的系统源码&#xff0c;对理解JSP java serlvet dao bean MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系统主要采用B/S模式开发。 研究的基本内…

wsl中docker自启动

前言 wsl -l -v # 查看 wsl 的状态 wsl -t Ubuntu # 关闭指定版本 wsl -d Ubuntu # 启动指定版本 启动 docker 通过命令 ps -p 1 -o comm 我们知道我们用的是 init&#xff0c;故我们将 systemd 命令修改为 SysV init命令。 ps -p 1 -o comm 更换命令&#xff0c;用SysV in…

NLP作业02:课程设计报告

作业头 这个作业属于哪个课程自然语言处理这个作业要求在哪里NLP作业02&#xff1a;课程设计报告我在这个课程的目标实现基于Seq2Seq注意力机制的聊天机器人这个作业在哪个具体方面帮助我实现目标问题的提出&#xff0c;资料的查找参考文献1.简说Seq2Seq原理以及实现 2.序列到…