目录
1引言 1
1.1课题背景 1
1.2目的和意义 2
1.3研究内容和组织结构 2
2开发工具及技术 3
2.1开发工具 3
2.2使用技术 4
3可行性分析 6
3.1法律的可行性 6
3.2经济的可行性 6
3.3技术的可行性 6
4需求分析 7
4.1系统功能分析 7
4.1.1经理用例图 7
4.1.2人事部员工用例图 7
4.1.3采购部员工用例图 8
4.1.4物资部员工用例图 8
4.1.5销售部员工用例图 9
4.2功能模块需求分析 9
4.3数据流图 10
4.3.1顶层数据流图 10
4.3.2一层数据流图 10
4.4数据字典 11
4.4.1数据项的描述 11
4.4.2数据流的描述 12
4.4.3描述外部实体 14
5系统设计 15
5.1系统结构设计 15
5.2系统子模块功能介绍 15
5.3数据库设计 16
5.3.1数据库概念设计(E-R模型) 16
5.3.2数据库表结构设计 17
6系统实现 20
6.1系统登录界面 22
6.2登录成功界面 23
6.3人事管理界面 25
6.4合作公司管理界面 26
6.5采购管理界面 28
6.6库存管理界面 31
6.7销售管理界面 34
6.8经营统计界面 35
7系统测试 35
7.1测试目的 35
7.2测试方法 36
7.3测试结果 36
8总结 37
参考文献 38
致谢 39
1 引言
随着国内物流行业的迅速发展,越来越多的企业认识到了“供应链”一词的含义以及它对整个企业物流活动的重大意义,于是,“供应链管理”也逐渐受到了大家的重视。供应链管理主要涉及到四个领域:供应、生产计划、物流、需求[1]。职能领域主要包括产品工程、产品技术保证、采购、生产控制、库存控制、仓储管理、分销管理[2]。在供应链管理中涉及到如此广泛、复杂的物流活动,要对其进行统筹、控制绝非易事,这也是我国企业目前在供应链管理中亟待解决的难题。与此同时,互联网和网络技术的进步为我们解决这一问题提供了方案,借助互联网及互联网技术,企业各个物流阶段的大量数据可以得到及时传输,并通过日益成熟的算法或处理手段实现对这些数据的准确分析,从而指导企业的物流活动或对未来做出预测。百货中心作为现在物流以及商业中的重要一环,为了应对新兴消费方式的冲击,其供应链模式自然也有统筹优化的必要,同时,Internet和网络技术的飞速发展也为供应链的管理提供了新的手段。
SCM(Supply Chain Management)系统即供应链管理系统,利用计算机和Internet的优点,将供应链中的信息流加以收集并控制,只需要少量的人工,便可实现对整个供应链进行监管[3]。
国际上研究供应链主要是开始于二战后期的物流管理,主要从多级库存以及生产-分销的角度来研究供应链的优化问题。从最初的物流管理到供应链管理,再到如今把供应链增长到战略管理来研究,花费了半个多世纪的时间。国内对供应链的研究起步较晚,国内一些企业对于供应链管理的认识比较肤浅,直到1997年以后,随着各种有关供应链方面的研究和报道增多,人们对物流领域的这一新鲜事物的关注也逐渐升温,直到今天,许多国外的知名公司如IBM、SAP都能为企业的供应链管理提供一整套的解决方案,国内近些年也出现了许多解决企业供应链管理问题的公司和软件[1]。但总体来说,对于这一门相对还很年轻的科学,我们还有很长的路要走。
随着我国经济结构调整的深入,对企业节能减排的要求更加严格,企业只有通过强化环境保护的自我约束机制,来降低产品和生产过程相关的环境污染所带来的生产经营风险。绿色供应链管理能使整个供应链的资源消耗和环境负作用最小,并能有效满足日益增长的绿色消费需求,从而提高供应链的竞争力。
因此,实施绿色供应链管理是企业发展的必然趋势,这对我国供应链管理行业提出了更高的要求。
对于课题-百货中心供应链管理系统,在了解了传统SCM的基础上,结合了计算机及Internet技术的优点,旨在于简化操作,提高效率,提高数据、信息的安全程度,为企业及其员工提供一个更加便捷高效的工作环境。
与传统仅仅利用表格、账目来实现对供应链的管理,基于Web的百货中心供应链管理系统具有如下优点:
- 信息存放在数据库中,安全稳定,便于备份;
- 不同职位的员工都可以使用一套系统,节约成本、方便管理;
- 基于Web的办公系统,方便员工维护,无地域限制;
- 利用计算机将不同数据整合,方便企业管理、进行决策。
本文主要通过对百货中心供应链管理系统进行需求分析,结合供应链管理的相关理论,设计出供应链管理系统的各个功能模块,并对其做出一定的说明指导,方便使用者进行操作。
系统的主要研究内容包括:
- 百货中心供应链管理系统的可行性分析
研究供应链管理相关方面的知识,了解百货中心供应链的运作模式及现状,分析确定开发本系统的必要性和可行性。
- 系统需求分析
确定业务流程,分析数据流向,完成数据流图和系统用例图的绘制,完成数据字典的制作。
- 系统概要/详细设计
根据需求分析阶段的结果,以提高百货中心各层员工的工作效率为目的,将整个系统分成若干个小模块,通过设计、编写代码实现不同功能,完成数据库的搭建,最后将整个系统进行整合。
- 系统测试
对完成的系统进行条件许可下的测试,对系统的安全性、稳定性、容错性进行评估。
本文组织结构:
- 引言部分-阐述本系统的该项研究的目的和范围,以及该项研究工作在国民经济中的实用价值与理论意义;本文所要解决的问题;论文内容安排等。
- 开发工具及技术分析-对于本系统开发将要用到的开发工具及技术进行简单的说明,并分析其优势。
- 系统需求分析-分析系统业务流程,为整个系统的设计开发打下基础。
- 概要/详细设计-依据前文的分析进一步设计系统的各模块功能,为一些比较有难度的部分提供解决方案。
- 系统实现及测试-描述系统各模块的功能并展示部分关键代码,并且完成一些简单的数据录入测试。
2 开发工具及技术
本设计主要利用MyEclipse和Tomcat服务器,加上Mysql数据库进行开发,同时使用Maven来辅助、简化开发。下面对使用到的开发工具进行简要的介绍。
- MyEclipse
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是一个功能丰富的JavaEE开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate[4]。它是对EclipseIDE的扩展,是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持都十分不错[5]。
- Tomcat
Tomcat服务器是一个免费的开放源代码的Web应用服务器,它属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,十分符合本项目的需求[6]。Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能,并且它仍在不断地改进和完善中,因此十分受程序员的青睐。
- Mysql
Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一[7]。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySql使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;支持多种操作系统;为多种编程语言提供了API;支持多线程,充分利用CPU资源;提供TCP/IP、ODBC和JDBC等多种数据库连接途径;可以处理拥有上千万条记录的大型数据库[8]。
- Maven
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
- JSP
JSP, 全名为Java Server Pages,是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准[9]。在传统的网页HTML文件中加入Java程序片段和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。
JSP的根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览[10]。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
- SSH框架
SSH 为 struts + spring + hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架[11]。集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离[12]。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
- Tiles
Tiles 是一种JSP布局框架,主要目的是为了将复数的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。 Tiles使得struts在页面的处理方面多了一种选择。并且更容易实现代码的重用。
- JavaScript
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言[13]。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML(标准通用标记语言的子集)网页添加动态功能,比如响应用户的各种操作, 是一种动态、弱类型、基于原型的语言,内置支持类。在HTML基础上,使用JavaScript可以开发交互式Web网页[14]。JavaScript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。
3 可行性分析
在进行系统开发时,会受到来自时间、资源等多方面的限制,因此,在每一个项目开发开始之前,首先进行系统的可行性分析就显得十分重要,它可以减少项目开发的风险,避免人力、物力、财力的浪费[15]。下面将就法律、经济和技术三方面对本项目进行讨论。
百货中兴供应链管理系统是自主开发的管理系统,开发过程中使用的开发工具及技术都是免费的,开源的,不存在侵权的问题,所有的源代码都是亲自编写或直接由工具自动生成,没有使用他人的项目成果或方案,因此在法律上是可行的。
本系统所使用的开发工具都是开源的,为开发软件节省了大量的金钱和时间,采用的技术也是完全开放的、免费的,达到了降低成本的目的。软件对企业的硬件需求也不高,市场上的中低档计算机也可以符合使用要求,同时由于利用了互联网,比一般的供应链管理系统更加经济、效率。
系统使用的开发工具是MyEclipse、Maven和Mysql数据库,工具免费且小巧,安装方便,简单易学。并且采用了目前十分流行的J2EE技术,因而有很多途径找到相关的学习资料,在大学期间我也学习了许多相关的知识,包括对于数据库和编程思想的学习,使得在这个项目中更容易上手,能够迅速投入到系统的设计开发中去。
4 需求分析
经过对百货中心供销流程的了解和对供应链管理相关资料的分析,决定将系统用户分成五类不同的用例,系统应根据用例的不同职能实现不同的功能,经过分析,系统应具备人事管理、合作公司管理、采购订单管理、库存管理、销售管理、经营统计六大功能模块。具体用例图如下:
经理用例-经理应是百货中心的最高负责人之一,负责百货中心大部分的业务管理及监督工作,必要时也可以完成所有其他用例的操作,地位相当于系统管理员,具有最高权限。
图4.1 经理用例图
人事部员工用例-人事部员工主要操作系统的人事管理模块,同时也可以进入经营统计模块查看。
图4.2人事部员工用例图
采购部员工用例-采购部员工主要负责操作系统的合作公司管理模块和采购订单管理模块,同时也可以进入经营统计模块查看。
图4.3采购部员工用例图
物资部员工用例-物资部员工主要负责操作系统的库存管理模块,同时也可以进入经营统计模块查看。
图4.4物资部员工用例图
销售部员工用例-物资部员工主要负责操作系统的销售管理模块,同时也可以进入经营统计模块查看。
图4.5销售部员工用例图
考虑到用户可能对计算机操作不是十分熟悉,本系统应具备操作简便、界面友好的特点,再结合系统分析的结论,本系统还应增加一个登录模块以实现不同用例登录系统后可以进行不同的操作,具体分析如下:
- 系统界面简洁大方,使用简便,有友好的操作提示信息;
- 系统具有一定的安全性,避免恶意操作对系统及数据造成损害;
- 贴近实际用户的工作情况,对一些关键数据提供打印、保存功能;
- 系统应具备登录、人事管理、合作公司管理、采购订单管理、库存管理、销售管理、经营统计七大功能。
根据之前的分析,绘制数据流图。
用户通过输入用户名和密码,来实现用户登录,登录失败时会给出相应的提示并留在登录页面,登录成功后可以顺利进入供应链管理系统。
图4.6 系统顶层数据流图
成功登录的用户可以进入不同的模块完成相应的操作,根据登录用户的身份不同,可以进行的操作也会不同。
图4.7 系统第一层数据流图
数据字典的作用是对数据流图中的各种成分进行详细说明,作为数据流图的细节补充,和数据流图一起构成完整的系统需求模型[16]。数据字典一般应包括对数据项,数据结构、数据存储和数据处理的说明。以下列出本系统的主要数据字典条目。
表4.1 用户信息数据项描述
数据项 | 类型 | 长度 | 值范围 |
ID | 数字 | 11 | 00000000000至99999999999之间 |
用户名 | 文本 | 255 | 最多255个字符 |
密码 | 文本 | 255 | 最多255个字符 |
表4.2 合作公司数据项描述
数据项 | 类型 | 长度 | 值范围 |
ID | 数字 | 11 | 00000000000至99999999999之间 |
公司名 | 文本 | 255 | 最多255个字符 |
表4.3 采购订单数据项描述
数据项 | 类型 | 长度 | 值范围 |
ID | 数字 | 11 | 00000000000至99999999999之间 |
商品名 | 文本 | 255 | 最多255个字符 |
数量 | 数字 | 11 | 00000000000至99999999999之间 |
价格 | 数字 | 双精度浮点型 |
表4.4 库存信息数据项描述
数据项 | 类型 | 长度 | 值范围 |
ID | 数字 | 11 | 00000000000至99999999999之间 |
产品名 | 文本 | 255 | 最多255个字符 |
数量 | 数字 | 11 | 00000000000至99999999999之间 |
表4.5 销售信息数据项描述
数据项 | 类型 | 长度 | 值范围 |
ID | 数字 | 11 | 00000000000至99999999999之间 |
数量 | 数字 | 11 | 00000000000至99999999999之间 |
价格 | 数字 | 双精度浮点型 |
- 数据流编号:F1
数据流名:员工简要信息
简述:判断用户输入的信息是否符合要求,登录成功后用户可根据自己的权限对系统进行操作
组成:用户名+密码
- 数据流编号:F2、F3、F4
数据流名:员工登录信息
简述:获得与员工权限相关的信息,根据不同权限在页面上显示不同的操作选项
组成:ID+用户名+密码+真实姓名+所在部门
- 数据流编号:F5、F6
数据流名:员工信息
简述:实现对员工信息的增、删、改、查操作
组成:ID+用户名+密码+真实姓名+性别+年龄+所在部门+创建人+创建时间+修改人+修改时间
- 数据流编号:F7、F8
数据流名:合作公司信息
简述:实现对合作公司信息的增、删、改、查操作
组成:ID+公司名+负责人+公司地址+联系电话+创建人+创建时间+修改人+修改时间
- 数据流编号:F9、F10
数据流名:采购订单信息
简述:实现对采购订单信息的增、删、改、查操作
组成:ID+商品名+数量+价格+运输方式+货物状态+创建人+创建时间+修改人+修改时间
- 数据流编号:F11、F12
数据流名:库存信息
简述:实现对库存信息的增、改、查操作
组成:ID+产品名+数量+存放位置+存放状态+创建人+创建时间+修改人+修改时间
- 数据流编号:F13、F14
数据流名:销售信息
简述:实现对库存信息的增、查操作
组成:ID +数量+价格+创建人+创建时间+修改人+修改时间
- 数据流编号:F15
数据流名:销售人员信息
简述:统计销售人员情况
组成:姓名+销售金额
- 数据流编号:F16
数据流名:采购人员信息
简述:统计采购人员情况
组成:姓名+采购金额
- 数据流编号:F17
数据流名:销售商品信息
简述:统计销售商品信息
组成:产品名+销售总量
- 外部实体名称:经理
简述:系统管理员,具有最高权限
输入的数据流:人事信息、合作公司信息、采购订单信息、库存信息、销售信息
输出的数据流:人事信息、合作公司信息、采购订单信息、库存信息、销售信息、经营统计
- 外部实体名称:人事部员工
简述:负责百货中心的人事活动及管理
输入的数据流:人事信息
输出的数据流:人事信息、经营统计
- 外部实体名称:采购部员工
简述:负责百货中心与外部合作、采购的事物
输入的数据流:合作公司信息、采购订单信息
输出的数据流:合作公司信息、采购订单信息、经营统计
- 外部实体名称:物资部员工
简述:负责管理百货中心的仓库、完成商品的入库、出库工作
输入的数据流:库存信息
输出的数据流:库存信息、经营统计
- 外部实体名称:销售部员工
简述:负责百货中心的销售工作
输入的数据流:销售信息
输出的数据流:销售信息、经营统计
5 系统设计
按照需求分析阶段的结果,本系统的结构主要由两部分构成,首先是登录模块,之后会由登录模块中返回的结果给用户展示可以进行的操作,包括人事管理、合作公司管理、采购订单管理等六大类操作。系统结构图大致如下:
图5.1 系统结构图
- 登录模块:用户通过输入用户名和密码来登录系统,如果输入错误会返回登录界面,成功登录后用户的登录信息会存储在浏览器中,系统会根据这些信息判断该用户的操作权限。
- 人事管理模块:已经登录的符合权限的用户可以在此模块中查看公司员工信息,也可以根据需要添加、修改、删除员工信息。
- 合作公司管理模块:已经登录的符合权限的用户可以在此模块中查看合作公司信息,也可以根据需要添加、修改、删除合作公司信息。
- 采购订单管理模块:已经登录的符合权限的用户可以在此模块中查看采购订单信息,也可以根据需要添加、修改、删除采购订单信息。
- 库存管理模块:已经登录的符合权限的用户可以在此模块中查看商品库存信息,也可以根据需要添加、修改、商品库存信息。
- 销售管理模块:已经登录的符合权限的用户可以在此模块中查看商品销售信息,也可以根据需要添加商品销售信息。
- 经营统计模块:已经登录的用户可以在此模块中查看最佳销售、最佳采购、最佳商品的信息。
5.3 数据库设计
5.3.1 数据库概念设计(E-R模型)
本系统实体与其属性的关系用E-R模型表示如下(见下页):
图5.1 百货中心供应链管理系统E-R模型
5.3.2 数据库表结构设计
根据上述模型,在将其转化成关系模型后,在数据库(数据库名:chain)中创建如下5张表:
- 用户表(表名:tb_chain_user)
用来存储公司员工的表,主要用于系统的登录判断。包含用户id、用户名、密码、真实姓名、性别、年龄、就职日期、是否为管理员、照片、所在部门、创建人、创建日期、更新人、更新日期字段。
表5.1用户表(tb_chain_user)
- 合作公司表(表名:tb_chain_cooperation)
用来存储百货中心的合作公司的表,主要用于管理与百货中心合作的公司及公司的商品。主要包含合作公司id、公司名、负责人、公司地址、联系电话、创建人、创建日期、更新人、更新日期等字段。
表5.2 合作公司表(tb_chain_cooperation)
- 订单表(表名:tb_chain_purchase)
用来存储采购订单的表,用于记录采购的商品在入库前的状态。包含订单id、商品名、数量、价格、运送方式、运送状态、商品公司(合作公司)、创建人、创建时间、更新人、更新时间字段。
表5.3 订单表(tb_chain_purchase)
- 库存表(表名:tb_chain_stock)
用来存储商品的表,用于显示百货中心仓库中的货物及其相关信息。包含商品id、商品名、数量、摆放位置、存储状态、创建人、创建时间、更新人、更新时间字段。
表5.4 库存表(tb_chain_stock)
- 销售单表(表名:tb_chain_sale)
用来存储销售信息的表,用于存储百货中心商品的销售情况。包含销售单id、数量、价格、商品id、用户id、创建人、创建时间、更新人、更新时间字段。
表5.5 销售单表(tb_chain_sale)
6 系统实现
在经过了需求分析、概要设计和详细设计后,便开始了百货中心供应链管理系统的实现阶段,首先我利用Tiles结合JavaScript对页面进行布局,之后再利用Maven完成整个项目框架的搭建,利用Hibernate反向工程生成Java实体类,再使用Struts和Spring完成之前设计的业务逻辑。部分关键代码及最终程序的运行效果如下:
- 登录模块关键代码
public String logon() { UserEntity userEntity = userService.getUserEntity(username, password); if (userEntity != null) { ActionContext.getContext().getSession().put("user", userEntity); return SUCCESS; } else { this.addActionError("用户名或者密码不正确"); return INPUT; } } |
- 增、删、改、查功能调用关键代码
public String list() { if (userEntityPaginationBean == null) { userEntityPaginationBean = new PaginationBean<UserEntity>(); } userEntityPaginationBean = userService.pagedList(userEntityPaginationBean); return SUCCESS; } public String show() { userEntity = userService.getUserEntity(userEntity); return SUCCESS; } public String add() { return SUCCESS; } public String update() { userEntity = userService.getUserEntity(userEntity); return SUCCESS; } public String delete() { try{ userService.delete(userEntity); list(); this.addActionMessage("用户删除成功!"); } catch(Exception e){ list(); this.addActionMessage("删除失败,不能删除已登录用户!"); } return SUCCESS; } public String save() { userService.saveOrUpdateEntity(userEntity); list(); this.addActionMessage("用户操作成功!"); return SUCCESS; } |
- 经营统计模块关键代码
public List<Object[]> top10BestSale() { HibernateTemplate tmpl = getHibernateTemplate(); return tmpl.execute(new HibernateCallback<List<Object[]>>() { public List<Object[]> doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery("select t1.real_name, sum(t2.amount) total_amount from tb_chain_user t1 " + "left join tb_chain_sale t2 on t1.USER_ID = t2.user_id " + "group by t1.real_name " + "order by total_amount desc " + "limit 0, 10"); List results = query.list(); return (List<Object[]>)results; } }); } public List<Object[]> top10BestPurchases() { HibernateTemplate tmpl = getHibernateTemplate(); return tmpl.execute(new HibernateCallback<List<Object[]>>() { @SuppressWarnings("unchecked") @Override public List<Object[]> doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery("select t1.real_name, sum(t2.amount) total_amount from tb_chain_user t1 " + "left join tb_chain_purchase t2 on t1.USER_ID = t2.user_id " + "group by t1.real_name " + "order by total_amount desc " + "limit 0, 10"); List results = query.list(); return (List<Object[]>)results; } }); } public List<Object[]> top10BestProduct() { HibernateTemplate tmpl = getHibernateTemplate(); return tmpl.execute(new HibernateCallback<List<Object[]>>() { @SuppressWarnings("unchecked") @Override public List<Object[]> doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery("select t1.`product`, sum(t2.`QUANTITY`) total_quantity from tb_chain_stock t1 " + "left join tb_chain_sale t2 on t1.`COO_ID` = t2.stock_id " + "group by t1.product " + "order by total_quantity desc"); List results = query.list(); return (List<Object[]>)results; } }); } |
项目发布后,在浏览器地址栏输入http://localhost:8080,页面会跳转到webapp目录下的index.jsp页面并发送index.action请求,未登录的用户会再发送一个login.action请求并跳转到login.jsp页面。
图6.1 系统登录界面
如果未输入用户名/密码,或输入的用户名/密码不正确,点击登录按钮后会给出出错提示,提醒重新登录。
图6.2 登录出错提示
成功登录的用户会进入系统欢迎界面,整个界面是借助Tiles的帮助完成的,它让系统可以在执行不同的请求后只让页面的主题部分跳转,而网页的头、导航栏、尾部不跳转,节省了大量重复书写代码带来的开销。
根据用户的身份不同,登录后所能看到的操作选项也有所区别。
- 经理登录界面
在本系统中,经理被定义为具有最高权限的用例,可以使用系统的所有功能,能够看到系统所有的操作选项。
经理、采购部员工可以登录合作公司管理界面对合作公司进行添加、删除、修改、查看操作。
- 合作公司管理界面
用户进入合作公司管理界面后,可以根据页面的文字提示对合作公司信息进行相应的操作,所有合作公司的主要信息被页面上的表格列出并实现分页功能。
图6.11 合作公司管理界面
- 添加合作公司界面
用户点击合作公司管理界面上的“添加合作公司”按钮进入添加合作公司界面,在本页面中输入要添加的合作公司信息后,点击保存,即可将新的合作公司信息添加进数据库中,如果有关键的信息没有正确输入,页面会给出相应的提示。
图6.12 添加合作公司
- 修改合作公司信息界面
类似于添加合作公司信息,修改合作公司信息界面实现了对单个合作公司信息的修改,同样实现了出错提示功能。
图6.13 修改合作公司
- 删除合作公司成功界面
成功删除合作公司信息后会在页面上给出绿色的成功提示信息。
图6.14 删除合作公司成功
经理、采购部员工可以进入采购管理界面,对采购订单进行添加、删除、修改、查看操作。其中添加的采购商品必须来自已经有合作关系的公司。
- 采购管理界面
用户进入采购管理界面后,可以根据页面的文字提示对采购信息进行相应的操作,所有采购订单的主要信息被页面上的表格列出并实现分页功能。
图6.15 采购管理界面
7 系统测试
软件测试(software testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。在整个软件生命周期中,软件测试占了很大一部分比例,它是保证软件质量的关键环节,也是降低软件开发风险的必要手段,软件测试工作应该贯穿整个项目开发的始终。
- 白盒测试-白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。在系统开发初期,由于参数设置的失误,我开发的系统经常出现如下的错误:
图7.1 系统出错
经过耐心的调试、测试,已经基本解决了这些错误。
- 黑盒测试-黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在系统功能实现后,我也对系统进行了一部分文本录入测试作为黑盒测试,解决了之前部分页面文字提示错误、页面跳转错误的bug,但由于用户测试的时间有限,还有一些有待改进的地方需要在实际使用中发现。
实现了所有模块的功能,修正了已经发现的所有问题、错误。但系统还有许多不完善的地方,有待实践阶段的检验和提高。
通过这次对百货中心供应链管理系统的设计与开发,让我进一步温习了大学课堂上学到了软件工程相关的知识,也使得书本上J2EE、数据库相关的知识得到了实践的机会,同时也对Jsp、JavaScript、Maven等有了进一步的了解,通过查询相关的资料并学习,我也发现了许多不足的地方,还有更多更新更实用的技术,等着我去学习去钻研。总之,经过不懈的学习与调试,我的编程能力有了很大的提高,更重要的是,我也看到了自己仍需努力的方向。
[1]曹俊超,戴克商.物资管理理论与实务.北京:清华大学出版社,2006.
[2]罗伯特·M·蒙兹卡.刘秉镰,李莉,刘洋译.采购与供应链管理.北京:中信出版社,2004.
[3]肯尼斯·莱桑斯,迈克尔吉林厄姆,鞠磊等译.采购与供应链管理.北京:电子工业出版社,2004.
[4] 刘京华等. Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring).北京:清华大学出版社,2010.
[5] HUNT J,LFTUS C.精通J2EE-Java企业级应用[M].北京:清华大学出版社,2004.
[6] LIANG Y D..Java语言程序设计[M].北京:机械工业出版社,2003.
[7] Angela Yochem.J2EE应用与BEA WebLogic Server[M].北京:电子工业出版社,2005.
[8]陈天河.Java数据库高级编程宝典[M].北京:电子工业出版社,2005.
[9]泰勒.JDBC数据库编程与J2EE[M].北京:电子工业出版社,2004.
[10]顾兵.XML实用技术教程[M].北京:清华大学出版社,2007.
[11]丁宝康.数据库实用教程[M].北京:清华大学出版社,2003.
[12]李刚. 轻量级Java+EE企业应用实战(第3版).北京:电子工业出版社,2012.
[13] 陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战.北京:清华大学出版社,2012.
[14] 刘勇军,王电钢. Java EE项目应用开发:基于Struts2,Spring,Hibernate.北京:电子工业出版社,2012.
[15] 埃克尔. Java编程思想(第4版).北京:机械工业出版社,2007.
[16] 张海藩.软件工程导论[M].北京:清华大学出版社,2003.
从最初的选题到毕业说明书的完成,为期半年的毕业设计即将结束。在这里,我要特别感谢我的指导老师-郝喜老师和张卓鹏老师。从刚选题结束开始,我就遇到了许多困难,因为对供应链和百货公司的不了解,我在需求分析阶段就止步不前,首先要感谢张卓鹏老师帮我在资料查找上提供了很多帮助,让我少走了很多弯路。在一些编程技巧和功能实现上,郝喜老师也提供了不少资料,才让我能够快速攻破技术难关。没有他们严谨的治学态度和丰富的专业知识,以及耐心的指导,很难想象我的毕业设计要用多久才能完成。
最后,对所有在毕业设计时给予我帮助的老师、家人、同学、朋友表示感谢,也要感谢科技的发展给了我们更多获取信息的渠道。