基于SSM作业提交与批改

基于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进行一个整理。我们只是根据测试的目的,把所需要整理的问题进行一个优先级的排序,通过优先级来讲程序的问题进行一个汇总解决。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware下建立CentOS 7

1.点击新建虚拟机 2.下一步 3.选择号安装程序光盘映像文件位置&#xff0c;下一步 4.选择版本和操作系统然后下一步 5.编辑虚拟机名称并选择安装位置&#xff0c;然后下一步 6.设置最大磁盘大小&#xff0c;下一步 7.点击完成 8.点击编辑虚拟机设置 9.将此虚拟机内存设置为2G&a…

DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构

目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试&#xff0c;加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时&#xff0c;确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…

Div2 D. Effects of Anti Pimples

解题思路 将由小到大排序若不考虑绿色的情况则为最大值的情况为&#xff0c;即选择在它之前的点对于同时选,会被统计贡献时考虑考虑绿色&#xff0c;对于每个&#xff0c;若选则均选对于每个预处理出&#xff0c;记作对由小到大排序为答案的情况为 …

Codigger用户篇:安全、稳定、高效的运行环境(一)

在当今数字化时代&#xff0c;个人数据的安全与隐私保护显得尤为重要。为了满足用户对数据信息的安全需求&#xff0c;我们推出Codigger分布式操作系统&#xff0c;它提供了一个运行私有应用程序的平台&#xff0c;旨在为用户提供一个安全、稳定、高效的私人应用运行环境。Codi…

基于Weibull、Beta、Normal分布的风、光、负荷场景生成及K-means场景削减方法

目录 一、主要内容&#xff1a; 二、代码运行效果&#xff1a; 三、Weibull分布与风机风速&#xff1a; 四、Beta分布与光伏辐照度&#xff1a; 五、Normal分布与电负荷&#xff1a; 六、K-means聚类算法&#xff1a; 七、完整代码数据下载&#xff1a; 一、主要内容&am…

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统&#xff08;一&#xff09;功能简介原理图设计程序设计 哔哩哔哩&#xff1a; https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

系列学习前端之第 6 章:一文掌握 jQuery(熟悉即可)

前言&#xff1a;为什么说 jQuery 熟悉即可&#xff0c;已日渐过时&#xff1f; 作为前端开发中常用的两个库或框架&#xff1a;Vue.js 和 jQuery。不少开发者想要学习 Vue.js 时&#xff0c;都会有一个疑惑&#xff1a;学习 Vue.js 是否一定要学习 jQuery&#xff1f; 从几个…

(五)图像的标准假彩色合成

环境&#xff1a;Windows10专业版 IDEA2021.2.3 jdk11.0.1 GDAL(release-1928-x64-gdal-3-5-2-mapserver-8-0-0) OpenCV-460.jar 系列文章&#xff1a; &#xff08;一&#xff09;PythonGDAL实现BSQ&#xff0c;BIP&#xff0c;BIL格式的相互转换 &#xff08;二&#xff…

【测试开发学习历程】第一个Python程序(下)

6 Python的标识符&#xff0c;命名规则与规范 标识符&#xff1a;python中的标识符是用于识别变量、函数、类、模块以及其他对象的名字叫标识符。 命名规则&#xff1a;所有需要自己命名的地方都必须要遵守以下规则 可以包含数字、字母、_&#xff0c;但是不能以数字开头&…

<c语言学习>数据文件操作

数据文件 按文件功能讲&#xff0c;计算机的文件分为程序文件和数据文件&#xff0c;数据文件操作以下简称文件操作。 程序文件&#xff1a; 包括源程序文件&#xff08;后缀为.c&#xff09;,目标文件&#xff08;windows环境后缀为.obj&#xff09;,可执行程序&#…

使用npm仓库的优先级以及.npmrc配置文件的使用

使用npm仓库的优先级以及.npmrc配置文件的使用 概念如何设置 registry&#xff08;包管理仓库&#xff09;1. 设置项目配置文件2. 设置用户配置文件3. 设置全局配置文件4. .npmrc文件可以配置的常见选项 概念 npm&#xff08;Node Package Manager&#xff09;是一个Node.js的…

2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度&#xff0c;又有技术细节、数学原理的关于深度学习的书籍&#xff0c;供自己学习&#xff0c;也推荐给我的学生学习。虽浏览文献无数&#xff0c;但一直没有心仪的目标。两周前&#xff0c;刘升容女士将她的译作《深度学习计…

爬虫实践(1)

这一篇只提登录模拟&#xff0c;主要介绍chrome开发者窗口的使用&#xff0c;实际上相关接口调用都是用到cookie&#xff0c;需要再加一篇从token到cookie&#xff0c;以保证实践的完整性 以migu登录为例&#xff0c;分析其登录过程&#xff0c;之后可以使用任意语言模拟登录&…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 1 1&#xff0c;最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…

Linux实现m4a格式转换为wav格式

需要在linux上安装ffmpeg 参考博客 Linux上安装ffmpeg修改环境变量【这一点很重要&#xff0c;自己因为没有添加环境变量&#xff0c;捣鼓了很长时间】 将ffmpeg的绝对路径添加到 PATH 环境变量中&#xff0c;以让系统能找到ffmpeg的安装路径。 # /home//project/ffmpeg-6.1-a…

数据库安全性

背景&#xff1a;数据库的一大特性就是数据共享&#xff0c;这样我们就不能不考虑数据库的安全性问题。 1.数据库的不安全因素 1.1非授权用户对数据库的恶意存取和破坏 一些黑客&#xff08;Hacker&#xff09;和犯罪分子在用户存取数据库时猎取用户名和用户 口令&#xff0…

图像处理与视觉感知---期末复习重点(4)

文章目录 一、图像复原与图像增强1.1 概述1.2 异同点 二、图像复原/退化模型2.1 模型图简介2.2 线性复原法 三、彩色基础四、彩色模型五、彩色图像处理 一、图像复原与图像增强 1.1 概述 1. 图像增强技术一般要利用人的视觉系统特性&#xff0c;目的是取得较好的视觉效果&…

canvas跟随鼠标画有透明度的矩形边框

提示&#xff1a;canvas跟随鼠标画有透明度的矩形边框 文章目录 前言一、跟随鼠标画有透明度的矩形边框总结 前言 一、跟随鼠标画有透明度的矩形边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

Hana数据库 No columns were bound prior to calling SQLFetch or SQLFetchScroll

在php调用hana数据库的一个sql时报错了&#xff0c;查表结构的sql&#xff1a; select * from sys.table_columns where table_name VBAP SQLSTATE[SL009]: <<Unknown error>>: 0 [unixODBC][Driver Manager]No columns were bound prior to calling SQLFetch …