库存商品管理机试题(JSP)——试题讲解

本试题使用Jsp+Servlet+Mysql+JDBC等技术实现库存商品管理。

语言和环境

A、实现语言
Java
B、环境要求
JDK1.8、Eclipse、Tomcat7、JSP、Servlet、Mysql

功能要求

编写一个添加更新库存的web程序。要求根据输入商品名称,在数据库中查找该商品:

如果该商品为新增商品,则将商品信息添加如数据库表中;
如果该商品已经存在,则更新该商品的库存量,在原有库存量上增加输入的数量

  1. 程序初始界面如图1所示:

    图1:初始页面

  2. 输入商品名称、选择类别和商品数量,点击“加入库存”按钮,根据具体情况给出相应提示信息,如图2、图3、图4、图5所示:


图2:输入信息,点击“加入库存”按钮


图3:新增商品的情况


图4:商品已经存在,更新了库存量的情况


图5:添加失败的页面
3. 成功和失败的页面均有“返回上一页”,用以返回到初始页面
4. 商品的类别使用如下数字代替,写入数据库表中
电器——1
食品——2
服装——3

数据库设计

数据库名称:自定义
数据库表信息

源代码下载地址

https://download.csdn.net/download/pcbhyy/10776014

视频讲解及源代码地址https://download.csdn.net/download/pcbhyy/10776015

主要源代码

创建表语句

create table wareTable(wareName VARCHAR(50) PRIMARY key,wareSort int(4) not null,wareAmount int(8) not null
)

工具类:JDBCUitls

package com.yy.dao;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
//重构
public class JDBCUitls {private static String driverClassName;private static String url;private static String username;private static String password;static {try {Properties props = new Properties();InputStream in =  JDBCUitls.class.getResourceAsStream("/db.properties"); props.load(in);driverClassName = props.getProperty("driverClassName");url = props.getProperty("url");username = props.getProperty("username");password = props.getProperty("password");Class.forName(driverClassName);} catch (ClassNotFoundException  | IOException e) {e.printStackTrace();}}//得到连接对象public static Connection getConnection() throws SQLException {Connection conn = DriverManager.getConnection(url,username,password);return conn;}//关闭连接对象public static void closeConnection(Connection conn) throws SQLException {if(conn != null) {conn.close();}}public static int executeUpdate(String sql,Object... params) throws SQLException {Connection conn = getConnection();PreparedStatement ps = conn.prepareStatement(sql);if(params != null) {//给占位符赋值for(int i = 0;i < params.length;i++) {ps.setObject(i+1, params[i]);}}int n = ps.executeUpdate();conn.close();return n;}public static ResultSet executeQuery(Connection conn,String sql,Object... params) throws SQLException {PreparedStatement ps = conn.prepareStatement(sql);if(params != null) {//给占位符赋值for(int i = 0;i < params.length;i++) {ps.setObject(i+1, params[i]);}}ResultSet rs = ps.executeQuery();return rs;}
}

属性文件:db.properties(放在classpath路径下)

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydata
username=root
password=root

数据访问层接口

package com.yy.dao;import com.yy.entity.WareTable;public interface WareTableDao {public int insert(WareTable wareTable) throws Exception;public int update(WareTable wareTable) throws Exception;//根据商品的名称,得到该商品对象public WareTable getWareByName(String wareName) throws Exception;
}

数据访问层实现类

package com.yy.dao;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;import com.yy.entity.WareTable;public class WareTableDaoImpl implements WareTableDao {@Overridepublic int insert(WareTable wareTable) throws SQLException  {String sql = "insert into wareTable values(?,?,?)";int n = JDBCUitls.executeUpdate(sql,wareTable.getWareName(),wareTable.getWareSort(),wareTable.getWareAmount());return n;}@Overridepublic int update(WareTable wareTable) throws SQLException {String sql = "update wareTable set wareSort=?,wareAmount=? where wareName = ?";int n = JDBCUitls.executeUpdate(sql,              wareTable.getWareSort(),wareTable.getWareAmount(),wareTable.getWareName());return n;}@Overridepublic WareTable getWareByName(String wareName) throws SQLException {String sql = "select * from wareTable where wareName = ?";Connection conn = JDBCUitls.getConnection();ResultSet rs = JDBCUitls.executeQuery(conn, sql, wareName);int wareAmount = -1;int wareSort;WareTable wareTable = null;if(rs.next()) {wareSort = rs.getInt("wareSort");wareAmount = rs.getInt("wareAmount");wareTable = new WareTable(wareName, wareSort, wareAmount);}JDBCUitls.closeConnection(conn);return wareTable;}}

实体类

package com.yy.entity;public class WareTable {private String wareName;private Integer wareSort;private Integer wareAmount;public WareTable() {super();// TODO Auto-generated constructor stub}public WareTable(String wareName, Integer wareSort, Integer wareAmount) {super();this.wareName = wareName;this.wareSort = wareSort;this.wareAmount = wareAmount;}public String getWareName() {return wareName;}public void setWareName(String wareName) {this.wareName = wareName;}public Integer getWareSort() {return wareSort;}public void setWareSort(Integer wareSort) {this.wareSort = wareSort;}public Integer getWareAmount() {return wareAmount;}public void setWareAmount(Integer wareAmount) {this.wareAmount = wareAmount;}
}

业务逻辑层接口

package com.yy.service;import com.yy.entity.WareTable;public interface WareTableService {public int insert(WareTable wareTable) throws Exception;public int update(WareTable wareTable) throws Exception;//根据商品的名称,得到该商品对象public WareTable getWareByName(String wareName) throws Exception;
}

业务逻辑层实现类

package com.yy.service;import com.yy.dao.WareTableDao;
import com.yy.dao.WareTableDaoImpl;
import com.yy.entity.WareTable;public class WareTableServiceImpl implements WareTableService {private WareTableDao wareTableDao = new WareTableDaoImpl();@Overridepublic int insert(WareTable wareTable) throws Exception {return wareTableDao.insert(wareTable);}@Overridepublic int update(WareTable wareTable) throws Exception {return wareTableDao.update(wareTable);}@Overridepublic WareTable getWareByName(String wareName) throws Exception {return wareTableDao.getWareByName(wareName);}}

Servlet

package com.yy.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.yy.entity.WareTable;
import com.yy.service.WareTableService;
import com.yy.service.WareTableServiceImpl;/*** Servlet implementation class WareTableServlet*/
public class WareTableServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public WareTableServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String method= request.getParameter("method");try {if("getAdd".equals(method)) {doGetAdd(request,response);}else if("save".equals(method)) {doSave(request,response);}}catch(Exception e) {e.printStackTrace();}       }private void doSave(HttpServletRequest request, HttpServletResponse response) throws Exception {String wareName = request.getParameter("wareName");int wareSort = Integer.parseInt(request.getParameter("wareSort"));int wareAmount = Integer.parseInt(request.getParameter("wareAmount"));WareTableService wareTableService = new WareTableServiceImpl();WareTable wareTable = wareTableService.getWareByName(wareName);int n;if(wareTable == null) {wareTable = new WareTable(wareName, wareSort, wareAmount);n = wareTableService.insert(wareTable);             }else {wareTable.setWareSort(wareSort);wareTable.setWareAmount(wareAmount+wareTable.getWareAmount());n = wareTableService.update(wareTable);}if(n == 1) {request.setAttribute("newAmount", wareAmount);request.setAttribute("wareTable", wareTable);request.getRequestDispatcher("/WEB-INF/waretable/result.jsp").forward(request, response);}else {request.getRequestDispatcher("/WEB-INF/waretable/error.jsp").forward(request, response);}}private void doGetAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("/WEB-INF/waretable/add.jsp").forward(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><div style="text-align: center;"><h1>录入商品库存信息</h1><form action="${ pageContext.request.contextPath }/WareTableServlet?method=save" method="post"><table border="0" width="400" align="center"><tr><td>商品名称:</td><td align="left"><input type="text" name="wareName"></td></tr><tr><td>商品类别:</td><td align="left"><input type="radio" name="wareSort" value="1" checked="checked">电器<input type="radio" name="wareSort" value="2">食品<input type="radio" name="wareSort" value="3">服装</td></tr><tr><td>商品数量:</td><td align="left"><input type="text" name="wareAmount"></td></tr><tr><td colspan="2" align="center"><input type="submit" value="加入库存">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置"></td></tr></table></form></div>
</body>
</html>

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h1>添加库存成功</h1><p>商品名称:${ wareTable.wareName }</p><p>新增库存数:${ newAmount }</p><p>现共有库存:${ wareTable.wareAmount }</p><p><a href="javascript:window.history.go(-1);">返回上一页</a></p>
</body>
</html>

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h1>添加库存失败</h1><p><a href="javascript:window.history.go(-1);">返回上一页</a></p>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>ware_project</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>WareTableServlet</display-name><servlet-name>WareTableServlet</servlet-name><servlet-class>com.yy.servlet.WareTableServlet</servlet-class></servlet><servlet-mapping><servlet-name>WareTableServlet</servlet-name><url-pattern>/WareTableServlet</url-pattern></servlet-mapping>
</web-app>

库存商品管理机试题(JSP)——试题讲解相关推荐

  1. 计算机等级考试二级机试题目,计算机等级考试机试模拟试题2007-2版.doc

    计算机等级考试机试模拟试题2007-2版 计算机等级考试一级机考模拟试题(1) 考试时间:50分钟 准考证号 姓名 考生注意:(1)试题中"T□"是文件夹名(考生的工作目录),空格 ...

  2. 2022二级建造师《施工管理》考前冲刺试题与答案

    题库来源:优题宝公众号 2022二级建造师<施工管理>考前冲刺试题与答案,根据最新二级建造师大纲与历年真题汇总编写,包含二级建造师常考重点题型与知识点,有助于考生复习备考二级建造师,取得好 ...

  3. 2021年广东省安全员C证第三批(专职安全生产管理人员)复审考试及广东省安全员C证第三批(专职安全生产管理人员)模拟试题

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:广东省安全员C证第三批(专职安全生产管理人员)复审考试是安全生产模拟考试一点通生成的,广东省安全员C证第三批(专职安全生产管理人员 ...

  4. 2021年广东省安全员C证(专职安全生产管理人员)免费试题及广东省安全员C证(专职安全生产管理人员)理论考试

    题库来源:安全生产模拟考试一点通公众号小程序 2021年广东省安全员C证(专职安全生产管理人员)免费试题为正在备考广东省安全员C证(专职安全生产管理人员)操作证的学员准备的理论考试专题,每个月更新的广 ...

  5. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...

    [实例简介] JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统 [实例截图] [核心代码] f48fd612-281d-454e-97d3-20c8f775879f └── Prod ...

  6. shopxo二次开发:商品管理添加、商品导入库存、设置库存量(教程)

    shopxo二次开发:商品添加与库存设置(教程如下) 商品添加与库存设置的一系列的操作说明: 步骤 · 如下: 商品添加与库存设置的一系列的操作说明: 商品管理.商品添加.商品类型设置.商品导入库存. ...

  7. 计算机二级c语言改错,国家计算机二级C语言机试改错试题及答案.doc

    国家计算机二级C语言机试改错试题及答案 (1)double fun(int n) (2)s=s+(double)a/b; (1)for(i=0;str[i];i++) (2)if(substr[k+1 ...

  8. 华为c语言机试题库及答案,华为C语言机试题面试题汇总.doc

    华为C语言机试题面试题汇总.doc 1第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出 ...

  9. JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。

    商品管理功能 一.功能介绍 1.1显示 1.2商品详情 1.3新增 1.4修改 1.5删除 二.数据库语句 三.项目结构 四.java代码 4.1Good类 4.2 Charge类 4.3GoodDa ...

  10. 电大计算机网考机考模拟试题答案,电大计算机网考机考模拟试题excel模拟题【呕心沥血整理、电大考试必过】.doc...

    电大计算机网考机考模拟试题excel模拟题[呕心沥血整理.电大考试必过] 电大计算机网考机考模拟试题 Excel2003上机练习题 目标:攻克计算机网考中大多数学生的拦路虎---Excel (没有答案 ...

最新文章

  1. JavaWeb:过滤器Filter
  2. qtablewidget设置选中一行_Word里面如何设置标题的大纲级别
  3. OpenLDAP / ubuntu 18.04 下源码编译及安装说明
  4. 1,字符是否为空,2,比较两个字符大小。String.Compare(String, String)。string.IsNullOrEmpty(string)...
  5. RHEL6.4上Samba/NFS服务器简单配置
  6. C语言 动态开辟内存管理
  7. You are running Vue in development mode.Make sure to turn on production mode when deploying for p...
  8. 百度系无人车创业公司领骏科技完成新一轮融资
  9. Wolfram Mathematica 13 for Mac(功能广泛的科学计算软件)中文版
  10. 虚拟机利用Host-only实现在不插网线的情况下,虚拟机与主机实现双向通信,实现ssh连接以及samba服务实现共享...
  11. 20180511-面试感悟-要知其然还要知其所以然
  12. 深入理解CAS-认证原理
  13. 安卓手机分辨率修改工具的使用方法
  14. 简单实用的手机、电脑换IP方法
  15. [疯狂Java]JDBC:事务管理、中间点、批量更新
  16. windows系统可以用android,如何在电脑上使用Android系统?
  17. 细说字体 Sans Serif 与 Serif
  18. 验证码—基本功能实现02_点击重新获取验证码
  19. java中多重if结构_java中的多重if
  20. 13视频监控-02视频监控画面-videopanel

热门文章

  1. 基因表达矩阵中排除表达量低的样本和基因
  2. 如何根据移动端设计图设计rem比例
  3. 共有40款 地图相关开源软件
  4. 针式PKM初级应用:针式PKM更适合管理什么样的文件
  5. u盘chk文件恢复图文教程
  6. 【转】游戏项目管理经验
  7. WimTool WinPE教程 (修改PE外置程序)
  8. android xml 画竖线,css如何画竖线?
  9. linux下挂载移动硬盘(ntfs格式),Linux下挂载移动硬盘(NTFS格式)
  10. [GIS原理] 8.2 空间分析-邻近度分析-Delaunay三角网(德劳内)/泰森多边形(Thiessen多边形)/冯洛诺伊图(Voronoi图)