基于SSM的网上打印管理

摘要

进入二十一世纪以来,计算机技术蓬勃发展,人们的生活发生了许多变化。很多时候人们不需要亲力亲为的做一些事情,通过网络即可完成以往需要花费很多时间的操作,这可以提升人们的生活质量。计算机技术对人们生活的改变不仅仅包含衣食住行等方面,它在各种领域都对现代生活作出了贡献。

在计算机技术快速发展之前,大学生们如果想进行文件或者试卷的打印是非常麻烦的,学生们需要前往学校校内或者校外的打印中心进行打印的操作,但这种进行打印的方式首先效率很低,因为一个打印社里面的电脑和打印机是有限的,大学生们很有可能需要进行很长时间的排队才能进行打印,因为在打印室里有的同学打印的张数比较多,所以提高打印的效率是很重要的,这样一方面可以保证学生们的体验,另一方面也可以帮助打印社的管理人员更好地进行打印社日常工作的维护。

本系统使用JSP语言和MySQL数据库开发,使用的开发框架为SSM框架。本系统的开发可以为各位大学生及打印社的商户提供打印信息查询、资料信息查询、订单管理等多种功能,让人们不需要再出门就可以进行打印资料信息的查看,在极大地满足用户们进行在线打印的需求的同时,还开发了操作视频及新闻信息的显示,让大学生用户名可以更好地学会使用本系统。

关键词:网上打印;SSM;JSP;MYSQL

系统功能实现

首页展示

资料信息浏览 

新闻公告浏览 

个人后台界面 

个人打印管理 

开发工具技术介绍 

本系统的开发框架为B/S架构,与传统的C/S架构相比,它不需要繁琐的安装,并且运行时只需要打开浏览器即可,对电脑的硬件要求和对操作者的要求较低。以往的很多系统使用的都是C/S架构,C/S架构虽然在某些方面表现非常好,但是逐渐被B/S架构取代了,因为C/S架构必须进行安装或者升级之后才可以使用,而B/S架构只需要电脑有浏览器即可使用,所以本系统采用了B/S架构。

本系统的后台语言使用的是JSP,JSP是一种动态编程语言,可以对数据进行增删改查等操作。在JSP、ASP、PHP等动态语言出现之前,很多网站就只能用静态的HTML语言宣传自己的网站,但这种网站不具备数据的存储操作功能,因为无法连接数据库,本系统使用的JSP语言可以与HTML语言有效的结合起来,不仅可以将各类素材展现在页面上,还可以将数据保存在数据库中。

选择JSP技术开发主要因为其有以下几个优点:

(1)首先就是因为JSP的结构清晰、易于理解,而且JSP是面向对象的编程语言,可以使用封装、继承和多态等技术,可以使用类和对象的思想解决很多问题,可以极大的提高编码效率。

(2)选择JSP的第二个原因就是它在浏览器中的响应速度较快,可以提高本系统运行的速度。

(3)选择JSP作为本系统开发技术的第三个原因就是它具备较为稳定的连接数据库的方法,可以使数据稳定地进行存储和更新。

本系统用来进行数据存储的数据库是MYSQL数据库,基本的使用与其他数据库相似。都可以使用表进行数据的存储。除此之外还可以使用存储过程、事务、触发器等对象。以下是MYSQL的几个优点:

(1)首先就是因为MYSQL较为小巧、易于安装和维护,而且MYSQL是完全开源并且免费的,非常适合计算机专业的学生作为学习工具使用,虽然MYSQL小巧但它的查询速度、执行效率都是非常快的。

(2)选择MYSQL的第二个原因就是它具有稳定的查询和存储机制,可以避免因为数据库的原因导致系统的数据出错。

(3)选择MYSQL作为本系统数据库的第三个原因就是它具备较为稳定的与程序进行连接的优点,可以使数据稳定地在系统内进行存储和更新。

需求分析

系统的可行性分析主要目的是在系统立项开始前对系统所做的一系列的评估,综合各项评估决定是否对该项目进行立项。一般来说一个系统的可行性分析主要分为技术可行性、操作可行性及经济可行性等。

一个系统的经济可行性主要是指网站去除成本后还是否可以盈利,该系统为计算机专业大学生的毕业设计,主要目的是为了使用大学四年所学的知识开发出一个有价值的系统,证明自己可以达到毕业的要求。该项目几乎没有任何成本,因为所有的设备及开发软件都为电脑上已安装的免费版本,该项目为非商业项目,所以从经济可行性上分析,本系统是可行的。

系统的技术可行性主要是在开发开始前对本系统所使用的开发环境、开发技术等进行分析,对所有可能遇到的问题进行预估等。本系统的开发环境为自己的个人电脑,所有使用的工具都是平时学习时用过的,所用的开发技术大多数都是大学期间学习过的,如果遇到没有涉及的领域可以通过在CSDN、博客园等技术论坛寻找答案,也可以咨询指导老师。所以从技术层面分析,本系统是可行的。

系统的操作可行性也可以被称为运行可行性,主要对系统运行或操作进行分析。在当前这个电脑走入寻常百姓家的时代,不管是成年人还是小朋友都多多少少对电脑操作略知一二,本系统只要有简单的电脑常识就可以熟练使用,所以说从系统的操作方面是可行的。

部分代码

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.Allusers;
//import com.chengxusheji.po.News;
import com.server.AllusersServer;
import com.util.PageBean;
import net.sf.json.JSONObject;

@Controller
public class AllusersController {
	@Resource
	private AllusersServer allusersService;


//	
   @RequestMapping("showAllusers.do")
   public String showAllusers(int id,ModelMap map,HttpSession session){
	 /*  Map<String,Object> bmap=new HashMap<String,Object>();
	   bmap.put("uid", id);*/
	  // map.put("blist", allusersService.getAll(bmap));
	   map.put("allusers", allusersService.getById(id));
	   return "read";
   }
   
	@RequestMapping("addAllusers.do")
	public String addAllusers(HttpServletRequest request,Allusers allusers,HttpSession session){
		Timestamp time=new Timestamp(System.currentTimeMillis());
		//Users u=(Users)session.getAttribute("user");
		/*if(u==null||u.equals("")){
			return "redirect:showIndex.do";
		}else{*/
			//bbs.setUid(u.getId());
			/*bbs.setPubtime(time.toString());
			bbs.setIsdel("1");*/
		    allusers.setAddtime(time.toString().substring(0, 19));
			allusersService.add(allusers);
			return "redirect:allusersList.do";
		/*}*/
		
		
	}
 
//	处理编辑
	@RequestMapping("doUpdateAllusers.do")
	public String doUpdateAllusers(int id,ModelMap map,Allusers allusers){
		allusers=allusersService.getById(id);
		map.put("allusers", allusers);
		return "allusers_updt";
	}
//	
	@RequestMapping("updateAllusers.do")
	public String updateAllusers(int id,ModelMap map,Allusers allusers){
		allusersService.update(allusers);
		return "redirect:allusersList.do";
	}
//	所有List
//	@RequestMapping("allusersList.do")
//	public String allusersList(ModelMap map,HttpSession session){
//		map.put("list", allusersService.getAll(null));
//		map.put("clist", allusersService.getAll(null));
//		return "allusers";
//	}
//	分页查询
	@RequestMapping("allusersList.do")
	public String goodList(@RequestParam(value="page",required=false)String page,
			ModelMap map,HttpSession session,Allusers allusers, String username, String pwd, String cx){
		/*if(session.getAttribute("user")==null){
			return "login";
		}*/
		if(page==null||page.equals("")){
			page="1";
		}
		PageBean pageBean=new PageBean(Integer.parseInt(page), 15);
		Map<String, Object> pmap=new HashMap<String,Object>();
		pmap.put("pageno", pageBean.getStart());
		pmap.put("pageSize", 15);
		Map<String, Object> bmap=new HashMap<String, Object>();
		Map<String,Object> cmap=new HashMap<String,Object>();
		/*pmap.put("uid",  ((Users)session.getAttribute("user")).getId());
		bmap.put("uid", ((Users)session.getAttribute("user")).getId());*/
		if(username==null||username.equals("")){pmap.put("username", null);cmap.put("username", null);}else{pmap.put("username", username);cmap.put("username", username);}
		if(pwd==null||pwd.equals("")){pmap.put("pwd", null);cmap.put("pwd", null);}else{pmap.put("pwd", pwd);cmap.put("pwd", pwd);}
		if(cx==null||cx.equals("")){pmap.put("cx", null);cmap.put("cx", null);}else{pmap.put("cx", cx);cmap.put("cx", cx);}
		
		int total=allusersService.getCount(bmap);
		pageBean.setTotal(total);
		List<Allusers> list=allusersService.getByPage(pmap);
		map.put("page", pageBean);
		map.put("list", list);
		session.setAttribute("p", 1);
		return "allusers_list";
	}
//   分页模糊查询
	@RequestMapping("vagueAllusersList.do")
	public String vagueAllusersList(@RequestParam(value="page",required=false)String page,
			ModelMap map,HttpSession session){
		if(page==null||page.equals("")){
			page="1";
		}
		PageBean pageBean=new PageBean(Integer.parseInt(page),PageBean.PAGESIZE);
		Map<String, Object> pmap=new HashMap<String,Object>();
		pmap.put("pageno", pageBean.getStart());
		pmap.put("pageSize", pageBean.getPageSize());
		Map<String, Object> bmap=new HashMap<String, Object>();
		/*pmap.put("uid",  ((Users)session.getAttribute("user")).getId());
		bmap.put("uid",  ((Users)session.getAttribute("user")).getId());*/
		int total=allusersService.getCount(bmap);
		pageBean.setTotal(total);
		List<Allusers> list=allusersService.getByPage(pmap);
		map.put("page", pageBean);
		map.put("list", list);
		session.setAttribute("p", 2);
		return "queryallusers";
	}
	@RequestMapping("deleteAllusers.do")
	public String deleteAllusers(int id){
		allusersService.delete(id);
		return "redirect:allusersList.do";
	}
	
	@RequestMapping("quchongAllusers.do")
	public void quchongAllusers(Allusers allusers,HttpServletResponse response){
		   Map<String,Object> map=new HashMap<String,Object>();
		   map.put("username", allusers.getUsername());
		   System.out.println("username==="+allusers.getUsername());
		   System.out.println("username222==="+allusersService.quchongAllusers(map));
		   JSONObject obj=new JSONObject();
		   if(allusersService.quchongAllusers(map)!=null){
				 obj.put("info", "ng");
			   }else{
				   obj.put("info", "username可以用!");
				  
			   }
		   response.setContentType("text/html;charset=utf-8");
		   PrintWriter out=null;
		   try {
			out=response.getWriter();
			out.print(obj);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
	}
	
	@RequestMapping("Alluserslogin.do")
	public String checkAllusersLogin(Allusers allusers, HttpSession session) {
		Map<String,Object> u=new HashMap<String,Object>();
		System.out.println("name===" + allusers.getUsername());
		u.put("username",allusers.getUsername());
		//u.put("utype", "用户");
		//Md5.MD5HexEncode(user.getPassword())
		u.put("pwd",allusers.getPwd());
		allusers = allusersService.allusersLogin(u);
		if (allusers != null) {
			session.setAttribute("username", allusers);
			System.out.println("username=" + allusers);
			session.removeAttribute("suc");
			return "redirect:index.do";
		} else {
			System.out.println("usernafwfwwme=");
			session.setAttribute("suc", "登录失败!用户名或密码错误!");
			return "login";
		}

	}
}

总结 

使用的是JSP+MYSQL的开发模式,在结合了自己的生活经验以及对他人进行的调查问卷之后最终完成了系统的开发,并且所有的功能都可以正常使用。

发现在以下几个方面还有待提升点:

1、某些模块的代码结构冗余,代码执行效率差,经过思考发现可以使用面向对象思想中的继承和多态进行改进。

2、数据库的设计较为单一,并且书写SQL查询语句时只用了连接查询和相关子查询等,这会造成查询较多数据时查询速度慢的问题。改进的方法就是使用存储过程和视图来替代复杂的查询语句。

3、用户支付未与支付宝和微信真正进行连接,这方面的知识自己比较欠缺,但经过了解后发现只要在支付宝和微信的官网下载相关的接口与自己系统进行连接就有可能实现真正的在线支付。

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

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

相关文章

不会还有程序员不知道这几个宝藏学习平台吧?还不来码住!

咱作为程序员可谓是赶上了发展的时代啊&#xff01;前有ChatGPT&#xff0c;后有5G、物联网等等层出不穷。这正是咱大展身手、大赚一笔的好时候啊&#xff01;有多少人趁着风口期大干一笔&#xff0c;狠狠投入&#xff0c;最终不说是top级别&#xff0c;也至少是羡煞众人啊&…

最新AI智能系统ChatGPT网站源码V6.3版本,GPTs、AI绘画、AI换脸、垫图混图+(SparkAi系统搭建部署教程文档)

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

[从0开始AIGC][Transformer相关]:Transformer中的激活函数:Relu、GELU、GLU、Swish

[从0开始AIGC][Transformer相关]&#xff1a;Transformer中的激活函数 文章目录 [从0开始AIGC][Transformer相关]&#xff1a;Transformer中的激活函数1. FFN 块 计算公式&#xff1f;2. GeLU 计算公式&#xff1f;3. Swish 计算公式&#xff1f;4. 使用 GLU 线性门控单元的 FF…

Redis基本配置及安装

Redis也叫Remote dictionary server,是一个开源的基于内存的数据存储系统。它可以用作数据库、缓存和消息队列等各种场景。它也是目前最热门的NoSQL数据库之一 以下是NoSQL的定义 随着互联网的快速发展&#xff0c;应用系统的访问量越来越大&#xff0c;数据库的性能瓶颈越来越…

自动驾驶中基于Transformer的传感器融合:研究综述

自动驾驶中基于Transformer的传感器融合&#xff1a;研究综述 论文链接&#xff1a;https://arxiv.org/pdf/2302.11481.pdf 调研链接&#xff1a;https://github.com/ApoorvRoboticist/Transformers-Sensor-Fusion 附赠自动驾驶学习资料和量产经验&#xff1a;链接 摘要 本…

解密JavaScript混淆:剖析JScrambler、JSFack、JShaman等五款常用加密工具

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

图的应用试题

01&#xff0e;任何一个无向连通图的最小生成树( )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c;…

食物链(并查集) 维护权值写法,非常详细,适合新手服用

题目描述&#xff1a; 动物王国中有三类动物 A,B,C这三类动物的食物链构成了有趣的环形。 A 吃 B&#xff0c;B 吃 C&#xff0c;C吃 A。 现有 N 个动物&#xff0c;以 1∼N 编号。 每个动物都是 A,B,C 中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两种说法对…

YOLOv8全网独家改进: 小目标 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 2024年4月最新成果

💡💡💡本文独家改进:CAMixingBlock更好的提取全局上下文信息和局部特征,包括两个部分:卷积-注意融合模块和多尺度前馈网络; 💡💡💡红外小目标实现涨点,只有几个像素的小目标识别率提升明显 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特…

[lesson02]C到C++的升级

C到C的升级 C与C的关系 C继承了所有的C特性C在C的基础上提供了更多的语法和特性C的设计目标是运行效率与开发效率的统一 C到C的升级 C更强调语言的实用性 所有的变量都可以在需要使用时再定义 int c 0; for (int i 1; i < 3; i) {for(int j 1; j < 3; j){c i * …

隐私计算实训营第六讲-隐语PIR介绍及开发实践

隐私计算实训营第六讲-隐语PIR介绍及开发实践 文章目录 隐私计算实训营第六讲-隐语PIR介绍及开发实践1.隐语实现PIR总体介绍1.1按服务器数量分类1.2按查询类型分类 2. Index PIR - SealPIR3. Keyword PIR - Labeled PSI4.隐语PIR功能分层5.隐语PIR后续计划PIR协议开发PIR调用框…

坦白局:PMP真的是智商税吗?

近些年报考PMP认证的学员越来越多&#xff0c;PMP全球持证人数已经突破百万了&#xff0c;据PMI统计&#xff0c;IT行业近50%人士都持有PMP证书&#xff0c;因此也有很多学员在思考&#xff0c;PMP持证人员这么多&#xff0c;PMP是不是都已经烂大街了&#xff1f;证书还有含金量…

【浅尝C++】STL第三弹=>list常用接口使用示例/list底层结构探索/list模拟实现代码详解

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f3af;每日格言&#xff1a;每日努力一点点&#xff0c;技术变化看得见。 文章目录 list介绍list常用接口使用示例构造类函数迭代器属性与元素获取增删改操作 list底层结构探索list模…

2024年03月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(每题 3 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个 鸿蒙是?( )。 A、小程序 B、计时器 C、操作系统 D、神话人物 答案:C 第2题 …

golang语言系列:Web框架+路由 之 Gin

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言学习系列&#xff0c;本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者…

HBase基础必备知识-Day1

HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database)&#xff0c;因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL)&#xff0c;而是提供了一套单独的命令和API操…

Redis高可用及持久化

文章目录 一、Redis高可用1、Redis高可用概述2、Redis高可用策略 二、Redis持久化1、Redis持久化的功能2、Redis持久化的两种方式2.1 RDB持久化2.2 AOF持久化&#xff08;append only file&#xff09; 3、RDB持久化3.1 触发条件3.1.1 手动触发3.1.2 自动触发3.1.2.1 配置方式3…

[Linux] 排查问题指令top/ps/netstat

在Linux下查看某个端口运行的指令 1. 首先通过netstat来查看端口对应的进程号 比如抓取端口53这个DNS服务的进程 netstat -tulnp | grep 53 可以看到53这个端口号对应的pid是720 2. 通过ps指令来对进程号执行的命令查询 ps aux | grep 720 可以看到pid为720这个进程对应的执…

聚道云助IT公司破解数据同步难,高效转型新利器!

客户介绍&#xff1a; 该公司是一家在信息技术行业具有丰富经验和良好声誉的公司。作为专业的软件服务提供商&#xff0c;他们致力于为客户提供全方位的解决方案和支持服务。公司秉持合规经营的原则&#xff0c;严格遵守相关法律法规&#xff0c;确保客户的数据安全和合法权益…

HTML基础:脚本 script 标签

你好&#xff0c;我是云桃桃。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础题”可得到前端基础100题汇…