学位论文—基于hibernate的进销存管理系统的设计与实现.doc
毕业设计基于hibernate的进销存管理系统的设计与实现班 级: 学号: 软件学院姓 名: 软件工程学 院: 专 业: 指导教师: 基于hibernate的进销存管理系统的设计与实现摘 要随着科技的迅速发展,各种管理系统已应用到社会的各个领域。各个大小企业无论规模如何,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适合自己的管理系统。通过医药进销存管理系统这个平台,可以实现医药进销存管理的信息化、网络化、系统化、规范化,使工作人员从繁杂的数据查询和统计中解脱出来,减少工作量。系统的主要功能包括:药品分类管理、药品管理、入库管理、出库管理、库存信息浏览、药品管理、供应商 管理等。本系统前台主要使用JSP作为开发语言,后台使用SqlServer作为数据库管理系统,开发环境是MyEclipse,服务器采用tomcat,开发出的一个基于Web技术的B/S结构的医药进销存管理系统。关键词:医药进销存,JSP,B/S结构,HibernateDesign and implementation of inventory management system based on HibernateAbstractWith the rapid development of science and technology, all kinds of management systems have been applied to each field of the society. Various size enterprises regardless of size, are fully aware of the traditional manual management mode has not adapted to the development of the times, in order to better development, in development for the management system。Through the medicine Invoicing management system this platform, can realize the medicine Invoicing management informatization, network, systematic, standardized, so that the staff from the complex data query and statistics out, reduce the workload. The main functions of the system include: the categorized management of drugs, medicines management, warehousing management, warehousing management, inventory information browsing, customer management, supplier management。The front of the system using JSP as a development language, the use of SqlServer as a database management system, the development environment is MyEclipse, server using tomcat, developed a Web technology based on B / S structure medicine Invoicing management system。Keywords: Medicine Invoicing,JSP,B / S structure, Hibernate华中科技目 录1 引言11.1课题背景11.2国内外研究现状11.3研究意义12 开发工具及技术22.1 MyEclipse22.2 Tomcat22.3 SqlServer22.4 Hibernate23 系统需求分析43.1 需求调研43.2 可行性分析43.2.1 技术的可行性43.2.2 操作可行性43.3 系统用户用例图43.4 功能模块需求分析53.5 设计的基本思想63.6 性能需求63.6.1 系统的安全性63.6.2 数据的完整性63.7 界面需求64 系统分析与设计84.1 数据库的分析与设计84.1.1 数据库的概念结构设计84.1.2 数据库的逻辑结构设计104.1.3 数据库的连接原理124.2 中文乱码问题处理135 系统功能展示及功能核心代码15 第 I 页 共II页5.1 系统登陆页面实现155.2 系统首页设计175.3 药品管理模块175.3.1 药品信息录入175.3.2 药品信息管理195.3.3 药品信息删除205.4 采购入库管理215.4.1 采购入库添加215.4.2 采购入库管理215.5 药品分类管理235.5.1 分类信息录入235.5.2 分类信息查询235.6 修改密码255.7 安全退出系统256 系统测试266.1 系统测试目的266.2系统测试步骤与方法266.3 测试过程266.4 其他错误277 结论28致 谢30 第 II 页 共II页1引言1.1 课题背景计算机网络技术的发展,给信息时代的人们带来了很大的方便。如今在Internet上,随处都可以看到种类繁多的信息管理系统,比如,企业办公化自动管理系统,电子商务系统,企业教务管理系统等等。随着信息技术的日益发展已深入到社会的各个角落,各个大的企业,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适合自己的管理系统。不管大企业。各种类型的小企业也是如此,以前管理大多为手工管理,效率低、易出错、手续繁琐,而且耗费大量的人力,物力,财力。他们希望有一个适合自己的管理系统,能够实现药品类别管理,药品管理,药品出入库管理,药品和供应商管理,库存管理等功能1。通过此系统,可以对医药进销存的各项情况实行电脑化管理,这样可以提高工作效率,也使得医药进销存管理所需的各项信息能方便快速进行录入,查询,删除和更新,对相应关键数据也能够方便的统计结果。 1.2国内外研究现状目前市场上有许多成熟的进销存管理系统,但这些系统大多数都是依赖于某一特定类型的数据库,而不能与企业已有的管理系统的数据库有效地统一,这就造成了企业投入和资源上的浪费Hibernate是对象/关系映射的优秀解决方案,简写为ORM,通过在系统中使用Hibernate可以解决不同类型数据库对代码的影响,从而使系统能够应用于多种数据库2。1.3研究意义长久以来,医药进销存的管理工作大多数都采用的是传统的手工方式来记录相关信息,这种管理方式存在很多缺点,比如说,药品入库出库,药品信息的录入,查询,更新,分析都要完全依赖管理人员的手工记录和人工分析。对于小规模企业来说还勉强可以接受,但对于规模大一点的企业来说,人工记录是相当麻烦的。为满足企业发展需求,决定采用各种编程语言JSP开发了基于B/S架构的医药进销存管理系统,医药进销存管理系统是涉及信息科学、数据计算和计算机技术的复杂的人机交互系统。通过这些系统,可以对医药进销存和管理进行智能化管理,有效地记录并查询各种药品类型以及出入库等情况,为医药进销存的管理提供了诸多方便。2开发工具及技术此次设计主要采用MyEclipse加Tomcat后台服务器进行,设计过程中页面主要使用JSP技术完成,下面对MyEclipse、Tomcat、和SqlServer数据库等进行简要介绍。2.1 MyEclipseMyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate。2.2 Tomcat Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apahce服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。2.3 SqlServer SqlServer使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性;支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统;为多种编程语言提供了API;支持多线程,充分利用CPU资源;提供TCP/IP、ODBC和JDBC等多种数据库连接途径;可以处理拥有上千万条记录的大型数据库。对于一般的个人使用者和中小型企业来说,SqlServer提供的功能已经绰绰有余,而且由于SqlServer是开放源码软件,因此可以大大降低总体拥有成本。2.4 HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任3。Hibernate的核心接口一共有6个分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。 Hibernate 中提供了两级Cache(高速缓冲存储器),第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由Hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。3系统需求分析3.1 需求调研软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。3.1 需求调研在项目的开始是需求调研,并且走访了一些医药公司,经过一系列的调查与谈话中发现,现行的医药进销存管理工作还是存在着很多不足之处,手工记录的方式不易保存,容易丢失,同样也不利于数据的查询和统计分析。根据医药公司的实际情况及调查结果,发现实现医药进销存管理的网络化、信息化是十分有必要的,因此设计了本套医药进销存管理系统。3.2 可行性分析开发任何一个系统,都会受到时间和资源上的限制。因此,在每一个项目开发之前,都要进行可行性分析,可以减少项目的开发风险,避免人力、物力和财力的浪费。3.2.1 技术的可行性本系统开发工具是MyEclipse和SqlServer数据库,开发语言是Java,主要使用了J2EE的技术,java是一种面向对象编程语言,简单易学而且灵活方便。大四时就学习了java课程,期间也系统的了解了J2EE的知识,医药进销存管理系统总体上开发难度不高,数据库的设计和操作是本系统设计的核心。在大学期间学习过软件工程,软件测试,UML统一建模语言等课程,每个学期也会完成对应的课程设计,具备一定的系统分析、设计和测试能力。因此,完成系统实现在技术上完全具有可行性。3.2.2 操作可行性本系统操作简单,输入信息页面大多数都是下拉框的选择形式,在某些页面,信息可以自动生成,无需输入,时间的输入也是用的日历控件,操作简便,对操作人员的要求很低,只需对Windows操作熟练,加之对本系统的操作稍加培训即可工作,而且本系统可视性非常好,所以在技术上不会有很大难度。3.3 系统用户用例图管理员负责管理整个系统,涉及到九大功能模块,能够及时动态的掌握医药进销存的各项情况。图3.1 管理员用例图3.4 功能模块需求分析任何一个软件本质上都是信息处理系统,系统必须处理的信息和系统应该产生的信息很大程度上决定系统的面貌,对软件设计有深远的影响,因此,必须分析系统的数据要求,这是软件分析的一个重要任务4。分析系统的数据要求通常采用建立数据模型的方法。本系统最大的特点是使用操作简单友好的提示信息。本系统将实现以下基本功能: 1. 系统具有简洁大方的页面,使用简便,友好的错误操作提示; 2. 管理员用户具有做药品分类管理、药品管理、入库管理,出库管理、库存信息 管理、药品管理、系统管理功能;系统的功能结构图3.2所示:图3.2 用户功能模块图3.5 设计的基本思想设计思想遵循以下几点:1. 采用B/S模式进行开发,其优点是后台与前台处理层次分明,而且符合众多已经习惯网页方式的用户。2. 采用面向对象的开发与设计理念。运用面向对象技术的前提是对整体系统的高度和准确抽象,通过它可以保证系统良好的框架,进而带来产品较强的稳定性和运行效率。3. 采用模块化设计。模块化设计要求将整个系统划分成基于小的模块,有利于代码的重载,简化设计和实现过程。4. 简单方便的系统界面。设计简单友好的系统界面,方便用户较快的适应系统的操作。5速度优先原则。由于此工具最重要的评测标准就是速度,因此在设计过程中,具体过程尽量做到资源占用少,速度快。6设计既要突出重点,又要细致周到。要符合设计需求,在有可能改进的地方进行扩充,使系统更适应用户的需要。3.6 性能需求3.6.1 系统的安全性医药进销存管理系统在管理权限上要严格进行控制,想登陆医药进销存管理系统进行操作,必须有某些操作权限,没有权限的用户不能通过任何方式登录系统查看系统的任何信息和数据,以确保系统的严密性和安全性。3.6.2 数据的完整性 1.各种记录信息的完整性,信息记录内容不能为空2.各种数据间相互联系的正确性3.相同数据在不同记录中的一致性3.7 界面需求界面设计目前已经成为评价软件质量的一条重要指标,一个好的用户界面可以增加用户使用系统的信心和兴趣,提高工作效率,JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序5。 创建动态页面非常方便。用户界面是指软件系统与用户交互的接口,通常包括输出、输入、人-机对话的界面格式等。1.输出设计输出是由计算机对输入的原始信息进行加工处理,形成高质量的有效信息,并使之具有一定的格式,提供管理者使用,这是输出设计的主要职责和目标。系统设计的过程正好和实施过程相反,并不是从输入设计到输出设计,而是从输出设计到输入设计,这是因为输出表格直接与使用者相联系,设计的出发点应当是保证输出表格方便地为使用者服务,正确及时反映和组成用于各部门的有用信息6。输出设计的原则是考虑既要全面反映不同管理层的各项需要,又要言简意赅,不要将用户需要和不需要的都提供给用户。2.输入设计输入数据的收集和录入是比较费事的,需要大量的人力和一定设备,并且容易出错。如果输入系统的数据有错误,则处理后的输出将扩大这些错误,因此输入数据的正确性对于整个系统质量的好坏是具有决定性意义的。输入设计的原则有如下几点:1)输入量应保持在能满足处理要求的最低限度。设计中可采用设置字段初值,下拉式数据窗口等方式尽量减少用户键盘输入量。输入量越少,错误率就越少,数据准备时间也减少。2)输入的准备及输入过程应尽量容易进行,从而减少错误的发生。3)应尽量早对输入数据进行检查(尽量接近原数据发生点),以便使错误及时得到更正。4)输入数据尽早地用其处理所需的形式被记录,以避免数据由一种介质转移到另一种介质时需要转录而可能发生的错误4系统分析与设计4.1 数据库的分析与设计计算机信息系统以数据库为核心,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计和传播等操作。数据库已经成为现在信息系统等计算机系统的基础与核心部分7。数据库设计的好坏直接影响到整个系统的质量和效率。数据库的设计一般经过规划。需求分析、概念设计、逻辑设计、物理设计5个步骤。4.1.1 数据库的概念结构设计概念设计是指在数据分析的基础上自底向上的建立整个系统的数据库概念结构,从用户的角度进行视图设计,然后将视图集成,最后对集成的结构分析优化得到最后结果。数据库的概念结构设计采用实体联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。E-R(实体联系)模型是对现实世界的一种抽象,它的主要成份是 实体、联系和属性8。 但是在现实世界中还有一些特殊的语义。需要扩展ER模型的概念才能更好地模拟现实世界。概念设计的目标是产生反映企业组织信息要求的数据库概念结构,即概念模式。概念模式是独立于数据库逻辑结构,独立于支持数据库的DBMS,不依赖于计算机系统的,根据以上对数据库的需求分析,并结合系统概念模型的特点及建立方法,建立E-R模型图8。实体间关系属性实体(1) 药品类别实体E-R图如图4.1所示:类别介绍类别名称药品类别 图4.1药品类别信息实体E-R图(2) 药品信息实体E-R图如图4.2所示:单位规格产地药品名称备注信息物品信息 图4.2 药品信息实体E-R图(3) 入库信信息E-R图如图4.3所示:总金额经手人入库时间单据号备注信息入库信息 图4.3 入库信息实体E-R图(4) 出库信信息E-R图如图4.4所示:总金额经手人出库时间单据号备注信息出库信息 图4.4 出库信息实体E-R图(5) 管理员信息E-R图如图4.5所示:登陆账号登陆密码用户ID管理员 图4.5 管理员信息实体E-R图4.1.2 数据库的逻辑结构设计我们知道,数据库概念模型独立于任何特定的数据库管理系统,因此,需要根据具体使用的数据库管理系统的特点进行转换。即转化为按计算机观点处理的逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:*每一个实体要转换成一个关系*所有的主键必须定义非空(NOT NULL)*对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键9。根据E-R模型,医药进销存管理系统建立了以下逻辑数据结构,下面是各数据表的详细说明。(1) 药品类别表主要是记录了药品类别基本信息。表结构如表4.1所示: 表4.1 药品类别表(t_catelog)列名数据类型长度允许空是否主键说明idint4否是 编号namevarchar50否否 类别名称jieshaovarchar50否否 类别介绍(2) 药品信息表主要是记录了医药进销存的基本信息,表结构如图4.2所示:表4.2 药品信息表(t_goods)列名数据类型长度允许空是否主键说明idInt4否是编号catelog_idInt4否否类别编号namevarchar50否否药品名称chandivarchar50否否产地danweivarchar50否否单位guigevarchar50否否规格beizhuvarchar50否否备注信息(3)入库信息表主要是记录医药进销存的入库的基本信息,表结构如图4.3所示:表4.3 入库信息表(t_ruku)列名数据类型长度允许空是否主键说明idInt4否是编号danjuhaovarchar4否否单据号shijianvarcharDate否否入库时间zongjiagevarchar50否否总价格jingshourenvarchar50否否经手人beizhuvarchar500否否备注信息(4) 出库信息表主要是记录医药进销存的出库基本信息,表结构如图4.4所示: 表4.4出库信息表(t_chuku)列名数据类型长度允许空是否主键说明idInt4否是编号danjuhaovarchar4否否单据号shijianvarcharDate否否出库时间zongjiagevarchar50否否总价格jingshourenvarchar50否否经手人beizhuvarchar500否否备注信息(5) 管理员信息表主要记录的管理员的账号信息,包括用户名和密码,表结构如表4.5所示:表4.5管理员信息表(t_admin)列名数据类型长度允许空是否主键说明userIdint4否是编号userNamevarchar50否否用户名userPwvarchar50否否密码4.1.3 数据库的连接原理采用JDBC连接数据库的方式,只需在工程中导入对应数据库的jar包,就可以方便的对数据库进行连接,在程序中,用Class.forName()方法来加载驱动程序,在用DriverManager的getConnection()方法就可以创建一个数据库连接。程序采用的是DAO模式来操作数据库,DAO(Data Access Object,数据访问对象),是Java编程中的一种经典模式,已被广泛应用,也是J2EE架构中持久层框架的基础知识,基于分层次式的软件架构来实现对数据库的访问操作10。DAO模式的主要思想就是从抽象数据源获取与操纵数据的方法。抽象数据的含义就是编写应用程序的程序员不必关心数据库的物理位置,已经是何种数据库,只需使用封装数据库中表示记录的数据对象即可11。其思想如图3.6所示:封装使用DataSourceDataAccessObjectBusinessObject创建/使用获取/修改DataTransferObject图4.6 DAO模式类图 图中BussinessObject是业务对象,是使用DAO模式的药品端;DataTransferObject数据传输对象,在应用程序不同层次之间传输对象,在一个分布式应用程序中,通常可以提高整理的性能;DataObjectAcces数据输入/输出对象封装了对数据源的一些基本操作;DataSource指的是数据源。可以从图中看出,DAO模式分离了业务逻辑和数据罗即将,是的编写的软件具有良好的层次式体系结构。本系统为了方便数据库的操作,主要使用DBContent的对象来接一个数据库(建立一个类DBContent),代码如下:public DBContent()String CLASSFORNAME=" com.microsoft.sqlserver.jdbc.SQLServerDriver "/连接数据库的驱动String url=" jdbc:sqlserver:/localhost:1433;databaseName=db_yyj "String user="sa"/连接数据库的用户名String password="sa"/连接数据库的密码tryClass.forName(CLASSFORNAME);con= DriverManager.getConnection(url,user,password);/加载数据库的驱动stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);catch(Exception ex)ex.printStackTrace();在程序需要连接数据库的地方,只需要生成一个DBConnet的对象,就可以对数据库进行连接并操作。4.2 中文乱码问题处理在程序中经常会遇到中文乱码的情况,如果手动的在servlet和jsp页面进行设置,相当麻烦。因此,在程序的开始就写了一个过滤器SetCharacterEncodingFilter。在web.xml中配置:<filter><filter-name>SetCharacterEncodingFilter</filter-name><filter-class>myweb.util.filter.SetCharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>SetCharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>/*表示工程下所有的页面都会有此过滤器的处理</filter-mapping>对应的SetCharacterEncodingFilter.java文件中的重要代码,在初始化init()方法中定义:public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); 在工具包util包中同样定义了DataFormate类来处理字符转换:public static String toUni(String gbStr) String uniStr = "" /*把字符串转换成uincode编码*/ if(gbStr = null) gbStr = "" try byte tempByte = gbStr.getBytes("GB2312"); uniStr = new String(tempByte,"ISO8859_1"); catch(Exception ex) return uniStr; 5系统功能展示及功能核心代码在管理信息系统的生命周期中,仅过了需求分析、系统设计等阶段之后,便开始了系统实施阶段。在系统分析和设计阶段,系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶12。5.1 系统登陆页面实现1.描述:为了保证系统的安全性,要先使用本系统必须先登陆到系统中,并且不同角色的用户进入不同的界面,功能也随之不同。2.程序运行效果图如图5.1所示:图5.1 系统登陆页面设计3.在登陆页面输入用户名和密码以,点击提交按钮,跳转到登陆的service中,在该service中会对用户名,密码,验证码进行判断,并根据相应的用户角色进入对应的页面,loginservice关键代码:public String login(String userName,String userPw,int userType)tryThread.sleep(700); catch (InterruptedException e)/ TODO Auto-generated catch blocke.printStackTrace();String result="no"if(userType=0)String sql="from TAdmin where userName=? and userPw=?"Object con=userName,userPw;List adminList=adminDAO.getHibernateTemplate().find(sql,con);if(adminList.size()=0) result="no"else WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)adminList.get(0); session.setAttribute("userType", 0); session.setAttribute("admin", admin); result="yes"if(userType=2)rs.close(); catch (SQLException e)System.out.println("登录失败!");e.printStackTrace();finallymydb.closed();return result;5.2 系统首页设计1.描述:管理员主页面:左方页面展示了管理员可操作的九大功能,进入相关的管理页面可以链接到子菜单,并且高亮显示,每个管理模块下面都有相应的子菜单。在每个jsp页面将会对相关用户进行拦截操作,这样可以提高安全性,防止用户不经过登陆页面而进入任何子菜单页面:if(session.getAttribute("user")=null) out.print("<script>alert('请先登录!');window.open('./index.jsp','_self')</script>"); 5.3 药品管理模块药品管理模块主要由药品类别管理和药品信息管理两功能组成,其中药品类别管理是针对药品类别进行增删改查,药品信息管理是对药品信息的增删改查。5.3.1 药品信息录入描述:输入药品类别相关正确信息后点击录入按钮,如果是没有输入完整的信息,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit="return checkForm()"来检查,checkForm()函数中是各种的校验输入数据的方式。