物流配送系统商务网站设计方案.pdf
下载文档
上传人:地**
编号:1289176
2024-12-17
44页
3.14MB
1、 I 目目 录录 前 言.错误错误!未定义书签未定义书签。一XXXXX 策划书.1 二网站功能需求设计分析.2 三、网站概要设计.6 四、网站详细设计.14 五、网站测试设计.18 六、网站开发总结性报告.28 结束语.30 一选题背景 在市场竞争的激烈的时代,建立科学,规范,高效管理体系是非常重要的。随着经济的快速发展,对库存的高效管理十分重要,高效的库存管理离不开信息技术,信息技术的飞速发展也为库存管理提供了广阔的舞台,采用现代化的手段管理库存,可以及时准确地反映库存状况,保证库存的数量保持在合理的水平,在满足客户的需要的同时最大限度地减少库存占用,从而在竞争中保持优势。传统的库存管理靠人2、工完成,需要大量的人力物力,人工管理方式有许多缺点和不便的地方,易出错,不能及时地把库存信息反映出来,大量的文件和数据不利于查找更新和维护。利用信息技术开发信息管理系统对库存进行管理,可以方便地实现快速查询,入库出库方便,可靠性高。因此,建立库存管理系统,对库存进行优化存储、管理,从而提高企业的科学管理水平,节省开支,使企业在竞争中立于不败之地。2 二解决方案的选择(一)系统说明 设计和实现库存管理系统,使库存管理的工作系统化、规范化和自动化,从而达到提高管理效率的目的。1.利用计算机系统实现商品库存管理。2.流程符合库存管理要求。3.查询方便,无论是按商品名称、仓库、区域、货位、时间、操作员3、其中任一项都可以进行有效查询。4.系统扩充容易,有很多地方还需要更好地完善。5.友好的用户界面,既面向系统开发者,又面向用户。(二)系统初步调查 库存管理需要有:产品相关信息设置,产品入库、出库、移库、采购、库存盘点、库存查询等功能。应有入库信息的输入窗口,出库信息输入窗口,移库信息输入窗口、采购信息的输入窗口,产品相关信息设置的输入窗口,并且界面要自然、简便,要有充分的提示和帮助,以便于操作人员学习使用和掌握。对输入的错误又有好的措施,并随时掌握任务的进展情况,输出的形式要易于理解,结果要正确。当然了,对于用户来说,界面就是系统本身。用户特别关心能否有效地使用软件来解决问题,用户对软件功能的4、理解都在界面上表现出来。人机界面体现了系统的功能,以及操作的方便程度是否符合使用的要求与工作习惯。总之,应使管理部门及时掌握产品库存全面情况,并通过这样的系统,做到信息的规范管理,科学统计和快速查询,从而减少管理方面的工作量。根据用户提出的建议,为了开发出有效的库存管理系统,遵循以下原则:1.满足用户需要。之所以开发新系统是因为旧系统存在问题,束缚着组织的发展,不能适应用户的需要。系统必须能被用户接受,实现用户的初衷。2.功能更完善。功能是否完整,是指能否覆盖组织的主要业务管理范围。同时,还表现在各部分接口是否完备,数据采集和存储格式是否统一,各部分是否协调一致。3.技术更先进。正确认识各种先5、进技术的优劣长短,从而根据组织的实际情况和未来得发展将其合理的运用到库存管理系统的开发中去。要努力发挥其高速度、高精度、高密度的优点,也要避免其缺乏灵活性,不便于处理意外情况的缺点。同时,不 3 要为了一味的先进,而忽视了技术本身的成熟性。4.实现辅助决策。许多组织的决策任务非常复杂、耗时,而决策关系到组织的兴衰。因此,所有的组织都需要能够帮助他们做出最佳的决策支持系统。(三)可行性研究 可行性分析研究的目的就是用最小的代价在尽可能短的时间里确定问题是否能解决,通过研究与此类似的系统后,我们具体从下面三方面考虑。1.经济可行性 库存管理系统是一个小型的管理系统,在开发时需要软件开发人员花费一定6、的时间和精力,因此需要一定的资金。但它给企业带来的利润是不可估量的,节省了许多人力,物力上的开支,使库存管理工作变繁为简,使其更加合理化、规范化。工作效率的提高就意为着整体水平的提高,是非常值得投资的。2.操作可行性 系统采用了可视化面向对象的工具开发,其窗口、界面简洁易懂,所以系统在操作上是可行的。随着计算机知识的普及和推广,越来越多的人掌握了计算机的基本使用方法和基本。目前,公司的管理人员已经具备了一定的计算机基础知识和实际操作经验。对于局域网、WINDOWS 等环境下的软件使用比较熟悉,对于新系统的开发,用户表现出极大的兴趣和热情,提出了各种很好的建议和要求。(四)对设计工具和相关技术的7、说明 系统是采用 JavaBean,Servlet,JSP 开发,以 MyEclipse,Dreamweaver 作为开发工具,以 SQLServer 开发数据库,以 Tomcat 为服务器。1.系统开发技术(1)JSP 技术介绍 JSP(Java Server Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP 技术有点类似 ASP 技术,它是在传统的网页 HTML文件(*.htm,*.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形成 JSP文件(*.jsp)。JSP 技术的强势:一次编8、写,到处运行。在这一点上 Java 比 PHP 更出色,除了系统之外,代码不用做任何更改。4 系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比 ASP/PHP 的局限性是显而易见的。强大的可伸缩性。从只有一个小的 Jar 文件就可以运行 Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台 Application 进行事务处理,消息处理,一台服务器到无数台服务器,Java 显示了一个巨大的生命力。多样化和功能强大的开发工具支持。这一点与 ASP 很像,Java 已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许9、多已经可以顺利的运行于多种平台之下。(2)JavaBean 技术介绍 JavaBean 是一种 JAVA 语言写成的可重用组件。用户可以使用 JavaBean 将功能、处理、值、数据库访问和其他任何可以用 java 代码创造的对象进行打包,并且其他的开发者可以通过内部的 JSP 页面、Servlet、其他 JavaBean、applet 程序或者应用来使用这些对象。用户可以认为 JavaBean 提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。(3)Servlet 技术介绍 Servlet 是一种独立于平台和协议的服务器端的 Java 应用程序,可以生成动态的 Web 页面。它担当 10、Web 浏览器或其他 HTTP 客户程序发出请求,与 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet 是位于 Web 服务器内部的服务器端的 Java 应用程序,与传统的从命令行启动的 Java 应用程序不同,Servlet 由 Web 服务器进行加载,该 Web 服务器必须包含支持 Servlet 的 Java 虚拟机。2.系统开发环境和相关开发工具(1)Tomcat 介绍 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器。Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项11、目,由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。5 Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。Tomcat 和 IIS、Apache 等 Web 服务器一样12、,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。(2)MyEclipse 介绍 MyEclipse 企业级工作平台是对 Eclipse IDE 的扩展,利用它我们可以在数据库和J2EE 的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的 J2EE 集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持 HTML,CSS,JavaScript,SQL,Struts,Hibernate 等。(3)D13、reamweaver 介绍 Dreamweaver 是美国 MACROMEDIA 公司开发的集网页制作和管理网站于一身的所见即所得网页编辑器,它是第一套针对专业网页设计师特别发展的视觉化网页开发工具,利用它可以轻而易举地制作出跨越平台限制和跨越浏览器限制的充满动感的网页。系统开发中,MyEclipse 负责后台数据、业务逻辑的开发,而 Dreamweaver 负责前台网页的开发及美化。6 三、系统设计(一)系统设计原则(1)简单性:在达到预定的目标、具备所需要的功能前提下,系统应尽量简单,这样可减少处理费用,提高系统效益,便于实现和管理。(2)灵活性和适应性:以便适应外界的环境变化。可变性是现14、代化企业的特点之一,是指其对外界环境的变化的适应能力。作为企业的管理信息系统也必须具有相当的灵活性,以便适应外界环境的不断变化,而且系统本身也需不断修改和改善。因此,在这里系统的可变性是指允许系统被修改和维护的难易程度。一个可变性好的系统,各个部分独立性强,容易进行变动,从而可提高系统的性能,不断满足对系统目标的变化要求。(3)一致性和完整性:一致性是指系统中信息编码、采集、信息通信要具备一致性设计规范应标准;完整性是指系统作为一个统一的整体而存在,系统功能应尽量完整。(4)可靠性:系统的可靠性指系统硬件和软件在运行过程中抵抗异常情况的干扰及保证系统正常工作的能力。衡量系统可靠性的指标是平均故15、障间隔时间和平均维护时间。前者指平均的前后两次发生故障的时间,反映了系统安全运行时间,后者指故障后平均每次所用的修复时间,反映系统可维护性的好坏。只有可靠的系统,才能保证系统的质量并得到用户的信任,否则就是没有使用价值。(5)经济性:系统的经济性是指系统的收益应大于系统支出的总费用。系统支出费用包括系统开发所需投资的费用与系统运行维护费用之和;系统收益除有货币指标外,还有非货币指标。系统应该给用户带来相应的经济效益。系统的投资和经营费用应当得到补偿。需要指出的是,这种补偿有时是间接的或不能定量计算的。(二)总体设计 通过对库存信息流程的详细调查分析,弄清了库存管理工作的业务流程和管理功能,符号16、定义如下:图 3.1 系统符号定义图 7 系统业务流程图如下:图 3.2 基础数据管理图 图 3.3 库存管理图(三)系统数据字典的创建 为了对数据流程图中的各个元素做出详细的说明,有必要建立数据字典。数据字典的内容主要是对数据流程图中的数据项、数据结构、数据流、处理逻辑、数据存储和外部实体等六个方面进行具体的定义。8 表 3.1 数据项的定义 数据项编号 数据项名称 简 述 类型及其宽度 U-01 用户编号 用户的编码 数值型 U-02 用户名 用户的名称 字符型,20 位 U-03 用户密码 用户登录时的密码 字符型,16 位 U-04 用户级别 用户使用权限 数值型 U-05 用户 Em17、ail 用户的电子邮件 字符型,20 位 U-06 用户手机 用户的手机号码 字符型,11 位 W-01 仓库编号 仓库的编号 数值型 W-02 仓库名 仓库的名称 字符型,50 位 W-03 最大区域数 允许的最大区域数 数值型 W-04 地址 仓库所在的地址 字符型,100 位 A-01 区域编号 仓库的编号 数值型 A-02 区域名 仓库的名称 字符型,50 位 A-03 最大货位数 允许的最大货位数 数值型 A-04 所在仓库 区域所在的仓库 数值型 S-01 货位编号 货位的编号 数值型 S-02 货位名 货位的名称 字符型,50 位 S-03 最大货物数 允许的最大货物数 数值型 18、S-04 所在区域 货位所在的区域 数值型 ST-01 类别编号 类别的编号 数值型 ST-02 类别名 类别的名称 字符型,50 位 G-01 货物编号 货物的编号 数值型 G-02 货物名 货物的名称 字符型,50 位 G-03 类别 货物所属的类别 数值型 G-04 最大库存 允许存储的最大货物数 数值型 G-05 最小库存 允许存储的最小货物数 数值型 G-06 价格 货物的价格 数值型 9 表 3.2 数据结构的定义 数据结构编号 数据结构名称 简 述 数据结构组成 DS-01 用户表 记录用户信息 U-01+U-02+U-03+U-04 DS-02 仓库表 记录仓库信息 W-01+19、W-02+W-03+W-04 DS-03 区域表 记录区域信息 A-01+A-02+A-03+A-04 DS-04 货位表 记录货位信息 W-01+W-02+W-03+W-04 DS-05 类别表 记录类别信息 ST-01+ST-02+ST-03+ST-04 DS-06 货物表 记录货物信息 G-01+G-02+G-03+G-04+G-05+G-06 表 3.3 数据流的定义 数据流 编号 数据流 名称 简述 数据流 来源 数据流 去向 数据流组成 D-01 入库单 用户入库填写的单据 用户 入库管 理模块 商品名称,数量,仓库,区域,货位,备注 D-02 出库单 用户出库时填写的单据 用户 20、出库管 理模块 商品名称,数量,仓库,区域,货位,备注 D-03 移库单 用户移库时填写的单据 用户 移库管 理模块 商品名称,数量,移入仓库,移入区域,移入货位,移出仓库,移出区域,移出货位,备注 D-04 采购单 用户采购时填写的单据 用户 采购管 理模块 商品名称,数量,备注 10 表 3.4 处理逻辑的定义 处理逻辑编号 处理逻 辑名称 简述 输入的 数据流 处理 输出的数据流 P1 入库处理 向入库表中添加信息,更新库存信息 入库单 查收货物要入库的货物,判断库存量是否满足入库量,登记入库信息,更新库存信息 入库单 P2 出库处理 向出库表中添加信息,更新库存信息 出库单 查收货物要21、出库的货物,判断出库后库存是否低于安全库 存,登记出库信息,更新库存信息 出库单 P3 移库处理 向移库表中添加信息,更新库存信息 移库单 查收货物要移库的货物,登记移库信息,更新库存信息 移库单 P4 采购处理 向采购表中添加信息,更新库存信息 采购单 查收货物要采购的货物,登记采购信息,更新库存信息 采购单 11表 3.5 数据存储的定义 数据存储的编号 数据存储的名称 简述 数据存储的组成 关键字 F1 用户表 存储用户信息 用户编号,用户名,密码,级别,电子邮件,用户手机 用户编号 F2 仓库表 存储仓库信息 仓库编号,仓库名,最大区域数,地址 仓库编号 F3 区域表 存储区域信息 区22、域编号,区域名,最大货位数,仓库 区域编号 F4 货位表 存储货位信息 货位编号,货位名,最大货物数,区域 货位编号 F5 类别表 存储类别信息 类别编号,类别名 类别编号 F6 货物表 存储货物信息 货物编号,货物名,类别,最大库存,最小库存,价格 货物编号 F7 库存表 存储库存信息 库存编号,货物名,数量,仓库,区域,货位 库存编号 F8 入出库表 存储入出库信息 入出库编号,货物名,仓库,区域,货位,操作员,数量,操作时间,类型,备注 入出库编号 F9 移库表 存储移库信息 移库编号,货物名,操作员,数量,操作时间,移入仓库,移入区域,移入货位,移出仓库,移出区域,移出货位 移库编号 23、F10 采购表 存储采购信息 采购编号,货物名,数量,操作时间,操作员,备注 采购编号(四)系统功能模块划分 根据用户操作需求,将系统划分如下,并对其模块的划分和功能进行描述。1.基础数据管理(1)仓库信息管理(2)区域信息管理(3)货位信息管理(4)类别信息管理(5)用户信息管理 12(6)货物信息管理 2.库存管理(1)入库管理(2)出库管理(3)移库管理(4)库存盘点管理(5)库存统计管理(6)采购管理 整个系统的模块结构如图所示。图 3.4 系统的功能模块图(五)系统功能模块明细 系统共包括 2 大功能模块,12 个小功能模块 1.基础数据管理 主要完成基本信息(仓库、区域、货位、类别24、货物、用户)的维护工作,包括添加、修改、删除、浏览等功能。2.库存管理(1)入库管理。完成货物入库的管理,包括填写入库单,浏览入库信息等功能。13 货物入库时需要检查入库后货物库存是否超过货物最大库存,超出时,返回错误提示信息,禁止货物入库。货物入库后更新库存信息。(2)出库管理。完成货物出库的管理,包括填写出库单,浏览出库信息等功能。货物出库时需要检查出库后货物库存是否低于货物安全库存,低于时,返回错误提示信息,禁止货物出库。货物出库后更新库存信息。(3)移库管理。完成货物移库的管理,包括填写移库单,浏览移库信息等功能。货物移库后更新库存信息。(4)库存盘点管理。完成库存盘点的管理,包括浏25、览、查找库存信息,更新库存数目等功能,保证库存信息与实际保持一致,还可以通过仓库、区域、货位单条件或多条件浏览货物库存信息。(5)库存统计管理。可以对库存信息、入库、出库、采购操作进行详细的查询。查询条件包括按仓库、区域、货位查询,按时间查询,按操作员查询。14 四、数据库设计(一)数据库设计概述 1.数据库概念结构设计 这一阶段是在需求分析的基础上,设计出能够满足客户需求的各种实体,以及他们之间的关系,为后面的逻辑设计打下基础。本例的实体有:入库实体、出库实体、移库实体、采购实体。库存管理系统的局部 E-R 视图:图 4.1 系统局部 E-R 图 库存管理系统的集成 E-R 视图:图 4.226、 系统集成 E-R 图 15 2.数据库逻辑结构设计 现在需要将上面的数据库概念结构设计转化为 SQLServer2000 所支持的实际数据类型,也就是数据库逻辑结构。在上面的实体和实体关系的基础上,形成数据库的表格和个表格之间的关系。本系统的各个表格的设计结果如下:表 4.1 用户表 编号 字段名称 数据结构 说明 1 userid Int 用户编号 2 username Varchar(20)用户名称 3 password Varchar(16)用户密码 4 grade Int 用户级别,1超级用户,2管理员,3-普通用户 5 email Varvhar(20)电子邮件 6 mobile 27、Varchar(11)手机号码 表 4.2 仓库表 编号 字段名称 数据结构 说明 1 wareid Int 仓库编号 2 warename Varchar(50)仓库名称 3 maxarea Int 最大区域数 4 address Varchar(100)地址 表 4.3 区域表 编号 字段名称 数据结构 说明 1 areaid Int 区域编号 2 areaname Varchar(50)区域名称 3 wareid Int 所在仓库 4 maxspace Int 最大货位数 表 4.4 货位表 编号 字段名称 数据结构 说明 1 spaceid Int 货位编号 2 spacename V28、archar(50)货位名称 3 areaid Int 所在区域 4 maxgoods Int 最大货物数 表 4.5 类别表 编号 字段名称 数据结构 说明 1 sortid Int 类别编号 2 sortname Varchar(50)类别名称 16 表 4.6 货物表 编号 字段名称 数据结构 说明 1 goodsid Int 货物编号 2 goodsname Varchar(20)货物名称 3 sortid Int 所属类别 4 maxnumber Int 最大库存 5 minnumber Int 最小库存 6 price Int 价格 表 4.7 库存表 编号 字段名称 数据结构 说29、明 1 stockid Int 库存编号 2 goodsid Int 货物名称 3 number Int 数量 4 wareid Int 所属仓库 5 areaid Int 所属区域 6 spaceid Int 所属货位 表 4.8 入出库表 编号 字段名称 数据结构 说明 1 inventoryid Int 入出库编号 2 goodsid Int 货物名称 3 wareid Int 所在仓库 4 areaid Int 所在区域 5 spaceid Int 所在货位 6 username Varchar(20)操作员 7 number Int 入出库数量 8 modifytime dateti30、me 入出库时间 9 type Varchar(10)入出库类型 10 remark Varchar(500)备注 表 4.9 移出库表 编号 字段名称 数据结构 说明 1 transferid Int 移库编号 2 goodsid Int 货物名称 3 username Varchar(20)操作员 4 number Int 移库数量 5 transtime datetime 移库时间 6 inputwareid Int 移入仓库 7 inputareaid Int 移入区域 8 inputspaceid Int 移入货位 9 outputwareid Int 移出仓库 10 outputa31、reaid Int 移出区域 11 outputspaceid Int 移出货位 17 表 4.10 采购表 编号 字段名称 数据结构 说明 1 purchaseid Int 采购编号 2 goodsid Int 货物名称 3 number Int 采购数量 4 purtime datetime 采购时间 5 username Varchar(20)操作员 6 remark Varchar(500)备注 表 4.11 系统表 编号 字段名称 数据结构 说明 1 wareinitial Int 仓库是否初始化(0-否,1-是)2 areainitial Int 区域是否初始化(0-否,1-是)332、 spaceinitial Int 货位是否初始化(0-否,1-是)4 sortinitial Int 类别是否初始化(0-否,1-是)5 goodsinitial Int 货物是否初始化 18 五、详细设计(一)引言 为使用本系统的用户提供完善的库存管理服务,以及精确的库存查询服务,为企业管理者提供实时库存信息,帮助企业决策者了解库存状态,辅助做出合理的决策。该部分所有业务逻辑代码详见附录。(二)系统程序设计 1.用户登录设计说明 该程序检查用户登录信息是否合法,合法用户的信息会被保存到 Session 中,如果未登录用户想使用系统其它功能都会被拒绝。该程序的设计可有效避免 SQL 注入漏洞33、。如图 5.1 为用户登陆界面,用户登录时要求用户名长度在 20 个字符以内,密码长度为 6-16 个字符 图 5.1 系统登录界面 如图 5.2 所示为用户登录后界面。19 图 5.2 用户管理主界面 该功能流程逻辑图如下所示:图 5.3 用户管理流程逻辑图 LoginServlet 得到用户提交的数据 username,password,然后调用 UserProcess 类的 loginCheck(String u,String p)方法对数据进行检查。检查方法如下:(1)首先检查用户名为 username 时的密码(select top 1 password from users whe34、re username=+u+),若不存在,表明不存在该用户,返回用户名错误提示信息。(2)若 存 在,检 查username的 密 码 与password是 否 相 等(p.equals(rs.getString(1)),若相等,登录成功,跳转到用户管理界面;否则,返回密码错误提示信息。该算法有效避免了 SQL 注入漏洞。因为如果采用以下 SQL 查询语句:select top 1*from users where username=+u+and password=+p+时,用户在登录时随意输入用户名,而输入以下密码:or 1=1 就可以成功登录到系统。2实体添加设计说明 该程序功能是添加实35、体到数据库,以仓库添加为实例,其他实体的添加过程与仓库类似,不在一一赘述。20 如图 5.4 为仓库添加界面,添加仓库时要求仓库名长度在 50 个字符以内,地址长度为 100 个字符以内。图 5.4 添加仓库界面 如图 5.5 所示为成功添加仓库后界面。图中第一条数据即为刚刚添加数据。图 5.5 成功添加仓库界面 该功能流程逻辑图为:图 5.6 添加仓库流程逻辑图 WareServlet 得到用户提交的数据 warename,maxarea,address,然后调用WareProcess 类的 addWare(WareBean wb)方法将数据添加到数据库,SQL 语句如下:String sq36、l=insert into warehouse values(+wb.getWarename()+,+wb.getMaxarea()+,+wb.getAddress()+);3.分页浏览设计说明 该程序功能是添加实体到数据库,以仓库添加为实例,其他实体的添加过程与仓库类似,不在一一赘述。如图 5.7 为仓库分页浏览界面 21 图 5.7 仓库分页浏览界面 1 如图 5.8 所示为点击下一页后仓库分页浏览界面。图 5.8 仓库分页浏览界面 2 该算法有四个主要的参数,pageNo 代表当前的页数,pageSize 代表每页显示几行记录,pageCount 代表共有多少页,rowCount 代表共37、有多少行记录。其中 rowCount由以下 SQL 语句求出:select count(*)from warehouse;pageSize 由程序员自己设置,pageCount的 值 可 由 以 下 方 法 求 出:如 果rowCount%pageSize=0,pageCount=rowCount/ageSize,否则 pageCount=rowCount/ageSize+1;pageNo 的值是通过参数传递过来的,那么上述四个参数确定后,第 pageNo 页的记录通过以下的 SQL语句求的:String sql1=select top”+pageSize+*from warehouse wh38、ere wareid not in(select top +(pageNo-1)*pageSize+wareid from warehouse)order by wareid desc;4.实体修改设计说明 该程序功能是修改实体的信息,然后保存到数据库,以仓库修改为实例,其他实体的修改过程与仓库类似,不在一一赘述。如图 5.9 为仓库修改界面,修改仓库时要求仓库名长度在 50 个字符以内,地址长度为 100 个字符以内。图 5.9 添加仓库界面 22 如图 5.10 所示为成功修改仓库后界面。图 5.10 成功修改仓库界面 该功能流程逻辑图为:图 5.11 成功修改仓库流程逻辑图 WareSe39、rvlet 得到用户提交的数据 wareid,warename,maxarea,address,然后调用WareProcess 类的 modifyWare(WareBean wb)方法修改仓库信息,然后将数据保存到数据库,SQL 语句如下:String sql=update warehouse set warename=+wb.getWarename()+,maxarea=+wb.getMaxarea()+,address=+wb.getAddress()+where wareid=+wb.getWareid();5.实体删除设计说明 该程序功能是删除实体的信息,以仓库删除为实例,其他实体的删40、除过程与仓库类似,不在一一赘述。如图 5.12 为仓库删除界面 23 图 5.12 仓库删除界面 如图 5.13 所示为成功删除仓库后界面。图 5.13 成功删除仓库界面 该功能流程逻辑图为:WareManager.jspWareServletWareManager.jsp?failure.jspWareProcess(deleteWare)图 5.14 删除仓库业务逻辑流程图 WareServlet 得到用户提交的数据 wareid,然后调用 WareProcess 类的deleteWare(int wareid)方法删除仓库信息,SQL 语句如下:String sql=delete fro41、m warehouse where wareid=+wareid;6.入库设计说明 该程序功能是实现货物的入库。如图 5.15、5.16 所示为入库界面 24 图 5.15 入库界面 1 图 5.16 入库界面 2 如图 5.17 所示为成功入库后界面。图 5.17 成功入库界面 该功能流程逻辑图为:25 图 5.18 入库流程逻辑图 InventoryServlet 得到用户提交的数据,然后调用 InventoryProcess 类的addInventory(InventoryBean ib)方法添加入库信息,同时更新库存信息,更新库存信息的 SQL 语句如下:String sql=upda42、te stock set number=number+number+where goodsid=+gb.getGoodsid()+and wareid=+wb.getWareid()+and areaid=+ab.getAreaid()+and spaceid=+sb.getSpaceid();7.移库设计说明 该程序功能是实现货物的移库。如图 5.19 所示为移库界面 图 5.19 移库界面 如图 5.20 所示为成功移库后界面。26 图 5.20 成功移库界面 该功能流程逻辑图为:Transfer.jspTransferServletTansfer.jsp?Transfer.jsp(?)T43、ransferProcess(addTransfer)StockProcess(putin,putout)?图 5.21 移库流程逻辑图 TransferServlet 得到用户提交的数据,然后调用 TransferProcess 类的addTransfer(TransferBean tb)方法添加移库信息,同时更新库存信息:sp.putin(gb,inputware,inputarea,inputspace,number);sp.putout(gb,outputware,outputarea,outputspace,number);8.采购设计说明 该程序功能是实现货物的采购。如图 5.2244、 所示为采购界面 图 5.22 采购界面 27 如图 5.23 所示为成功采购后界面。图 5.23 成功采购界面 该功能流程逻辑图为:图 5.24 采购流程逻辑图 PurchaseServlet 得到用户提交的数据,然后调用 PurchaseProcess 类的addPurchase(PurchaseBean pb)方法添加采购信息,同时更新库存信息。28 六、系统安装与调试 本系统顺利运行需要以下安装环境:jdk1.6.0 以上,Tomcat6.0 以上,SQLServer2000 以上以及 SP4 升级包。开发环境为:MyEclispe6.0。(一)系统安装 1.jdk 安装 首先下载 j45、dk 安装包,地址如下:http:/192.18.108.146/ECom/EComTicketServlet/BEGIN5A4E030F1B9D9C5D83D453A487C88FB1/-2147483648/2328078531/1/838358/840458/2328078531/2ts+/westCoastFSEND/jdk-6u2-oth-JPR/jdk-6u2-oth-JPR:2/jdk-6u2-windows-i586-p.exe;下载完成后,双击安装文件,按提示完成安装。2.Tomcat 安装 首先下载 Tomcat 安装包,地址如下:http:/tomcat.apache.o46、rg/download-60.cgi 下载完成后,双击安装文件,按提示完成安装。安装完成后,进入 Tomcat 主目录下 Tomcat 6.0bin,双击 tomcat6.exe,启动 tomcat;新建 IE 窗口,在地址栏中输入如下地址:http:/127.0.0.1:8080,如果页面访问成功,则 Tomcat 安装成功。3.系统安装 打开 SQLServer 查询分析器,输入数据库建表语句(建附录),点击运行,完成数据库的建立。将本系统文件夹拷贝到 Tomcat 主目录下 Tomcat 6.0webapps 目录下,在 IE 窗口地址栏中输入 http:/127.0.0.1:8080/47、Inventory,如果访问成功则表示本系统安装成功。(二)系统调试 错误 1:java.lang.NumberFormatException:For input string:解决方法:检查输入的数据是否为空。错误 2:java.sql.SQLException:Error establishing socket.解决方法:检查是否 SQLServer 服务器是否启动。错误 3:java.sql.SQLException:违反了 UNIQUE KEY 约束.解决方法:输入的数据项与数据库中已有的数据重复,而该数据项对应的数据库 29 字段设定了 UNIQUE 约束,即该字段数据不允许重复,修48、改输入数据即可解决。错误 4:java.sql.SQLException:DELETE 语句与 COLUMN REFERENCE 约束冲突。解决方法:删除数据时违反了数据库的外键约束,即删除的数据的字段是其他表的外键。首先删除与该记录有关的记录,再删除该记录。30 结束语结束语 本系统的设计与实现历时两个多月的时间,目前基本的功能均已实现。本系统的主要特点有以下几个方面:(1)由于本系统采用的设计语言是基于 java 的,所以本系统能够跨平台运行,即在 windows,unix,linux 等不同的操作系统环境下均可运行。(2)由于本系统的设计遵循 MVC 的设计模式,所以代码可重用性高,低耦49、合性,代码维护方便。(3)系统查错能力强,而且对于用户的操作错误都有友好而详细的提示。(4)界面设计简洁,以浅绿色为主色调,操作方便、简洁。但是,本系统设计依然不够完善,有许多不足之处。主要有以下几点:(1)前期系统调研不足,系统功能还不够完善。(2)系统的可扩展性不佳,往往系统的一小部分修改会牵扯到许多地方的改动,工作量大且容易出错。(3)数据库设计不够合理,数据冗余多,安全性不够。综合以上不足,系统的仍需不断改进。包括进行更加详细的系统调研,了解用户的真正需求,不断完善系统的功能,增加系统的实用性。技术方面可以考虑目前比较流行的 SSH 框架,提高系统的可扩展性。参考文献参考文献 1王斌斌50、,吴孝丽.库存管理系统 UML 设计J.平顶山工学院学报,2008,(03).2陈瑞斌,南理勇.基于 Web 服务的仓库管理系统设计J.信息服务报,2008,(02).3杜来红.基于 Web 的物料库存管理系统的研究J.物流技术,2006,(8).4朱士高,朱军,朱彩霞.基于 WEB 的企业进销存管理系统的设计J.淮阴工学院学报,2007,(5)5Huang S C,Huang Y M,Shieh S M Vibration and stability of a rotating shaft containing a transerse crack J.J Sound and Vibratio51、n,1993,162(3):387-401 6汪旭敏,陈晓川,杨建国等.基于 WEB 的库存管理系统的设计和实现J.机械设计与制造,2008,(1).7俞文跃,张长胜.基于 Web Service 三层体系结构的库存管理系统的开发J.福建电脑报,2008,(12).8乔荣丽,高淑芝,孙水亮.基于 MVC 模式的物资供应管理信息系统的设计J.化工之友,2007,(15).9张兴旺,赵嘉.基于 JSP 的物流管理系统的设计与实现J.物流工程,2007,(7).10马颖,张劳模.基于 J2EE 平台的库存管理系统设计与实现J.郑州铁路职业技术学院学报,2006,18(4).11许维.J2EE 架构下52、的物流信息系统设计J.中国管理信息化,2006,9(5).12Manuel.D Rossetti,Mehmet Miman,Vijith Varghese.Object-Oriented Framework for Simulating Multi-Echelon Inventory Systems J,2006.13薛小锋.企业采购管理系统的设计与实现J.数据库及信息管理,2007,(06).14许跟勇,周炳海.基于 RFID 的第三方物流仓储管理系统设计应用J.物流科技,2008,(11).15陈潇.第三方物流管理信息系统设计库存管理信息系统J.山西财经大学学报,2008,11(1).致致53、 谢谢 经过长达三个月的努力我的毕业论文终于完成了。在这期间,指导教师徐家旺老师给了我细致、专业的指点以及耐心的辅导,在此深表敬意和感谢!同时,在我完成毕业论文的过程中,教研室的老师、辅导员老师以及同学们也给予了我莫大的帮助,对他们的关心、帮助我深表感谢!我更要感谢大学四年来所有教过我的老师,没有他们深厚的专业理论知识和经验的授予,就没有我今天的成绩。33 附录 数据库建表语句 create database inventory;use inventory;create table users(userid int primary key identity(1,1),username varc54、har(20)unique,password varchar(12),grade int);insert into users(username,password,grade)values(sa,sa,1);select*from users;create table warehouse(wareid int primary key identity(1,1),warename varchar(50)unique);select*from warehouse;create table area(areaid int primary key identity(1,1),areaname varc55、har(50)unique,wareid int,foreign key(wareid)references warehouse(wareid);select*from area;create table space(spaceid int primary key identity(1,1),spacename varchar(50)unique,areaid int,foreign key(areaid)references area(areaid);select*from space;create table sort(sortid int primary key identity(1,156、),sortname varchar(50)unique);select*from sort;create table goods(goodsid int primary key identity(1,1),goodsname varchar(50),price int,number int,sortid int,wareid int,areaid int,spaceid int,maxnumber int,minnumber int,foreign key(sortid)references sort(sortid),foreign key(wareid)references warehou57、se(wareid),foreign key(areaid)references area(areaid),foreign key(spaceid)references space(spaceid);select*from goods;create table stock(stockid int primary key identity(1,1),goodsid int,username varchar(20),number int,modifytime datetime,type varchar(10),audit bit,remark varchar(500)foreign key(use58、rname)references users(username),foreign key(goodsid)references goods(goodsid);select*from stock;create table transfer(transferid int primary key identity(1,1),goodsid int,username varchar(20),number int,transtime datetime,inputware int,inputarea int,inputspace int,outputware int,outputarea int,outp59、utspace int,foreign key(username)references users(username),foreign key(goodsid)references goods(goodsid),foreign key(inputware)references warehouse(wareid),foreign key(inputarea)references area(areaid),foreign key(inputspace)references space(spaceid),foreign key(outputware)references warehouse(ware60、id),foreign key(outputarea)references area(areaid),foreign key(outputspace)references space(spaceid);select*from transfer;create table system(wareinitial bit,areainitial bit,spaceinitial bit,sortinitial bit,goodsinitial bit);insert into system values(0,0,0,0,0);select*from system;34 附录 系统主要业务逻辑代码 登录61、功能主要业务逻辑代码:public String loginCheck(String u,String p)String str=;try conn=new ConnectionProcess().getConn();String sql=select top 1 password from users where username=+u+;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(rs.next()if(!p.equals(rs.getString(1)str=密码错误!;else str=用户名错误!;catch62、(SQLException e)e.printStackTrace();finally this.close();return str;添加功能业务逻辑代码:public boolean addWare(WareBean wb)boolean b=false;try conn=new ConnectionProcess().getConn();String sql=insert into warehouse values(+wb.getWarename()+,+wb.getMaxarea()+,+wb.getAddress()+);pstmt=conn.prepareStatement(sql63、);int i =pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;分页浏览功能业务逻辑代码:public ArrayList getWares(int pageNo,int pageSize)ArrayList al=new ArrayList();int rowCount=0;try conn=new ConnectionProcess().getConn();String sql=select count(*)from war64、ehouse;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(rs.next()rowCount=rs.getInt(1);35 if(rowCount%pageSize=0)pageCount=rowCount/pageSize;else pageCount=rowCount/pageSize+1;String sql1=select top +pageSize+*from warehouse where wareid not in(select top +(pageNo-1)*pageSize+wareid from 65、warehouse)order by wareid desc;pstmt=conn.prepareStatement(sql1);rs=pstmt.executeQuery();while(rs.next()WareBean wb=new WareBean();wb.setWareid(rs.getInt(1);wb.setWarename(rs.getString(2);wb.setMaxarea(rs.getInt(3);wb.setAddress(rs.getString(4);al.add(wb);catch(SQLException e)e.printStackTrace();fin66、ally this.close();return al;修改功能业务逻辑代码:public boolean modifyWare(WareBean wb)boolean b=false;try conn=new ConnectionProcess().getConn();String sql=update warehouse set warename=+wb.getWarename()+,maxarea=+wb.getMaxarea()+,address=+wb.getAddress()+where wareid=+wb.getWareid();pstmt=conn.prepareStatem67、ent(sql);int i =pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;删除功能业务逻辑代码:public boolean deleteWare(int wareid)boolean b=false;try conn=new ConnectionProcess().getConn();String sql=delete from warehouse where wareid=+wareid;pstmt=conn.prepa68、reStatement(sql);int i =pstmt.executeUpdate();if(i 0)36 b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;添加入出库记录业务逻辑代码:public boolean addInventory(InventoryBean ib)boolean b=false;SimpleDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String modifytime=sdf.format69、(ib.getModifytime();try conn=new ConnectionProcess().getConn();String sql=insert into inventory values(+ib.getGoods().getGoodsid()+,+ib.getWare().getWareid()+,+ib.getArea().getAreaid()+,+ib.getSpace().getSpaceid()+,+ib.getUser().getUsername()+,+ib.getNumber()+,+modifytime+,+ib.getType()+,+ib.getRema70、rk()+);pstmt=conn.prepareStatement(sql);int i =pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;入库时更新货物库存业务逻辑代码:public boolean putin(GoodsBean gb,WareBean wb,AreaBean ab,SpaceBean sb,int number)boolean b=false;try conn=new ConnectionProcess()71、.getConn();String sql=update stock set number=number+number +where goodsid=+gb.getGoodsid()+and wareid=+wb.getWareid()+and areaid=+ab.getAreaid()+and spaceid=+sb.getSpaceid();pstmt=conn.prepareStatement(sql);int i=pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally 372、7 this.close();return b;弹出货物选择对话框是用JavaScript实现的,代码如下:function show()document.allLayer1.style.visibility=visible;function closeDiv()document.allLayer1.style.visibility=hidden;function change()var str;str=event.srcElement.id;document.form1.goodsname.value=str;closeDiv();%for(int i=0;i a id=onclick=ch73、ange();a id=onclick=change();a id=onclick=change();a id=onclick=change();a id=onclick=change();出库时更新货物库存业务逻辑代码:public boolean putout(GoodsBean gb,WareBean wb,AreaBean ab,SpaceBean sb,int number)boolean b=false;try conn=new ConnectionProcess().getConn();String sql=update stock set number=number-+numb74、er 38 +where goodsid=+gb.getGoodsid()+and wareid=+wb.getWareid()+and areaid=+ab.getAreaid()+and spaceid=+sb.getSpaceid();pstmt=conn.prepareStatement(sql);int i=pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;添加移库记录业务逻辑代码:public boolean addTr75、ansfer(TransferBean tb)boolean b=false;try conn=new ConnectionProcess().getConn();SimpleDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String transfertime=sdf.format(tb.getTransfertime();String sql=insert into transfer(goodsid,username,number,transtime,+inputware,inputarea,inputspace,outpu76、tware,outputarea,outputspace)values(+tb.getGoods().getGoodsid()+,+tb.getUser().getUsername()+,+tb.getNumber()+,+transfertime+,+tb.getInputware().getWareid()+,+tb.getInputarea().getAreaid()+,+tb.getInputspace().getSpaceid()+,+tb.getOutputware().getWareid()+,+tb.getOutputarea().getAreaid()+,+tb.getOut77、putspace().getSpaceid()+);pstmt=conn.prepareStatement(sql);int i=pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;库存盘点业务逻辑代码:public boolean update(int goodsid,int wareid,int areaid,int spaceid,int number)boolean b=false;try conn=new Connectio78、nProcess().getConn();String sql=update stock set number=+number +where goodsid=+goodsid +and wareid=+wareid 39 +and areaid=+areaid +and spaceid=+spaceid;pstmt=conn.prepareStatement(sql);int i =pstmt.executeUpdate();if(i 0)b=true;catch(SQLException e)e.printStackTrace();finally this.close();return b;79、库存统计功能代码:public int count(GoodsBean gb,WareBean ware,AreaBean area,SpaceBean space)int count=0;String str=;String str1=;String str2=;String str3=;String str4=;if(gb.getGoodsid()!=0)str1=goodsid=+gb.getGoodsid();else str1=1=1;if(ware.getWareid()!=0)str2=and wareid=+ware.getWareid();else str2=and 1=1;80、if(area.getAreaid()!=0)str3=and areaid=+area.getAreaid();else str3=and 1=1;if(space.getSpaceid()!=0)str4=and spaceid=+space.getSpaceid();else str4=and 1=1;str=str1+str2+str3+str4;try conn=new ConnectionProcess().getConn();String sql=select sum(number)from stock where +str;pstmt=conn.prepareStatement81、(sql);rs=pstmt.executeQuery();if(rs.next()count=rs.getInt(1);catch(SQLException e)e.printStackTrace();finally this.close();return count;出入库统计功能,按时间统计代码:40 public ArrayList getInventorys(String type,String starttime,String endtime,int pageNo,int pageSize)ArrayList al=new ArrayList();int rowCount=0;tr82、y conn=new ConnectionProcess().getConn();String sql=select count(*)from inventory where type=+type+and modifytime between+starttime+and +endtime+;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(rs.next()rowCount=rs.getInt(1);if(rowCount%pageSize=0)pageCount=rowCount/pageSize;else pageCou83、nt=rowCount/pageSize+1;String sql1=select top +pageSize+*from inventory where type=+type+and modifytime between+starttime+and +endtime+and inventoryid not in(select top +(pageNo-1)*pageSize+inventoryid from inventory)order by inventoryid desc;pstmt=conn.prepareStatement(sql1);rs=pstmt.executeQuery()84、;while(rs.next()InventoryBean ib=new InventoryBean();ib.setInventoryid(rs.getInt(1);int goodsid=rs.getInt(2);GoodsBean good=new GoodsProcess().getGood(goodsid);ib.setGoods(good);int wareid=rs.getInt(3);WareBean wb=new WareProcess().getWare(wareid);ib.setWare(wb);int areaid=rs.getInt(4);AreaBean ab=n85、ew AreaProcess().getArea(areaid);ib.setArea(ab);int spaceid=rs.getInt(5);SpaceBean sb=new SpaceProcess().getSpace(spaceid);ib.setSpace(sb);String username=rs.getString(6);UserBean ub=new UserProcess().getUser(username);ib.setUser(ub);ib.setNumber(rs.getInt(7);ib.setModifytime(rs.getTimestamp(8);ib.s86、etType(rs.getString(9);ib.setRemark(rs.getString(10);al.add(ib);catch(SQLException e)e.printStackTrace();finally this.close();return al;出入库统计功能,按操作员统计代码:public ArrayList getInventorys(String type,String username,int pageNo,int pageSize)41 ArrayList al=new ArrayList();int rowCount=0;try conn=new Conn87、ectionProcess().getConn();String sql=select count(*)from inventory where type=+type+and username like%+username+%;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(rs.next()rowCount=rs.getInt(1);if(rowCount%pageSize=0)pageCount=rowCount/pageSize;else pageCount=rowCount/pageSize+1;String sq88、l1=select top +pageSize+*from inventory where type=+type+and username like%+username+%and inventoryid not in(select top +(pageNo-1)*pageSize+inventoryid from inventory)order by inventoryid desc;pstmt=conn.prepareStatement(sql1);rs=pstmt.executeQuery();while(rs.next()InventoryBean ib=new InventoryBea89、n();ib.setInventoryid(rs.getInt(1);int goodsid=rs.getInt(2);GoodsBean good=new GoodsProcess().getGood(goodsid);ib.setGoods(good);int wareid=rs.getInt(3);WareBean wb=new WareProcess().getWare(wareid);ib.setWare(wb);int areaid=rs.getInt(4);AreaBean ab=new AreaProcess().getArea(areaid);ib.setArea(ab);i90、nt spaceid=rs.getInt(5);SpaceBean sb=);ib.setSpace(sb);String uname=rs.getString(6);UserBean ub=new UserProcess().getUser(uname);ib.setUser(ub);ib.setNumber(rs.getInt(7);ib.setModifytime(rs.getTimestamp(8);ib.setType(rs.getString(9);ib.setRemark(rs.getString(10);al.add(ib);catch(SQLException e)e.pri91、ntStackTrace();finally this.close();return al;采购统计功能,按时间统计代码:public ArrayList getPurchases(String starttime,String endtime,int pageNo,int pageSize)42 ArrayList al=new ArrayList();int rowCount=0;try conn=new ConnectionProcess().getConn();String sql=select count(*)from purchase where purtime between+s92、tarttime+and+endtime+;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(rs.next()rowCount=rs.getInt(1);if(rowCount%pageSize=0)pageCount=rowCount/pageSize;else pageCount=rowCount/pageSize+1;String sql1=select top +pageSize+*from purchase where purtime between +starttime+and+endtime+and purc93、haseid not in(select top +(pageNo-1)*pageSize+purchaseid from purchase)order by purchaseid desc;pstmt=conn.prepareStatement(sql1);rs=pstmt.executeQuery();while(rs.next()PurchaseBean pb=new PurchaseBean();pb.setPurchaseid(rs.getInt(1);int goodsid=rs.getInt(2);GoodsBean gb=new GoodsProcess().getGood(g94、oodsid);pb.setGoods(gb);pb.setNumber(rs.getInt(3);pb.setPurtime(rs.getTimestamp(4);String username=rs.getString(5);UserBean ub=new UserProcess().getUser(username);pb.setUser(ub);pb.setRemark(rs.getString(6);al.add(pb);catch(SQLException e)e.printStackTrace();finally this.close();return al;采购统计功能,按操作95、员统计业务逻辑代码:public ArrayList getPurchases(String username,int pageNo,int pageSize)ArrayList al=new ArrayList();int rowCount=0;try conn=new ConnectionProcess().getConn();String sql=select count(*)from purchase where username like%+username+%;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();if(r96、s.next()rowCount=rs.getInt(1);43 if(rowCount%pageSize=0)pageCount=rowCount/pageSize;else pageCount=rowCount/pageSize+1;String sql1=select top +pageSize+*from purchase where username like%+username+%and purchaseid not in(select top +(pageNo-1)*pageSize+purchaseid from purchase)order by purchaseid des97、c;pstmt=conn.prepareStatement(sql1);rs=pstmt.executeQuery();while(rs.next()PurchaseBean pb=new PurchaseBean();pb.setPurchaseid(rs.getInt(1);int goodsid=rs.getInt(2);GoodsBean gb=new GoodsProcess().getGood(goodsid);pb.setGoods(gb);pb.setNumber(rs.getInt(3);pb.setPurtime(rs.getTimestamp(4);String uname=rs.getString(5);UserBean ub=new UserProcess().getUser(uname);pb.setUser(ub);pb.setRemark(rs.getString(6);al.add(pb);catch(SQLException e)e.printStackTrace();finally this.close();return al;