基于SSM的在线作业管理系统 -octopus-master(源码+调试)

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题,今天给大家介绍一篇基于SSM的在线作业管理系统设计与实现。

功能需求

本在线作业管理系统通过分析和确定系统的角色和功能划分,按照业务合理区分为不同的菜单功能模块。从用户角度出发,对每个功能的需求实现点进行人性化详细的构思。对每个功能的细节点进行分析设计整合完成整个在作业系统的设计。
这两类的主要功能如下:
根管理员端:1)管理注册学生。2)管理注册教师。3)管理题库。4)管理课程。5)管理公告。6)管理班级。7)修改密码。等等

教师端:1)管理题库:题库类型包括选择题 判断题和简答题,题库中的题目对应不同的课程;
2)作业管理:从题库中搜索选择对应课程的题目发布作业
3)统计成绩:汇总班级成绩且导出成绩表;
4)发布公告:向学生发送公告。
5)个人信息修改、登录密码修改

学生端:1)查看公告;
2)查看个人课程,个人可以自己报名选择课程
3)个人信息修改、登录密码修改
4)在线完成作业,可查看成绩和答案。
等等具体以图片中的功能为主

部分效果图

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部分代码

@Controller
public class StudentExamController {int tihao = 0;@Autowiredprivate StudentExamService studentExamService;@Autowiredprivate ManagerScoreService managerScoreService;@RequestMapping(value = "/toStudentExam.action")public String handlerExam(Integer id, String user_sno, HttpServletRequest request) {ArrayList<Question> listAll = new ArrayList<Question>();Paper paper = studentExamService.findPaperById(id);int numSing = 0;int numMuti = 0;int numJud = 0;int numFill = 0;int numEss = 0;int time = 0;numSing = paper.getQty_sing();numMuti = paper.getQty_muti();numJud = paper.getQty_jud();numFill = paper.getQty_fill();numEss = paper.getQty_ess();time = paper.getQty_time();
//        将每种题目按照题目类型存储LinkedList<Question> listSing = new LinkedList<Question>();LinkedList<Question> listMuti = new LinkedList<Question>();LinkedList<Question> listJud = new LinkedList<Question>();LinkedList<Question> listFill = new LinkedList<Question>();LinkedList<Question> listEss = new LinkedList<Question>();List<Question> questions = studentExamService.findQuestion();for (Question question : questions) {switch (question.getType()) {case "单选题":listSing.add(question);break;case "多选题":listMuti.add(question);break;case "判断题":listJud.add(question);break;case "填空题":listFill.add(question);break;default:listEss.add(question);break;}}
//        System.out.println("单:" + listSing.size());
//        System.out.println("多:" + listMuti.size());
//        System.out.println("判:" + listJud.size());
//        System.out.println("简:" + listEss.size());
//        System.out.println("填:" + listFill.size());listAll.addAll(randomQue(listSing, numSing));listAll.addAll(randomQue(listMuti, numMuti));listAll.addAll(randomQue(listJud, numJud));listAll.addAll(randomQue(listFill, numFill));listAll.addAll(randomQue(listEss, numEss));
//        System.out.println("全:" + listAll.size());tihao = 0;HttpSession session = request.getSession();//判断用户参加考试的次数User user = (User) session.getAttribute("USER_SESSION");user_sno = user.getSno();Score score = new Score();score.setUser_sno(user_sno);score.setPaper_id(id);Integer number = Integer.valueOf(0);number = studentExamService.examCount(score);session.setAttribute("paper",paper);session.setAttribute("number", number);session.setAttribute("examTime", time);session.setAttribute("ques", listAll);return "Student/student_exam_info";}public ArrayList<Question> randomQue(LinkedList<Question> list, int count) {ArrayList<Question> listA = new ArrayList<Question>();while (list.size() > 0 && count > 0) {count--;int m = (int) (Math.random() * list.size());Question question = list.get(m);list.remove(m);tihao++;question.setId(String.valueOf(tihao));String selectString = question.getSel();if (selectString != null) {String[] temp = selectString.split("\\@");question.setOptions(temp);}listA.add(question);}return listA;}@RequestMapping(value = "/calScore.action")public String calScore(HttpServletRequest request) {HttpSession session = request.getSession();Score userScore = new Score();ArrayList<Question> questions = (ArrayList<Question>) session.getAttribute("ques");User user = (User) session.getAttribute("USER_SESSION");Paper paper = (Paper) session.getAttribute("paper");String stuAnsArr[] = null;double score = 0;double score_muti = 0;double score_sing = 0;double score_jud = 0;double score_fill = 0;double score_ess = 0;for (int i = 0; i < questions.size(); ++i) {Question question = questions.get(i);stuAnsArr = request.getParameterValues(question.getId());if (!question.getType().equals("简答题")) {if (stuAnsArr != null) {String stuAns = "";for (int j = 0; j < stuAnsArr.length; j++) {stuAns += stuAnsArr[j];}//System.out.println(stuAns);if (stuAns.equalsIgnoreCase(question.getAnswer())) {switch (question.getType()) {case "单选题":score_sing += question.getScore();score += score_sing;break;case "多选题":score_muti += question.getScore();score += score_muti;break;case "判断题":score_jud += question.getScore();score += score_jud;break;case "填空题":score_fill += question.getScore();score += score_fill;break;default:break;}}}} else {//简答题的判断方法//拆分正确答案中的关键词String[] KEY_WORD = question.getAnswer().split("\\@");//获取简答题分值Integer totalScore = question.getScore();//每个的分点的细分int singleScore = 0;String stuAns = "";if (stuAnsArr != null) {for (int j = 0; j < stuAnsArr.length; j++) {//组装学生答案stuAns += stuAnsArr[j];}}// 使用contains方法//如果关键词存在if (KEY_WORD != null) {//按照关键词数量细分分值singleScore = totalScore / KEY_WORD.length;for (int j = 0; j < KEY_WORD.length; j++) {//判断考生答案中是否出现关键词if (stuAns.contains(KEY_WORD[j])) {//System.out.println(stuAns + "包含关键词:" + KEY_WORD[j]);score_ess += singleScore;score += score_ess;} else {System.out.println("不包含关键词:" + KEY_WORD[j]);}}}}}userScore.setUser_sno(user.getSno());userScore.setPaper_id(paper.getId());userScore.setScore_sing(score_sing);userScore.setScore_muti(score_muti);userScore.setScore_jud(score_jud);userScore.setScore_fill(score_fill);userScore.setScore_ess(score_ess);userScore.setScore(score);session.setAttribute("score",userScore);int rows = managerScoreService.createScore(userScore);if (rows > 0){return "Student/student_exam_after";}else{return "Student/student_exam";}}
}
安装部署需求

IDEA运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在IDEA中配置运行;

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL5.7
4.框架:SSM

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse
语言 JDK1.8 、java
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

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

相关文章

医学影像类和医用电气设备测试标准整理

医学影像类和医用电气设备测试标准整理 1、GB 9706.225-2022 医用电气设备 第2-25部分:心电图机的基本安全和基本性能专用要求 GB 9706.225规定了在201.3.63中定义的通过自身或作为ME系统一部分,提供可供诊断用的心电图报告的心电图机基本安全和基本性能,以下称为ME设备。 …

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT&#xff1a;下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 &#xff08;1&#xff09;全维度性能升级 &#xff08;2&#xff…

3^100的位数判断

3^100的位数判断 问题来源 字节面试&#xff0c;面试官提问&#xff1a;口算估计3^100的位数&#xff0c;或是给出位数估计范围。 解决方案 方法一&#xff1a; 该方法纯口算&#xff0c;可得一个较为准确的一个范围 2 100 < 3 100 < 4 100 2^{100}<3^{100}<…

ROS2简介与Ubuntu24.04中安装指南

之前安装了一个版本&#xff0c;但是不愿意写blog&#xff0c;现在想想自己就是个沙子立个flag&#xff0c;每次配置项目&#xff0c;写流程blog ROS简介 ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人软件平台&#xff0c;提供了许多工具和库来帮助…

Linux sudo命令及权限设置

普通用户的权限是有限制的&#xff0c;需要更大的权限&#xff0c;就需要使用 root 用户&#xff0c;但又不想一直使用 root 用户&#xff0c;如普通用户查看 8080 端口的监听情况&#xff1a; netstat -tulnp | grep :8080 只能查看自己的 不想用 root 用户&#xff0c;继续…

微服务网关的认证管理;原理与实践

API安全认证是网关的最重要能力 API 网关为了保护对外提供的API&#xff0c;避免诸如恶意访问、未授权访问、应用漏洞及黑客攻击等导致的数据和资产损失&#xff0c;采用API网关的认证机制显得十分必要。 这种认证机制通过基于token的身份验证来实现&#xff0c;它允许应用程…

STM32 + CubeMX + 硬件SPI + W5500 +TcpClient

这篇文章记录一下STM32W5500TCP_Client的调试过程&#xff0c;实现TCP客户端数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程&#xff08;添加方法不赘述&#xff0c;驱动代码可以在官网找&#xff09;2、在工程中增…

微信小程序中,点击视频,没有跳转播放,可能是因为没有在app.json中正确注册视频播放页面的路径

const customMethodMap {handlePreview(e) {const { item: { url } } e?.currentTarget?.datasetconsole.log(Clicked item URL:, url); // 输出URLconst type url.split(.)[url.split(.)?.length - 1]console.log(File type:, type); // 输出文件类型console.log(isDoc(…

软件体系结构

第一章 构件 具有某种功能的 可复用的软件结构单元,为组装服务,可部署,具有规范的接口规约和显式的语境依赖 构件模型 构件模型是对构件本质特征的抽象描述&#xff0c;可以把它想象成一个类的组合&#xff0c;它封装了多个类&#xff0c;并具有一个或多个服务而提供了简单…

Spark 的Standalone集群环境安装与测试

目录 一、Standalone 集群环境安装 &#xff08;一&#xff09;理解 Standalone 集群架构 &#xff08;二&#xff09;Standalone 集群部署 二、打开监控界面 &#xff08;一&#xff09;master监控界面 &#xff08;二&#xff09;日志服务监控界面 三、集群的测试 &a…

react的antd-mobile使用Steps显示物流

antd-mobile的图标&#xff0c;是需要安装依赖的 step如果只有一个步骤是不会展示的&#xff0c;代码里面的标题那块可以看出来 尝试了很多遍测试发现一直不显示&#xff0c;查询后发现是这个组件的本身设置的原因 那么就算你只展示一个那么也要写两个step&#xff0c;第二个…

基于鸟类AI识别的果园智能物联网解决方案

1. 项目背景 我国拥有广阔的果园种植面积&#xff0c;但每年因鸟类造成的损失高达数亿元。传统的防鸟害措施&#xff0c;如建立防护网和使用物理化学方法&#xff0c;效果并不理想&#xff0c;且成本较高。为了解决这一问题&#xff0c;深圳快瞳科技有限公司的提出基于鸟类AI识…

让Erupt框架支持.vue文件做自定义页面模版

Erupt是什么&#xff1f; Erupt 是一个低代码 全栈类 框架&#xff0c;它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等后台功能。 零前端代码、零 CURD、自动建表&#xff0c;仅需 一个类文件 简洁的注解配置&#xff0c;快速开发企业级 Admin 管理后台。 提…

如何优雅处理异常?处理异常的原则

前言 在我们日常工作中&#xff0c;经常会遇到一些异常&#xff0c;比如&#xff1a;NullPointerException、NumberFormatException、ClassCastException等等。 那么问题来了&#xff0c;我们该如何处理异常&#xff0c;让代码变得更优雅呢&#xff1f; 1 不要忽略异常 不知…

DBAPI连接阿里云 maxcompute 报错

使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar &#xff0c;这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar&#xff0c;这个不是完整的&#xff0c;它还…

2024最新Python安装教程+Pycharm安装教程【附安装包】

Python安装 1.首先下载好Python安装包 获取方式&#xff1a;点击这里&#xff08;扫描神秘②薇码免下载&#xff09;完全免费&#xff01;&#xff01;&#xff01; 2.打开安装包&#xff0c;先勾选最下面两个选项&#xff0c;再选择第二个自定义安装 3.这里默认全选&#xff…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片&#xff08;Shard&#xff09;&#xff1a; 将索引数据分割成多个部分&#xff0c;每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理&#xff0c;从而提高系统的扩展性和性能。 在创建索…

JAVA基础:数组 (习题笔记)

一&#xff0c;编码题 1&#xff0c;数组查找操作&#xff1a;定义一个长度为10 的一维字符串数组&#xff0c;在每一个元素存放一个单词&#xff1b;然后运行时从命令行输入一个单词&#xff0c;程序判断数组是否包含有这个单词&#xff0c;包含这个单词就打印出“Yes”&…

【学习】使用webpack搭建react项目

前言 在日常工作中&#xff0c;我大多是在已有的项目基础上进行开发&#xff0c;而非从头构建项目。因此&#xff0c;我期望通过本次学习能填补我在项目初始化阶段知识的空白&#xff0c;与大家共同进步。在此过程中&#xff0c;我欢迎并感激任何指正或建议&#xff0c;无论是…

什么是人工智能体?

人工智能体&#xff08;AI Agent&#xff09;是指能够感知环境、做出决策并采取行动以实现特定目标的自主实体。以下是对人工智能体的具体介绍&#xff1a; 定义与核心概念 智能体的定义&#xff1a;智能体&#xff0c;英文名为Agent&#xff0c;是指具有智能的实体&#xff0…