1、毕 业 论 文学生姓名学 号学院 计算机科学和技术学院专 业计算机科学和技术学院(软件工程)题 目基于JSP仓库管理系统设计和实现指导老师 讲 师/硕 士(姓 名) (专业技术职称/学位)年月摘要:仓库管理系统是一个企业不可或缺部分,高效仓库管理系统能够为企业发展和经营提供坚强后盾。伴随科技不停发展,用计算机对仓库进行管理,含有些人工管理所无法比拟优点,比如:检索快速、查找方便、保密性好、成本低、寿命长等。这些优点能极大地提升仓库管理效率, 使企业仓库管理井井有条,为企业健康发展发明良好条件。本文在分析现有管理系统开发技术基础上,实现了以Eclipse为开发平台基于JSP,以MySql作为后台
2、数据库仓库管理系统。该系统关键含有基础信息管理、库存管理、信息查询、用户管理等功效模块。关键词:仓库管理,JSP,MySql数据库Abstract: Warehouse management system is an indispensable part of the enterprise. A warehouse management system with high efficiency can provide a strong backing for the development and management of enterprises. With the development o
3、f technology,to manage the warehouse with computer has the incomparable advantages of manual management.For example, quick search, find convenient, good security, low cost, long service life etc. These advantages can greatly improve the efficiency of warehouse management, the enterprise storage mana
4、gement be arranged in good order, and create good conditions for the healthy development of enterprises. In this paper, based on analysis of the existing management system development technology, in order to realize the Eclipse as the development platform based on JSP, using MySql as the background
5、database warehouse management system. The system mainly has the basic information management, inventory management, information query, user management moduleKeywords: Warehouse management, JSP, MySql database目 录1 绪论41.1 开发背景41.2 开发意义41.3 本文组织结构42 系统处理方案52.1 JSP语言概述52.2 SSH框架52.3 MySql数据库52.4 系统平台环境5
6、3 需求分析63.1 面向用户人群63.2 功效需求分析63.3 业务步骤图74 数据库设计94.1 E-R模型94.2 数据模型125 具体设计155.1 数据库连接类155.2 系统关键模块16结 论34参 考 文 献35致 谢361 绪论1.1 开发背景一直以来企业使用传统人工方法来管理文件库存,这种管理方法存在很多缺点,如: 保密性差、效率低等,而且时间一长,将产生大量数据和文件, 这对于企业查找、更新和维护全部带来了很多困难。因为缺乏科学管理和管理工具,企业在业务上和管理上安排全部存在着很多不便。所以针对这些问题而开发系统含有很好前景。1.2 开发意义伴随时代不停发展,社会正在不停向
7、信息化时代前进。因为能够有效地搜集和处理多种信息,提升办事效率,电子自动化办公越来越被重视。而伴随互联网技术不停发展,又为电子自动化办公发展提供了良好前景。现在,很多企业已经拥有了计算机设备,含有物质条件,但很多工作仍由管理者手工操作完成,这就造成无须要浪费。计算机流行原因关键有以下多个方面:1.计算机能够替换手工操作进行很多繁杂工作;2.计算机能够节省大量资源;3.计算机能够极大地提升大家工作效率;4.计算机能够使敏感文档愈加安全;5.电子自动化办公是优异生产力发展关键标志。总而言之,用计算机开发软件系统,替换人工操作进行管理,能够节省大量人力、物力,是企业发展肯定趋势1!1.3 本文组织结
8、构本系统将以书本和部分课外书籍为参考,从系统开发背景需求分析概要设计具体设计具体开发一步步对系统进行分析和设计。各个章节安排以下:第一章为绪论,简述项目标开发背景和开发意义;第二章具体介绍了项目开发应用技术,比如JSP,框架和数据库等;第三章是需求分析,介绍了系统设计目标和系统关键功效模块。第四章是数据库设计,在E-R模型基础上,再设计出对应逻辑模型。第五章依据系统功效模块具体介绍了各模块设计过程并给出部分实现代码。2 系统处理方案2.1 JSP语言概述JSP(Java Server Pages)是由Sun Microsystems企业提倡、很多企业参与一起建立一个动态网页技术标准。它关键目标
9、是将表示逻辑从Servlet中分离出来。它是在传统网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标识(tag),从而形成JSP文件(*.jsp)。全部程序操作全部在服务器端实施,网络上传送给用户端仅是得到结果,这么大大降低了对用户浏览器要求,即使用户浏览器端不支持Java,也能够访问JSP网页。用JSP开发Web应用是跨平台,既能在Linux下运行,也能在其它操作系统上运行2。2.2 SSH框架SSH 在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。本系统采取MVC开发模式来编写代码,MVC全名是Mode
10、l View Controller,是模型(model)视图(view)控制器(controller)缩写3。Struts对Model,View和Controller全部提供了对应组件。Spring是一个轻量级控制反转(IoC)和面向切面(AOP)容器框架,它由Rod Johnson创建。它是为了处理企业应用开发复杂性而创建4。Spring使用基础JavaBean来完成以前只可能由EJB完成事情。 Hibernate是一个开放源代码对象关系映射框架,它对JDBC进行了很轻量级对象封装,能够应用在任何使用JDBC场所,能够在Servlet/JSPWeb应用中使用,也能够在应用EJBJ2EE架构中
11、替换CMP,完成数据持久化重担5。2.3 MySql数据库MySQL是一个关系型数据库管理系统,由瑞典MySQL AB企业开发,现在属于Oracle企业。MySQL是一个关联数据库管理系统,关联数据库将数据保留在不一样表中,而不是将全部数据放在一个大仓库内,这么就增加了速度并提升了灵活性。MySQLSQL语言是用于访问数据库最常见标准化语言。因为其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,通常中小型网站开发全部选择MySQL作为网站数据库6。2.4 系统平台环境(1)硬件环境:服务器:CPU: 2G或以上;内存:1G RAM或以上;硬盘:80G或以上;用户端:CPU: 1G或以上
12、;内存:64MB以上内存或更高;硬盘:20G或以上。(2)软件开发环境:操作系统:WindowsXP;所用工具:Eclipse,Navicat for MySQL;数据库:MySQL。3 需求分析3.1 面向用户人群1. 管理员:作为系统管理员和维护者,对系统基础信息、仓库管理等模块进行数据管理,并对系统更新作出立即响应,使得系统能愈加好地运行。2. 一般用户:作为系统使用者,注册登陆系统后,能够查询系统基础信息、仓库信息、修改个人信息等。3.2 功效需求分析仓库管理系统基础信息管理库存管理信息查询用户管理用户添加,删除用户密码修改添加入库统计添加出库统计按仓库查询按货物查询用户添加删除用户权
13、限修改系统设置个人信息修改图3-1 系统功效模块图本系统是一款仓库管理系统,意在对仓库自动化管理以适应信息化社会生产方法。依据仓库管理系统需求,划分了仓库功效模块,关键分为用户管理模块、入库出库模块、仓库查询模块、盘点统计模块7。具体功效图3-1所表示。3.3 业务步骤图该系统用户分为一般用户和管理员。管理员拥有全部权限,而一般用户只能进行查询操作。1233.13.23.33.3.1 管理员模块图3-2 管理员使用步骤图管理员使用步骤图3-2所表示。1. 登录登陆界面包含账号和密码两个文本框和身份选择单选框,用户登陆成功就会转到系统主页面,不然将会提醒账号密码错误。2. 查询信息用户登陆查询信
14、息界面能够对仓库信息(仓库、货物、供给商、部门、入库单、出库单)进行查询。3. 设置信息(管理员)管理员用户登陆设置信息界面能够对仓库信息(仓库、货物、供给商、部门、入库单、出库单)进行设置。4. 添加统计(管理员)管理员用户登陆添加界面能够添加入库和出库信息。5. 修改密码用户能够修改自己密码,需要先验证旧密码,验证成功后经过输入两次新密码对密码进行修改。6. 用户管理(管理员)管理员用户能够对已添加用户权限进行修改,也能够删除已存在用户。3.3.2 一般用户模块图3-3 一般用户使用步骤图一般用户使用步骤图3-3所表示。一般用户只能进行查询操作和修改个人信息。4 数据库设计数据库是一个存放
15、数据并对数据进行操作工具。数据库作用在于组织和表示信息,即数据库就是相关信息集合。本章从E-R模型分析设计为切入点,关键介绍了数据库设计。依据仓库管理系统功效,将其E-R图转化为数据库表,为系统实现奠定了基础。4.1 E-R模型E-R模型即实体-联络模型,它是由实体集、属性和联络集组成。实体集用矩形框表示,矩形框内写上实体名。实体属性用椭圆框表示,框内写上属性名,并用无向边和其对应实体集相连。实体间联络用菱形框表示,菱形框中写上以合适含义命名名字,用无向连线将参与联络实体矩形框分别和菱形框相连,并在连线上标明联络类型,即11、1N或MN。本系统E-R模型关键包含部门实体、货物实体、用户实体、供
16、给商实体、仓库实体、入库单实体和出库单实体共七个实体集和一个各实体联络集。E-R模型以下文所述。4566.11. 部门实体用来存放部门信息,E-R图图4-1所表示:部门部门电话部门地址部门经理部门编号部门名称图4-1 部门实体E-R图2. 货物实体用来存放货物信息,E-R图图4-2所表示:货物货物编号供货商编号计量单位货物价格货物规格货物名称图4-2 货物实体E-R图3. 用户实体用来存放用户信息,E-R图图4-3所表示:用户用户编号用户密码用户权限用户名图4-3用户实体E-R图4. 供给商实体用来存放供给商信息,E-R图图4-4所表示:供给商供给商电话供给商地址供给商联络人供给商编号供给商名
17、称图4-4供给商实体E-R图5. 仓库实体用来存放仓库信息,E-R图图4-5所表示:仓库仓库电话库存总量仓库管理员仓库编号已用库存量图4-5仓库实体E-R图6. 入库单实体用来存放入库单信息,E-R图图4-6所表示:入库单入库编号管理员编号仓库编号修改时间入库时间入库类型货物编号入库数量图4-6入库单实体E-R图7. 出库单实体用来存放出库单信息,E-R图图4-7所表示:出库单出库编号管理员编号仓库编号修改时间出库时间部门编号货物编号出库数量图4-7出库单实体E-R图8各实体联络E-R图图4-8所表示。用户经过添加入库单和出库单统计入库信息和出库信息,供给商提供货物,部门使用货物,一条统计对应
18、一个供给商或部门,货物入库货物出库仓库入库单出库单供给商部门货物存放用户添加nn11添加11nnmnmm图4-8 各实体联络E-R图4.2 数据模型依据4.1中分析得出E-R图,本系统采取MySql数据库管理系统,在MySql数据库管理系统中新建名称为mystorage数据库,本系统所使用全部数据信息均将存放于该数据库中。以下列举数据表。11.11.21. 部门表(department)表4-1 部门表列名数据类型大小说明depaIdint4部门编号depaNamevarchar24部门名称depaPersonvarchar15部门经理depaPhonechar11部门电话depaAddrva
19、rchar90部门地址2. 货物表(goods)表4-2 货物表列名数据类型大小说明goodsIdint4货物编号suppIdint4供给商编号goodsNamevarchar30货物名称goodsSizevarchar10货物规格goodsPriceint4货物价格unitchar6计量单位3. 入库表(instore)表4-3 入库表列名数据类型大小说明instIdint4入库编号instClasschar1入库类型goodsIdint4货物编号instNumint4入库数量instTimedatetime8入库时间modifyTimedatetime8修改时间stoIdint4仓库编号u
20、serIdint4管理员编号4. 出库表(outstore)表4-4 出库表列名数据类型大小说明outstIdint4出库编号depaIdint4部门编号goodsIdint4货物编号outstNumint4出库数量outstTimedatetime8出库时间modifyTimedatetime8修改时间stoIdint4仓库编号userIdint4管理员编号5. 仓库表(store)表4-5 仓库表列名数据类型大小说明stoIdint4仓库编号stoPersonvarchar15仓库管理员stoPhonechar11仓库电话usedVoluint4已用库存量allVoluint4库存总量6.
21、 供给商表(supplier)表4-6 供给商表列名数据类型大小说明suppIdint4供给商编号suppNamevarchar45供给商名称suppPersonvarchar15供给商联络人suppPhonechar11供给商电话suppAddrvarchar90供给商地址7. 用户表(user)表4-7 用户表列名数据类型大小说明userIdint4用户编号userNamevarchar15用户名passvarchar16用户密码userLevelchar1用户权限8. 库存表(stock)表4-8 库存表列名数据类型大小说明stoIdint4仓库编号goodsIdint4货物编号stoc
22、kint4库存量以上就是mystorage数据库数据表。5 具体设计5.1 数据库连接类在对数据库连接过程中,为了使代码更精简,将对数据库连接方法封装在DriverMana公共类中,其中包含数据库连接方法getConn、ResultSet关闭方法closers、PreparedStatement关闭方法closepstmt、Connection关闭方法closecon。以下即为代码:public class DriverMana public static Connection getConn()Connection con=null;try Class.forName(com.mysql.j
23、dbc.Driver);con=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mystorage, root, root); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();return con;public static void closers(ResultSet rs)if(rs!=null)try rs.close(); catch (SQLException e) e.prin
24、tStackTrace();public static void closepstmt(PreparedStatement pstmt)if(pstmt!=null)try pstmt.close(); catch (SQLException e) e.printStackTrace();public static void closecon(Connection con)if(con!=null)try con.close(); catch (SQLException e) e.printStackTrace();5.2 系统关键模块5.2.1 登录模块图5-1 登录界面本模块关键用于对用户
25、身份进行判别。用户有两种身份:一般用户和管理员。用户经过单选框选择登录身份,经过表单输入用户名、密码,系统依据用户提供信息对用户进行身份判别。界面图5-1所表示。后台代码实现:public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String userName=request.getParameter(username);String password=request.getParameter(paswrd);String
26、userLevel=request.getParameter(userLevel);User luser=new User();luser.setUserName(userName);luser.setPassword(password);luser.setUserLevel(userLevel);ILoginDao loginDao=new LoginDaoImpl();User login=loginDao.getUser(luser);if(login!=null)HttpSession session=request.getSession();session.setAttribute(
27、login, login);ServletContext context=this.getServletContext();RequestDispatcher dispatcher;if(login.getUserLevel().equals(0)dispatcher=context.getRequestDispatcher(/comUser.jsp);elsedispatcher=context.getRequestDispatcher(/manaUser.jsp);dispatcher.forward(request, response);elserequest.setAttribute(
28、loginFail,登录失败);ServletContext context=this.getServletContext();RequestDispatcher dispatcher=context.getRequestDispatcher(/login.jsp);dispatcher.forward(request, response);5.2.2 目录生成模块由登陆界面进入主界面后,总体界面图5-2所表示:图5-2 主界面画面左边即为目录。目录模块关键用于生成目录部分,菜单折叠展开是使用javascript代码实现。菜单展开折叠功效实现代码:var divheight=130;var s
29、peed=11;var i=0;var s;var p=0;function doOpenClose(n)if(document.getElementById(bbb+n).offsetHeightdivheight)p=divheight;inc2(n);function inc(x)i=i+10;document.getElementById(bbb+x).style.height=i+px;if(idivheight)i=divheight-5;var s=setTimeout(inc(+x+),speed);if(i=125)window.clearTimeout(s);functio
30、n inc2(x)if(p1)p=p-10;document.getElementById(bbb+x).style.height=p+px;var s=setTimeout(inc2(+x+),speed);if(p=0)window.clearTimeout(s);5.2.3 基础信息管理模块基础信息管理模块包含供给商管理、货物管理、仓库信息管理和部门管理。1. 供给商管理本功效用于对供给商信息统计管理。管理员能够添加新供给商,修改已经有供给商信息,删除供给商信息等。界面图5-4所表示:图5-4 供给商管理界面关键代码:1) 添加供给商public void doPost(HttpServ
31、letRequest request, HttpServletResponse response)throws ServletException, IOException request.setCharacterEncoding(utf-8);response.setContentType(text/html;charset=utf-8);String suppName=request.getParameter(suppName);String suppPerson=request.getParameter(suppPerson);String suppPhone=request.getPar
32、ameter(suppPhone);String suppAddr=request.getParameter(suppAddr);Supplier supplier=new Supplier();supplier.setSuppName(suppName);supplier.setSuppPerson(suppPerson);supplier.setSuppPhone(suppPhone);supplier.setSuppAddr(suppAddr);ISupplierDao supplierDao=new SupplierDaoImpl();int i=supplierDao.addSupp
33、lier(supplier);if(i0)request.setAttribute(addPromt, 添加成功!);elserequest.setAttribute(addPromt, 添加失败!);this.getServletContext().getRequestDispatcher(/addSupplier.jsp).forward(request, response);2) 删除供给商public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,
34、 IOException String dele=request.getParameterValues(dele);int suppId=0;int rs=0;for(int i=0;i0)request.setAttribute(delePromt, 删除成功!);elserequest.setAttribute(delePromt, 删除失败!);this.getServletContext().getRequestDispatcher(/toSupply).forward(request, response);2. 货物管理本功效用于对货物信息统计管理。管理员能够添加新货物,修改已经有货
35、物信息,删除货物信息等。界面图5-5所表示:图5-5 货物管理界面实现代码和供给商管理相同。3. 仓库信息管理本功效用于对仓库信息统计管理。管理员能够添加新仓库,修改已经有仓库信息,删除仓库信息等。界面图5-6所表示:图5-6 仓库管理界面实现代码和供给商管理相同。4. 部门管理图5-7 部门管理界面本功效用于对部门信息统计管理。管理员能够添加新部门,修改已经有部门信息,删除部门信息等。界面图5-7所表示。实现代码和供给商管理相同。5.2.4 库存管理模块库存管理模块包含入库管理、出库管理和库存管理。1. 入库管理本功效用于对货物入库统计管理。当某种已经有货物进货后,就能够在此处进行添加新纪录
36、,查询或删除已经有统计等操作。界面图5-8所表示:图5-8 入库管理界面关键代码:1) 添加入库单public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html);String instClass=request.getParameter(instClass);int goodsId=Integer.parseInt(request.getParameter(good
37、sId);double instNum=Double.parseDouble(request.getParameter(instNum);int stoId=Integer.parseInt(request.getParameter(stoId);Date date=new Date();HttpSession session=request.getSession();User login=(User)session.getAttribute(login);int userId=login.getUserId();Instore instore=new Instore();instore.se
38、tGoodsId(goodsId);instore.setInstClass(instClass);instore.setInstNum(instNum);instore.setStoId(stoId);instore.setInstTime(date);instore.setModifyTime(date);instore.setUserId(userId);IInstoreDao instoreDao=new InstoreDaoImpl();int i=0;if(request.getParameter(instId).equals()i=instoreDao.addInstore(in
39、store);if(i0)IStockDao stockDao=new StockDaoImpl();Stock stock=new Stock();stock.setStoId(stoId);stock.setGoodsId(goodsId);stock.setStock(instNum);int j=0;if(stockDao.queryStock(stock)j=stockDao.updateStock(stock,1);elsej=stockDao.addStock(stock);int volume=Integer.parseInt(request.getParameter(volu
40、me);IStorageDao storageDao=new StorageDaoImpl();i=storageDao.updateStorage(volume, stoId,1);if(i0&j0)request.setAttribute(addPromt, 添加成功!);elserequest.setAttribute(addPromt, 添加失败!);elserequest.setAttribute(addPromt, 添加失败!);elseint instId=Integer.parseInt(request.getParameter(instId);instore.setInstI
41、d(instId);instore.setModifyTime(new Date();i=instoreDao.updateInstore(instore);if(i0)request.setAttribute(modifyPromt, 修改成功!);elserequest.setAttribute(modifyPromt, 修改失败!);this.getServletContext().getRequestDispatcher(/toAddInstore).forward(request, response);2) 删除入库单public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String dele=request.getParame