基于struts+Hibernate+SQL Server 2008企业采购管理系统
摘 要
当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的基本依据。在一个组织里,信息己作为人力、物力、财力之外的第四种能源,占有重要的地位。然而,信息是一种非物质的,有别于基本资源的新形式的资源。信息也是管理的对象,必须进行管理和控制。随着信息技术的发展及ERP系统的日益普及,计算机在管理中的作用越来越不容忽视。企业之间通过网络进行交易的趋势越来越明显。在这种环境中,采购作为生产经营的一个重要环节应加强管理,充分利用外部环境条件,逐步实现物资采购的信息化管理。
物资采购管理系统是针对内部而设计的,应用于的局域网,这样可以使得内部管理更有效的联系起来。企业采购管理系统是将IT技术用于企业采购信息的管理, 它能够收集与存储企业采购的档案信息,提供更新与检索企业采购信息档案的接口;提高工作效率。
系统采用Java为编程语言。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键词 :企业采购;管理;系统;开发;JAVA
Abstract
Today's society has entered the era of information society, information has been widespread concern in society, as the three pillars of the social and scientific and technological development (materials, energy, information) one. Information management, decision-making basis for an organization, the information has the energy of the fourth addition to the human, material and financial resources to occupy an important position. However, information is a non-material resources of the new form is different from the basic resources. Information is also managed objects, management and control. With the development of the information technology and the prevalence of the ERP system, it is hardly to ignore the play of the computer in enterprise management. It is more apparent that many commercial actions among many enterprises are taking place in the network. Under the circumstances, purchasing management, which is an important link of enterprise operation, must be strengthened firstly. Then, purchasing management will be put into execution with the good condition, which the outer circumstances provide.
Aiming at the management in enterprise, the system, which will be put into execution with LAN, will make the management in enterprise better. Inventory management system is IT technology for the management of inventory information, it can collect the files and store the inventory information, provide updates and retrieve inventory information file interface; improve work efficiency.
The system uses Java as programming language. The paper introduces the development background of the subject, to complete the development and function of the process. Focus on the focus of system design, design ideas, difficult technology and solutions.
Key words : procurement; management; system; development ; JAVA
第一章 引言
1.1 研究现状
随着信息技术的发展及ERP系统的日益普及,计算机在管理中的作用越来越不容忽视。在这种环境中,采购作为生产经营的一个重要环节应加强管理,充分利用外部环境条件,逐步实现企业采购的信息化管理。企业采购管理系统是针对内部而设计的,应用于的局域网,这样可以使得内部管理更有效的联系起来。本课题就是针对企业采购管理,开发一个基于JAVA设计语言的管理系统,本系统采用了目前流行Eclipse JAVA EE开发工具,后台采用SQL Server 2008数据库。其中系统涉及用户登录模块、订单管理模块、基本信息管理模块、采购查询模块四大模块。本课题研究的重点是中小型企业采购管理问题。实现业务流程控制,生成采购计划,直至生成采购执行单,提高采购业务效率,为企业决策者快速决策提供实时的关键数据支持。
近年来我国信息事业发展迅速,手工管理方式在企业采购信息管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使信息行业直面外国同行单位的直接挑战,因此,信息行业必须提高其工作效率,改善其工作环境。这样,企业采购信息管理的信息化势在必行。
在传统的企业采购信息管理中,其过程往往是很复杂的,繁琐的,企业采购信息管理以企业采购信息管理为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程必须实现信息化。
随着计算机技术和网络技术的飞速发展,各企业都相继采用信息技术对企业采购有关信息进行管理。然而,也注意到许多单位,并没有很好地运用现代信息技术对企业采购等信息进行管理,很多企业采购管理系统将所有的管理事务全都交给管理员来完成,如果信息有任何的增删改查,都需要通过管理员来完成,非常麻烦。如何开发一个实用的企业采购管理系统,是摆在设计者面前的一大难题。 通过对企业采购管理系统进行深入分析和研究,本文从功能模块、数据格式、通用性三个方面进行细化,提出企业采购管理系统设计的理论依据和实现的方法。设计系统的数据层、逻辑层、界面层,重点体现数据格式的规范,也为通用性的实施提供保障。最后在系统开发环节,从技术层面实现代码的可重用性及系统的通用性,从而使系统的设计更具实用性和通用性。总之我觉得现在逐渐发展起来的信息系统可以让企业采购管理变得非常灵活,每一种角色都有自己的权限,保证了信息的安全性以及操作简易性。因此,基于MVC 的企业采购管理系统将会是以后的趋势。所以我通过开发完成一个小型企业采购管理系统,以便能更好的衔接。
1.2 主要研究的目的及内容
国内企业在激烈的环境生存与发展,需要发挥采购的积极作用,在进行详细分析与研究的基础上,明确企业的不足并迅速加以弥补,采购管理目标是以最小的成本取得最大的效益。
采购管理就是以合适的时间、地点、质量和数量在企业外部获取产品,采购管理的目的是保证企业的商品供应,以使生产顺利进行,并提升企业的竞争力。
国外,大卫.琼斯在其著作《采购原理与管理》一书中说,采购的角色发生了变化,采购不再被认为是例行公事的或行政性的订购活动,即采购不再仅仅是订购或购买,而是具有战略作用的,关乎从原材料到使用和弃置整个过程的物料流动。
供应链管理现在已经被大型组织看作是降低成本和增加价值的一个领域。组织从供应链中削减成本的能力会受到采购活动发展阶段的影响。如果采购职能得到了适当的发展,采购可以在供应链管理领域进行运作性的,战术的和战略的改进。如果某些组织的采购部门能够以积极主动的战略方式提高供应链的效率和有效性,那么其他组织也可以,然而,降低购置成本、战略外包、电子商务,所有这些都要靠采购活动发展到适当水平。事务性的、被动的采购活动是无法对这些理念真正做出贡献的,而得到良好发展的战略性的采购活动则能够做到。具体细化到设计上,主要体现在以下几个方面:
-
数据库的建立与维护 :系统中需要长期保存的信息应持久化到数据库,方便读取、更新、修改。如何设计数据库及其各类表是我们首先应解决的关键问题
-
简易实用的采购管理 :通过简单实用的各种采购管理功能,能够有效地提高采购效率,使企业快速决定其他决策目标
-
实现信息共享 :使企业采购人员和其他部门所有成员及时准确的了解供应商信息、采购计划、采购执行单的各流程的状态等等
-
数据库的安全性管理 :SQL Server2008访问控制,数据库权限管理,数据库角色管理等
本课题的目的是使企业采购信息管理清晰化,透明化,便于操作,易于管理。通过功能模块的优化组合实现不同的管理细节,使管理过程实现最大程度的自动化与信息化,并能自动对人工操作环节进行复查,使企业采购管理系统出错率降至最低。在传统的企业采购信息管理中,各种管理工作往往是很复杂烦琐的。企业采购信息管理的特点是信息处理量比较大,所管理的种类比较繁多,而且由于消费、缴费等单据发生量特别大,关联信息多,查询和统计的方式不尽相同。在管理过程中经常会出现信息的重复传递,因此企业采购信息管理必须实现计算机化处理。我们系统开发的总体任务是实现企业采购信息管理的系统化、规范化、自动化、信息化与智能化,从而达到提高企业采购信息管理效率的目的。
1.3 研究方法及设计思路
1.3.1 研究方法
企业采购信息管理是信息行业业务流程过程中十分重要且必备的环节之一,在信息行业业务流程当中起着承上启下的作用,其重要性不言而喻。但是,目前许多信息行业在具体的业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力,效率低下,而且无法达到理想的效果。针对上述问题,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试、软件应用、软件维护等过程开发了一个企业采购管理系统。采用JSP作为开发技术,结合SQL Server2008数据库,数据库设计遵循3范式,解决了企业采购管理系统中存在的数据安全性、数据一致性以及系统运行速度等问题。
1.3.2 设计思路
-
系统应符合企业采购信息管理的规定,满足信息行业相关人员日常使用的需要,并达到操作过程中的直观,方便,实用,安全等要求
-
系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充,维护
-
系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作
-
尽量采用现有软件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的
1.4 相关技术简介
1.4.1 JSP技术简介
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件( .htm, .html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP主要优点如下:
-
一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改
-
系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比JSP/PHP的局限性是显而易见的
-
强大的可伸缩性。从只有一个小的war文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力
-
多样化和功能强大的开发工具支持。这一点与JSP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下
1.4.2 Struts 框架
Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)模式的应用框架的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。在struts中,实际是一个表单form对应一个Action(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式成为application event,application event和component event相比是一个粗粒度的事件。Struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将时间粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。Struts是一个基于Sun J2EE平台的MVC框架,主要采用Servlet和JSP技术来实现的。
Struts框架可分为以下四个部分,其中三个就和MVC模式紧密相关:
-
模型(Model) ,本质上来说在Struts中Model是一个Action类,开发者通过其实现业务逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由Struts-config.xml文件描述的配置信息的
-
视图(View) ,View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用他们我们可以快速建立应用系统的界面
-
控制器(Controller) ,本质上是一个Servlet,将客户端请求转发到相应的Action类
-
XML文件解析的工具包 ,Struts是用XML来描述如何自动产生一些JAVABean的属性的,此外Struts还利用XML来描述国际化应用中的用户提示信息,这样一来就实现了应用系统的多种语言支持
页面模板技术采用Apache组织的Tiles技术,可实现灵活的页面模板功能。
1.4.3 Hibernate数据访问框架
数据持久层采用Hibernate开源框架,它对JDBC进行了非常轻量级的对象封装,可以使程序员可以使用对象编程思维来操纵数据库。Hibernate是Java平台上的一种全功能的、开发源代码的 OR Mapping框架,支持java的JDO规范,它可以支持当前所有的主流关系型数据库和对象型数据库产品以及XML文件等数据源。与JDO不同,Hibernate完全着眼于关系数据库的OR映射,并且包括比大多数商业产品更多的功能。大多数EJB CMP CMR 解决方案使用程序代码产生持续性程序代码,而JDO使用字节码修饰;与之相反,Hibernate使用反射和执行时字节码产生,使它对于使用者几乎是透明的。
利用此框架可以以面向对象的方式来操作数据,可以容易的实现在各个应用数据库产品之间的移植,而不需要修改系统的大部分代码,同时也能很方便地实现同一个应用程序访问多个数据库的功能。利用此框架不但可以提高开发速度,而且可以使系统的可维护性、可移植性、可重用性提高。
1.4.4 B/S模式分析
C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据进行交互的部件。服务器程序负责有效地管理系统资源,如管理一个信息数据库,其主要工作是当多个客户并发地请求服务器上的相同资源时,对这些资源进行最优化管理。中间件负责联结客户应用程序与服务器管理程序,协同完成一个作业,以满足用户查询管理数据的要求。
B/S模式是一种以Web技术为基础的新型的MIS系统平台模式。把传统C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),从而构成一个三层结构的客户服务器体系。
-
第一层客户机是用户与整个系统的接口。客户的应用程序精简到一个通用的浏览器软件,如Netscape Navigator,微软公司的IE等。浏览器将HTML代码转化成图文并茂的网页。网页还具备一定的交互功能,允许用户在网页提供的申请表上输入信息提交给后台,并提出处理请求。这个后台就是第二层的Web服务器
-
第二层Web服务器将启动相应的进程来响应这一请求,并动态生成一串HTML代码,其中嵌入处理的结果,返回给客户机的浏览器。如果客户机提交的请求包括数据的存取,Web服务器还需与数据库服务器协同完成这一处理工作
-
第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQ请求,管理数据库
B/S模式首先简化了客户端。它无需象C/S模式那样在不同的客户机上安装不同的客户应用程序,而只需安装通用的浏览器软件。这样不但可以节省客户机的硬盘空间与内存,而且使安装过程更加简便、网络结构更加灵活。假设一个企业的决策层要开一个讨论库存问题的企业采购,他们只需从企业采购室的计算机上直接通过浏览器查询数据,然后显示给大家看就可以了。甚至与会者还可以把笔记本电脑联上企业采购室的网络插口,自己来查询相关的数据。其次,它简化了系统的开发和维护。系统的开发者无须再为不同级别的用户设计开发不同的客户应用程序了,只需把所有的功能都实现在Web服务器上,并就不同的功能为各个组别的用户设置权限就可以了。各个用户通过HTTP请求在权限范围内调用Web服务器上不同处理程序,从而完成对数据的查询或修改。当形势变化时,它无须再为每一个现有的客户应用程序升级,而只需对Web服务器上的服务处理程序进行修订。这样不但可以提高公司的运作效率,还省去了维护时协调工作的不少麻烦。如果一个公司有上千台客户机,并且分布在不同的地点,那么便于维护将会显得更加重要。
再次,它使用户的操作变得更简单。对于C/S模式,客户应用程序有自己特定的规格,使用者无需接受专门培训。而采用B/S模式时,客户端只是一个简单易用的浏览器软件。无论是决策层还是操作层的人员都无需培训,就可以直接使用。B/S模式的这种特性,还使 MIS系统维护的限制因素更少。
最后,B/S特别适用于网上信息发布,使得传统的MIS的功能有所扩展。这是C/S所无法实现的。而这种新增的网上信息发布功能恰是现代企业所需的。这使得企业的大部分书面文件可以被电子文件取代,从而提高了企业的工作效率,使企业行政手续简化,节省人力物力。
鉴于B/S相对于C/S的先进性,B/S逐渐成为一种流行的MIS系统平台。各软件公司纷纷推出自己的Internet方案,基于Web的财务系统、基于Web的ERP。一些企业已经领先一步开始使用它,并且收到了一定的成效。 B/S模式的新颖与流行,和在某些方面相对于C/S的巨大改进,使B/S成了MIS系统平台的首选。本系统也采用B/S结构开发。
1.5 系统开发步骤
一般说来,管理信息系统的建立与应用可以划分成总体规划、系统开发和系统运行三个阶段,其中系统开发阶段还可进一步分为系统分析、系统设计和系统实施等工作环节。上述各个阶段排列成一个严格的线性开发序列,在每个工作阶段均产生完整的技术文档作为下一阶段工作的指导和依据,每一阶段都应对文档进行评审,确信该阶段工作已完成并达到要求后才能进入下一阶段,同时在以后的工作中不能轻易改变前面经过评审的成果。上述开发方式的主要优点是便于开发工作的组织和管理,并且可大大降低管理信息系统开发的复杂性。国内外许多系统开发的实例都证明这是一种行之有效的开发方式。
国外曾有人对一些软件项目开发各阶段的工作量进行统计结果表明,程序编写在开发工作中只占很小比例,而调试工作却占整个开发工作量的一半左右,因此“系统开发就是编程”的习惯说法显然是片面的。在建立管理信息系统的三个阶段中,总体规划和系统开发阶段的工作量约占整个工作量的2/3,而运行、维护阶段要占1/3,这说明一个管理信息系统开发后,仍应十分重视它的维护工作,以便使系统不断完善并充分发挥其作用。
第二章 需求分析及可行性分析
2.1 需求分析
伴随着信息行业的蓬勃发展和人们办公自动化意识的增强,企业采购管理部门的工作也越来越繁重,原来的企业采购管理系统已经不能完全满足相关人员使用的需要。为了协助信息行业开展企业采购管理工作,提高工作效率,充分利用信息行业的现有资源,开发更好的企业采购管理系统势在必行。
企业采购管理系统是将IT技术用于企业采购信息的管理, 它能够收集与存储信息,提供更新与检索的接口;协助信息行业开展企业采购管理工作,提高工作效率。
2.1.1 背景需求分析
企业采购管理系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JAVA,数据库使用SQL Server2008数据库。完成以下基本功能:
-
本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理
-
企业采购管理系统具有标准企业采购管理系统所具有的现实中完整的企业采购管理步骤,完全的虚拟现实实现。真正实现节约资源、提高效率、业务处理的同时真正实现企业采购管理系统的功能作用
2.1.2 运行需求分析
硬件系统环境:Core 5600、1G MB(RAM)、120GB(HD)。系统运行时对数据的保密性要求不高对一般的数据不要求进行加密。此外,对其它软件几乎没有依赖性,程序健壮性较好
2.1.3 其他需求分析
系统的性能要求通常指系统需要的存储容量以及后援存储,重新启动和安全性,运行效率等方面的考虑。本系统要有较好的可维护性、可靠性、可理解性、效率。要易于用户理解和操作。可维护性包括了可读性、可测试性等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下(经费、时间、可用的软、硬件资源等),使上述各方面最大限度的得到满足。
2.2 可行性分析
2.2.1 经济可行性
经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。由于本系统是作为毕业设计由自己开发的,在经济上的投入甚微,系统建成之后将为今后企业采购信息管理提供很大的方便,估算新系统的开发费用和今后的运行、维护费用,估计新系统将获得的效益,并将费用与效益进行比较,看是否有利。开发、运行和维护费用主要包括:
购买和安装企业采购的费用:计算机硬件、系统软件、 机房、电源、空调等;软件开发费用:若由实习单位的技术人员开发,则该项费用可以计入下面的人员费用一项;人员费用:系统开发人员、操作人员和维护人员的工资、培训费用等;消耗品费用:系统开发所用材料、系统正常运行所用消耗品,例如水、电费,打印纸、软盘、色带等开支。所有开支都不大,所以经济上是可行的。
2.2.2 技术可行性
技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。企业采购管理系统用的是JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于目前B/S模式软件相对发展成熟,Eclipse已发行多个版本,渐趋完善,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。
2.2.3 运行可行性
对新系统运行后给现行系统带来的影响(包括组织机构、管理方式、工作环境等)和后果进行估计和评价。同时还应考虑现有管理人员的培训、补充,分析在给定时间里能否完成预定的系统开发任务等。
运行可行性是对组织结构的影响,现有人员和机构以及环境对系统的适应性及人员培训补充计划的可行性。当前我国信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行性的。
本系统的开发,是典型的Mis开发,主要是对数据的处理,包括数据的收集,数据的变换,及数据的各种形式的输出。采用流行的JSP+SQL Server2008体系,已无技术上的问题。
2.2.4 时间可行性
从时间上看,在四个月的时间里学习相关知识,并开发企业采购信息管理系统,时间上是有点紧,但是不是不可能实现,通过四个多月的努力功能应该基本实现。
2.2.5 法律可行性
-
所有技术资料都为合法
-
开发过程中不存在知识产权问题
-
未抄袭任何已存在的企业采购信息管理系统,不存在侵犯版权问题
-
开发过程中未涉及任何法律责任
综上所述,本系统的开发从技术上、从经济上、从法律上都是完全可靠的。
第三章 系统分析与设计
3.1 系统实现目标
采购是公司生产产品及维护正常运作而必须消耗的物品及必须配置的设施的购入活动的总称,是公司成本控制的重点。无论是公司管理者还是财务部门,对采购工作存在的风险都有着非常强的敏感性,这不仅因为采购是直接影响生产成本的主要因素,而是因为采购有着很高的认为欺诈的可能。在日趋完善的现代经营管理模式中,公司管理当局越来越注重财务管理和财务运作的有效性。
合理的采购管理具有很重要的意义:
-
材料采购成本在企业经营中占很大比重,且在很多行业有上升趋势
-
降低原材料成本是增加利润的基本途径
建立和实施制度化的采购管理程序,这是采购管理工作有效进行的根本保证,有法必依,违法必究,这是制度能切实贯彻执行的保证。只有制度化了,才能在公司中用法制,而不是人治。采购管理系统是为了实现企业的长远发展目标而实施的一个系统工程,也是一个企业能否取得经济效益的关键它能够为企业的发展提供科学的管理功能,减少管理费用。利用计算机的数据库技术,使得企业的采购、库存和销售能够有利的结合起来,避免和克服人工管理信息时,劳动量大,计算和统计的不准确等种种缺陷和弊端,使企业的管理规范化和自动化,从而对采购管理提供更加科学、准确的数据,实现了采购管理的系统化、规范化和自动化。通过使用采购管理系统能够降低材料采购成本在企业经营中所占的比例,能够提高企业的利润。企业为满足生产所需和提高生产效率,将开发企业采购管理系统。
系统实现目标 :易于操作,有良好的互动性,能为员工的工作带来便易。开发出来的系统还必须是安全性高,扩展性强,能在日后不断升级优化。
3.2 系统设计
3.2.1 系统设计
该系统采用B/S体系结构,在客户机上并不安装客户端,而是使用网络浏览器,这样节省一大部分开发、维护和升级报销。本系统不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。
本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理。经过对课题的深入分析,采购系统需实现以下功能模块:
-
用户登录 :对用户输入的用户名和密码进行匹配,只有合法的用户可以登录成功,进入主界面,进行操作。是系统安全性的第一层保护层
-
供应商管理 :灵活管理供货商,及时添加及修改供货商信息,为采购计划的制定提供保障
-
材料管理 :对材料进行管理,管理材料种类及库存,及时了解材料的库存信息,有助于做出正确的采购选择
-
订单管理 :系统设计了多种订单。不同权限的操作员只能对其拥有权限操作的订单进行操作
-
信息查询 :根据关键字快速检索信息
3.3 数据库设计
3.3.1 数据库概述
数据库设计就是针对应用需求和环境,建立合理的数据库模式和存储结构,保证数据的高效存取,并满足应用的任务处理要求。数据库设计是应用系统建设的核心技术,是数据库应用领域的主要研究课题。
数据库是数据管理的最新技术。十多年来数据库管理系统已从专用的应用程序发展成为通用的系统软件。由于数据库具有数据结构化,最低冗余度,较高的程序与数据独立性,易于扩充,易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。因此不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。
设计数据库必须遵循一定的规则,在关系型数据库中,这种规则就是范式,范式是符合某一种级别的关系模式的集合。一般人们设计数据库遵循第三范式。即:数据库表中不包含已在其他表中包含的非主关键字信息。采用范式减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度。
本系统是用SQL Server2008作为系统数据库。SQL Server是由微软公司研制和发布的分布式关系型数据库管理系统,可以支持企业、部门以及个人等各种用户完成信息系统、电子商务、决策支持、商业智能等工作。SQL Server2008系统只要由4个主要部分组成。这四个部分被称为4个服务,这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用。SQL Server2008在易用性、可用性、可管理性、可编程性、动态开发、运行性能等方面有突出的优点。SQL Server 2008还增强了审查,使你可以审查你的数据的操作,从而提高了遵从性和安全性。审查不只包括对数据修改的所有信息,还包括关于什么时候对数据进行读取的信息。SQL Server 2008具有像服务器中加强的审查的配置和管理这样的功能,这使得公司可以满足各种规范需求。SQL Server 2008还可以定义每一个数据库的审查规范,所以审查配置可以为每一个数据库作单独的制定。为指定对象作审查配置使审查的执行性能更好,配置的灵活性也更高。提供了稀疏列,这个功能使NULL数据不占物理空间,从而提供了一个非常有效的管理数据库 中的空数据的方法。例如,稀疏列使得一般包含极多要存储在一个SQL Server 2008数据库中的空值的对象模型不会占用很大的空间。稀疏列还允许管理员创建1024列以上的表。
3.3.2 数据库实现
本系统一共设计五张表,分别是t_order,t_price,t_supplier,t_user,t_product。其中,t_order表存放订单,t_price表存放付款单,t_supplier表存放供应商,t_user表存放用户信息,t_product存放材料信息。
-
t_order (id,ordername,productid,supplierid,num,status,numb,price,allprice,username)
-
t_price (id,pricename,productid,supplierid,price,status,username,remark,inputdate)
-
t_supplier (id,suppliername,phone,adrr,mun,username,web,email,remark)
-
t_user (id,username,password,realname,power,)
-
t_product (id,productname,num,inputdate,counts,remark)
3.4 系统体系结构
在系统功能分析的基础上,系统功能模块图如下图3-1所示:
系统有四个主要功能,分别是用户登录,基础信息管理,订单管理,采购查询。其中基础信息管理可以对用户信息,材料信息,供应商信息及订单信息进行管理。订单管理功能对订单进行管理,整个系统中,会有7种状态的订单。采购查询,是系统为用户提供的便捷查询方式,根据关键字,即可快速检索出需要查询的信息。
3.5 系统流程图
用户输入用户名及密码,系统会进行匹配查询,如果在数据库中,有匹配的用户信息,则可以登录。且系统有4种权限的用户,分别是管理员,审批员,采购员及仓库管理员,不同权限的用户,有不同的操作权限。
采购员创建采购单后,提交审批。审批成功后,则开始采购,审批不成功,则重新创建采购单或修改订单,重新提交审批。
仓库管理员对入库的物品进行质量检验,对质量不合格的物品申请退货,并提交退货单等待审批。审批成功的退货单,进行退货,审批不成功则重新创建退货单或者修改退货单。对于质量合格的物品,直接确认收货。
3.6 系统用例图
管理员用例图
采购员用例图
审批员用例图
仓库管理员用例图
第四章 系统实现
4.1.系统实现
4.1.1 登录模块
对于一个完整的企业采购管理系统,不仅要求功能强大、操作简单,还要有良好的设计风格和另人爽目的界面。登录界面对于整个系统来说是非常重要的,因为它设置了进入本系统的用户和口令,防止非法用户进入系统,破坏系统安全和所保存的数据,只有合法的管理员在输入正确的密码后方可进入系统,否则将提示密码或用户名输入错误,并询问用户是否重新输入。这样就对使用者有了限制,增加了系统的安全性和保密性,便于控制和管理,有利于系统的维护。
登陆界面
当用户没有输入用户名时,系统会弹出这样的提示框:
当用户没有输入密码时,系统会弹出这样的提示框:
当用户名或密码不正确时,会提示信息错误,请重新填写:
登录界面代码实现
```jsp
public class LoginAction extends BaseAction{
private LoginServices loginServices;
private Integer id;
private String username;
private String password;
private String realname;
public String checkUser() throws Exception{
if (!(StringUtils.isEmpty(username)|| StringUtils.isEmpty(password))) {
TUser user = loginServices.checkUser(username,password);
if (user!=null) {
setSessionAttribute("user", user);
return SUCCESS;
}
setRequestAttribute("error", "error");
}
return ERROR;
}
public String updateUser() throws Exception{
TUser user = new TUser();
user.setId(id);
user.setPassword(password);
user.setUsername(username);
user.setRealname(realname);
loginServices.updateUser(user);
setSessionAttribute("user", user);
return "update";
}
}
}
帐号
|
|
密码
|
|
```
4.1.2 系统主界面
当使用管理员身份登录的主界面
当用户身份为管理员时,则拥有系统的最高权限,可以创建四种权限的用户身份。分别是管理员,采购员,审批员及仓库管理员。
当使用普通用户登录时主界面
普通用户是和管理员相对的用户身份,包括采购员,仓库管理员,审批人员三种,由管理员进行创建。每种身份有对应的操作权限。并且不能越权操作。
-
采购员 :创建原始采购单,提交采购申请,对审批通过的采购订单进行采购
-
审批人员 :对提交的采购订单及退货单进行审批
-
仓库管理员 :对到达货物进行质量检验,产品合格则确认收货,产品不合格,则创建退货单,等待审批
4.1.3 用户操作
使用管理员身份登录时,可以查看用户的信息,并对用户进行增、删、改、查操作:当使用管理员身份时,可以对用户信息进行查看:
当使用管理员身份登录时,可以创建不同权限的用户:
当使用管理员的身份登录时,可以修改用户的信息(但是用户创建之后,用户名是不允许进行修改的):
用户管理代码实现
jsp
public class UserAction extends BaseAction{
添加:
public String addUser() throws Exception{
TUser user = new TUser();
user.setPassword(password);
user.setPower(power);
user.setRealname(realname);
user.setUsername(username);
userServices.addUser(user);
return "addUser";
}
public String preupdateUser() throws Exception{
TUser user = userServices.getUser(id);
setRequestAttribute("user",user);
return "preupdateUser";
}
修改:
public String updateUser() throws Exception{
TUser user = userServices.getUser(id);
user.setPassword(password);
user.setRealname(realname);
user.setPower(power);
userServices.updateUser(user);
return "updateUser";
}
删除:
public String delUser() throws Exception{
userServices.delUser(id);
return "delUser";
}
}
}
4.1.4 供应商管理
供应商管理模块是本系统中一个基础的部分,在本模块中包括对供应商信息的增删改查功能,确保资料的安全。增加了系统的安全性和保密性,便于控制和管理。及时的更新供应商信息,可以帮助企业做正确的采购策略。
查询供应商信息
添加供应商信息,这里要求要将所有供应商的信息添加完全,详细的展示供应商信息,是企业能够全面了解供应商信息,更好的制定采购计划:
修改供应商信息,可以对供应商信息进行及时的更新:
供应商模块关键代码实现:
jsp
public class SupplierAction extends BaseAction{
添加:
public String addSupplier() throws Exception{
TSupplier supplier = new TSupplier();
supplier.setAdrr(adrr);
supplier.setPhone(phone);
supplier.setSuppliername(suppliername);
supplier.setEmail(email);
supplier.setNum(num);
supplier.setRemark(remark);
supplier.setUsername(username);
supplier.setWeb(web);
supplierServices.addSupplier(supplier);
return "addSupplier";
}
public String preupdateSupplier() throws Exception{
TSupplier supplier = supplierServices.getSupplier(id);
setRequestAttribute("supplier",supplier);
return "preupdateSupplier";
}
修改:
public String updateSupplier() throws Exception{
TSupplier supplier = supplierServices.getSupplier(id);
supplier.setAdrr(adrr);
supplier.setPhone(phone);
supplier.setSuppliername(suppliername);
supplier.setEmail(email);
supplier.setNum(num);
supplier.setRemark(remark);
supplier.setUsername(username);
supplier.setWeb(web);
supplierServices.updateSupplier(supplier);
return "updateSupplier";
}
删除:
public String delSupplier() throws Exception{
supplierServices.delSupplier(id);
return "delSupplier";
}
public SupplierServices getSupplierServices() {
return supplierServices;
}
public void setSupplierServices(SupplierServices supplierServices) {
this.supplierServices = supplierServices;
}
4.1.5 材料信息管理
本模块主要实现材料信息的增加、删除、修改、浏览等操作。将以前采购过的材料、将要进行采购的材料以及正在考虑采购的材料信息录入系统,便于企业查询和管理。
材料信息查询 :
材料信息添加,需要添加材料的名称、编号、出厂日期、数量、以及备注信息,要求必须添加完整。提供重置按钮,点击后,可以重写填写:
对材料信息进行修改,及时更新材料信息,保证所有的信息都是最新状态:
材料模块关键代码实现
```jsp public class ProductAction extends BaseAction{ 添加: public String addProduct() throws Exception{ TProduct product = new TProduct(); product.setProductname(productname); product.setInputdate(inputdate); product.setNum(num); product.setCounts(counts); product.setRemark(remark);
productServices.addProduct(product);
return "addProduct";
}
public String preupdateProduct() throws Exception{
TProduct product = productServices.getProduct(id);
setRequestAttribute("product",product);
return "preupdateProduct";
}
```
修改
jsp
public String updateProduct() throws Exception{
TProduct product = productServices.getProduct(id);
product.setProductname(productname);
product.setInputdate(inputdate);
product.setNum(num);
product.setCounts(counts);
product.setRemark(remark);
productServices.updateProduct(product);
return "updateProduct";
}
删除
jsp
public String delProduct() throws Exception{
productServices.delProduct(id);
return "delProduct";
}
public ProductServices getProductServices() {
return productServices;
}
public void setProductServices(ProductServices productServices) {
this.productServices = productServices;
}
4.1.6 订单信息管理
本模块主要实现对订单进行操作。系统中共设计了多种状态的订单。分别是新建采购单,审批中的采购单,审批成功的采购单,审批失败的采购单,新建退货单,审批中的退货单,审批成功的退货单,审批失败的退换单,已完成订单。
已完成订单信息查询
当采购员采购完成之后,由仓库管理员进行质量检验,物品质量合格之后,由采购员确认收货,订单会变为完成状态。
采购员专区
采购员根据采购计划创建采购单,等待审批人员进行审批:
审批员专区
由审批员对采购单及退货单进行审批,审批员可以将订单置为两种状态,审批成功和审批失败,且一定要填写审批理由:
仓库管理
仓库管理员对采购员采购的物品进行质量检验,如果合格则确认收货,如果不合格则申请退货,等待审批人员进行审批:
快捷预览区域
该区域只提供对订单的预览,不提供操作。包括未完成订单,已完成订单,未付款单,退货单。未完成订单,包括待付款单,审批失败订单,未审批订单:
未付款订单,采购完成的订单,等待仓库管理员对物品质量进行检验:
退货单,仓库管理员对物品进行质量检验,不合格的产品进行退货申请,由审批人员进行审批,通过审批后的退货单进行退货,完成退货后。退货单可在快捷预览区域的退货单中进行查看。
订单模块关键代码实现
```jsp public class OrderAction extends BaseAction{ 为采购员获取订单数据: public String purchaseOrder() throws Exception{ PageInfo pageInfo0 =queryOrderByStatus("('0','3')"); PageInfo pageInfo2 =queryOrderByStatus("('2')"); setRequestAttribute("pageinfo0", pageInfo0); setRequestAttribute("pageinfo2", pageInfo2); setRequestAttribute("searchname", this.searchname); return "purchaseOrder"; } 为审批员获得订单: public String approveListOrder() throws Exception{ PageInfo pageInfo0 =queryOrderByStatus("('1')"); PageInfo pageInfo2 =queryOrderByStatus("('6')"); setRequestAttribute("pageinfo0", pageInfo0); setRequestAttribute("pageinfo2", pageInfo2); setRequestAttribute("searchname", this.searchname); return "approveListOrder"; } public String storeListOrder() throws Exception{ StringBuffer cond = new StringBuffer(); if(null!=searchname&&""!=searchname.trim()){ cond.append(" and a.ordername like '%"+searchname.trim()+"%' "); } if(null!=getRequestParameter("flag") &&""!=getRequestParameter("flag")){ setSessionAttribute("flag", getRequestParameter("flag")); } if(null!=getSessionAttribute("flag") &&""!=(String)getSessionAttribute("flag")){ cond.append(" and a.status = '"+(String)getSessionAttribute("flag")+"' "); } int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest())); int pageunit = Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(), "querypageunit")); String url = "order_storeListOrder?a=a"; PageInfo pageInfo = this.orderServices.queryOrder(curpage, pageunit, ServletActionContext.getRequest(), url, cond.toString()); setRequestAttribute("pageinfo", pageInfo); setRequestAttribute("searchname", this.searchname); return "storeListOrder"; } public String addOrderForPurchase(){ try { TOrder order = new TOrder(); order.setNum(num); order.setOrdername(ordername); order.setStatus("0"); TProduct product = productServices.getProduct(productid); order.setTProduct(product); TSupplier supplier = supplierServices.getSupplier(supplierid); order.setTSupplier(supplier); order.setNumb(numb); order.setPrice(price); order.setRemark(remark); order.setAllprice(allprice); order.setUsername(username); orderServices.addOrder(order); } catch (RuntimeException e) { e.printStackTrace(); } return "addOrderForPurchase"; } public String updateOrderForPurchase() { try { TOrder order = this.getOrderServices().getOrder(id); order.setNum(num); order.setOrdername(ordername); TProduct product = productServices.getProduct(productid); order.setTProduct(product); TSupplier supplier = supplierServices.getSupplier(supplierid); order.setTSupplier(supplier); order.setNumb(numb); order.setPrice(price); order.setRemark(remark); order.setAllprice(allprice); order.setUsername(username); this.getOrderServices().updateOrder(order);
} catch (RuntimeException e) {
e.printStackTrace();
}
return "updateOrderForPurchase";
}
public String approveOrder() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setStatus("1");
this.getOrderServices().updateOrder(order);
return "approveOrder";
}
```
采购申请
```jsp public String applyOrder() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setStatus("1");
this.getOrderServices().updateOrder(order);
return "applyOrder";
}
```
采购
```jsp public String buyOrder() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setStatus("4");
this.getOrderServices().updateOrder(order);
return "buyOrder";
}
```
合格检查
```jsp public String TestOrder() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setStatus("5");
this.getOrderServices().updateOrder(order);
return "TestOrder";
}
```
退货检查
```jsp public String returnOrder() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setStatus("6");
this.getOrderServices().updateOrder(order);
return "returnOrder";
}
```
审批
```jsp public String approveOrderForApproveList() throws Exception{
TOrder order = this.getOrderServices().getOrder(id);
order.setRemark(remark);
order.setStatus(status);
this.getOrderServices().updateOrder(order);
return "approveOrderForApproveList";
}
}
}
```
4.1.7 信息查询
该功能提供对信息的快速查询,分别针对用户信息,供应商信息,材料信息,订单信息设计了不同的关键词检索,提高检索效率:
用户信息查询,根据账号进行查询:
```jsp public String queryUser() throws Exception{ if (getSessionAttribute("querypageunit") == null) { setSessionAttribute("querypageunit",this.pageunit); } StringBuffer cond = new StringBuffer(); if(null!=searchname&&""!=searchname.trim()){ cond.append(" and a.username like '%"+searchname.trim()+"%' "); } //cond.append(" and a.power =1 "); int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest())); int pageunit = Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(), "querypageunit"));
String url = "user_queryUser?a=a";
PageInfo pageInfo = this.userServices.queryUser(curpage,
pageunit, ServletActionContext.getRequest(), url, cond.toString());
setRequestAttribute("pageinfo", pageInfo);
setRequestAttribute("searchname", this.searchname);
return "queryUser";
}
```
供应商信息查询,根据名称进行查询:
供应商信息查询关键代码实现
jsp
public String querySupplier() throws Exception{
if (getSessionAttribute("querypageunit") == null) {
setSessionAttribute("querypageunit",this.pageunit);
}
StringBuffer cond = new StringBuffer();
if(null!=searchname&&""!=searchname.trim()){
cond.append(" and a.suppliername like '%"+searchname.trim()+"%' ");
}
int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));
int pageunit = Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(), "querypageunit"));
String url = "supplier_querySupplier?a=a";
PageInfo pageInfo = this.supplierServices.querySupplier(curpage,
pageunit, ServletActionContext.getRequest(), url, cond.toString());
setRequestAttribute("pageinfo", pageInfo);
setRequestAttribute("searchname", this.searchname);
return "querySupplier";
}
材料信息查询,根据材料名称进行查询:
材料查询代码实现
jsp
public String queryProduct() throws Exception{
if (getSessionAttribute("querypageunit") == null) {
setSessionAttribute("querypageunit",this.pageunit);
}
StringBuffer cond = new StringBuffer();
if(null!=searchname&&""!=searchname.trim()){
cond.append(" and a.productname like '%"+searchname.trim()+"%' ");}
int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));
int pageunit = Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(), "querypageunit"));
String url = "product_queryProduct?a=a";
PageInfo pageInfo = this.productServices.queryProduct(curpage,
pageunit, ServletActionContext.getRequest(), url, cond.toString());
setRequestAttribute("pageinfo", pageInfo);
setRequestAttribute("searchname", this.searchname);
return "queryProduct";}
订单信息查询,根据订单名称进行查询:
```jsp public String queryOrder() throws Exception{ if (getSessionAttribute("querypageunit") == null) { setSessionAttribute("querypageunit",this.pageunit); } StringBuffer cond = new StringBuffer(); if(null!=searchname&&""!=searchname.trim()){ cond.append(" and a.ordername like '%"+searchname.trim()+"%' "); } if(null!=getRequestParameter("flag") &&""!=getRequestParameter("flag")){ setSessionAttribute("flag", getRequestParameter("flag")); } if(null!=getSessionAttribute("flag") &&""!=(String)getSessionAttribute("flag")){ cond.append(" and a.status = '"+(String)getSessionAttribute("flag")+"' "); } int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));
参考文献
- 基于Struts和Hibernate的J2EE Web应用的研究与实现(华东师范大学·张国梁)
- 某集团集中采购管理系统的设计与实现(山东大学·王文营)
- 基于SAP的WMS无线扫描系统的设计与实现(山东大学·滕军委)
- 基于轻量级框架的企业信息管理系统的设计与实现(北京邮电大学·韩菲)
- 基于J2EE平台的代理商订单管理系统的开发(东北石油大学·尹亮群)
- 某集团集中采购管理系统的设计与实现(山东大学·王文营)
- 某集团集中采购管理系统的设计与实现(山东大学·王文营)
- 基于J2EE的收入核对系统设计与实现(北京邮电大学·刘越)
- 某集团集中采购管理系统的设计与实现(山东大学·王文营)
- 基于SAP的WMS无线扫描系统的设计与实现(山东大学·滕军委)
- 基于SAP的WMS无线扫描系统的设计与实现(山东大学·滕军委)
- 基于SSH框架的人力资源管理系统的设计与开发(电子科技大学·唐伟)
- 中国航天科工集团企业采购电子商务系统的设计与实现(山东大学·李业)
- 某集团集中采购管理系统的设计与实现(山东大学·王文营)
- 基于SSH资源管理系统的设计及实现(西安电子科技大学·杨静涛)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设小屋 ,原文地址:https://m.bishedaima.com/yuanma/35206.html