毕业论文-基于Hibernate的进销存管理系统的设计与实现_第1页
毕业论文-基于Hibernate的进销存管理系统的设计与实现_第2页
毕业论文-基于Hibernate的进销存管理系统的设计与实现_第3页
毕业论文-基于Hibernate的进销存管理系统的设计与实现_第4页
毕业论文-基于Hibernate的进销存管理系统的设计与实现_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第*章具体章节标题太原理工大学毕业设计(论文)用纸

1绪论1.1课题背景进销存又称为购销链。进:指询价、采购到入库与付款的过程。销:指报价、销售到出库与收款的过程。存:指出入库之外,包括领料、退货、盘点、报损报溢、借入、借出、调拨等影响库存数量的动作。进销存管理是行业管理中的重要部分,面对大量的商品进、销、存信息,采用人力处理将浪费大量的时间、人力和物力,并且数据准确性低,数据汇总速度慢,为解决这一问题,以帮助企业提高生产、运作的效率,行业中,利用计算机实现进、销、存中的各种信息的管理早已广泛应用与本行业企业管理及企业内部信息。越来越多的企业已认识到信息化的重要性,并把信息化作为提升管理水平的工具。可是如今的进销存系统如雨后春笋般涌出,普通的进销存系统已经不能满足用户的需要,我们在软件开发中应更多追求系统细节与精确,只有开发出满足用户需求的进销存管理系统,才能更好的发展我国的行业。通过调查和分析,现今很多地区规模较大的企业,企业内部结构复杂,公司部门间信息流通不畅,形成孤立的模式,就是我们所称的“信息孤岛”。并且现有的进销存软件品种繁多,操作复杂,在针对某一个企业来说,其中的很多功能是没有必要设置的,或者是增加了开发成本,也增加了操作难度。1.2目的和意义目前,国内外越来越多企业通过使用管理信息系统软件以提高企业的竞争力,企业管理信息化已相当普遍,但仍存在着一些问题,主要表现在以下几个方面:(1)系统要素之间缺乏必要的联系,即企业部门管理及资源之间缺乏内在联系,计算机系统没有想成网络,企业的物流、信息流不畅通,信息无法共享;(2)业务流程及管理存在不合理的地方,统计数据无法做到及时准确;(3)系统的可扩展性差,缺乏外部接口,系统无法再网络环境中生存发展。以上问题的存在制约了企业的进一步发展,随着计算机网络技术的进步及客户需求的日益多样化,产业竞争环境越来越激烈,企业经营除了降低成本、提高质量外,更需要以先进的管理理念来整合企业内部与外部环境。如何建立一套适合的信息系统,这是设计者需要解决的问题。因此,开发出一套跨平台的、贴近用户需求的、低成本高性能的、操作简捷的进销存系统才是目前首要的研究方向,具有很强的现实意义。本系统结合行业的进销存制度,对商品、客户、供应商的基本信息,商品的采购、销售及库存盘点信息等进行管理,真正实现了企业的信息化管理。结合管理业务的新需求,应用J2EE组件技术,使用B/S结构,在系统建模中采用S2SH(Struts2+Spring+Hibernate)框架设计,来开发进销存系统,解决了信息孤立给决策管理该来的阻碍。1.3论文结构全文共分为5章,下面简述各章的主要内容。第1章:绪论。阐述了本课题的项目背景和研究意义,介绍了技术应用的现状以及本文的结构。第2章:相关技术介绍。第3章:系统需求分析和总体设计。本章首先对系统进行需求分析,建立系统用例模型,领域对象建模和具体类细化。然后进行总体设计,建立系统架构设计、说明系统运行环境和系统功能与流程设计。第4章:系统详细设计与实现。本章内容包括数据库逻辑设计、数据库表结构设计、类图建模设计和系统的实现。第5章:系统测试。本章阐述在该系统开发过程中对系统进行测试的方法、过程。

2相关技术JavaEE技术经过多年的发展已经日趋成熟,成为当今企业级应用的最佳解决方案。在JavaEE技术中SSH(Struts2+Spring+Hibernate)是目前最为流行的轻量级整合开发框架,得到了众多软件企业的认可。本系统采用SSH框架实现了进销存系统。2.1关键技术通过对当前系统研究现状和设计目标的分析,最后决定本系统主要由以下技术来实现。JDK1.6及其以上版本:该版本是目前最新版本,其新添加了许多以前版本所不具备的新特性,如自动打包解包等功能。Web应用服务器:Tomcat6.0.33及其以上版本。其功能强大、方便易用,适用于中小型系统的开发。Tomcat可以从网上免费下载,从而降低了开发成本。数据库:MySQL是一个全面的数据库平台。MySQL数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。逻辑层:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。2.2系统架构本系统采B/S结构。B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。2.3SSH框架SSH(Struts2,Spring,Hibernate)Struts进行流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装!

Struts2

Struts对Model,View和Controller都提供了对应的组件。分为Struts1和Struts2,区别甚大。

Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

Model部分

由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionFrom里面的请求参数处理用户的请求。

JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分

该部分采用JSP(或HTML、PHP……)实现。

Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。

Controller组件

Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。

系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。

业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。

Spring简介

Spring是一个开源框架,它由RodJohnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

Hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。

Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。

SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

3需求分析和总体设计3.1需求分析与实体类图3.1.1客户需求分析本系统分为五个功能模块,分为用户管理模块、采购管理模块、销售管理模块、库存管理模块、基本资料管理模块。(1)用户管理模块是指不同的用户身份进入系统,如:采购人员、销售人员、库存管理人员等。为了方便不同用户登陆后,自己所管理的界面。(2)采购管理模块采购查询、采购入库以及供应商信息的查询。(3)销售管理模块销售查询和提货登记。(4)库存管理模块库存的查询、添加删除以及库存的报表基本资料管理模块职工信息、商品信息等进行管理。3.1.2需求补充说明本课题就是研究如何利用JavaScript技术以及相关数据库技术来实现蔬菜基地管理系统。对应的知识点:应用软件开发的理论;运用MySQL数据库、JavaScript语言等技术库存管理的系统,注重软件的各个模块之间的联系。本课题难点在SSH框架的构建,MySQL数据库的应用,模块之间,要理清楚它们之间的联系等。本系统分为五个子模块,分为用户管理模块、采购管理模块、销售管理模块、库存管理模块、基本资料管理模块。用户管理模块是指不同的用户身份进入系统,如:采购人员、销售人员、库存管理人员等。采购管理模块包括采购查询、采购入库以及供应商信息的查询,销售管理模块包括了销售查询库存管理模块包括库存的查询、添加删除以及库存的报表,基本资料管理模块就是对职工信息、商品信息等进行管理。3.1.3实体类图第1层实体类图,用户登录类图,如图3-1所示。图3-1系统登录类图第2层实体类图。添加和删除供应商信息类图,如图3-2、图3-3所示。图3-2添加供应商信息图3-3删除供应商信息添加和删除商品类图,如图3-4、3-5所示。图3-4添加商品类图图3-5删除商品类图添加订单类图,如图3-6所示。图3-6添加订单类图查询库存信息类图,如图3-7所示。图3-7查询库存信息修改密码类图,如图3-8所示。图3-8更改密码添加用户类图,如图3-9所示。图3-9添加用户3.2总体设计3.2.1系统运行环境硬件配置:1.7G以上处理器,128M以上内存,2G以上硬盘空间操作系统:WindowsXP、Windows7或更高版本数据库:MySQLWeb服务器:Tomcat6.0.33JDK:1.6.0S2SH:Struts-、Spring2.0、Hibernate3.1开发工具:StarUML,Dreamweaver8,MyEclipse10/MyEclipse83.2.2时序图建模“增加采购订单”事件流过程,如图3-10所示。图3-10采购事件流“增加销售订单”事件流过程,如图3-11所示。图3-11销售事件流“修改采购订单”事件流过程,如图3-12所示。图3-12修改采购订单事件流“修改销售订单”事件流过程,如图3-13所示。图3-13修改销售订单事件流3.2.3系统功能及流程设计本系统分为五个功能模块,分为用户管理模块、采购管理模块、销售管理模块、库存管理模块、基本资料管理模块。(1)用户管理模块是指不同的用户身份进入系统,如:采购人员、销售人员、库存管理人员等。为了方便不同用户登陆后,自己所管理的界面。(2)采购管理模块采购查询、采购入库以及供应商信息的查询。(3)销售管理模块销售查询和提货登记。(4)库存管理模块库存的查询、添加删除以及库存的报表(5)基本资料管理模块对职工信息、商品信息等进行管理。系统主界面功能模块如图3-14所示:用户管理模块用户管理模块进销存管理系统进销存管理系统采购入库管理模块采购入库管理模块销售信息管理模块销售信息管理模块库存信息统计模块库存信息统计模块基本资料管理模块基本资料管理模块图3-14系统主界面功能模块

4系统的详细设计与实现4.1数据库表结构设计我们知道,数据库概念模型独立于任何特定的数据库管理系统,因此,需要根据具体使用的数据库管理系统的特点进行转换。即转化为按计算机观点处理的逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:A.每一个实体要转换成一个关系。B.所有的主键必须定义非空(NOTNULL)。C.对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键。根据E-R模型,电脑进销存管理系统建立了以下逻辑数据结构,下面是各数据表的详细说明。商品信息表主要是记录了进销存的基本信息,表结构如表4.1所示。表4.1商品信息表(t_goods)列名数据类型长度允许空是否主键说明bianhaoInt4否是编号mingchengvarchar50否否商品名称beizhuvarchar50否否备注信息(2)供应商管理表主要是记录了供应商的基本信息,表结构如表4.2所示。表4.2供应商管理表(t_gongyingshang)列名数据类型长度允许空是否主键说明idInt4否是编号mingchengvarchar50否否单位名称dizhivarchar50否否单位地址lianxirenvarchar50否否联系人dianhuavarchar50否否联系电话youbianvarchar50否否邮编chuanzhenvarchar50否否传真youxiangvarchar50否否邮箱(3)入库信息表主要是记录进销存的入库的基本信息,表结构如表4.3所示。表4.3入库信息表(t_ruku)列名数据类型长度允许空是否主键说明idInt4否是编号goods_idvarchar4否否单据号rukushuvarchar10否否入库数rukushivarcharDate否否入库时间beizhuvarchar500否否备注信息(4)出库信息表主要是记录进销存的出库的基本信息,表结构如表4.4所示。表4.4出库信息表(t_xiaoshou)列名数据类型长度允许空是否主键说明idInt4否是编号goods_idvarchar4否否单据号danjiavarchar50否否单价zongjiagevarchar50否否总价格xiaoshoushivarcharDate否否出库时间beizhuvarchar500否否备注信息(5)管理员信息表主要记录的管理员的账号信息,包括用户名和密码,表结构如表4.5所示。表4.5管理员信息表(t_renyuan)列名数据类型长度允许空是否主键说明idint4否是编号xingmingvarchar50否否用户名xingbievarchar4否否性别nianlingvarchar4否否年龄xuelivarchar8否否学历zhiweivarchar10否否职位loginnamevarchar50否否账号loginpwvarchar50否否密码4.2类图设计4.2.1进销存管理系统流程图如图4-1所示:进销存管理系统进销存管理系统库存管理用户管理基本资料销售管理采购管理库存管理用户管理基本资料销售管理采购管理 创建进货单创建商品信息管理供应商密码修改用户登录创建用户商品名称查询商品信息一览商品编号查询管理商品信息创建销售单删除销售单修改销售信息删除进货单修改进货单创建进货单创建商品信息管理供应商密码修改用户登录创建用户商品名称查询商品信息一览商品编号查询管理商品信息创建销售单删除销售单修改销售信息删除进货单修改进货单图4-1进销存管理系统流程图4.2.2库存管理子系统的对象类图如图4-2所示:图4-2库存管理子系统的对象类图4.3系统的实现系统针对进销存系统的特点对其进行了架构设计,由于J2EE三大框架SSH框架很适合本系统的结构,因此将此系统设计成基于S2SH框架的进销存系统。MVC是一种分层架构的思想,采用这种分层思想可以降低各层次之间的耦合性,提高代码的灵活性M(Model),即为模型层,指的是Java代码中数据的模型以及对数据的处理V(View),即为视图层,指的是为用户提供的界面,通常我们使用JSP/html实现C(Control),即为控制层,用来完成视图层和模型层之间的数据交互以及数据流程的控制。反射:通过“包名.类名”的字符串能够完成类的加载、对象的实例化以及方法的调用动态代理:在不改变原有代码流程的前提下,实现对业务逻辑的干预JDK动态代理:只能够代理实现了接口的类,因为JDK动态代理就是通过产生父接口对象来代理实现类的对象(3)XML解析:DOM:DocumentBuilderFactory、DocumentBuilderSAX、SAXReaderHibernate(ORM:来完成Java代码到数据的映射以及数据的持久化工作)(4)框架的使用:添加JAR:hinernate3.jar/Lib文件夹下的jar包/对应数据库的驱动jar包;创建核心配置文件hibernate.cfg.xml并进行配置;创建HibernateSessionFactory、ExportTables;创建POJO类;创建映射文件Pojo.hbm.xml;将映射文件添加到核心配置文件中(1)对数据的增删查改:session.save(pojo);session.delete(pojo);session.update(pojo);session.saveOrUpdate(pojo);session.get(Pojo.class,id);session.load(Pojo.class,id);Query(HQL):list()可以支持分页Crit…(模糊查询)(2)事务:在不使用Spring框架完成事务管理的情况下,我们需要手动对事务进行管理(3)映射关系:多对一/一对多/一对一/多对多/继承映射(4)延迟加载(5)悲观锁和乐观锁(6)缓存机制(7)Pojo的三种状态:瞬态、持久态、游离态Struts2(MVC)框架:(1)框架的使用添加jar包:9个创建核心配置文件struts.xml在web.xml中对Struts2的过滤器进行配置创建action在struts.xml中对action进行配置Spring:Spring的核心思想:IoC和AOPIoC:通过Spring的配置获取对象,并且给对象的属性赋值。AOP:AOP的含义,连接点,切入点,切点,切面,织入配置:bean的配置,aop的配置Spring对Struts2的支持:通过Spring的MVC完成本应由Struts2完成的请求拦截与封装在struts.xml中对“对象工厂”的配置Spring对Hibernate的支持:帮助创建sessionFactory对象,完成事务管理在applicationContext.xml中sessionFactory配置和事务管理的配置根据前面的需求分析和设计,通过对各种解决方案的比较,系统选择采用三层B/S架构,前台用户显示层使用JSP和Servlet在浏览器上实现,中间使用JavaBean组建实现业务逻辑,后台数据库使用MySQL数据库,具体的系统结构如图4-4所示。图4-4系统架构(1)表示层:主要使用Struts2的表现层的标签,使用表现层标签便于简单表现层逻辑。(2)中间层:Web层:就是MVC模式的controller,负责表现层与业务逻辑层的交互,调用业务逻辑层,并将结果返回到表现层。MVC框架采用Struts2。DAO层:负责与持久化对象交互,封装了数据的增加、删除、查询、修改操作。数据后台是使用MySQL数据库存放数据。持久层实现:持久层使用DAO模式进行数据访问。DAO是DateAccessObject数据访问接口,顾名思义是与数据库打交道用的。夹在业务逻辑与数据库资源中间。DAO功能:在涉及数据库操作,以前一般使用jdbc,使用这种方法会出现代码和html标签同时使用,维护很困难;且JSP文件中不应该出现sql包,jsp文件侧重于显示界面;所有数据库操作使用Hibernate。好处在于避免sql注入攻击。业务逻辑层实现:业务逻辑层是整个应用的核心,接受表现层的用户请求,控制着应用逻辑的流程,并通过持久层来完成数据的存取操作。表现层实现:表现层主要负责与用户交互,处理用户的请求和将处理结果响应给用户。在实际应用中,在Web表示层使用Struts框架,它很好的实现了MVC设计模式,前端控制器负责过滤盒分发用户请求,并执行拦截器功能和Action,根据Result返回结果使用Struts2标签和表现技术将结果呈现给用户。4.4系统功能模块的实现4.4.1.系统登录模块的实现详细设计:用户可以在登录界面中输入用户名和密码进行登录,如果用户名或密码不正确则弹出提示信息。用户录入用户名和密码并点击登录后,系统将前台form表单的数据传到后台的LoginAction的login方法中,并通过emp_find方法从数据库中的employee表进行检索,判断用户存在,若返回值不为空,则说明该用户存在可以登录,若为空值则该用户不能登录。如图4-5所示。图4-5系统登录界面关键代码:用于验证用户名及密码。functionccc() { if(document.ThisForm.userName.value=="") { alert("请输入用户名"); document.ThisForm.userName.focus(); returnfalse; } if(document.ThisForm.userPw.value=="") { alert("请输入密码"); document.ThisForm.userPw.focus(); returnfalse; } loginService.login(document.ThisForm.userName.value,document.ThisForm.userPw.value,document.ThisForm.userType.value,callback); } functioncallback(data) { if(data=="no") { alert("用户名或密码错误"); } if(data=="yes") { alert("Welcome!"); Window.location.href="<%=path%>/admin/index.jsp"; } } functionqing() { document.ThisForm.userName.value=""; document.ThisForm.userPw.value=""; }4.4.2.销售信息管理模块的实现详细设计:将商品进行销售单录入,系统会提示要销售商品的参考价格和库存数量。前台向后台提交表单后则将当前信息提交给后台SellAction的add()方法处理,action将所获取的信息分别添加到数据库sell和sellDetail两个表中,最后返回到销售信息管理列表,销售信息管理列表可对销售销信息进行删除和查看。具体界面如图4-6示。图4-6销售订单管理界面关键代码:用于销售库存蔬菜,当无库存时关闭该类蔬菜的销售选项,当销售额度超过库存量时提示库存不足。publicclassxiaoshouActionextendsActionSupport{ privateTGoodsDAOgoodsDAO; privateTXiaoshouDAOxiaoshouDAO; privateTRukuDAOrukuDAO; privateStringmessage; privateStringpath; publicStringxiaoshouAdd() { HttpServletRequestreq=ServletActionContext.getRequest(); intgoods_id=Integer.parseInt(req.getParameter("goods_id")); intxiaoshoushu=Integer.parseInt(req.getParameter("xiaoshoushu")); doubledanjia=Float.parseFloat(req.getParameter("danjia")); doublezongjia=danjia*xiaoshoushu; Stringxiaoshoushi=req.getParameter("xiaoshoushi"); Stringbeizhu=req.getParameter("beizhu"); intrukuShu=get_rukuShu(goods_id); If(xiaoshoushu>rukuShu) { req.setAttribute("msg","库存不足"); return"msg"; } else { TXiaoshouxiaoshou=newTXiaoshou(); xiaoshou.setGoods_id(goods_id); xiaoshou.setXiaoshoushu(xiaoshoushu); xiaoshou.setDanjia(danjia); xiaoshou.setZongjia(zongjia); xiaoshou.setXiaoshoushi(xiaoshoushi); xiaoshou.setBeizhu(beizhu); xiaoshouDAO.save(xiaoshou); this.setMessage("操作成功"); this.setPath("xiaoshouMana.action"); return"succeed"; } } publicStringxiaoshouMana() { HttpServletRequestreq=ServletActionContext.getRequest(); Stringsql="fromTXiaoshou"; ListxiaoshouList=xiaoshouDAO.getHibernateTemplate().find(sql); For(inti=0;<xiaoshouList.size();i++) { TXiaoshouxiaoshou=(TXiaoshou)xiaoshouList.get(i); xiaoshou.setGoods(goodsDAO.findById(xiaoshou.getGoods_id())); } req.setAttribute("xiaoshouList",xiaoshouList); returnActionSupport.SUCCESS; } publicStringxiaoshouDel() { HttpServletRequestreq=ServletActionContext.getRequest(); intid=Integer.parseInt(req.getParameter("id")); TXiaoshouxiaoshou=xiaoshouDAO.findById(id); xiaoshouDAO.delete(xiaoshou); this.setMessage("操作成功"); this.setPath("xiaoshouMana.action"); return"succeed"; } publicintget_rukuShu(intgoods_id) { intj=0; Stringsql="fromTRukuwheregoods_id="+goods_id; ListrukuList=rukuDAO.getHibernateTemplate().find(sql); for(inti=0;i<rukuList.size();i++) { TRukuruku=(TRuku)rukuList.get(i); J=j+ruku.getRukushu(); } returnj; }4.4.3采购信息管理模块的实现功能说明:主要是采购单的录入和采购信息的添加、删除、修改和查看功能。详细设计:添加采购信息功能主要是将采购员所采购的商品情况进行记录,在前台将供应商所供应的信息真写完成后点击确定按钮,此时并没有把数据题交到后台中,而是通过前台JavaScript脚本语言对所输入的内容进行效验,如果所输入的内容格式都为合法内容,则将当前信息提交给后台BuyAction处理。BuyAction将所获取的信息添加到数据库中,最后返回到采购信息管理列表。具体界面如图4-7。图4-7采购管理的界面关键代码:添加蔬菜采购类别、采购数量、采购时间以及删除选项。publicclassrukuActionextendsActionSupport{ privateTRukuDAOrukuDAO; privateTGoodsDAOgoodsDAO; privateStringmessage; privateStringpath; publicStringrukuAdd() { HttpServletRequestreq=ServletActionContext.getRequest(); intgoods_id=Integer.parseInt(req.getParameter("goods_id")); Stringdanjuhao=req.getParameter("danjuhao"); intrukushu=Integer.parseInt(req.getParameter("rukushu")); Stringrukushi=req.getParameter("rukushi"); Stringbeizhu=req.getParameter("beizhu"); TRukuruku=newTRuku(); ruku.setGoods_id(goods_id); ruku.setDanjuhao(danjuhao); ruku.setRukushu(rukushu); ruku.setRukushi(rukushi); ruku.setBeizhu(beizhu); rukuDAO.save(ruku); this.setMessage("操作成功"); this.setPath("rukuMana.action"); return"succeed"; } publicStringrukuMana() { HttpServletRequestreq=ServletActionContext.getRequest(); Stringsql="fromTRuku"; ListrukuList=rukuDAO.getHibernateTemplate().find(sql); for(inti=0;i<rukuList.size();i++) { TRukuruku=(TRuku)rukuList.get(i); ruku.setGoods(goodsDAO.findById(ruku.getGoods_id())); } req.setAttribute("rukuList",rukuList); returnActionSupport.SUCCESS; } publicStringrukuDel() { HttpServletRequestreq=ServletActionContext.getRequest(); intid=Integer.parseInt(req.getParameter("id")); TRukuruku=rukuDAO.findById(id); rukuDAO.delete(ruku); this.setMessage("操作成功"); this.setPath("rukuMana.action"); return"succeed"; }4.4.4库存信息管理模块的实现功能说明:主要是库存商品信息的查看功能。详细设计:库存商品信息的查看功能是提供用户通过商品编号或者商品名称进行查询库存信息通过信息校验和对比从数据库中查询得需要数据,最后返回到库存信息页面,具体界面如图4-8所示。图4-8库存管理界面关键代码:提供查询蔬菜的库存量publicclasstongjiActionextendsActionSupport{ privateTRukuDAOrukuDAO; privateTXiaoshouDAOxiaoshouDAO; privateTGoodsDAOgoodsDAO; publicStringtongjiRes() { HttpServletRequestreq=ServletActionContext.getRequest(); Stringbianhao=req.getParameter("bianhao").trim(); Stringmingcheng=req.getParameter("mingcheng").trim(); ListgoodsList=getGoodsList(bianhao,mingcheng); for(inti=0;i<goodsList.size();i++) { TGoodsgoods=(TGoods)goodsList.get(i); intrukuShu=get_rukuShu(goods.getId()); intxiaoshoushu=get_xiaoshouShu(goods.getId()); goods.setKucun(rukuShu-xiaoshoushu); } req.setAttribute("goodsList",goodsList); returnActionSupport.SUCCESS; } publicListgetGoodsList(Stringbianhao,Stringmingcheng) { Stringsql="fromTGoodswheredel='no'andbianhaolike'%"+bianhao+"%'"+"andmingchenglike'%"+mingcheng+"%'"; ListgoodsList=goodsDAO.getHibernateTemplate().find(sql); returngoodsList; } publicintget_rukuShu(intgoods_id) { intj=0; Stringsql="fromTRukuwheregoods_id="+goods_id; ListrukuList=rukuDAO.getHibernateTemplate().find(sql); for(inti=0;i<rukuList.size();i++) { TRukuruku=(TRuku)rukuList.get(i); j=j+ruku.getRukushu(); } returnj; } publicintget_xiaoshouShu(intgoods_id) { intj=0; Stringsql="fromTXiaoshouwheregoods_id="+goods_id; ListxiaoshouList=xiaoshouDAO.getHibernateTemplate().find(sql); for(inti=0;i<xiaoshouList.size();i++) { TXiaoshouxiaoshou=(TXiaoshou)xiaoshouList.get(i); j=j+xiaoshou.getXiaoshoushu(); } returnj; }4.4.5人员信息管理模块的实现功能说明:主要是管理员用户对新用户的添加、删除、和设置权限功能。详细设计:添加用户只有管理员权限才可以进行,而且新用户不可以获得管理员权限,只能获得次一级权限;删除用户功能只有管理员权限才可以使用,管理员可以删除所有的用户(不包括自己);设置权限在管理员添加新用户时使用此功能,但只可以设置次一级权限。具体界面如图4-9所示。图4-9人员信息管理界面关键代码:可用于下属人员账户的添加和删除以及添加账户时的权限赋予,而且在自己登陆账户后可以修改个人信息和账号密码。publicclassrenyuanActionextendsActionSupport{ privateIntegerid; privateStringxingming; privateStringxingbie; privateIntegernianling; privateStringxueli; privateStringzhiwei; privateStringloginname; privateStringloginpw; privateStringdel="no"; privateTRenyuanDAOrenyuanDAO; publicStringrenyuanAdd() { TRenyuanrenyuan=newTRenyuan(); renyuan.setXingming(xingming); renyuan.setXingbie(xingbie); renyuan.setNianling(nianling); renyuan.setXueli(xueli); renyuan.setZhiwei(zhiwei); renyuan.setLoginname(loginname); renyuan.setLoginpw(loginpw); renyuan.setDel("no"); renyuanDAO.save(renyuan); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("msg","信息添加完毕"); return"msg"; } publicStringrenyuanMana() { Stringsql="fromTRenyuanwheredel='no'"; ListrenyuanList=renyuanDAO.getHibernateTemplate().find(sql); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("renyuanList",renyuanList); returnActionSupport.SUCCESS; } publicStringrenyuanDel() { TRenyuanrenyuan=renyuanDAO.findById(id); renyuan.setDel("yes"); renyuanDAO.attachDirty(renyuan); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("msg","信息删除完毕"); return"msg"; } publicStringrenyuanPre() { TRenyuanrenyuan=renyuanDAO.findById(id); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("renyuan",renyuan); returnActionSupport.SUCCESS; } publicStringrenyuanEdit1() { TRenyuanrenyuan=renyuanDAO.findById(id); renyuan.setXingming(xingming); renyuan.setXingbie(xingbie); renyuan.setNianling(nianling); renyuan.setXueli(xueli); renyuan.setZhiwei(zhiwei); renyuan.setLoginname(loginname); renyuan.setLoginpw(loginpw); renyuan.setDel("no"); renyuanDAO.attachDirty(renyuan); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("msg","信息修改完毕"); return"msg"; } publicStringrenyuanEdit() { TRenyuanrenyuan=renyuanDAO.findById(id); renyuan.setXingming(xingming); renyuan.setXingbie(xingbie); renyuan.setNianling(nianling); renyuan.setXueli(xueli); renyuan.setZhiwei(zhiwei); renyuan.setLoginpw(loginpw); renyuan.setDel("no"); renyuanDAO.attachDirty(renyuan); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("msg","修改完毕,重新登录生效"); return"msg"; }

5系统测试由于在系统的生命周期的各个阶段都有可能产生差错,所以对于系统的测试是贯穿于系统整个开发的全过程的。系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明音像制品中指定功能的有效方法。为了发现缺陷并度量产品质量,按照系统的功能和性能需求进行测试。对于模块之间交互性比较强的软件,还会有单独的集成测试,用来发现模块接口之间的错误。进销存管理系统测试的主要内容包括:功能测试。功能测试主要包括:链接测试、表单测试、Cookies测试、设计语言测试、数据库测试。性能测试。性能测试主要包括:连接速度测试、负载测试、压力测试。可用性测试。可用性测试主要包括:导航测试、图形测试、内容测试、整体界面测试。兼容性测试。兼容性测试主要包括:平台测试、浏览器测试。安全测试。进销存管理系统测试的方法:功能测试:对进销存系统的所有页面都进行了链接测试。所有的页面都能链接到指定要链接到的页面,所链接的页面均存在,而且系统中不存在有孤立的页面;对表单进行测试,如果输入信息不正确或者不输入信息就直接提交,会出现出错提示;通过互动用户填写的表单信息和调查信息的提交对数据库的存入和读取操作进行测试,数据库运行正常。性能测试:因环境有限,在本机测试连接良好,无信息传输错误。可用性测试:进销存管理系统导航结构清晰、目的明确,经测试每个导航下的模块都能准确链接;页面字体使用CSS控制,确保了风格的一致,页面使用较少颜色组合,有较好的视觉效果;进销存管理系统整体界面布局合理,页面风格简洁,颜色搭配协调,保证了系统可用性良好。兼容性测试:在安装了Windows上的不同浏览器上进行测试,系统能够正常运行;系统中JavaScript均可正常运行,框架和层次结构风格差别不大,所以进销存管理系统兼容性较好。安全测试:系统对管理员的帐号和密码的有效性进行了测试。只有管理员的帐号和密码确认有效后,才可以对进销存管理系统进行维护工作。保证了管理系统的安全性。设计测试方案是测试阶段的关键技术问题。所谓测试方案包括预定要测试的功能,应该输入的测试数据和预期的结果。其中,最困难的问题是设计测试用的输入数据。不同的测试数据发现程序错误的能力差别很大,为了提高测试效率降低测试成本,应该选用高效的测试数据。因为不可能进行穷尽的测试,选用少量“最有效的”测试数据,做到尽可能完备的测试就更重要了。设计测试方案的基本目标是:确定一组最可能发现某个错误或某类错误的测试数据,已经研究出许多设计测试数据的技术,这些技术各有优缺点,没有哪一种是最好的,更没有哪一种可以代替其余的所有技术;同一种技术在不同的应用场合效果可能相差很大,因此,通常需要联合使用多种设计测试数据的技术。系统测试案例与分析测试案例的内容:周期:测试时间域。层次:测试的层面。类型:测试的分类。系统:测试何系统。分系统:测试何分系统。模块:测试何模块。平台:测试的环境。描述:对测试问题说明与叙述。目的:测试的目标与期望。此外,还包括测试文档号、测试设置、输入条件、测试结果和期望结果。测试案例与脚本:测试案例与脚本设计主要包括以下内容:检查集成测试策略,制定测试数据目的和性能目标,找出关键测试条件,检查已有的在线测试脚本,输入或抓取在线测试脚本,检查已有的用于测试的数据,生成测试数据,检查重要的数据,执行测试数据和测试脚本。5.1登录及主界面测试登录测试主要用于检测系统能否防止非授权用户使用系统。测试过程:进销存系统的登录界面,见表5.1所示。表5.1登录测试步骤用例描述输入期待输出实际输出说明1输入错误的用户名或密码弹出提示对话框,提示用户名或密码错误登录失败测试成功2输入正确的用户名和密码按要求输入并登录。按要求输入并登录。成功登录测试成功5.2基本信息测试这里以商品添加信息测试为例进行说明,见表5.2所示。表5.2添加信息测试步骤用例描述输入期待输出实际输出说明1添加不存在的信息按要求输入信息。添加。弹出确认添加对话框,确认添加添加成功测试成功2添加不存在的信息按要求输入信息。添加。弹出确认添加对话框,取消添加添加失败测试成功3添加已存在的信息按要求输入信息。添加。弹出确认添加对话框,确认添加添加失败测试成功5.3业务查询测试这里以基本信息查询为测试用例,见表5.3所示。表5.3基本信息查询测试步骤用例描述输入期待输出实际输出说明1选择商品名称,查询商品基本信息。从下拉列表中选择商品名称。查询。输出该商品的基本信息。输出该商品的基本信息。测试成功2选择商品类别,查询商品基本信息。从下拉列表中选择商品类别。查询。输出所有该类别商品的商品基本信息。输出所有该类别商品的商品基本信息。测试成功3输入关键字检索,查询符合条件的商品基本信息。在检索框中输入商品名,商品类别,查询。输出所有商品名,商品类别输出所有商品名,商品类别测试成功经测试发现系统在进销存这三项非常重要的功能当中没有完美的实现对数据库的操作,其中进和存、销和存都可达成关联,但是把三者合一却发现了问题,这个问题暂时没有解决,但是这一点我会在以后的以后的工作中重点关注。还有关于界面布局等问题已得到改善,基础功能方面也都基本实现。

结论本系统结合行业的进销存制度,对商品、客户、供应商的基本信息,商品的采购、销售、及盘点信息等进行管理,实现了企业的信息化管理,该系统具有跨平台实现数据即时通讯、更新的问题,将“信息孤岛”这一缺点在进销存系统中予以解决,企业部门间可以通过信息流,协同各单位部门的商流、物流和资金流,合理配置企业资源,能够提高了企业的核心竞争力。重点分析了系统所采用的关键技术及其实现方法。主要完成了以下工作:该系统为B/S结构,在系统建模中采用SSH(Struts+Spring+Hibernate)框架设计,充分体现了MVC模型优势,提高了程序的灵活性和可复用性。2.初步了解此课题的业务需求,做出相应的数据库设计,创建了14张表,将后台数据库与前台实现功能进行连接。3.在进行系统实现的时候,先是实现数据库所设计的表的增、删、改、查的基本工作。然后实现一些比较麻烦的功能,例如实现了用户权限管理,为不同部门的用户分配不同的权限工作;审批的流程,为采购订单和销售订单实现一个审批的流程工作;4.系统测试贯穿整个系统分析与开发中,并将功能进行试运行,对每一步未能完善的功能进行补充。本进销存管理系统经过了课题定义、需求分析与总体设计、详细设计和编码实现、测试等几个阶段基本完成了系统的开发。并通过对整个课题的分析,认为已经达到了课题定义的实现目标,各项功能均可实现。本系统尚有很多不足之处,后台操作关于进销存之间对数据库测操作并没有得到很好的协同,而且由于对SSH框架中Spring框架的掌握程度不高,没有将其在与SSH(Struts+Spring+Hibernate)框架完整结合,我会在今后进一步讲框架学习完善,并在此基础上进一步挖掘客户的需求,添加或修改不完善的功能模块,进行系统的扩展。致谢大学四年一晃而过。在四年的学习过程中我有过汗水,也有过笑容;有过付出,也有过收获。在毕业设计过程中,老师也给予了我相当多的帮助与支持。感谢老师对我的关怀和照顾。在学习过程中老师对我所遇到的问题及时的指导和解答,对我自身能力的提高给予了莫大的帮助。感谢系里的所有老师们,在我四年的学习生活中,不仅给予了我知识,也给我提供了良好的学习和实验的环境,更重要的是教给我谦虚的处世态度和科学的学习方法。在此,我向系里的老师们致以崇高的敬意和衷心的感谢!我的同学在学习和生活中给了我很大的帮助,让我深深的感受到朋友间浓郁的友情,让我对团队合作精神有了更深刻的体会。感谢同窗们在学习和生活中给予的帮助。感谢陈老师对论文的指导,使我的论文可以得以完善。再次向所有的老师和同学们表示衷心的感谢!希望母校的明天更辉煌!

参考文献[1](美)佩特科维奇|译者:冯飞,薛莹.MicrosoftSQLServer2005初学者指南[M].北京: 清华学出版社,2007.[2](美)DavidFlanagan.JavaScript权威指南[M].北京.机械工业出版社.2003.1[3](美)MartyHall.Servlet与JSP权威指南[M].北京.机械工业出版社.2002.10[4](美)MartyHall.JavaScript高级程序设计[M].北京.人民邮电出版社.2006.11[5](美)HibernateinAction[M]ManningPublications.2004.8[6]/(万维网联盟,互联网标准化组织)[7](Apache软件Jakarta项目组官方网站)[8]李刚.轻量级JavaEE企业应用实战[M].北京.电子工业出版社.2008.11[9]陈志泊.数据库原理及应用教程(第二版).北京:人民邮电出版社,2008.[10]邱哲等.StrutsWeb设计与开发大全[M].北京.清华大学出版社.2006.8[11]张洪伟.TomcatWeb开发及整合应用[M].北京.清华大学出版社.2006.8[12]郭锋等.Spring从入门到精通[M].北京.清华大学出版社.2006.8[13]蔡雪焘.Hibernate开发及整合应用大全[M].北京.清华大学出版社.2006.8[14]高寅.系统分析之路[M].北京.电子工业出版社.2005.5附录:相关代码登陆页面:<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><%Stringpath=request.getContextPath();%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="/1999/xhtml"><head> <metahttp-equiv="pragma"content="no-cache"/> <metahttp-equiv="cache-control"content="no-cache"/> <metahttp-equiv="expires"content="0"/> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"/> <metahttp-equiv="description"content="Thisismypage"/> <linkrel="stylesheet"href="<%=path%>/css/reset.css"type="text/css"media="screen"/> <linkrel="stylesheet"href="<%=path%>/css/style.css"type="text/css"media="screen"/> <linkrel="stylesheet"href="<%=path%>/css/invalid.css"type="text/css"media="screen"/><scripttype='text/javascript'src='<%=path%>/dwr/interface/loginService.js'></script><scripttype='text/javascript'src='<%=path%>/dwr/engine.js'></script><scripttype='text/javascript'src='<%=path%>/dwr/util.js'></script><scriptlanguage="javascript"> functionccc() { if(document.ThisForm.userName.value=="") { alert("请输入用户名"); document.ThisForm.userName.focus(); returnfalse; } if(document.ThisForm.userPw.value=="") { alert("请输入密码"); document.ThisForm.userPw.focus(); returnfalse; }loginService.login(document.ThisForm.userName.value,document.ThisForm.userPw.value,document.ThisForm.userType.value,callback); } functioncallback(data) { if(data=="no") { alert("用户名或密码错误"); } if(data=="yes") { alert("Welcome!"); window.location.href="<%=path%>/admin/index.jsp"; } } functionqing() { document.ThisForm.userName.value=""; document.ThisForm.userPw.value=""; } </script> </head><bodyid="login"><divid="login-wrapper"class="png_bg"><divid="login-top"style="font-size:30px;">进销存管理系统</div><divid="login-content"style="margin-top:50px;"><formaction="0"method="post"name="ThisForm"><p><labelstyle="font-family:微软雅黑">登陆账号:</label><inputclass="text-input"type="text"name="userName"/></p><divclass="clear"></div><p><labelstyle="font-family:微软雅黑">登陆密码:</label><inputclass="text-input"type="password"name="userPw"/></p><divclass="clear"></div><p><labelstyle="font-family:微软雅黑">登陆类型:</label><selectname="userType"style="width

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论