基于ssh的中小企业在线资产管理系统设计与开发.docx
- 文档编号:29463569
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:53
- 大小:199.23KB
基于ssh的中小企业在线资产管理系统设计与开发.docx
《基于ssh的中小企业在线资产管理系统设计与开发.docx》由会员分享,可在线阅读,更多相关《基于ssh的中小企业在线资产管理系统设计与开发.docx(53页珍藏版)》请在冰豆网上搜索。
基于ssh的中小企业在线资产管理系统设计与开发
1引言
1.1系统开发背景
全球金融危机给中国的中小企业带来了巨大的冲击,09年6月份社科院的一项调研显示:
40%的中小企业在此次金融危机中倒闭,还有40%的企业在生死线上徘徊。
重市场销售、轻内部管理的思想是中小企业步入困境的主要原因。
企业在创办初期可以靠市场销售取胜,而发展期则必须依靠企业的组织生存能力。
忽略管理,企业必然是好一阵、坏一阵。
因此,实现对企业的高效科学的管理,降低管理生产成本是当前中小企业面临的一大重要课题。
中小企业信息化管理体现了先进的管理理念与思想,帮助中小企业规范管理,推进企业管理现代化[1]的发展。
对于中小企业而言,由于他们在整个管理流程、业务流程上还大多处于混沌状态,市场运作经验相对匮乏,而且,中小企业的经营者大都忙于日常事务,对企业管理中出现的各种问题处理起来往往感到力不从心。
因此,中小企业就更需要靠先进的管理思想、先进的管理系统来帮助企业逐步规范企业运作行为,提高企业管理的效率与水平,进而增强中小企业的市场适应能力和竞争力。
1.2课题研究的意义
随着internet技术的不断发展,应用软件迅速普及,大到厂矿校企,小到图书、餐
饮行业,无不应用了信息技术,实现了现代化管理。
目前我国中小企业运用信息化等手段,开展现代化治理已经具备良好的基础。
但是发展不平衡,从企业规模看,大型企业的信息化水平远远高于小型企业,尤其是采购、生产、库存和销售的信息化程度这四项指标尤为突出,中小企业的差距也最为明显,因此加快信息化建设,实现现代化管理是中小企业的必然选择。
企业资产管理的着眼点是帮助企业管理好有形资产,使之物尽其用,而且要使企业资产的投资回报最大化。
原始的企业资产管理体制,采用人力管理浪费大量的时间、人力和物力,并且数据准确性低,数据汇总速度慢。
企业资产管理之所以非常重要,是因为良好的资产管理能够减少设备的故障率,缩短维修响应和维修工作时间,延长设备寿命,提高仓库备件储存水平的合理性,提高采购的科学性[2]。
2系统需求分析
2.1功能分析
通过对周边地区一些企业进行走访和交流,我们发现中小企业希望能对自己的核心
资源进行很好的筹划与管理,以提高企业的管理决水平。
每一个中小企业都有属于自己的、对企业生存发展至关重要的资源,比如企业的营销资源、客户关系资源、技术资源、财务资源等,对中小企业经营者来说,如何利用信息技术更有效地控制和强化这些资源是十分重要的。
所以中小企业通过信息化的方法是提升企业核心竞争力的重要手段。
原始的企业资产管理制度,企业花费许多人力和物力在资产管理上,不仅浪费资源,而且效率低,准确率不能保障。
本系统正是为了解决以上问题而设计开发,所以,开发本系统将受到广大中小企业管理者的支持。
开发资产管理系统目的在于解决企业资产管理过程中不必要的人力、物力的浪
费,提高数据汇总速度,从而提高资产管理的合理性和科学性。
资产管理系统具有四
大功能:
资产信息管理:
可以对企业内部各种资产的信息进行了解,并进行增加、修改等基
本操作,为管理者提供最快、最准确的资产信息。
资产类别管理:
对企业资产的类别进行增加、修改、查找操作,并对所有类别的细
致的统计。
资产需求管理:
了解企业内部资产的库存状况,并对各种资产的需求进行统计和修改,及时增加资产的需求信息。
资产销售管理:
了解各种产品的销售状况,对每天的销售情况进行统计,并对各种产品的销售量进行排行。
2.2技术可行性分析
运用Sun公司开发的J2EE体系结构,采用MVC三层架构[3]的模式,在设计模式上,使用当前流行的SSH框架,采用Hibernate作为ORM框架[4],J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。
J2EE技术的基础就是核心Java平台,J2EE不仅巩固了标准版中的许多优点,同时还提供了对JavaServletAPI、JSP(JavaServerPages)以及XML技术[5]的全面支持。
开发过程中运用MyEclipse开发工具,该开发工具是Eclipse的一个插件,Eclipse本身就是一个功能非常强大的开发工具,而MyEclipse在功能上与Tomcat进行了集成,并且能做到自动打包,并将包自动部署到服务器上。
这从很大程度上提高了开发的效率,节约了开发的时间。
2.3系统功能结构
通过对多家企业的走访,了解企业资产管理的流程和实际需求,所以在设计此资产
管理系统时提供了四大功能,分别为“基本信息管理”、“资产需求管理”、“资产销售管理”、“系统管理”,如图2.1所示:
资产管理系统
资产需求管理
基本信息管理
系统管理
资产销售管理
资产信息管理
资产类别管理
资产信息查看
资产需求管理
销售明细管理
销售排行统计
管理员账号管理
系统初始化
销售时间统计
图2.1系统结构图
3系统所涉及的关键技术
3.1MVC模式
MVC(Model-View-Controller,“模式-视图-控制器”)模式的结构由以下三种部分组
成:
模型(Model)、视图(View)和控制器(Controller)。
如图3.1所示:
通知变化状态变化
控制器
视图
模型
通知变化
用户请求
查看变化
图3.1MVC模式的功能示意图
模型层中的模型就是指业务逻辑模型和数据模型。
模型接收视图请求的数据,并返
回最终的处理结果。
这里只所以把模型层单独抽取出来,是为了应对业务规则的变化,
也是判断开发人员是否优秀的设计依据。
MVC并没有提供模型的设计方法,而只告
诉开发人员应该组织管理这些模型,以便于模型的重构和提高重用性。
视图层主要是用来展现用户所需要的数据,它是用户和系统进行交互的界面,
可以采用HTML、XML、Servlet等技术。
一般来说,视图只接收来自模型的数据并显
示给用户,以及将用户界面的输入数据和请求传递给控制和模型[6,7]。
MVC设计模式对
于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上业
务流程的处理,业务流程的处理和状态的改变则交给模型层处理。
视图部分的大致处理
流程是:
页面模板定义页面布局,页面配置文件定义视图标签的具体内容,由页面布局
策略类初始化并加载页面,每个用户部件根据自己的配置进行初始化,加载校验器并设
置参数,以及事件的委托等,用户提交后,通过了表示层的校验,用户部件把数据自动
提交给业务实体即模型。
控制层就像一个中转站,它从用户那里接收请求,并根据用户的请求,将模型与视
图匹配在一起,共同完成用户的请求。
在实现上,为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理[8]。
用户提交一个表单或者单击一个链接,控制层接收请求后,它本身并不处理业务信息,而是根据用户的请求类型,把用户的信息传递给相对应的模型,告诉模型做什么,等模型处理完毕后,再把模型处理后的数据选择符合要求的视图返回给用户。
通过将模型、视图和控制器分离,使得一个模型可以对应多个视图,一个视图可能
对应多个模型。
如果用户通过某个视图的控制改变了模型的数据,所有其他依赖于这些
数据的视图都反映到这些变化。
因此,无论何时发生了何种数据变化,控制器都会将变
化通知多有的视图,导致显示的更新。
3.2Struts、Spring、Hibernate框架
Struts是一个MVC框架(Framework),能够实现JavaWeb应用的快速开发。
Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(CustomTag)。
但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。
Spring是一个轻型容器(light-weightcontainer),其核心是Bean工厂(BeanFactory),用以构造我们所需要的M(Model)。
在此基础之上,Spring提供了AOP(Aspect-OrientedProgramming,面向层面的编程)[9]的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;WebMVC和SpringWeb提供了JavaWeb应用的框架或与其他流行的Web框架进行集成。
就是说可将两者一起使用,达到将两者自身的特点进行互补。
Hibernate是一个和JDBC密切关联的框架,是JDBC的轻量级的对象封装,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没有任何关系,也不存在兼容性问题。
Hibernate是一个独立的对象持久层框架,和AppServer,和EJB没有什么必然的联系。
Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口[10]的实现类,甚至可以是BMP[11]里面的访问数据库的代码。
从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。
本系统的设计方案采用MVC设计模式下的Struts+Spring+Hibernate的架构。
SSH架构是典型的J2EE三层结构,分为表现层、业务逻辑层和数据持久层。
三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。
客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。
具体架构如图3.2所示:
数据持久层
Hibernate
连接池
查询语言支持和
其他Hibernate服务
业务逻辑层
SpringIoC
Business
ServiceClass
Hibernate
会话管理
表示层
Struts-MVC
ActionServlet
StrutsAction
JSP,XML
ServicelocatorDao
图3.2SSH架构图
4系统设计
4.1总体流程设计
本资产管理系统设有资产信息管理、进货需求管理和产品销售管理等主要模块,管
理员首先登录,进入系统后可以对资产信息进行增加、删除、修改、查找等基本操作;
可以详细了解资产的库存状况,及时解决企业内部的需求;管理者亦可查看每日的产品
销售状况,了解企业的产品的详细信息。
本系统的总体流程图如图4.1所示:
资产管理系统
添加产品
查询资产
管理员登陆
资产信息管理
修改资产
删除资产
添加类别
管理员
查询类别
资产类别管理
修改类别
删除类别
类别统计
添加需求
基本操作
查询进货
进货需求管理
删除需求
修改需求
库存修改
查询销售明细
销售排行统计
产品销售管理
当日明细统计
添加管理员
查询管理员
系统管理
密码修改
系统初始化
图4.1系统流程图
4.2系统逻辑结构设计
资产管理系统由4层结构组成,并遵循MVC结构进行设计,4层结构分别为表示层、业务逻辑层、持久层和数据库层。
其中,表示层和业务逻辑层均由Struts组成,表示层用于提供程序与用户交互的界面,系统中主要通过JSP、ActionForm及Struts标签库进行展现;业务逻辑层用于处理程序中的各种业务逻辑,系统通过Struts框架的中央控制器及Action对象对业务请求进行处理;持久层由Hibernate框架组成,负责应用程序与关系型数据库之间的操作。
如图4.2所示:
资产管理系统
持久层
HibernateAPI
hibernate.cfg.xml
数据库层
Mysql数据库
业务逻辑层
Action
struts-config.xml
表示层
JSP
ActionForm
Struts标签
图4.2系统逻辑结构图
4.3数据库设计
在开发资产管理系统时,根据系统的各模块实现的功能,在数据库的设计中,抽象
出四个实体类,分别是资产信息实体、资产类别实体、销售实体和用户实体。
资产实体的持久化类为Medicine类,包括编号、名称、库存数量、所属类
别等属性,资产实体的E-R图如图4.3所示:
描述信息
名称
编号
所属类别
出厂地址
资产
需求数量
图片
单价
库存数量
图4.3资产实体E-R图
资产对象与资产类别对象为多对一关联关系,所以在Medicine类中加入了资产类
别属性category,其关联关系通过映射文件Medicine.hbm.xml进行映射,映射文件将实体对象Property映射为tb_medicine表,主键的生成策略采用自动生成方式。
此映射文件中,对于数据表的部分字段还通过notnull,length、unique等属性映射字段的属性,其中notnull用于映射字段的非空属性、length用于映射字段的长度、unique用于映射字段是否唯一。
映射后的数据表如表4.1所示:
表4.1资产实体数据表
属性
类型
是否为空
自动生成
描述
id
Integer
Notnull
Auto
主键
medNo
Varchar
Notnull
编号
name
Varchar
Notnull
名称
factoryAdd
Varchar
出厂地址
description
Text
描述信息
price
Double
Notnull
单价
medCount
Integer
库存数量
reqCount
Integer
需求数量
photoPath
Varchar
图片
categoryId
Integer
所属类别
资产类别实体用于封装资产类别属性信息,其持久化类为Category类,包括编号、名称、类别描述等属性,资产类别实体E-R图如图4.4所示:
名称
编号
资产类别
创建时间
描述信息
图4.4资产类别实体E-R图
Category类所映射的数据表为tb_category,资产类别实体与药品实体间的一对多关联关系,此种映射方式将在资产数据表中添加categoryId字段,映射后的数据表tb_category如表4.2所示:
表4.2资产类别实体数据表
属性
类型
是否为空
自动生成
描述
id
Integer
Notnull
Auto
主键
name
Varchar
Notnull
类别名称
description
Text
描述信息
createTime
DateTime
创建时间
销售明细用于描述产品销售时的具体情况,如销售时间、销售人员、销售数量等。
这些信息需要记录到数据库中。
销售明细实体E-R图如图4.5所示:
产品名称
单价
编号
销售数量
销售明细
用户id
资产id
销售时间
图4.5销售明细实体E-R图
销售明细实体映射的数据表为tb_selldetail,资产对象及操作用户的多对一关联关系,映射后的数据表结构如表4.3所示:
表4.3销售明细实体数据表
属性
类型
是否为空
自动生成
描述
id
Integer
Notnull
Auto
主键
sellName
Varchar
Notnull
产品名称
sellPrice
Double
Notnull
销售单价
sellCount
Integer
Notnull
销售数量
sellTime
Datetime
Notnull
销售时间
medid
Integer
资产id
userid
Integer
用户id
用户实体用于封装管理员的基本信息,如登录的用户名、密码等属性,用户实体E-R图如图4.6所示:
用户名
编号
用户
创建时间
密码
图4.6用户实体E-R图
用户实体所映射的数据表为tb_user,其结构如表4.4所示:
表4.4用户实体数据表
属性
类型
是否为空
自动生成
描述
id
Integer
Notnull
Auto
主键
username
Varchar
Notnull
用户名
password
Varchar
Notnull
密码
createTime
Datetime
创建时间
系统中各实体之间也有相应的关系,资产信息与资产类别为多对一的关联关系,一个类别中包含多个资产对象;资产信息与销售明细为一对多关联关系,多个销售明细对应一个资产对象;销售明细与用户之间为多对多关联关系,多个销售明细信息对应多个用户。
实体对象之间的关系如图4.7所示:
用户
销售明细
资产信息
资产类别
多对一一对多多对一
图4.7实体对象之间的关系
4.4公共类设计
面向对象的开发模式中可以简化程序中的代码,提高程序的可读性。
在此系统开发过程中,某些功能被反复调用,故将该功能抽取出来封装为一个类作为公共类,在需要此功能时通过此类进行实现,公共类的实质是代码的重用的一种方式。
4.4.1Hibernate过滤器
在Web项目中,以普通方式使用Hibernate将无法解决Hibernate延迟加载。
当有一个业务请求查询数据时,首先要开启Session对象[12],然后Hibernate对数据进行查询,再关闭Session对象,最后通过JSP页面来显示数据。
在这一过程中,如果查询数据时使用了延迟加载,当JSP页面显示数据信息时,Hibernate将抛出异常信息,因为此时Session已经关闭,Hibernate不能再对数据进行操作。
通过过滤器管理Hibernate的Session对象则可以避免此问题。
在Web容器启动时,过滤器被初始化,它将执行init()方法,在后续的操作中不会再次被执行;而当容器关闭时,过滤器将执行destroy()方法。
这两个方法恰好符合SessionFactory对象的生命周期,在运行期间只执行一次操作,可用于实例化及销毁SessionFactory对象。
对于Session对象的关闭操作,可以在业务逻辑处理结束后、response请求转发到View层(JSP页面)之前进行。
此代码将其封装在HibernateFilter类[13]中,此类继承了Filter类,它是一个过滤器。
为了保证线程安全,将Session对象存放于ThreadLocal对象中,当用到一个Session对象时,首先从ThreadLocal中获取。
在无法获取的情况下才会开启一个新的Session对象。
同时,为了保证Session对象能在response请求转发到View层之前被关闭,采取try…catch语句对session进行关闭。
其关键代码如下:
publicclassHibernateFilterimplementsFilter{
privatestaticThreadLocalthreadLocal=newThreadLocal();
privatestaticSessionFactoryfactory=null;
……
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
try{
chain.doFilter(request,response);
}finally{
Sessionsession=(Session)threadLocal.get();
if(session!
=null){
if(session.isOpen()){
session.close();
}
threadLocal.remove();
}
}
}
publicvoidinit(FilterConfigarg0)throwsServletException{
//初始化SessionFactory
try{
Configurationcfg=newConfiguration().configure();
factory=cfg.buildSessionFactory();
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticSessiongetSession(){
Sessionsession=(Session)threadLocal.get();
if(session==null){
session=factory.openSession();
threadLocal.set(session);
}
returnsession;
}
}
4.4.2SuperDao类
SuperDao类为此系统中所有数据库操作类的父类,此类中封装了数据库操作的常用方法,在此类中,由于Hibernate对数据库的操作都需要用到Session接口,类中定义了一个protected类型的Session对象,为其子类提供方便。
save()方法及saveOrUpdate()方法都用于保存一个对象,其入口参数均为Object类型。
其中saveOrUpdate()方法比save()方法更智能一些,可以根据实体对象的标识值来判断保存还是更新操作。
SuperDao类中使用这两个方法对实体对象进行保存及更新操作,其关键代码如下:
publicclassSupperDao{
protectedSessionsession=null;
publicvoidsave(Objectobj){
try{
session=HibernateFilter.getSession();
session.beginTransaction();
session.save(obj);
session.getTransaction().commit();
}catch(Exceptione){
e.printStackTrace();
session.getTransaction().rollback();
}
}
publicvoidsaveOrUpdate(Objectobj){
try{
session=HibernateFilter.getSession();
session.beginTransaction();
session.saveOrUpdate(obj);session.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ssh 中小企业 在线 资产 管理 系统 设计 开发