基于strutsHibernate的财务报销系统毕业论文.docx_第1页
基于strutsHibernate的财务报销系统毕业论文.docx_第2页
基于strutsHibernate的财务报销系统毕业论文.docx_第3页
基于strutsHibernate的财务报销系统毕业论文.docx_第4页
基于strutsHibernate的财务报销系统毕业论文.docx_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

基于struts+Hibernate的财务报销系统毕业论文目 录摘要1Abstract2第一章绪论41.1OA概述41.2技术背景41.3课题研究的意义及可行性4第二章Struts介绍52.1 MVC模式简介52.1.1 模型62.1.2 视图62.1.3 控制层62.2 Struts框架的结构及实现方法62.2.1Struts框架的组成72.2.1 Struts的基本组件72.2.2 Struts的工作过程92.3 Struts的国际化9第三章 Hibernate框架介绍103.1 数据库操作的3个阶段103.2 ORM对象关系映射123.3 Hibernate介绍及工作过程133.3.1 Hibernate的组成133.3.2 Hibernate的工作过程14第四章系统功能的实现及部署154.1 系统概述154.2 系统分析164.2.1 需求分析164.2.2 可行性分析164.3 系统设计164.3.1 总体设计164.3.2 详细设计174.3.3 确定并搭建开发环境,并对开发环境进行测试204.3.4系统实现214.3.5 系统的部署及运行30第五章 开发总结及前景31致谢31参考文献32第一章绪论1.1 财务报销系统概述在当今计算机网络技术和计算机技术飞速发展,人们普遍使用计算机来提高个人工作效率,但是在需要许多人一起协同工作的现代工作环境中,我们更需要提高我们的整体工作效率。利用网络通讯基础及先进的网络应用平台,建设一个安全、可靠、开放、高效的财务报销系统。传统财务报销主要以纸介质为主,在信息革命的浪潮中,显然已经远远不能满足高效率、快节奏的现代工作和生活的需要。如何实现信息处理的自动化和办公的无纸化逐步得到了人们的重视。网络财务报销系统效果并不明显,人们还是仪在单机字处理和表格处理的所谓的初级阶段,信息的交流和共享,以及团队的协同工作无法很好的实现,极大地限制了工作的效率,Internet/Intranet的迅猛发展,为信息的交流和共享,团队的协同运作提供了技术的保证,同时也预示着网络化办公时代的来临。1.2 技术背景随着Internet技术的飞速发展,基于B/S结构的服务应用程序得到了广泛的应用,实现Web应用的技术和框架也层出不穷,当今软件开发出现了两大应用技术标准:微软的.NET和SUN公司提出的J2EE,这两种技术各有其优缺点,J2EE的安全性及可移植性优于.NET,但是J2EE的企业级应用需要专门的Container,及Server,需要花费大量的资金在软件的运行和维护上。但是随着J2EE技术的不断成熟,并且大量开源框架的出现,J2EE的优势日渐突出,且J2EE采用可跨平台运行的Java语言作为其主要开发语言,能够在不同的平台上运行,因此越来越受到企业的欢迎。1.3 课题研究的意义及可行性本文通过整合一些开源的J2EE框架来搭建一个开发平台,结合Struts框架和Hibernate的数据持久化机制来构建一个轻量级的Web开发框架,并利用此框架来开发一个基于B/S的办公自动化系统,以此来说明Struts和Hibernate的整合过程。选择这种开发框架的优点有以下几个:1.快速开发。Struts是一个成熟的Web层框架,称为A Half DoneApplication,开发者只需要在需要的地方加入自己的处理逻辑,并且许多参数的设置是在配置文件中,需要修改时开发者只需要修改配置文件即可,而不需要去修改代码的每个地方,这种开发框架已经广泛应用在许多行业的系统中,如交通,电力,银行,通信等。2.Hibernate的数据持久化。Hibernate是一个基于O-R(Object-Relation)的框架,真正的适用于面向对象的开发思想。开发着只需要对对应的Class进行操作就可以方便的实现对数据库的操作。并且Hibernate框架中实现了许多对数据库中数据的操作方法,方便了Developer的开发。相对于使用JDBC开发更方便,快捷。3.成本低。Struts,Hibernate,以及所使用的开发环境及运行环境采用的都是开源软件,大降低了开发和运行的成本,更适合中小企业的开发。3可扩展性。Struts和Hibernate的使用降低的项目各个模块之间的耦合度,因此企业很容易对项目的某个模块进行扩展或者进行二次开发。由于此框架容易与其他的J2EE框架整合,更是大大提高了系统的可扩展性。第二章 Struts介绍Struts是一种实现了MVC模式的框架,全部的请求都由一个被称为ActionServlet的Servlet来接收并控制。Struts并没有取代Jsp,Servlet,只是将其组织起来。2.1 MVC模式简介MVC是一种设计模式,是Model-View-Controller的简写,它把整个应用系统的输入、处理、输出分开,其结构图如图2-1:模型封装应用程序状态处理业务逻辑,通知视图的更新视图向控制器发送用户请求,接收来自模型的更新控制器定义应用程序行为,映射用户请求到模型选择相应的视图状态查询通知更新请求业务处理选择视图图2-12.1.1 模型模型是应用程序的核心,负责处理用户的数据和实现业务逻辑的处理,并且为视图提供数据,用户所有的数据操作和业务逻辑的处理全部都由模型层处理。2.1.2 视图视图是一些JSP页面,是系统与用户交互的界面,即常称的UI(User interface),视图用户来接收用户的输入,在MVC模式中,视图层不包括任何业务逻辑的处理,它只是为Model提供数据及为用户显示Model层更新的数据。2.1.3 控制层控制层也称为控制器,当用户提交请求时,控制器接收用户的请求并根据用户提交的数据决定调用哪些模型来进行业务处理,同时将用户提交的数据提供给Model层,由Model来进行数据处理,然后将处理的结果给视图的形式返回给用户,从而实现用户和系统的交互。2.2 Struts框架的结构及实现方法Struts是Apache软件组织提供的一个开源项目,为Java Web应用提供MVC框架,适用于开发大型可扩展的Web应用。在MVC刚刚出现的时候,开发人员需要花大量的时间在MVC模式的实现上,而Struts则恰恰实现了这种开发模式,开发人员只需在此基础去实现自己的逻辑处理,而不耍花费大量的时间在模式的实现上。2.2.1Struts框架的组成Struts对应MVC的三层分别有对应的实现方法:Struts中的Java Bean以及大型项目中的EJB对应MVC中的Model层,MVC的Controller层对应Struts的Action及ActionServlet,Struts的ActionForm以及JSP页面对应MVC的视图层,在视图层Struts提供了大量的标签库用来显示数据,Struts的各个组成部分全部由Struts的主配置文件Struts-config.xml联系在一起。2.2.1 Struts的基本组件Struts主要由四个核心组件组成:ActionServlet,Action,FormBean,ActionMapping,另外Struts还提供了功能强大的标签库(Taglib),用来供客户端显示用。1)ActionServletActionServlet是Javax.servlet.http.HttpServlet的子类,是Struts框架的主控制器,根据用户的请求和配置文件和描述将请求转发给相应的Action,Servlet必须在Http Application的Web.xml的配置文件中声明,因此在Struts中同样也在Web.xml中对ActionServlet进行了配置: action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 3 detail 3 0 action *.do ActionServlet会匹配所有的以.do结尾的请求,并读取配置文件里配置的Config对应的Struts的配置文件中的Action,从而将请求转交给对应的Action调用相应的业务处理方法进行处理。2)Action当ActionServlet得到用户的请求后,将请求转发给Action,然后由Action调用相应的业务逻辑处理方法进行处理。3)ActionMapping当Action进行业务处理后会返回一个ActionMapping的对象,该对象包含了Action的请求对象,决定Web Container该返回个对象给用户。4)ActionForm当ActionServlet接收到用户的请求时,会根据struts-config.xml描述将数据封装到相应的ActionForm中,然后由Action根据struts-config.xml的描述读取相应的ActionForm中的数据,进行处理,将处理后的结果返回给用户。5)标签库Struts提供了功能强大的标签库,只有充分使用这些标签才能最大限度发挥Struts的作用,真正实现MVC模式。有了这些标签库开发人员无需在JSP页面添加任何的Java脚本就可以实现非常复杂的逻辑处理,从而实现了开发人员的美工人员的工作的分离。减少了美工人员的难度。2.2.2 Struts的工作过程浏览器ActionServletActionJSPActionFormStruts-config.xmlRequestResponseInvoke图2-2Struts的工作过程如图2-2,当用户向Web Server发出请求时,Web Server将请求转交给ActionServlet,由Servlet决定调用哪些Action,然后根据Struts-config.xml的配置对应相应的Form来读取数据,并调用相应的业务逻辑处理方法进行处理,然后将处理后的结果传递到JSP提供给用户。2.3 Struts的国际化在过去,软件开发者在开发应用程序时,将注意力集中于实现具体的业务逻辑。软件面向的用户群是固定的,软件只需要支持一种语言,但是随着跨国业务的迅猛发展,需要同一软件能同时支持多种语言。对于一个已经开发好的软件如果要支持新的语言就要对软件进行国际化。国际化指的是在软件设计阶段就应该使软件具有支持多种语言和地区的功能。这样,当需要在应用中添加对一种新的语言和国家的支持时,不需要对已有的软件进行重新编码。一个应用程序支持国际化应该具备以下特征:1)当应用程序需要支持一种新的语言时无需修改源码。2)应用程序中的文本及图片资源从代码中分离出来,存储在外部。3)根据用户的语言和地理位置进行正确的格式化。4)可以方便快捷地对应用做出调整,使它适应新的语言和地区。Struts对国际化的支持体现在能够输出和用户Locale相符合的文本和图片上。当Struts配置文件的元素的Local属性为True时,Struts框架把用户的Locale实例保存在Session范围内,宁产,Struts框架能自动根据这一Locale实例来从Resource Bundle中选择合适的资源文件,当用户的Locale为英文时,Struts框架就会向用户返回来自于Application_perties文件的文本内容,当用户的Locale为中文时,Struts框架就会向用户返回来自于Application_ch_properties文件的文本内容。第三章 Hibernate框架介绍Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用面向对象编程思维来操纵数据库,Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的Web应用中使用。Hibernate的作用就是介于Java与JDBC之间的一个持久层,它通过建立与数据库表之间的映射来操纵数据库,Hibernate是基于JDBC之上的。3.1 数据库操作的3个阶段1)JDBC操作阶段在使用Java进行数据库开发的最初数据库开发的最初阶段,都是使用JDBC类来操作数据库的:String sql = “select * from user where username=”+username+” and password=”+password+”;TryClass.forName(“com.mysql.jdbc.Driver”).newInstance();Connection conn = DriverManager.getConnection(“jdbc:mysql:/localhost:3306/SOG”,”root”,”root”);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);While(rs.next()System.out.println(rs.getString(1);catch(Exception e)e.printStackTrace();finallyRs.close();Stmt.close();Conn.close();这一段操作代码很具有代表性,几乎所有的使用JDBC进行数据库操作的代码都需要开发如下过程的代码:定义查询或更新的SQL语句;加载数据库驱动程序;创建数据库连接;创建申明对象;执行查询或更新;关闭结果集对象,申明对象,数据连接对象。使用这种方法的缺点是:代码重用度小,数据库处理的代码过多,不能突出业务处理逻辑。2)封装JDBC的阶段为了改进JDBC操作的不足,我们可以将JDBC的不同操作封装成不同的函数。Public Boolean createConn():加载驱动程序,创建连接对象Public Boolean update(String sql):执行更新操作Public void query(String sql):执行查询操作Public void closers():关闭结果集对象Public void closeStm():关闭申明对象Public void closeConn():关闭连接对象这样我们就可以直接调用这些函数来创建数据连接,这样就避免了以上不足,实现了对JDBC封装,并能够对JDBC事务进行管理。并且在这个基础上,可以通过配置连接池来减少对数据库操作的时间。3)ORM阶段在对JDBC进行封装之后,能够方便地实现数据库的操作,但是,在面向对象的编程开发中,数据库的操作与普通的面向对象的Java代码不同,而ORM则是减少了这种区别。真正实现了数据库操作的对象化。3.2 ORM对象关系映射ORM是Object Relational Mapping的简称,即对象关系映射,它是一种为了解决面向对象与关系数据库存在的不匹配的技术,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中,实际上就是将Java中的Class与数据库中的Table对应起来。关系图如图3-1:编号adminIDnamePassword用户实体用户名密码adminPKnamePasswordIDERORM图3-1图中依次包含了数据实体的3种不同表示形式,即数据实体,数据表,映射对象。用户实体是数据库概念设计阶段的产物,表示在系统设计的最初阶段所抽象的基本数据对象,每一个数据实体都包含一些信息段。将数据实体映射为数据表,信息映射为数据表的字段,就形成了数据库中的可表示的对象数据表。数据表由表名和字段表示基本的信息。映射对象是普通的Java类,它用Java类来代表数据实体,类名与表名对应,属性名与表的字段对应,ORM就是数据表与映射对象之间的映射关系。3.3 Hibernate介绍及工作过程3.3.1 Hibernate的组成Hibernate是一个实现了ORM映射的开发框架,主要实现数据库表与Class的映射。主要组成部分有:对应每个数据库表有一个对应的hbm.xml文件和持久化类以及对数据库进行操作的DAO类,Hibernate有一个Hibernate.cfg.xml文件,用来描述数据库的连接信息以及关联这些hbm.xml配置文件,在Hibernate中利用一个Factory辅助类来获得与数据库之间的会话和面向用户的Servers层。1) Hibernate配置文件Hibernate的数据库连接信息是从配置文件中加载的,这要增加了Hibernate和数据库连接信息的灵活性,在配置文件中包含了一系列属性的配置,Hibernate将根据这些属性来连接数据库。Hibernate的配置文件有两种形式:一种是XML格式的文件,一种是Properties属性文件。2)映射文件.hbm.xmlHibernate映射文件包含了对象/关系映射(O/R Mapping)所需的元数据。元数据包含持久化类的声明和属性到数据库的映射(指向字段和其他实体的外键关联)。映射文件是XML格式的文件,它负责持久化类与数据库表之间的映射。其根元素是Hibernate-mapping,并通过属性Package指定类所在的包。每一个表使用一个Class定义,Name表示类的名称,Table表示关联的表名,通过Property子元素来映射类的变量名与数据库表字段名之间的映射。3)持久化类持久化类是指其实例需要被Hibernate持久化到数据库中的类。持久化类通常都是域模型中的实体或类,一般都是一张数据库表对应一个持久化类。但并不是所有的持久化类的实例都是持久化状态。Hibernate使用简单的Java对象(Plain old java objects,就是POJOS)这种编程模型来进行持久化,一个POJO很像一个JavaBean,通过Getter和Setter方法访问其属性,对外则隐藏了其内部实现的细节。4)辅助类:HibernateSessionFactryHibernate的Session是一个持久化管理器,我们通过它来从数据库中存取数据,我们需要通过SessionFactory获取一个Session:SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();通过对Configure()的调用来装载Hibernate.cfg.xml配置文件,并初始化成一个Configuration实例,然后通过这个实例来获得Session的一个生成器。通过Session我们就可以进行和数据库之间的会话。5)DAO类:DAO类存在于Project的DAO层,就是数据访问接口,为了基于Hibernate的开发中,通常将业务层与数据层分开,DAO层只负责调用Hibernate API实现对数据库的操作,Servers层面向用户负责调用DAO层的代码,这样数据层的代码不用关心业务服务,可以更好的实现移植。6)Servers层:Servers层即服务层,就是面向用户服务,它定义的方法都是与实际的业务相关的,通过调用DAO层的方法来实现与数据库的交互。3.3.2 Hibernate的工作过程当需要与数据库进行的交互时,用户将需要处理的数据封装到数据持久化类,但这是这个类并没有被持久化,通过Hibernate的Transction接口开启事务处理过程,将含有数据的类持久化,即与数据库中的数据建立映射关系,然后通过Transction的Commit方法将持久化类中的数据与数据库中的数据进行同步,然后关闭会话Session,此时,实例化对象的状态由持久转变为脱管,Hibernate的工作过程如图3-2:DatabaseApplicationHibernatePersistent ObjectHibernate.cfg.xml.hbm.xmlDAO图3-2第四章系统功能的实现及部署4.1 系统概述随着信息网络技术的应用,目前许多政府部门、企事业单位已建立局域网络,并直接与internet相连接。为了充分发挥网络的作用,提高办公处理效率,建设自己的财务报销系统系统是非常方便。本系统采用动态WEB构建技术,使得系统客户端无须维护,适应性强,使用与企事业、政府机关等单位网络环境使用。财务报销系统是企业办公自动化的一部分,企业内部办公网络的内容很多,如公司内部公告信息的发布,文件的管理,员工内部交流信息的发布和共享,个人日程及工作日志的安排,出勤登记。随着信息技术的不断发展以及互联网技术的日益成熟,使远程办公成为可能。你无论身处何地,只要有上网条件就可以利用网上办公系统,及时有效地对各种文件、单据进行处理,同时也将彻底摆脱桌面上沉沉繁杂的纸张文件,使得繁重的工作变得轻松自如,极大地提高工作效率。4.2 系统分析4.2.1 需求分析要求系统具有以下功能: 用户: 提交记录的管理 已报销记录的管理 未报销记录的管理 申请中的记录的管理管理员: 对用户进行管理 对用户提交的记录进行管理4.2.2 可行性分析通过财务报销系统对企业日常财务报销进行管理,满足了企业日常管理的需求,实现了企业员工和企业之间消息的发送与接收功能,大大的方便了企业内部的沟通与企业的交流。4.3 系统设计4.3.1 总体设计系统的工作流程如图4-1:员工登录已注册提交记录申请中的未报销已报销退出注册登记NY图4-14.3.2 详细设计1. 注册:新用户要使用此系统必须进行注册,系统会检查用户选择的用户名是否已经被使用,若被使用则提示用户更换用户名。2. 登录:用户要进入系统必须进行登录,系统检查用户名和密码是否正确,若正确则成功进入系统,否则提示错误信息。3. 提交管理:用户登录成功时系统同时会检查此用户所有的提交记录。 4. 未报销:系统将显示当前所有的未报销的信息,用户可以选择信息进行查看,用户也可以添加信息,并且可以删除记录信息。5. 申请中的:登录用户可以看到所有的管理员没有报销的信息,并可以有选择的进行查看,用户可以添加会议信息,并且可以删除,删除时系统会检查信息的发布者,若为当前用户则删除成功,否则提示错误信息,并不能够删除。6.管理员:用户可以利用此系统进行用户管理,包括查看、用户的提交记录删除用户和对应的提交记录。12.数据库设计:用户表如图4-1:图4-1mysql desc user;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| id | int(10) | NO | PRI | NULL | auto_increment | username | varchar(50) | YES | | NULL | | password | varchar(50) | YES | | NULL | | sex | varchar(2) | NO | | NULL | | email | varchar(50) | YES | | NULL | | icq | varchar(20) | YES | | NULL | | mobile | varchar(20) | YES | | NULL | | postcode | varchar(6) | YES | | NULL | | address | varchar(100) | YES | | NULL | |+-+-+-+-+-+-+9 rows in set (0.28 sec)管理员表如图4-2:mysql desc admin;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| id | int(10) | NO | PRI | NULL | auto_increment | name | varchar(50) | YES | | NULL | | password | varchar(50) | YES | | NULL | |+-+-+-+-+-+-+3 rows in set (0.06 sec)图4-2Pay表mysql desc pay;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| id | int(11) | NO | PRI | NULL | auto_increment | userid | int(11) | YES | | NULL | | bumen | varchar(40) | YES | | NULL | | money | int(40) | NO | | NULL | | project | varchar(40) | YES | | NULL | | message | varchar(40) | YES | | NULL | | addtime | varchar(40) | YES | | NULL | | feiyon | varchar(40) | YES | | NULL | | istonyi | varchar(1) | YES | | 0 | | isread | varchar(1) | YES | | 0 | |+-+-+-+-+-+-+10 rows in set (0.09 sec)4.3.3 确定并搭建开发环境,并对开发环境进行测试1. 开发语言:Java,Jsp2. 框架:Struts1.2,Hibernate3.0,SiteMesh3. 系统环境:Windows xp SP2,CPU1.73GHz,Memory:1G。4. 开发环境:MyEclipse6.0,Server:Apache的Tomcat6.0,JDK:JDK1.6,Database:Mysql5.0,5.安装开发环境,并编写一个test的模型对系统进行测试。4.3.4系统实现下面能过用户功能的实现来说明Struts和Hibernate的整合过程,并以此来说明整个系统的实现过程。 Hibernate的实现1.建立pay表的持久化类Pay.java,类中的属性与pay表中的字段相对应,并为之添加相应的Getter和Setter方法:private int id;private String bumen;private String addtime;private int userid;private String feiyon;private int money;private String project;private String message;private String isread;private String istonyi;public String getIsread() return isread;public void setIsread(String isread) this.isread = isread;public String getIstonyi() return istonyi;public void setIstonyi(String istonyi) this.istonyi = istonyi;public String getBumen() return bumen;public void setBumen(String bumen) this.bumen = bumen;public String getAddtime() return addtime;public void setAddtime(String addtime) this.addtime = addtime;public int getUserid() return userid;public void setUserid(int userid) this.userid = userid;public String getFeiyon() return feiyon;public void setFeiyon(String feiyon) this.feiyon = feiyon;public int getMoney() return money;public void setMoney(int money) this.money = money;public String getProject() return project;public void setProject(String project) ject = project;public String getMessage() return message;public void setMessage(String message) this.message = message;public int getId() return id;public void setId(int id) this.id = id;2. 建立与pay表与持久化类的描述文件Pay.hbm.xml: 3建立对应的DAO类接口类IPayDao:public interface IPayDao public abstract boolean insertpay(Pay p);public abstract List findPayall();public abstract List findbyid(int id);public abstract void deleteById(int id);public abstract List findaPay(int id);public abstract void updataPay(Pay p);public abstract List findisbaoxiaoPay(int id);public abstract List findshengqingzhonPay(int id);public abstract List findbutonyiPay(int id);PayDao实现IpayDao接口public class PayDao implements IPayDao public boolean insertpay(Pay p)Session session = uti.HibernateSessionFactory.getSession();Transaction tran = null;trytran = session.beginTransaction();session.save(p);mit();return true;catch(Exception ex)tran.rollback();ex.printStackTrace();finallyuti.HibernateSessionFactory.closeSession();return false;public List findPayall()Session session=null;Transaction trans=null;List list=null;trysession=uti.HibernateSessionFactory.getSession();trans=session.beginTransaction();String hql=from Pay;Query query=session.createQuery(hql);list=query.list();mit();catch(RuntimeException ex)trans.rollback();throw ex;finallysession.close();return list;public List findbyid(int id)Session session=null;Transaction trans=null;List list=null;trysession=uti.HibernateSessionFactory.getSession();trans=session.beginTransaction();String hql=FROM Pay as p WHERE p.userid=?;Query query=session.createQuery(hql);query.setInteger(0, id);list=query.list();mit();catch(RuntimeException ex)trans.rollback();throw ex;finallysession.close();return list; public void deleteById(int id) S

温馨提示

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

最新文档

评论

0/150

提交评论