基于java的科研信息管理平台

欢迎添加微信互相交流学习哦!

二维码

项目源码:https://gitee.com/oklongmm/biye

摘要:随着计算机应用水平的提高和科研管理的规范化和制度化,建立一套适用于高校科研管理工作管理信息系统,已经成为各大高校较为迫切的需求。科研信息管理平台主要实现对高校科研情况的有效管理以及对科研活动的全程跟踪。通过科研管理信息化平台,可以实现科研工作的网络化管理,形成一个及时更新的科研数据中心和科研管理沟通平台,全面、实时、准确提供学校的有关科研信息,为学校领导有关科研决策提供辅助支持,为学校教师开展科研活动提供方便快捷的服务,为科研管理人员开展工作提供极大的便利。科研信息管理平台以科研项目管理为中心,包括人员档案、成果管理、设备管理、项目申报、科研评估等多项信息管理职能,涵盖计划、合同、成果、专利、资金、人员、设备等方面,提供科研信息维护、科研信息查询与统计、设备日常管理和维护、校级课题申报、审批、合同签定、结题、其它处理等操作。
本系统是根据目前网络开发中流行的MVC软件工程思想,采用struts框架,通过JSP实现的B/S模式结构的信息平台。成功实现了WEB系统开发的M-V-C的分离,提高了系统开发的效率,为以后系统的维护和扩展带来了方便。系统信息资源通过SQL SERVER数据库进行管理,经由 TOMCAT服务器对外发布,实现了科研信息的发布和维护,人员基本信息的管理和注册,设备信息的管理,项目的申报、审批、结题、鉴定等一系列功能。

关键词:JSP  MVC  Struts  科研管理  项目管理


Management Information System of Scientific Research Based On MVC
          Student name:          Class:05806101
Supervisor:
Abstract: Along with calculator application level of exaltation and research management of the norm turn with systemize, establishment 1 set be applicable to a university research management work management information system, have already become each university more urgent of need. Management information system of scientific research mainly realize scientific research in colleges and universities,as well as realize the management of research activities on track. Management information through scientific research platform, you can achieve the network-based research management, a timely update of the scientific research and scientific management of data center communication platform, a comprehensive, real-time, providing accurate scientific information on schools. For school leaders on the scientific research to support decision-making aids for school teachers to carry out research to provide convenient and efficient service, for research managers to work to provide a great convenience. Management information system of scientific research to manage research projects as the center, including personnel files, results-based management, equipment management, project reporting, scientific research to assess a wide range of information management functions, covering the planning, contracting, results, patents, capital, personnel, equipment, etc., to provide scientific information to maintain, research and statistical information, equipment management and maintenance of day-to-day, colonel issue declaration, examination and approval, contract signing, finished, and other processing operations.    
According to the current popular thinking of the MVC software engineering, the system use struts framework, and through JSP achieved the B / S model of the structure of the information platform. The M-V-C separation of the WEB system development has successfully realized. Enhanced the system development efficiency and for the system test, as well as the later maintenance and the expansion is convenient. The system information resource database carries on the management through the SQL SERVER ,by way of TOMCAT server foreign issue. The realization of the scientific information, and maintenance, management of basic information and registration, equipment, information management, project reporting, approved and finished, to identify a series of functions.

Key Words: JSP  MVC  Struts  management of scientific research  project management

 
 

目录
毕业设计(论文)    1
摘要    2
Abstract    3
1 前言    5
1.1科研信息管理系统的介绍    5
1.2科研信息管理系统的特点    5
1.3 关于本课题    5
2 相关技术介绍    5
2.1 开发平台    5
   2.1.1  Myeclipse    5
   2.1.2  TOMCAT    5
   2.1.3  JDK    5
2.2 开发技术    5
   2.2.1  JSP    5
   2.2.2  MVC    5
   2.2.3  Struts    5
3 需求分析    5
3.1 功能需求    5
   3.1.1  人员管理模块    5
   3.1.2  论文管理模块    5
   3.1.3  著作管理模块    5
   3.1.4  科研项目管理模块    5
   3.1.5  设备管理模块    5
3.2 运行环境需求    5
   3.2.1  系统软件环境的建议配置    5
   3.2.2  系统硬件环境的建议配置    5
3.3 界面设计    5
   3.3.1  界面操作需求    5
   3.3.2  界面功能需求    5
4 数据库设计    5
4.1  概念结构设计    5
4.2  逻辑结构设计    5
4.3  数据库实施    5
5系统实现    5
5.1  数据库的连接    5
5.2  数据库操作的实现    27
5.3  功能模块的实现    29
5.4  系统安全    33
6 总结    5
7 参考文献    5
8 致  谢    36

 
1 前言
1.1科研信息管理系统的介绍
当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统环境原因。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
高校的科研水平和科研规模日益成为反映高校综合实力的重要指标。随着国家对高校科研的投入不断增加,各高校也越来越重视自身的科研管理。每年高校在科研活动中产生的论文、著作、专利、项目、获奖等科研管理数据不断变得庞大。传统的依赖手工或者借助Excel等办公软件所进行的科研管理变得日益艰难。以往,科研人员对文章、文件处理的主要方式是基于文本、表格等纸介质的手工处理,对于科研人员的基本情况的记录往往采用手工的记录来进行,对科研信息的处理也是通过人工计算、统计、查询、手抄等来进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统、规范的信息管理手段。尽管有的高校里有计算机,但是都是独自为体,尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,于是高校科研管理的信息化建设被提高了日程上来。
科研活动是高校一项非常活跃的内容。科研与教学工作向来是相辅相成的,以科研促教学,以科研拉动学校、学科的发展已成为高等院校办学的一项基本战略,它体现了高校发展的综合实力。因此,科研管理信息化是高校管理信息化的重要组成部分。
显然,需要有一套行之有效的手段来对高校的科研项目及发表论文进行管理。到目前为止,高校的科研管理一直采用人工管理的方式,并无一套成文的管理规范,也没有相应的专职管理人员,只有当上级部门发文要求统计项目或论文情况时才由有关人员查阅本校的各种相关文档,人工进行统计并制作报表。这种落后管理的弊端是显而易见的。高校科研管理系统优化科研环境和资源配置,使科研成本最小而效益最大化,从而提高科研实力和竞争力,培养高层次人才,服务社会经济发展。
高校科研管理信息系统通常包括科研人员信息管理、科研项目管理、科研成果管理、学术交流管理、业绩考核管理等,实现系统性、关联性、即时性、针对性等特点。为用户提供针对各项目进行管理的操作,提高了信息检索的效率,实现灵活的查询;减轻管理人员手工制作报表、统计分析的负担;提高了高校管理科研管理的效率。它将有助于管理人员从烦琐的管理工作中解脱出来,使管理系统化、条理化,能迅速获得感兴趣的信息,从而提高管理水平。
1.2科研信息管理系统的特点
1、基于Struts模式下的WEB信息系统,具有良好的可扩展性,以满足将来管理系统的发展需求。
2、广泛的科研资源信息共享,为用户提供高效、简便的电子化办公,足不出户便可查阅信息,实时了解科研情况。
3、需要大量的处理信息资源,包含很多的信息数据的管理,同时对科研信息进行计算、统计和查询。
4、具有较高的安全性和易维护性。
1.3 关于本课题
本系统主要包括以下几个功能模块:人员管理、著作管理、论文管理、项目管理、设备管理。用户和管理员成功登录后,根据相应的权限,进行数据的录入、删除及更新,录入和更新时包括对数据的正确性校验;据各种查询条件进行模糊查询;任意一个业务成功办理以后,系统会提示业务办理成功。
 
图1  科研信息管理功能结构图
2 相关技术介绍
2.1 开发平台
2.1.1  MyEclipse
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
 1. J2EE模型
 2. WEB开发工具
 3. EJB开发工具
 4. 应用程序服务器的连接器
 5. J2EE项目部署服务
 6. 数据库服务
 7. MyEclipse整合帮助
    对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。MyEclipse是一个专门为Eclipse设计的商业插件和开源插件的完美结合,MyEclipse为Eclipse提供了一个大量私有和开源的Java工具的集合,很大程度上解决了各种开源工具的不一致和缺点问题,并大大提高了Java和JSP应用开发的效率。MyEclipse的实际价值来自其发布的大量的可视化开发工具和实用组件。
2.1.2  TOMCAT
Tomcat是Sun的JSWDK(JavaServer Web Development Kit)中Servlet的运行环境(servlet容器),Tomcat是一个JSP/Servlet容器,它是在SUN公司的JSWDK(Java Server Web Development Kit)基础上发展起来的一个JSP和Servlet规范的标准实现,使用Tomcat可以体验JSP和Servlet的最新规范。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,可以和大部分主流HTTP服务器一起工作,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
     Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
     Tomcat服务器不但支持运行Servlet和JSP而且还具备了作为商业Java Web应用容器的特征,除了能够运行Servlet和JSP外,还具备了作为WEB服务器的特有功能。
     Servlet容器它是一个组件,这个组件运行在服务器上(运行在服务器上做什么?常见的是扩展此服务器的功能,提供CGI替代品),并且这个服务器支持JAVA语言,Servlet容器是一个动态加载的模块,为WEB客户请求提供服务。Tomcat作为Servlet容器,它就成了WEB客户和Servlet两者中间的桥,即:Tomcat把客户请求,传给Servlet,Servlet处理用户请求,把结果给Tomcat,Tomcat再把结果传给客户.
     Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
2.1.3  JDK
JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。它是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。
    JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品,是开发Java的应用基础,Eclipse的运行也要依赖它。
JDK包含的基本组件包括:
  1、javac – 编译器,将源程序转成字节码 
  2、jar – 打包工具,将相关的类文件打包成一个文件 
  3、javadoc – 文档生成器,从源码注释中提取文档 
  4、jdb – debugger,查错工具
2.2 开发技术
2.2.1  JSP
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页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页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
2.2.2  MVC
2.2.2.1  MVC模式简介
MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。
MVC由Trygve Reenskaug提出,是Xerox PARC在20世纪80年代为程序语言Smalltalk-80发明的一种软件设计模式。模型—视图—控制器模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外此模式通过对复杂度的简化使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:控制器- 程序员编写程序应有的功能(实现算法等等);视图 - 界面设计人员进行图形界面设计;模型 - 数据库专家进行数据管理和数据库设计。
2.2.2.2  MVC模式工作原理
模型(Model):“数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权利,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。
视图(View):视图层能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

 
图2. MVC设计模型
2.2.3  Struts
Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
 
图3. Struts的工作原理
在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm Bean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。
在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。
3 需求分析
3.1 功能需求
3.1.1  人员管理模块
人员管理模块包含了添加职工信息、修改职工信息、删除职工信息、职工信息查询和密码修改等子功能模块。
教师、科研人员以职工号和密码登陆系统后,只能管理本人的信息,可以对本人的信息进行查看和修改密码。用户修改密码时若输入的旧密码不正确、两次输入的新密码不一致、验证码输入错误则无法修改密码。
管理员添加和修改用户信息时必须填入职工号、职工姓名、性别、部门、联系电话等信息,若添加的职工号或联系电话数据库中已存在,则添加信息失败,反之成功添加,登陆密码为123456。管理员可删除已离职职工信息,亦可根据查询条件模糊查询全校职工的信息。
3.1.2  论文管理模块
论文管理模块包含了发表论文、修改论文信息、删除论文信息、查询论文信息等子功能模块。
教师、科研人员可以发表论文,其中论文名称和所发表期刊的名称不能为空,发表论文成功后,数据库中作者发表的论文次数加一;可以修改个人的论文信息和删除个人的论文;可模糊查询校内的论文信息。
管理员可以对教师、科研人员所发表的论文信息进行修改、删除和查询等操作,但不能修改论文的作者信息。
3.1.3  著作管理模块
著作管理模块包含了添加著作信息、修改著作信息、删除著作信息、查询著作信息等子功能模块。
教师、科研人员可以录入著作的基本信息,其中著作名称、著作编号、出版社不能为空,发表著作成功后,数据库中作者发表的著作次数加一;可以修改个人的著作信息和删除个人的著作;可模糊查询校内的著作信息。
管理员可以对教师、科研人员所发表的著作信息进行修改、删除和查询等操作,但不能修改著作的作者信息。
3.1.4  科研项目管理模块
科研项目管理模块包含了申报项目、审核项目、项目结题、项目鉴定、删除未批准项目、项目信息查询等子功能模块。
教师、科研人员可以申报项目,必须填写项目编号、项目名称、项目类别、立项时间、完成时间、申请经费等基本信息,申请人即为负责人,添加项目组成员信息时若为校内人员必须填写职工号,如果查无此职工号则添加失败,可添加多个小组成员;项目未批准时可删除个人申报的项目信息;可模糊查询校内的项目信息。
管理员可以查询校内的项目信息;审核未批准的项目,项目一旦立项后不可删除;填写项目结题信息;完成项目的鉴定。
3.1.5  设备管理模块
设备管理模块包含了添加设备信息、修改设备信息、删除设备信息、查询设备信息等子功能模块。
管理员可以添加设备信息,必须填写设备编号、设备名称、型号、购入地、购入时间等基本信息;可查询校内的设备信息状况;可修改设备的信息;可删除已坏设备的信息。
3.2 运行环境需求
3.2.1  系统软件环境的建议配置
软件环境如下表所示:
软件名称    要  求
操作系统    Windows XP
Web服务器    Tomcat 5.5
数据库    SQLSever 2000
JDK    JDK 5.0
Web浏览器    Microsoft Internet Explorer 6.0
3.2.2  系统硬件环境的建议配置
硬件环境如下表所示:
硬件名称    要  求
CPU    使用586或更高级别的处理器
内寸    128M或更高
硬盘    80G以上
显示器    VGA显示器
分辨率    1024 * 768
以上只是基本的配置,建议在运行系统时使用当前中等级以上的计算机,这样配置运行效果为佳。
3.3界面设计
3.3.1  界面操作需求
考虑到科研信息管理系统有大量的科研信息需要处理、统计,用户使用和管理界面整体要美观、简洁和实用,管理信息显示清晰明白。用户的操作要简易方便,过程简单,不会因操作麻烦而引起严重的错误。
3.3.2  界面功能需求
本系统主要实现的界面如下:
1.职工登陆界面
2.添加、修改、删除、分页显示职工信息和修改密码的界面
3.添加、修改、删除、分页显示论文信息的界面
4.添加、修改、删除、分页显示著作信息的界面
5.添加、删除、分页显示项目信息和管理项目的界面
6.添加、修改、删除、分页显示设备信息的界面
7.操作成功提示界面
4 数据库设计
4.3 数据库实施 
4.3.1    创建触发器
1.    于employee表上分别创建creatlogin和deletelogin触发器,creatlogin触发器用于新增职工信息时在登录表中插入职工的登录信息,初始密码123456;deletelogin触发器用于删除离职职工信息时同时从login表中删除该职工的扥录信息;具体语句如下:
CREATE TRIGGER [creatlogin] ON [dbo].[employee] 
AFTER INSERT 
AS
BEGIN
            declare @emno varchar(8)
    select @emno=inserted.eid from inserted
    INSERT INTO login VALUES(@emno,'25D55AD283AA400AF464C76D713C07AD','3');
END;
CREATE TRIGGER [deletelogin] ON [dbo].[employee] 
AFTER DELETE 
AS
BEGIN
            declare @emno varchar(8)
            select @emno=deleted.eid from deleted
    DELETE FROM login WHERE eid = @emno;
END;
2.    于paper表上分别创建addamount和deletepaper触发器,分别用于作者发表论文或删除论文时其个人信息的论文数量相应增1或剪1,具体语句如下:
CREATE TRIGGER [addamount] ON dbo.paper 
AFTER INSERT
AS
BEGIN
            declare @emno varchar(8)
            select @emno=inserted.author from inserted
            UPDATE  employee SET pamount = pamount+1 WHERE eid = @emno;
END;

CREATE TRIGGER [deletepaper] ON dbo.paper 
AFTER DELETE 
AS
BEGIN
            declare @emno varchar(8)
            select @emno=deleted.author from deleted
            UPDATE employee SET pamount = pamount-1 WHERE eid = @emno;
END;
3.    于book表上分别创建addbook和deletebook触发器,分别用于作者发表著作或删除著作时其个人信息的著作数量相应增1或剪1,具体语句如下:
CREATE TRIGGER [addbook] ON [dbo].[book] 
AFTER INSERT
AS
BEGIN
            declare @emno varchar(8)
            select @emno=inserted.author from inserted
            UPDATE  employee SET bamount = bamount+1 WHERE eid = @emno;
END;

CREATE TRIGGER [deletebook] ON [dbo].[book] 
AFTER DELETE 
AS
BEGIN
            declare @emno varchar(8)
            select @emno=deleted.author from deleted
            UPDATE employee SET bamount = bamount-1 WHERE eid = @emno;
END;
5 系统实现
5.1数据库的连接
经公共类SqlConn的Getconnection()方法与数据库连接。
public class SqlConn {
    private static final String driver="sun.jdbc.odbc.JdbcOdbcDriver";
    private static final String datasource="jdbc:odbc:jin";
     public static Connection Getconnection()throws SQLException{
         Connection conn=null;
            try{
                Class.forName(driver);
            }catch(ClassNotFoundException ce)
            {
                System.out.println(ce.getMessage());
            }
            try{
                conn=DriverManager.getConnection(datasource);     
            }catch(SQLException e){
                System.out.println(e.getMessage());
            }
            return conn;
     }
}
5.2 数据库操作的实现
以项目管理模块为例,ItemInfoDAO抽象接口,高度抽象并仅提供有限的几个公有方法,涵盖所有对项目表item内数据的存取操作,包括新增、查询、更新、删除。
public interface ItemInfoDAO {
    
    public abstract boolean Update(ItemInfoVo iiv);
   //update涵盖了所有对项目表item的更新操作,不同的操作由iiv指定并
//由相应接口实现
public abstract ArrayList<ItemInfoVo> Search(InfoSearchVo isv);
    //search涵盖了所有对项目表item的查询操作,以isv指定的查询条件查
//询,返回 ArrayList结果
    public abstract boolean Delete(ItemInfoVo iiv);
    //delete所有对项目表item的删除操作
    public abstract int checkadd(ItemInfoVo iiv);
    //checkadd涵盖了所有对项目表item的检查数据是否合法,若合法则插
//入的操作
}
类ItemInfoDAOImpl实现了ItemInfoDAO抽象接口,实现了接口的所有抽象方法。
申报项目时AddItemInfoAction调用DaoFactory.getItemInfoDAOInstance.checkadd(iiv)进行新增操作,并据返回的值判定数据是否成功插入,转入相应的界面,其中iiv为ItemInfoVo类对象,ItemInfoVo封装了项目item表内的所有字段。
public class AddItemInfoAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
….
    int message=DAOFactory.getItemInfoDAOInstance().checkadd(iiv);
        //信息检查是否合法
        if(message==0)//信息合法
        {
            request.getSession().setAttribute("iid",iiv.getIid());
            return mapping.findForward("addmemberinfo");
        }
        else if(message==1)//项目编号已存在
        {
            errors.add("iid", new ActionMessage("iid.error"));
            saveErrors(request,errors);
            return mapping.findForward("additeminfofail");
        }
        else if(message==2)//项目名称已存在
        {
            errors.add("iname", new ActionMessage("iname.error"));
            saveErrors(request,errors);
            return mapping.findForward("additeminfofail");
        }
        else//其他错误
        {
            errors.add("all", new ActionMessage("all.error"));
            saveErrors(request,errors);
            return mapping.findForward("additeminfofail");
        }
其中DaoFactory类也可获得其它实现了抽象接口的工厂类,可实现对数据库中的其他的表进行数据操作,如新增、查询、更新、删除。
public class DAOFactory {
    
..….
public static PersonDAO getPersonDAOInstance()
    {
        return new PersonDAOImpl() ;
    }
    
    public static BookInfoDAO getBookInfoDAOInstance()
    {
        return new BookInfoDAOImpl() ;    
    }
    
    public static ItemInfoDAO getItemInfoDAOInstance()
    {
        return new ItemInfoDAOImpl();
    }
    
}
5.3 功能模块的实现
5.3.1  登陆
用户经如登陆界面login.jsp填写职工号、密码、登陆类型和验证码,登陆表单提交之前,调用LoginForm的validate进行表单验证,若数据合法则转向相应的LoginAction,反之转向登陆页面显示错误信息。
public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        String random2 = request.getSession().getAttribute("random").toString();
        if (this.eid == null || "".equals(this.eid)) {
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("eid.null"));

        } else if (this.eid.length() != 8) {
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("eid.length"));
        } else if (this.pwd == null || "".equals(this.pwd)) {
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(pwd.null"));

        } else if (this.pwd.length() < 5 || this.pwd.length() > 16) {
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("pwd.length"));
        } else if (this.random == null || "".equals(this.random)) {
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("random.null"));
….
LoginAction据用户所填写的表单数据,调用DAOFactory.getPersonDAOInstance().Login(per),查询数据库中用户是否具有合法身份,若合法则转向相应权限的界面,否则转向错误提示界面。
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        ActionMessages errors = new ActionMessages() ;  //错误消息封装类
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
        String eid = loginForm.getEid() ;  //获取帐号
        HttpSession session=request.getSession();
        MD5_Encoding md5=new MD5_Encoding();  //密码封装类
        String pwd=md5.getMD5ofStr(loginForm.getPwd());    //获取密码
        String type=loginForm.getType();//获取权限
        PersonVo per = new PersonVo();
        per.setEid(eid);
        per.setPwd(pwd);
        per.setType(type);
        String[] path={"login","school","college","teacher"};
        if(true== DAOFactory.getPersonDAOInstance().Login(per))
        {
            // per所封装的数据合法
            session.setAttribute("eid",eid);
            session.setAttribute("name",per.getName());
            session.setAttribute("type",type);
            session.setAttribute("depart", per.getDepart());
            loginForm.setEid("");
            loginForm.setPwd("");
            loginForm.setType("1");
            //FORM表单重置
            return mapping.findForward(path[Integer.parseInt(type)]);
            //跳转对应界面
        }
        else{
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
            "login.error"));
            saveErrors(request,errors);
            return mapping.findForward(path[0]);//跳转错误界面
            }
    }
5.3.2  项目申报
教师进入项目申报界面additeminfo.jsp,并填写相关信息提交表单后,由AddItemInfoForm进行验证,如果数据不合法转向项目申报界面并提示错误信息,反之AddItemInfoAction据所提交表单数据调用DaoFactory.getItemInfoDAOInstance.checkadd(iiv)进行新增项目操作,并据返回的值判定数据是否成功插入,转入相应的界面。
5.3.4  查询项目信息
用户进入项目查询界面,由SearchItemInfoAction据SearchForm的searchtype和searchname属性值调用DAOFactory.getItemInfoDAOInstance().Search(isv)获得信息查询结果并设置于session的list属性中,据struts-config.xml 文件配置转向分页处理PageListAction。获得当前页的结果集合设置于session的sublist属性中,转向相应显示页面,通过标签库中的logic、bean等标签显示结果。
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        ArrayList list=(ArrayList) request.getSession().getAttribute("list");        
        int pagenumber = 0;
        if ("".equals(request.getParameter("pagenumber"))
                || null == request.getParameter("pagenumber")) {
            pagenumber = 1;
            
        } else {
            pagenumber = Integer.parseInt((String) request
                    .getParameter("pagenumber"));
        }    

        String[] path={"search","searchpaper","searchbook","searchitem"};
        String search = (String) request.getSession().getAttribute("search");
        //判断是否为空,若为空,则提示无记录,若不为空,则分页显示
        if (list.size() == 0) {
            request.setAttribute("sublist", list);
            return mapping.findForward(path[Integer.parseInt(search)]);
        } else {

            ListPage listpage = new ListPage(list, pagenumber, 5);
//新建ListPage类的实例化对象listpage
            int lastpagenumber = listpage.getLastPageNumber();
            if (pagenumber >= lastpagenumber) {
                pagenumber = lastpagenumber;
            }
            List sublist = (List) listpage.getThisPageElements();
//调用listpage.getThisPageElements()方法获取当前页的查询结果集合
            request.getSession().setAttribute("lastpagenumber", lastpagenumber);
            request.getSession().setAttribute("pagenumber", pagenumber);
            request.getSession().setAttribute("sublist", sublist);
            return mapping.findForward(path[Integer.parseInt(search)]);
        }
    }
5.3.5  项目审核
管理员进入某个项目的详细查看界面后,选择审批项目时转向ItemInfoAction将该项目的详细信息设置于session属性中以便转向审核页面时提供项目信息,填写审核信息后提交表单,由UpdateItemInfoAction据UpdateItemInfoForm表单中的属性值调用DAOFactory.getItemInfoDAOInstance().Update(iiv),修改该项目的进度信息,据返回值转向相应的界面。
5.3.5  项目删除
教师或管理员选择删除某个未审核项目时,DeleteIntemInfoAction据request对象所传的项目编号属性调用DAOFactory.getMemberInfoDAOInstance().Delete(miv)删除该项目组成员信息,在调用DAOFactory.getItemInfoDAOInstance().Delete(iiv)删除该项目的基本信息,struts-config.xml 文件配置转向相应的界面
5.4 系统安全
5.4.1登陆安全
经登录过滤器LoginFilter使未经登陆页面正常登陆,而是从浏览器地址栏中输入地址的人员不能登陆本系统,跳转回登陆界面。
public class LoginFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        HttpSession session = req.getSession();
        if (null == session.getAttribute("eid")
                || "" == session.getAttribute("eid")) {
            resp.sendRedirect(req.getContextPath() + "/login.jsp");
        }else {
            chain.doFilter(request, response);
        }//据session中的职工号属性是否为空判定用户是否正常登陆
    }
5.4.2  密码安全
用户登入填写密码后提交由LoginAction调用MD5_Encoding类的getMD5ofStr()方法对密码进行封装,防止他人知道用户密码的原文。
6 总结
经过几个月的设计和开发,基于MVC思想的科研信息管理平台基本完成,所实现的功能基本符合需求,能够完成论文、著作等成果的发表,查询科研信息和管理,申报项目,项目管理,设备管理,职工信息的管理等。但该系统还有许多不够完善的地方,系统实现的功能较简单,用户界面不够美观,出错处理不够等多方面问题,这些都有待进一步改善。
毕业设计中,使我提高了实际操作能力,增加了开发系统的经验,对MVC思想的了解和Struts框架的应用有了更深层次的掌握,初步了解了抽象工厂的工作原理,从以前的理论上升到实践,真正做到学有所用,懂得如何发现问题,分析问题,解决问题。虽然在设计过程中我也遇到一些困难,但在老师的悉心帮助和自己的努力下,我都认真克服了,虽然并没有做到尽善尽美,应该说这是一大遗憾吧,但我相信这段经验的宝贵收获使我终身受益。
 

猜你喜欢

转载自blog.csdn.net/weixin_55459367/article/details/113924337