基于SSM作业提交与批改

news2024/12/23 11:23:43

基于SSM作业提交与批改的设计与实现

摘要

社会的进步导致人们对于学习的追求永不止境,那么追求学习的方式也从单一的书本教程变成了多样化的学习方式。多样化的学习方式不仅仅是需要人们智慧的依靠,还需要能够通过软件的加持进行信息化的价值体现。软件和系统的产生,从表面上来看是方便了某一行业和某一行业的用户,其实是从本质上来说是提高了社会的进步。就拿我们常见的出行而言,滴滴出行看似是为了打车和出行的人方便,但其实通过另外一种程度上来说,可以通过软件应用的调度和发展来为社会、城市出行的发展做出巨大的贡献。我们国家从最早的中国制造业演变到现在的“智造”,就是因为有软件信息系统的价值,能够将一些智慧的因素加入到制造的过程当中,而这一点就是软件系统来改变生产和现实的需求。在计算机时代日益发展的今天,计算机网络正快速融入这个社会的每一个领域。学习也成为大家生活当中必不可少的一种习惯,但面对学习的方式,我们往往是依靠书本或者是教师上课的形式进行讲解,老师批改作业的过程当中难能够将每一位学生的思路看明白,而且面对学生如此之多,老师的工作量也是非常大的,为此开发和设计SSM作业提交与批改,该系统内容丰富多彩,用户可以在线进行作业批改等。本文还是使用JSP的方式来进行管理的,但在系统建设过程当中也考虑了许许多多信息安全的保护。

系统实现页面

首页

后台管理系统页面 

老师信息 

作业信息添加 

相关技术介绍 

SSM技术

Java语言之所以能够被程序爱好者喜欢和使用,是因为它在语法和框架的不断演变中逐渐提升其强大的功能。此次的设计呢,我们采用的是SSM框架。那么SSM框架也是Java开发框架当中的一个典型,那么分别就将SSM这三个字母进行一个简单介绍。首先,第一个S是Spring。第二个S是SpringMVC。第三个M是MyBatis。它们三个字母分别代表折Java体系中的三大类型,那么spring是Java的黏合剂,他的思想就是控制反转和面向切片编程,那么spring mvc里边呢?无需多介绍,他的核心其实相当于SSH框架中的struts,其实起到一个三层架构访问的形式,提供的更多是一种规范约束。最后是MyBatis,它是持久化框架中的一种,通过它可以和数据库永久的交互,那么交互起来也更加方便。那么每一项技术的加持形成了框架的组合,给程序员带来的是框架性的解决问题。

MySQL数据库介绍

在关系型数据库当中有一种数据库对于技术的发展和贡献有着非常大的影响,它就是MYSQL数据库。之所以它的地位非常的重要是因为它本身所拥有的特性是我们所不能忽略的。首先做为开源而且免费的数据库之一来说,无论是用运在商业场景当中还是用在我们个人的毕业设计上都是没有问题的,其次,开源免费只是它的一个基本特征更重要的一点原因就是它可以轻松容易的上手解决各种各样的问题。无论是简单的增、删、改、查还是复杂的存储过程这些问题都不在话下。那么对于此次的设计而言呢如果遇到问题查找资料或者解决问题的方法相对来说也比较多一点,所以此次也就使用了MSYQL数据库。

网络安全环境

我们都知道,对于一个作业提交与批改系统来说,不仅系统功能和非常重要,高性能的网络安全环境也是非常重要,网络安全的环境是直接影响应用系统是否安全的关键因素,但网络安全的保证是要从软件、硬件等各个方面进行一个有效性的综合提升。在专业的应用服务器中所必要的防火墙以及网络设备是必须要存在的,且在应用服务器当中与应用无关的所有端口号都要进行一定的屏蔽。对于内外网之间也要进行一个有效的隔离。在应用服务器中,所有的操作日志需定期进行一个有效的记录,具备应用审计、审查等功能。同时,在应用服务器当中应该有足够大的存储空间来为应用服务器进行一个灾备。防止意外发生时,能够及时有效地将应用服务器当中的所有内容进行一个恢复。所以说,那么SSM作业提交与批改等网络环境安全方面,我们一定要有一个保障,才能安安心心的做网站的开发

部分源码

package com.controller;

import java.io.File;
import java.io.IOException;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.PrintWriter;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.entity.Xinwentongzhi;
//import com.chengxusheji.po.News;
import com.server.XinwentongzhiServer;
import com.util.PageBean;
import net.sf.json.JSONObject;

@Controller
public class XinwentongzhiController {
	@Resource
	private XinwentongzhiServer xinwentongzhiService;


//	
   @RequestMapping("showXinwentongzhi.do")
   public String showXinwentongzhi(int id,ModelMap map,HttpSession session){
	 /*  Map<String,Object> bmap=new HashMap<String,Object>();
	   bmap.put("uid", id);*/
	  // map.put("blist", xinwentongzhiService.getAll(bmap));
	   map.put("xinwentongzhi", xinwentongzhiService.getById(id));
	   return "read";
   }
   
	@RequestMapping("addXinwentongzhi.do")
	public String addXinwentongzhi(HttpServletRequest request,Xinwentongzhi xinwentongzhi,HttpSession session){
		Timestamp time=new Timestamp(System.currentTimeMillis());
		//Users u=(Users)session.getAttribute("user");
		/*if(u==null||u.equals("")){
			return "redirect:showIndex.do";
		}else{*/
			
		    xinwentongzhi.setAddtime(time.toString().substring(0, 19));
			xinwentongzhiService.add(xinwentongzhi);
			session.setAttribute("backxx", "添加成功");
			session.setAttribute("backurl", "xinwentongzhiList.do?lb="+request.getParameter("leibie"));
			return "redirect:postback.jsp";
		/*}*/
		
		
	}
 
//	处理编辑
	@RequestMapping("doUpdateXinwentongzhi.do")
	public String doUpdateXinwentongzhi(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
		xinwentongzhi=xinwentongzhiService.getById(id);
		map.put("xinwentongzhi", xinwentongzhi);
		return "xinwentongzhi_updt";
	}
	
	//	后台详细
	@RequestMapping("XinwentongzhiDetail.do")
	public String XinwentongzhiDetail(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
		xinwentongzhi=xinwentongzhiService.getById(id);
		map.put("xinwentongzhi", xinwentongzhi);
		return "xinwentongzhi_detail";
	}
//	前台详细
	@RequestMapping("xwtzDetail.do")
	public String xwtzDetail(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
		xinwentongzhi=xinwentongzhiService.getById(id);
		map.put("xinwentongzhi", xinwentongzhi);
		return "gg_detail";
	}
	
//	
	@RequestMapping("updateXinwentongzhi.do")
	public String updateXinwentongzhi(int id,ModelMap map,Xinwentongzhi xinwentongzhi,HttpServletRequest request,HttpSession session){
		xinwentongzhiService.update(xinwentongzhi);
		//return "redirect:xinwentongzhiList.do";
		session.setAttribute("backxx", "修改成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";
	}
//	所有List
//	@RequestMapping("xinwentongzhiList.do")
//	public String xinwentongzhiList(ModelMap map,HttpSession session){
//		map.put("list", xinwentongzhiService.getAll(null));
//		map.put("clist", xinwentongzhiService.getAll(null));
//		return "xinwentongzhi";
//	}
//	分页查询
	@RequestMapping("xinwentongzhiList.do")
	public String xinwentongzhiList(@RequestParam(value="page",required=false)String page,
			ModelMap map,HttpSession session,Xinwentongzhi xinwentongzhi, String biaoti, String leibie, String neirong, String shouyetupian, String dianjilv, String tianjiaren,String lb){
		/*if(session.getAttribute("user")==null){
			return "login";
		}*/
		if(page==null||page.equals("")){
			page="1";
		}
		PageBean pageBean=new PageBean(Integer.parseInt(page), 5);
		Map<String, Object> pmap=new HashMap<String,Object>();
		pmap.put("pageno", pageBean.getStart());
		pmap.put("pageSize", 20);
	
		if(biaoti==null||biaoti.equals("")){pmap.put("biaoti", null);}else{pmap.put("biaoti", biaoti);}
		if(leibie==null||leibie.equals("")){pmap.put("leibie", null);}else{pmap.put("leibie", leibie);}
		if(lb==null||lb.equals("")){pmap.put("lb", null);}else{pmap.put("lb", lb);}
		if(neirong==null||neirong.equals("")){pmap.put("neirong", null);}else{pmap.put("neirong", neirong);}
		if(shouyetupian==null||shouyetupian.equals("")){pmap.put("shouyetupian", null);}else{pmap.put("shouyetupian", shouyetupian);}
		if(dianjilv==null||dianjilv.equals("")){pmap.put("dianjilv", null);}else{pmap.put("dianjilv", dianjilv);}
		if(tianjiaren==null||tianjiaren.equals("")){pmap.put("tianjiaren", null);}else{pmap.put("tianjiaren", tianjiaren);}
		
		int total=xinwentongzhiService.getCount(pmap);
		pageBean.setTotal(total);
		List<Xinwentongzhi> list=xinwentongzhiService.getByPage(pmap);
		map.put("page", pageBean);
		map.put("list", list);
		session.setAttribute("p", 1);
		return "xinwentongzhi_list";
	}

	@RequestMapping("xwtzList.do")
	public String xwtzList(@RequestParam(value="page",required=false)String page,
			ModelMap map,HttpSession session,Xinwentongzhi xinwentongzhi, String biaoti, String leibie, String neirong, String shouyetupian, String dianjilv, String tianjiaren,String lb){
		/*if(session.getAttribute("user")==null){
			return "login";
		}*/
		if(page==null||page.equals("")){
			page="1";
		}
		PageBean pageBean=new PageBean(Integer.parseInt(page), 20);
		Map<String, Object> pmap=new HashMap<String,Object>();
		pmap.put("pageno", pageBean.getStart());
		pmap.put("pageSize", 20);
	
		if(biaoti==null||biaoti.equals("")){pmap.put("biaoti", null);}else{pmap.put("biaoti", biaoti);}
		if(leibie==null||leibie.equals("")){pmap.put("leibie", null);}else{pmap.put("leibie", leibie);}
		if(lb==null||lb.equals("")){pmap.put("lb", null);}else{pmap.put("lb", lb);}
		if(neirong==null||neirong.equals("")){pmap.put("neirong", null);}else{pmap.put("neirong", neirong);}
		if(shouyetupian==null||shouyetupian.equals("")){pmap.put("shouyetupian", null);}else{pmap.put("shouyetupian", shouyetupian);}
		if(dianjilv==null||dianjilv.equals("")){pmap.put("dianjilv", null);}else{pmap.put("dianjilv", dianjilv);}
		if(tianjiaren==null||tianjiaren.equals("")){pmap.put("tianjiaren", null);}else{pmap.put("tianjiaren", tianjiaren);}
		
		int total=xinwentongzhiService.getCount(pmap);
		pageBean.setTotal(total);
		List<Xinwentongzhi> list=xinwentongzhiService.getByPage(pmap);
		map.put("page", pageBean);
		map.put("list", list);
		session.setAttribute("p", 1);
		return "news";
	}
	@RequestMapping("deleteXinwentongzhi.do")
	public String deleteXinwentongzhi(int id,HttpServletRequest request,HttpSession session){
		xinwentongzhiService.delete(id);
		return "redirect:"+request.getHeader("Referer");
	}
	
	
}

可行性分析 

运行可行性从一定程度上来讲就是应用系统。通过开发和实现起来,在其服务器上是否能够运行,其实,运行可行性还主要是有经济可行性和软件的操作可行性等技术可行性支撑而言。首先,在技术可行性中,如果能够实现的话就能够表明业务所需要的处理角度或者范围都能够通过技术而实现,那么我们把这些可行性最终综合到应用服务器当中,达到运行可行性的需求。本文其实在应用服务器中的运行可行性就是一台普通的电脑,它的请求并发量并不是很大,所以运行可行性是可行的。

功能需求

基于SSM作业提交与批改主要还是与采用后台的一个管理形势,通过不同角色来区分,主要有管理员、学生和老师。学生的主要功能有个人资料管理、作业成绩管理、作业管理。管理员的主要功能有系统用户管理、学生管理和老师管理。老师的主要功能有个人资料管理、作业成绩管理、作业管理。

测试

系统的测试目的就是为了让能够让系统的功能更加完善,能够让我们所做的功能补充在bug,这一点是非常重要的。测试的目的就是为了能够在系统上线之前,把所有的严重性bug和非严重性bug进行一个整理。我们只是根据测试的目的,把所需要整理的问题进行一个优先级的排序,通过优先级来讲程序的问题进行一个汇总解决。

我们通常进行的程序测试,包括白盒测试、黑盒测试都是相关的测试方法。首先,什么是白盒测试,什么是黑盒测试呢?不懂测试或者没有从事软件开发工作的朋友们可能不太清楚,那么对于白盒测试呢,就是简单的理解为可以通过肉眼进行一个我们代码结构或者布局的设计。然后通过简单的方式来对我们的整体结构和代码进行一个判断,是否存在漏洞或者存在有不合理的地方。黑河测试就是我们要通过实际的用例测试才能知道具体的业务流程是否准确,那么我们就从这几方面进行,比如说登录模块,点进去用户名、密码和验证码之后,是否能够按照要求跳入到指定页面。那么,对于增加信息或者修改信息,能否通过对应的信息录入实现信息的修改和增加。对于做了物理的删除功能来说,我们要通过删除信息来判断是否数据库真正进行了删除,然后所有的数据是否进行清空等等。

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

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

相关文章

uniapp开发小程序遇到的问题,持续更新中

一、uniapp引入全局scss 在App.vue中引入uni.scss <style lang"scss">/* #ifndef APP-NVUE */import "uni.scss";/* #endif */ </style>注意&#xff1a;nvue页面的样式在编译时&#xff0c;有很多样式写法被限制了&#xff0c;容易报错。所…

干货分享DS5L1伺服电机通过倍讯科技485转 Profinet 网关与西门子PLC进行通信的配置方法

倍讯科技485转 ProfinetDS5L1 伺服电机与 Profinet 网关进行通信需要了解 Profinet 协议和伺服电机的具体通信要求。以下是您可以如何解决此问题的总体概述&#xff1a; 了解 Profinet&#xff1a;Profinet 是自动化工业以太网标准。您需要了解 Profinet 的工作原理、其寻址方案…

2024 解决 Failed to launch process [ElasticSearch]

操作系统&#xff1a;centos 7 (x86) sonarQube不能使⽤root账号进⾏启动&#xff0c;所以需要创建普通⽤户及其⽤户组 一、问题描述&#xff1a;使用root启动时&#xff0c;一直反馈 SonarQube is not running 问题原因&#xff1a;不能够使用root用户进行启动 解决方案…

三点估算计算

当历史数据不充分时&#xff0c;通过考虑估算中的不确定性和风险&#xff0c;可以提高活动持续时间估算的准确性。使用三点估算有助于界定活动持续时间的近似区间: 乐观时间&#xff08;Optimistic Time&#xff0c;To&#xff09;&#xff1a;在任何事情都顺利的情况下&#…

DFS深度优先搜索刷题(二)

一.P1683 入门 算法思想&#xff1a;设置瓷砖状态st&#xff0c;这里瓷砖状态是否走过决定计数与否&#xff0c;因为可以重复走过但只记一次&#xff0c;所以可以不用回溯。每一次dfs都记录此时的坐标与进入可能的新坐标。 const int N 25;int W, H; char map[N][N];//存地图…

20240319-2-机器学习基础面试题

⽼板给了你⼀个关于癌症检测的数据集&#xff0c;你构建了⼆分类器然后计算了准确率为 98%&#xff0c; 你是否对这个模型很满意&#xff1f;为什么&#xff1f;如果还不算理想&#xff0c;接下来该怎么做&#xff1f; 首先模型主要是找出患有癌症的患者&#xff0c;模型关注的…

苹果与百度合作,将在iPhone 16中使用生成式AI

3月25日&#xff0c;《科创板日报》消息&#xff0c;苹果将与百度进行技术合作&#xff0c;为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI&#xff08;AIGC&#xff09;功能。 据悉&#xff0c;苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…

机器学习模型及其使用方法——《机器学习图解》

本书教你两件事——机器学习模型及其使用方法 机器学习模型有不同的类型&#xff0c;有些返回确定性的答案&#xff0c;例如是或否&#xff0c;而另一些返回概率性的答案。有些以问题的形式呈现&#xff1b;其他则使用假设性表达。这些类型的一个共同点是它们都返回一个答案或…

单链表专题(上)(顺序表链表线性表)

在开始之前思考一个顺序表的问题 1. 中间/头部的插⼊删除&#xff0c;时间 复杂度为O(N) 2. 增容需要申请新空间&#xff0c;拷⻉数据&#xff0c;释放旧空间。会有不⼩的消耗。 3. 增容⼀般是呈2倍的增⻓&#xff0c;势必会有⼀定的空间浪费。例如当前容量为100&#xff0c;…

HTML(二)---【常见的标签使用】

零.前言 本文只介绍常见的标签使用&#xff0c;其中使用的一些HTML专业术语可以在作者的第一篇文章&#xff1a; HTML&#xff08;一&#xff09;---【基础】-CSDN博客中找到。 一.<b>粗体、<i>或<em>斜体 1.定义 粗体、斜体的实现可以在CSS中实现&…

DaisyDisk for mac 苹果电脑磁盘清理工具

DaisyDisk for Mac是一款直观易用的磁盘空间分析工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助他们快速识别和管理磁盘上的文件与文件夹&#xff0c;从而释放存储空间。 软件下载&#xff1a;DaisyDisk for mac 激活版 DaisyDisk采用独特的可视化界面&#xff0c;将磁盘…

基于uniapp微信小程序我的钱包页面

基于uniapp color ui 页面效果图&#xff1a; 代码部分&#xff1a; https://download.csdn.net/download/kay523393/89035927

微信商家转账到零钱:实用指南,涵盖开通、使用与常见问题

商家转账到零钱是什么&#xff1f; 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱&#xff0c;支持批量对外转账&#xff0c;操作便捷。如果你的应用场景是单付款&#xff0c;体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些&#xff1f; 这…

CMake学习笔记(一)一个最简单的CMakeLists嵌套示例

目录 1 mkdir project_macro 2 在project_marco中建立CMakeLists.txt 3 建立专门的src文件夹 4 在src中添加main.cpp和CMakeLists.txt 5 回到project_macro目录&#xff0c;建立build文件夹 6 进入build 文件夹&#xff0c;开始cmake 7 在build文件夹里执行make指令 8 …

Python7:接口自动化学习1 RPC

API&#xff08;Application Programmming Interface&#xff09; 应用编程接口&#xff0c;简称“接口” 接口&#xff1a;程序之间约定的通信方法 特点&#xff1a;约定了调用方法&#xff0c;以及预期的行为&#xff0c;但是不透露具体细节 意义&#xff1a;程序能解耦&…

自动化脚本-Excel批量生成二维码

演示&#xff1a; Excel二维码批量生成 exe资源文件&#xff1a; 下载exe 代码实现&#xff1a; pip install openpyxl openpyxl 是一个用于读写 Excel 文件的 Python 库 pip install qrcode qrcode 是一个 Python 库&#xff0c;可以用来生成二维码&#xff08;Quick Resp…

【Mybatis 基础】增删改查(@Insert, @Delete, @Update, @Select)

Mybatis Insert Delete Update Select Mybatis用法基础操作 - 删除delete 传参SpringbootMybatisCrudApplicationTests 测试类删除预编译SQL 基础操作 - 插入Insert 插入SpringbootMybatisCrudApplicationTests 测试类插入对象主键返回 基础操作 - 更新UPDATE 更新SpringbootMy…

汽车电子行业知识:智能汽车电子架构

文章目录 3.智能汽车电子架构3.1.汽车电子概念及发展3.2.汽车电子架构类型3.2.1.博世汽车电子架构3.2.2.联合电子未来汽车电子架构3.2.3.安波福汽车电子架构3.2.4.丰田汽车电子架构3.2.5.华为汽车电子架构 3.智能汽车电子架构 3.1.汽车电子概念及发展 汽车电子是车体汽车电子…

8.windows ubuntu 子系统:karken2,bracken微生物物种注释

上次&#xff0c;我们对测序数据去了人源序列。接下来我们就要对去人源的reads进行微生物物种注释。 我们选择karken2和bracken。 首先是建立karken2的数据库&#xff0c;有多种方法。 方法一&#xff1a;kraken2-build --standard --threads 4 --db ./standardDB #时间太…

阿里云国际DDoS高防的定制场景策略

DDoS高防的定制场景策略允许您在特定的业务突增时段&#xff08;例如新业务上线、双11大促销等&#xff09;选择应用独立于通用防护策略的定制防护策略模板&#xff0c;保证适应业务需求的防护效果。您可以根据需要设置定制场景策略。 背景信息 定制场景策略提供基于业务场景…