商品管理系统

用Jsp Servlet和Jquery以及SQLServer实现商品管理系统。

采用MVC三层架构进行此程序的开发。

功能分析:
1.登录功能
2.查询和联合查询商品
3.增加商品
4.删除商品

效果演示

登录页面
在这里插入图片描述
查询页面
在这里插入图片描述
添加商品
在这里插入图片描述
点击删除
在这里插入图片描述

实现商品管理系统需要数据库和程序两部分。

一: 数据库

参考下面图片进行设计和实现SQLserver数据库
在这里插入图片描述

二:程序设计

我们先看一下程序目录结构
在这里插入图片描述
特别注意:
需要引入sqljdbc.jar和jquery.js两个架包

完整代码

servlet包
servlet包里DeleteServlet.java

package com.hnpi.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.hnpi.util.DBUtil;public class DeleteServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String id = request.getParameter("id");String sql = "delete from Product where ProductID = ?";Connection conn = DBUtil.getconn();try {System.out.println(sql);PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1,Integer.parseInt(id));ps.executeUpdate();response.sendRedirect("list");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}out.flush();out.close();}}

servlet包里InsertServlet.java

package com.hnpi.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.hnpi.util.DBUtil;public class InsertServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String ProductName = new String(request.getParameter("ProductName").getBytes("iso-8859-1"),"utf-8");String IsUp = new String(request.getParameter("IsUp").getBytes("iso-8859-1"),"utf-8");String UnitPrice = new String(request.getParameter("UnitPrice").getBytes("iso-8859-1"),"utf-8");String Remark = new String(request.getParameter("Remark").getBytes("iso-8859-1"),"utf-8");String CategoryID = new String(request.getParameter("CategoryID").getBytes("iso-8859-1"),"utf-8");String sql = "insert into Product values(?,?,?,?,?)";Connection conn = DBUtil.getconn();try {System.out.println(sql);PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1,ProductName);ps.setString(2,IsUp);ps.setInt(3, Integer.parseInt(UnitPrice));ps.setString(4,Remark);ps.setInt(5, Integer.parseInt(CategoryID));if(ps.executeUpdate()>0){response.sendRedirect("list");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}out.flush();out.close();}}

servlet包里ListServlet.java

package com.hnpi.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.hnpi.util.DBUtil;public class ListServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();//接受从查询页面传过来的值String ProductName = request.getParameter("ProductName");String Remark = request.getParameter("Remark");HttpSession session = request.getSession();//联合查询// select b表的所有,a表的名字 from a表 as a, b表 as b where b.b表的id = a.a表的idString sql = "select b.* ,a.CategoryName from Category as a , Product as b where b.CategoryID = a.CategoryID";//判断是否为空if(!"".equals(ProductName) && ProductName!=null){ProductName = new String(ProductName.getBytes("iso-8859-1"),"utf-8");sql =sql +" and b.ProductName = \'"+ProductName+"\'";}if(!"".equals(Remark) && Remark!=null){Remark = new String(Remark.getBytes("iso-8859-1"),"utf-8");sql =sql +" and b.Remark = \'"+Remark+"\'";}//列表Connection conn = DBUtil.getconn();try {System.out.println(sql);PreparedStatement ps = conn.prepareStatement(sql);ResultSet rs = ps.executeQuery();session.setAttribute("set", rs);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}//类别try {String sq = "select * from Category";PreparedStatement ps = conn.prepareStatement(sq);ResultSet rs = ps.executeQuery();session.setAttribute("se", rs);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.sendRedirect("list.jsp");out.flush();out.close();}}

servlet包里LoginServlet.java

package com.hnpi.servlet;import java.awt.image.DataBufferUShort;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.hnpi.util.DBUtil;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");String name = request.getParameter("name");String pwd = request.getParameter("pwd");Connection conn = DBUtil.getconn();PreparedStatement ps = null;ResultSet rs = null;String sql = "select * from Userinfo where UserName = ? and Password = ?";try {ps = conn.prepareStatement(sql);ps.setString(1, name);ps.setString(2, pwd);rs = ps.executeQuery();if(rs.next()){response.sendRedirect("list");}else{response.sendRedirect("login.jsp");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

util包
util包里DBUtil.java

package com.hnpi.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBUtil {public static Connection getconn(){try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}Connection conn = null;try {conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Test","sa","1");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}
}

WEB-INF包
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name></display-name><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>LoginServlet</servlet-name><servlet-class>com.hnpi.servlet.LoginServlet</servlet-class></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>ListServlet</servlet-name><servlet-class>com.hnpi.servlet.ListServlet</servlet-class></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>DeleteServlet</servlet-name><servlet-class>com.hnpi.servlet.DeleteServlet</servlet-class></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>InsertServlet</servlet-name><servlet-class>com.hnpi.servlet.InsertServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ListServlet</servlet-name><url-pattern>/list</url-pattern></servlet-mapping><servlet-mapping><servlet-name>DeleteServlet</servlet-name><url-pattern>/del</url-pattern></servlet-mapping><servlet-mapping><servlet-name>InsertServlet</servlet-name><url-pattern>/insert</url-pattern></servlet-mapping>	<welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>
</web-app>

Jsp页面
add.jsp

<%@page import="java.sql.ResultSet"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'add.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action="insert">商品名称:<input id="ProductName" name ="ProductName"/><br/>是否上架:<input id="IsUp" type="radio" name ="IsUp" value="是"/>是<input type="radio" name ="IsUp" value="否"/>否<br/>单价:<input type="number" id="UnitPrice" name ="UnitPrice"/><br/>备注:<textarea id="Remark" rows="5" cols="20" name="Remark"></textarea><br/>所属类别:<select id="CategoryID" name= "CategoryID"><% ResultSet  rs = (ResultSet)session.getAttribute("se");while(rs.next()){%><option value=<%=rs.getString(1) %>><%=rs.getString(2) %></option><%}%></select><br/><input type="submit" value="提交"></form></body><script type="text/javascript" src="jquery-3.3.1.js"></script><script type="text/javascript">
$(function(){$("form").submit(function(){var ProductName = $("#ProductName").val();var IsUp = $("#IsUp").val();var UnitPrice = $("#UnitPrice").val();var Remark = $("#Remark").val();if(""==ProductName||""==IsUp||""==UnitPrice||""==Remark){alert("请补充完整信息")return false;}else{return true;}})
})</body>
</html>

list.jsp

<%@page import="java.sql.ResultSet"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'list.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><center><form action="list">商品名称:<input name = "ProductName">商品备注:<input name =  "Remark"><input type="submit" value="查询"><button><a href="add.jsp">添加商品</a></button></form><table border="1" cellspacing="0"><tr><th>编号</th><th>商品名称</th><th>是否上架</th><th>单价</th><th>备注</th><th>所属类别</th><th>操作</th></tr><% ResultSet rs = (ResultSet)session.getAttribute("set");while(rs.next()){%><tr><th><%=rs.getString(1) %></th><th><%=rs.getString(2) %></th><th><%=rs.getString(3) %></th><th><%=rs.getString(4) %></th><th><%=rs.getString(5) %></th><th><%=rs.getString(7) %></th><th><button><a href="del?id=<%=rs.getString(1) %>" >删除</a></button></th></tr><%}%></table></center></body>
</html>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--<link rel="stylesheet" type="text/css" href="styles.css">-->
</head><body><form action="login">账号:<input id="name" name="name"><br /> 密码:<input id="pwd"name="pwd"><br /> <input type="submit"></form>
</body>
<script type="text/javascript" src="jquery-3.3.1.js"></script>
<script type="text/javascript">$(function() {$("form").submit(function() {var name = $("#name").val();var pwd = $("#pwd").val();if ("" == name) {alert("请输入账号")return false;} else if ("" == pwd) {alert("请输入密码")return false;} else {return true;}})})
</script>
</body>
</html>

我们已经把商品管理系统完整实现了。

扫一扫关注我的公众号获取更多资讯!!!
在这里插入图片描述

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

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

相关文章

【OpenCV 例程200篇】83. 频率域低通滤波:印刷文本字符修复

【OpenCV 例程200篇】83. 频率域低通滤波案例&#xff1a;印刷文本字符修复 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 3.5 频率域低通滤波&#xff1a;印刷文本字符修复 低通滤波技术主要…

Python入门基础篇(五)字符串的正则表达式re模块,全面解析!!!

文章目录前言一.匹配字符串的方法1.使用match()方法进行匹配2.使用search()方法进行匹配3.使用findall方法进行匹配二.替换字符串三.使用正则表达式分割字符串前言 Python中提供了re模块用于正则表达式的操作&#xff0c;在实现时可以用re模块提供的多种方法对字符串进行处理&…

Vue 动态数据滚动

使用Vue动态滚动&#xff08;上下滚动&#xff09;显示将要展示的讯息。 代码分析&#xff1a; 1.设置固定样式的框架内容 2.设置红色字体内容是动态变化的 3.滚动效果为向上滚动 效果演示&#xff1a; 此效果图的数据是不停滚动变化的 第二张效果图 代码演示&#xff1a…

Python入门进阶篇(六)字典的介绍

请仔细阅读哦&#xff01;&#xff01;&#xff01; 文章目录前言一、Python字典的创建与删除1.字典的创建2.字典的删除二、Python字典的访问1.通过“键值对”访问字典2.遍历字典三、Python字典的添加、修改和删除元素1.字典元素的添加2.修改字典元素3.删除字典元素前言 前面写…

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4. 频率域高通滤波器 图像边缘化其它灰度的急剧变化与高频分量有关&#xff0c;因此可以…

Vue 数字时钟

用Vue写了一个简单的时间钟。 此时钟内容包括年月日及星期和时分秒。 功能分析&#xff1a; 1.年份&#xff0c;日期&#xff0c;时间的显示 2.动态的变化 3.获取本地时间方法 效果图演示 代码演示 注意&#xff1a;引入vue.min.js架包 <script src"js/vue.min.js…

【OpenCV 例程200篇】85. 频率域高通滤波器的应用

【OpenCV 例程200篇】85. 频率域高通滤波器的应用 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4. 频率域高通滤波器 图像边缘化其它灰度的急剧变化与高频分量有关&#xff0c;因此可以在频…

【OpenCV 例程200篇】86. 频率域滤波应用:指纹图像处理

【OpenCV 例程200篇】86. 频率域滤波应用&#xff1a;指纹图像处理 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4. 频率域高通滤波器 图像边缘化其它灰度的急剧变化与高频分量有关&#xf…

商品销售管理系统

用JSP servlet和jquery以及SQLServer数据库实现商品销售管理系统。 功能详解&#xff1a; 1.查询商品 2.添加商品 3.删除商品 4.添加销售记录 5.查看销售记录 效果演示&#xff1a; 进入界面 商品显示页面 删除提示 销售记录查询 商品销售系统需要SQLServer数据库和程序…

【OpenCV 例程200篇】87. 频率域钝化掩蔽

【OpenCV 例程200篇】87. 频率域钝化掩蔽 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4.2 频率域钝化掩蔽 简单地&#xff0c;从原始图像中减去一幅平滑处理的钝化图像&#xff0c;也可以实…

拼图验证码

H5的Canvas实现一个拼图验证码。 功能分析&#xff1a; 1.验证码图片的生成 2.滑块图片的显示 3.底部滑块的横向移动 4.滑块上的文字显示 效果演示&#xff1a; 初始状态 滑动成功之后 有没有一种心动的感觉呢&#xff1f;&#xff1f;&#xff1f; 代码演示 注意&#x…

【OpenCV 例程200篇】88. 频率域拉普拉斯高通滤波

【OpenCV 例程200篇】88. 频率域拉普拉斯高通滤波 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4.3 频率域拉普拉斯高通滤波 拉普拉斯算子&#xff08;Laplace&#xff09;是导数算子&#…

顶部导航栏

HTML和CSS实现顶部导航栏&#xff0c;二级菜单的实现。 原理分析&#xff1a; 1.使用ul(无需列表)嵌套ul(无序列表) 2.鼠标放上改变背景颜色 3.二级菜单的显示 效果演示&#xff1a; 初始样式 鼠标放上 代码演示 <!DOCTYPE html> <html><head><meta …

VSCode配置Python的教程

本文基于Windows系统 超详细VSCode安装教程&#xff08;Windows&#xff09; 博主的VSCode专栏&#xff1a;分享使用VSCode的基本操作与各种技巧 刚刚开始学习Python时&#xff0c;按照老师提供的傻瓜式操作配好Python后&#xff0c;发现它自带了一个ide&#xff1a;IDLE&…

【OpenCV 例程200篇】89. 带阻滤波器的传递函数

【OpenCV 例程200篇】89. 带阻滤波器的传递函数 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 5.1 带阻与带通 空间域和频率域线性滤波器可以分为四类&#xff1a;低通滤波器、高通滤波器、带…

用Python海归作图--turtle,画椭圆

想必大家都想过用Python中的turtle画出椭圆吧&#xff0c;自己思考了许久&#xff0c;终于琢磨着画出了椭圆&#xff0c;但是我不知道这个方法是不是最简单的&#xff0c;是不是正确的&#xff0c;如果有错误请指正&#xff0c;如果觉得好用就尽管拿去用&#xff0c;哈哈哈 代码…

【OpenCV 例程200篇】90. 频率域陷波滤波器

【OpenCV 例程200篇】90. 频率域陷波滤波器 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 5.2 陷波滤波器 &#xff08;Notch Filter&#xff09; 陷波滤波器阻止或通过预定的频率矩形邻域中…

简单导航栏

实现一个简单的导航栏。 使用HTML和CSS实现简单的导航栏效果&#xff0c;鼠标放上改变背景杨色。 效果演示 代码演示 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style>ul{width…

轻松学会python的turtle模块,画一箭穿心、小人儿发射爱心、520表白完整代码,海龟作图小创意

本文导航&#xff1a;若您是直接想要代码&#xff0c;那么请您移步代码区&#xff0c;复制粘贴即可;若您是想了解turtle模块更多知识的话&#xff0c;请您移步turtle模块知识区;若您想看完本文呢&#xff0c;那我定是感激涕零啦(✪ω✪) 您可以选择选择如下区域或不作选择浏览本…

【OpenCV 例程200篇】91. 高斯噪声、瑞利噪声、爱尔兰噪声

【OpenCV 例程200篇】 系列&#xff0c;持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【OpenCV 例程200篇】91. 高斯噪声、瑞利噪声、爱尔兰噪声 2. 噪声模型 数字图像中的噪声源主要来自图像获取和传输过程。在获取图像时&#xff0c;光照水平和传感器温度影响图像中…