库存商品管理机试题(JSP)——试题讲解
库存商品管理机试题(JSP)——试题讲解
本试题使用Jsp+Servlet+Mysql+JDBC等技术实现库存商品管理。
语言和环境
A、实现语言
Java
B、环境要求
JDK1.8、Eclipse、Tomcat7、JSP、Servlet、Mysql
功能要求
编写一个添加更新库存的web程序。要求根据输入商品名称,在数据库中查找该商品:
如果该商品为新增商品,则将商品信息添加如数据库表中;
如果该商品已经存在,则更新该商品的库存量,在原有库存量上增加输入的数量
程序初始界面如图1所示:
图1:初始页面输入商品名称、选择类别和商品数量,点击“加入库存”按钮,根据具体情况给出相应提示信息,如图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="加入库存"> <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)——试题讲解相关推荐
- 计算机等级考试二级机试题目,计算机等级考试机试模拟试题2007-2版.doc
计算机等级考试机试模拟试题2007-2版 计算机等级考试一级机考模拟试题(1) 考试时间:50分钟 准考证号 姓名 考生注意:(1)试题中"T□"是文件夹名(考生的工作目录),空格 ...
- 2022二级建造师《施工管理》考前冲刺试题与答案
题库来源:优题宝公众号 2022二级建造师<施工管理>考前冲刺试题与答案,根据最新二级建造师大纲与历年真题汇总编写,包含二级建造师常考重点题型与知识点,有助于考生复习备考二级建造师,取得好 ...
- 2021年广东省安全员C证第三批(专职安全生产管理人员)复审考试及广东省安全员C证第三批(专职安全生产管理人员)模拟试题
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:广东省安全员C证第三批(专职安全生产管理人员)复审考试是安全生产模拟考试一点通生成的,广东省安全员C证第三批(专职安全生产管理人员 ...
- 2021年广东省安全员C证(专职安全生产管理人员)免费试题及广东省安全员C证(专职安全生产管理人员)理论考试
题库来源:安全生产模拟考试一点通公众号小程序 2021年广东省安全员C证(专职安全生产管理人员)免费试题为正在备考广东省安全员C证(专职安全生产管理人员)操作证的学员准备的理论考试专题,每个月更新的广 ...
- 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...
[实例简介] JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统 [实例截图] [核心代码] f48fd612-281d-454e-97d3-20c8f775879f └── Prod ...
- shopxo二次开发:商品管理添加、商品导入库存、设置库存量(教程)
shopxo二次开发:商品添加与库存设置(教程如下) 商品添加与库存设置的一系列的操作说明: 步骤 · 如下: 商品添加与库存设置的一系列的操作说明: 商品管理.商品添加.商品类型设置.商品导入库存. ...
- 计算机二级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 ...
- 华为c语言机试题库及答案,华为C语言机试题面试题汇总.doc
华为C语言机试题面试题汇总.doc 1第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出 ...
- JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。
商品管理功能 一.功能介绍 1.1显示 1.2商品详情 1.3新增 1.4修改 1.5删除 二.数据库语句 三.项目结构 四.java代码 4.1Good类 4.2 Charge类 4.3GoodDa ...
- 电大计算机网考机考模拟试题答案,电大计算机网考机考模拟试题excel模拟题【呕心沥血整理、电大考试必过】.doc...
电大计算机网考机考模拟试题excel模拟题[呕心沥血整理.电大考试必过] 电大计算机网考机考模拟试题 Excel2003上机练习题 目标:攻克计算机网考中大多数学生的拦路虎---Excel (没有答案 ...
最新文章
- JavaWeb:过滤器Filter
- qtablewidget设置选中一行_Word里面如何设置标题的大纲级别
- OpenLDAP / ubuntu 18.04 下源码编译及安装说明
- 1,字符是否为空,2,比较两个字符大小。String.Compare(String, String)。string.IsNullOrEmpty(string)...
- RHEL6.4上Samba/NFS服务器简单配置
- C语言 动态开辟内存管理
- You are running Vue in development mode.Make sure to turn on production mode when deploying for p...
- 百度系无人车创业公司领骏科技完成新一轮融资
- Wolfram Mathematica 13 for Mac(功能广泛的科学计算软件)中文版
- 虚拟机利用Host-only实现在不插网线的情况下,虚拟机与主机实现双向通信,实现ssh连接以及samba服务实现共享...
- 20180511-面试感悟-要知其然还要知其所以然
- 深入理解CAS-认证原理
- 安卓手机分辨率修改工具的使用方法
- 简单实用的手机、电脑换IP方法
- [疯狂Java]JDBC:事务管理、中间点、批量更新
- windows系统可以用android,如何在电脑上使用Android系统?
- 细说字体 Sans Serif 与 Serif
- 验证码—基本功能实现02_点击重新获取验证码
- java中多重if结构_java中的多重if
- 13视频监控-02视频监控画面-videopanel
热门文章
- 基因表达矩阵中排除表达量低的样本和基因
- 如何根据移动端设计图设计rem比例
- 共有40款 地图相关开源软件
- 针式PKM初级应用:针式PKM更适合管理什么样的文件
- u盘chk文件恢复图文教程
- 【转】游戏项目管理经验
- WimTool WinPE教程 (修改PE外置程序)
- android xml 画竖线,css如何画竖线?
- linux下挂载移动硬盘(ntfs格式),Linux下挂载移动硬盘(NTFS格式)
- [GIS原理] 8.2 空间分析-邻近度分析-Delaunay三角网(德劳内)/泰森多边形(Thiessen多边形)/冯洛诺伊图(Voronoi图)