jsp实训报告

时间:2024.4.14

西安电力高等专科学校

实训任务书


目 录

第一章 前言................................................................................................................. 1

1.1管理系统的背景与意义...................................................................................... 1

1.2化管理系统的功能特性...................................................................................... 1

1.3 本文的关键问题及难点..................................................................................... 2

第二章 背景的介绍...................................................................................................... 4

2.1J2EE简介......................................................................................................... 4

2.1.1 架构模式选择............................................................................................. 4

2.1.2 视图层的选择............................................................................................. 5

2.1.3 控制层的选择............................................................................................. 6

2.1.4 模型层的选择............................................................................................. 7

第三章管理系统员工模块的需求分析............................................................................ 8

3.1 需求分析.......................................................................................................... 8

3.1.1功能需求规定.............................................................................................. 8

3.1.2 对输入参数的要求...................................................................................... 8

3.1.3故障处理要求.............................................................................................. 8

第四章化管理系统员工模块的详细设计........................................................................ 9

4.1 功能模块需求................................................................................................... 9

4.2 类图............................................................................................................... 11

4.3 模块结构图.................................................................................................... 12

4.3 数据流程图.................................................................................................... 13

4.4 模块数据结构设计.......................................................................................... 13

4.5 系统出错处理设计.......................................................................................... 15

4.5.1 出错信息.................................................................................................. 15

4.5.2 补救措施.................................................................................................. 15

第五章管理系统员工模块的实现和测试....................................................................... 16

5.1 办公自动化管理系统的实现............................................................................ 16

5.1.1 JavaBean的设计......................................................................................... 16

5.1.2视图层的设计与实现.................................................................................. 16

5.1.3员工管理模块............................................................................................ 18

5.1.4 管理员登录............................................................................................... 27

第六章 总结与展望.................................................................................................... 34

6.1 全文总结........................................................................................................ 34

6.2 展望............................................................................................................... 34

结束语........................................................................................................................ 35

 

第一章 前言

在科技迅猛发展的今天 Internet/Intranet被广泛的使用在各个行业中,企业的管理也随之发展,信息化的程度也随之增长,同时以往的办公管理模式已经无法适应企业的需求,企业对办公的效率要求越来越高,因此就需要一个现代化的办公管理方案来解决企业的这个问题。企业办公正在逐步迈向管理信息现代化。企业办公信息化基础设施建设的逐渐完备,改革传统办公模式开展电子政务,使业务办公、公文流转和管理过程电子化、信息化,让文职人员从长期繁杂的办公事务中解放出来,通过统一办公规范,提高工作效率,降低管理成本,实现办公自动化已势在必行。

1.1管理系统的背景与意义

办公自动化管理系统是将现代办公和计算机网络功能结合起来的一种新型的办公方式,是信息化社会的产物。办公自动化系统可以将一个机构的办公用的计算机和其他办公设备连接成网络,这样可以为办公室工作人员和企事业负责干部提供各种现代化手段,从而改进办公条件,提高办公业务的效率和质量,及时向有关部门和领导提供有用的信息。OA起源于政府办公系统,当初的作用主要是公文收发,如今核心内容是提高办公效率、提高团队的整体作战能力以及有效的提供应用信息与素材,从而提高管理水平。广义而言,OA应该是一个企业除了生产控制之外的一切信息处理与管理的集合。它面向不同层次的使用者,有不同的功能表现。通过网络,组织机构内部的人员可跨越时间、地点协同办公。建立一个安全、可靠、开放、高效的办公自动化、信息管理电子化系统。为管理部门提供现代的日常办公条件及丰富的综合信息服务,实现档案管理自动化和办公事物处理自动化,实现企业各内部日常业务工作的规范化、电子化、标准化,增强档案部门文书档案、人事档案、财务档案等档案的可管理性,实现信息的在线查询、借阅。最终实现“无纸”办公,使信息的传递更加快捷和方便,从而极大的扩展了办公手段,实现了办公的高效率。

1.2管理系统的功能特性

办公自动化管理系统对企业日常办公进行管理,实现企业员工之间的消息的发送与接受功能,大大地方便了企业内部人员沟通。同时网站提供的前后台的公告与公文信息的管理,方便员工及时了解公司的动态,与其他功能模块联机操作将使企业的日常管理步入科学系统的管理轨道。

此办公自动化管理系统由前台管理和后台管理两大部分组成。

此办公自动化管理系统有三个功能模块:公告管理、员工管理、部门管理3个模块。

3大功能模块分别是:

1)  公告管理模块:主要完成公告的发布、查看。

2)  员工管理模块:主要完成添加员工、查找员工、浏览员工信息。

3)  部门信息管理模块:主要完成查看职位、部门信息。

本次毕业设计我负责的是员工管理模块,员工管理模块是系统的重要模块,主要是和员工相关的业务功能,具体功能描述如下:

添加员工信息:管理员可以注册添加员工的信息。

查找员工信息:通过输入员工ID号可以查找员工的信息。

浏览员工信息:可以浏览员工的信息。

1.3 本文的关键问题及难点

我们的毕业设计项目是基于J2EE的web项目,同时也是采用JSP + JavaBean + Servlet模式。因此针对此项目涉及到一些关键问题:

1、JSP + JavaBean + Servlet环境配置问题,环境变量的设置:变量名java_path、path、classpath的追加,Tomcat的配置:变量名tomcat_home classpath的追加。环境变量的设置和Tomcat的配置对初学者来说又是比较头疼,但配置好了很重要。

2、集成开发环境选择的问题,好的开发环境对编码效率提高很多。MyEclipse本身集成了非常实用的插件并且支持主流框架,是一个非常好用的集成开发环境,所以我们组选MyEclipse作为毕业设计的集成开发环境。服务器的选择我们选Tomcat作为系统的服务器,轻量级的服务器Tomcat对于小型应用是个不错的选择。

3、逻辑结构设计本系统数据库采用SQL Server 20## 数据库,系统数据库名称为OA_Data。数据库OA_Data中包含5张表。数据表有bumf(公文信息表)、department(部门信息表)、eminfo(员工信息表)、job(职位表)、password(用户信息表)。当主键表中的数据发生改变时,引用这个主键值的字段也随之改变,进而确保数据的一致性和完整性。


第二章 背景技术的介绍

2.1J2EE简介

J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)以及XML技术的全面支持。

1)多平台部署:可跨平台部署,在安全稳定的大型操作系统Unix上使用。

2)平台应用成熟度高:J2EE技术发展时间较长,成熟度高,有大量的案例和开发应用。

3)开发思想体系成熟:RUP,UML,ROSE等于J2EE的结合更紧密,.NET与这类开发哲学不够融合。

4)安全可靠:J2EE平台的成熟度以及跨平台特性赋予了它安全可靠的天性。

5)开放性:开源社区丰富,可用的开源框架很多。

现如今的电子商务领域的技术对比:

J2EE平台:阿里巴巴,淘宝,EBay

.NET平台:当当网

由于J2EE可跨平台,可以在不同的操作系统下运行,因此系统更具有安全性,此外通过对开源技术的运用还有助于提升自己的技术,并且J2EE平台能和RUP理论很好的结合起来,所以选择J2EE平台是比较理想的选择。

2.1.1 架构模式选择

为了实现让系统更加灵活,更具有可扩展性,就必须使系统做到高内聚低耦合,那么降低模块与模块间的耦合呢?

要降低耦合,模块的功能划分尽可能的单一,道理也很简单,功能单一的模块供其他模块调用的机会就少。那么如何才能做到模块功能化单一呢?MVC设计模式很好的解决了这个问题。通过MVC的分层很好的将每一层的职责划分明确。那么MVC究竟是什么设计模式呢?

MVC包括三类对象:

1.模型(Model)对象:是应用户层序的主体部分。

2.视图(View)对象:是应用程序中扶着生成用户界面的部分。

3.控制器(Control)对象:是根据用户的输入,控制也能过户界面数据显示以及更新Model对象状态的部分。

它们之间的关系和各自的主要功能,如图2.1:

图2.1 MVC结构图

模型对象是软件处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体界面表达和I/O操作。

视图对象把表示模型数据以及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。

控制对象是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现模型的计算控制,是使模型和视图协调工作的部件。通常一个视图有一个控制器。

MVC有以下优点:

1.  可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图即使得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。

2.       视图与控制器的可接插性,允许更滑视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。

3.       模型的可移植性。因为模型是独立于视图的,所以把一个模型独立地移植到新的平台工作。需要做的只是在心平台上对视图和控制器进行新的修改。

4.       潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅使用在界面的设计中。

总而言之,MVC模式不仅仅实现了功能模块和现实模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。

由此可见,MVC正符合我们设计的需要,它很好的解决了模块间的耦合,提高了系统的可维护性和系统的可移植性。

2.1.2 视图层的选择

视图层又叫表示层,表示成的责任是显示,在开源框架里Struts,Struts2,还有JSF都是view,无疑都是很好的选择。这里我们选择Struts2结合JSTL来实现表示层,简单的介绍一下Struts和JSTL。

Struts2为Apache组织下的一个开源框架,Struts2框架作为Struts1.x框架的替代技术,相对Struts1.x来说,有着本质上的改变,Struts2框架是从WebWork框架发展而来的。struts2框架技术整合了Struts1.x和WebWork的优点,Struts2框架最大的特点就是简单性,引入了OGNL表达式和值栈的概念,可以是开发者使用简单的代码实现负载的数据访问,Action实现类就是一个标准的java类(POJO),这使得测试工作变得简单。

JSTL是JSP Standard Tag Library的简写,翻译成中文叫做JSP标准标签库,它也是Apache开源组织开发的JSP标签库。它是用来显示页面上的变量,它和EL配合使页面上显示参数更为方便,使得页面更符合View层的责任,JSTL可以完全替代页面上的"<%...%>"这些动态脚本,使页面符合HTML的标准。

Struts2以其对JSTL和OGNL(Object-Graph Navigation Language)的支持,让我选择了Struts2,因为OGNL能够方便的操作对象,所以很适合用于复杂对象在页面上显示。

2.1.3 控制层的选择

控制层的职责是用于处理表示层的请求,表示层向控制层发来请求,控制层再将请求进行转发,转发给逻辑业务层处理,而逻辑业务层处理完反馈给控制层处理的结果,控制层再将结果转发给表示层。

无疑在控制层上Struts2是最合适的,Struts2中的Action提供了非常好的控制机制,通过Struts.xml的配置,就能简单的将页面与Action对应起来,从而Action可以非常方便的接受表示层的数据,然后Action调用逻辑业务层的方法,再根据逻辑业务层的返回结果,Action再返回对应Result,Action再根据Struts.xml里配置的Result将数据转发给对应的表示层。

http://docs.google.com/File?id=dd4s87gd_64g9264nfgStruts2 的执行原理如图2.2:

图2.2 Struts2原理图

在控制层上还可以使用Spring,Spring的AOP(Aspect-Oriented Programming Aspect-Oriented Programming)即面向切面编程,为系统的权限控制和系统的日志管理提供了很好的支持,有效的将业务逻辑和功能分开了,从而它很好的与struts2的action形成互补。

2.1.4 模型层的选择

模型层封装了问题的核心数据、逻辑和功能的计算关系,它大体上可以划分为两块,一块为上层的逻辑业务,也就是所谓的service层,还有底层的数据访问层,又叫持久层,就是长说道的DAO层。业务层用来处理系统的那个逻辑业务,也就是业务流程,从程序的角度上来说就是算法,这部分是系统的核心。这部分能用上Spring的IoC,通过IoC将业务层的对象生命周期进行有效的管理,方便控制层对业务层的调用,那么什么是IOC呢?

IoC(Inversion of Control),翻译成中文就是控制翻转,好莱坞有条规则叫做“Don't call me, I will call you." 这条规则就是IOC的真实写照,通俗点说就是IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这成为控制翻转。正是因为有了控制翻转,系统才可以不管将来具体的实现,完全在一个抽象层次进行描述和技术架构,这样就是模块与模块之间的耦合度进一步降低,使系统具有良好的可维护性和扩展性。

在spring里IoC又叫做Dependency Inject-依赖注入。Spring通过DI的方式将业务对象交给IoC容器,使控制层只能通过访问IoC来获得业务层对象,无疑这是将系统的耦合性降低,使系统具备了良好的扩展性。

在持久层,Hibernate无疑是实现它的最好选择,在分析之前先简单的介绍一下Hibernate。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate是一个ORM框架,ORM即对象关系映射,在没有ORM这个概念提出以前,我们的编程到最底层时,采用的是其实都是过程化编程,也就是先获取连接,再操作传入SQL,容纳后在执行数据库操作,最后关闭连接,这就是我们原始的模式。然而我们采用面向对象的编程方式,很显然,采用原始的数据库操作方式是违背了面向对象的思想,那么为什么在ORM没有提出之前,我们没法改变它呢?原因在于我们的数据库是关系型数据库,实体与实体之前只有关系,没有对象关联,这就是任命常说的主抗不匹配,ORM出来之后,它很好的将对象与关系对应起来,在某种意义上讲JDBC的操作封装起来,而程序员只需要操作对象就可以完成对数据库的增删改查,而这一切只需要调用对应的方法即可。所有有了ORM,程序员就可以随心所欲的使用对象编程来操纵数据库。这也是我们选择Hibernate的最主要原因。


第三章管理系统员工管理模块的分析

3.1 需求分析

3.1.1功能需求规定

通过相关调查,要求网站具有以下功能;

q  员工通过前台发布和查看公告、公文信息。

q  设置员工信息的添加、浏览、查找功能。

q  通过前台可以查看部门和职位信息。

q  通过后台对部门信息、职位信息进行管理。

q  管理公告信息,查看公文内容。

q  设置后台员工信息的管理模块。

q  通过后台管理员工前台登录账号

q  通过后台实现查看、删除在线员工信息功能。

3.1.2可行性分析

通过办公自动化管理系统对企业日常办公进行管理,满足了企业日常办公管理各方面的的需求,实现了企业员工之间消息的发送与接收功能,大大的方便了企业内部人员沟通。网站提供的前后台的公告与公文信息的管理方便员工及时的了解公司的动态。其他功能模块的设置使企业的日常管理步入了科学系统管理的轨道上。

3.1.3故障处理要求

当程序由于潜在的bug或其他原因而导致程序报错的时候,处理的方式是:

(1)、页面自动重定向到error.jsp,并提示“系统内部出现异常,请与管理员联系……”

(2)、后台打印日志,错误日志会一同打印出来,方便及时找到程序错误。

(3)、程序操作数据采用事物管理机制,当操作数据库发生错误时候事物回滚,不会印象之前的数据丢失或篡改。


第四章管理系统员工模块的详细设计

4.1 功能模块需求

表4.1 添加员工信息处理IPO图

表4.2 查看员工信息处理IPO图

表4.3 修改用户信息处理IPO图

4.2 UML类图

      

图4.1 UML类图

4.3 模块结构图

办公自动化管理系统员工管理模块是一个整体模块,在此模块下的功能又可以大致分为三个部分,分别为:

添加员工信息:系统获取输入的注册信息后验证各个字段,验证通过后保存员工信息进入数据库;

查找员工信息:根据employeeid查出当前员工信息;

浏览员工信息:管理员在查出的员工信息基础上更改员工信息,保存后更新数据库对应记录;

结构图如图4.2:

 

图4.2 模块结构图

4.3 数据流程图

 

图4.3 数据流程图

4.4 模块数据结构设计

在我的员工管理模块中,涉及到四张数据库表,分别为:员工信息表、员工登录表、员工上下班描述表signstate、员工上下班描述表sign。

eminfo(员工信息表)

员工信息表主要用于保存员工信息。表eminfo的结构如表B.3所示。

表B.3                                 表eminfo的结构

password(员工登录表)

员工登录表主要用于员工登录信息。表password的结构如表B.8所示。

表B.8                                表job的结构

signstate(员工上下班描述表)

员工上下班描述表主要用于员工上下班描述信息。表signstate的结构如表B.9所示。

表B.9                                表job的结构

sign(员工上下班描述表)

员工上下班描述表主要用于员工上下班描述信息。表sign的结构如表B.10所示。

表B.10                               表sign的结构

4.5 系统出错处理设计

4.5.1 出错信息

1)系统不稳定

网站时常不能访问, 用户无法登陆, 这显然是网站服务器系统的不稳定造成的。作为系统的设计者, 应在发布网站前进行充分的效能测试, 从而最大程度上避免这种情况的出现。

2)系统性能不好

由于采取的技术和数据库速度及性能较慢的原因, 从而导致在购高峰期, 同时有大量的用户购票的时候出现登陆和查询航班速度很慢或是根本就无法成功登及结构体系。在这种结构下, 用户仅需通过浏览器就可实现客户端的功能, 而大部分的事物逻辑是在服务器端实现。这样就大大降低了客户端的负载, 减轻了系统维护与升级的成本。

4.5.2 补救措施

说明故障出现后可能采取的变通措施。包括:

(1)后备技术。说明准备采用的后备技术,当原始系统数据万一丢失时启用的副本的建立和启动的技术,例如周期性地把磁盘信息记录到磁带上去就是对于磁盘媒体的一种后备技术。

(2)降效技术。说明准备采用的后备技术,使用另一个效率稍低的系统或方法来求得所需结果的某些部分,例如一个自动系统的降效技术可以是手工操作和数据的人工记录。

(3)恢复及再启动技术。说明将使用的恢复再启动技术,使软件从故障点恢复执行或使软件从头开始重新运行的方法。


第五章管理系统员工管理模块的实现和测试

5.1 办公自动化管理系统的实现

在JSP+JavaBean+Servlet模式中,一般使用Servlet接收Http请求,然后执行连接数据库的操作,操作完成后,如果需要,将操作的结果保存在Http请求中,然后把视图派发到用于显示的JSP页。在这小节中,首先来介绍一下本系统中所使用的几个重要的JavaBean。

5.1.1 JavaBean的设计

1数据库操作的JavaBean的编写。本系统采用的是数据库连接池技术来实现对数据库的连接。该类的主要功能是实现对数据库的连接操作和对数据库中数据的一些简单操作。在类中的每个方法都有详细的注释。全部代码如下:

/*************************************oa/sys/Db.java*****************************************/

package oa.sys;

import java.sql.*;

import javax.sql.*;

import javax.naming.*;

/**

 ****************************************************

 *类名称:    Db<br>

 *类功能:    数据库操作 <br>

 ****************************************************

 */

public class Db {

       private Connection con;

       private Statement stmt;

       private ResultSet rs;

       private PreparedStatement pstmt;

       public static int error=0;

       /***************************************************

       *函数名称:  getCon()<br>

       *函数功能:  获取数据库连接<br>

       *返回值:    无<br>

       *参数说明:  无<br>

       ****************************************************/

       public static synchronized Connection getCon()throws Exception{

              Context ctx;

              DataSource ds;

              try{

                     ctx = new InitialContext();

                     ds = (DataSource)ctx.lookup("java:comp/env/jdbc/OA");

                     System.err.println();

                     System.err.println("数据连接+"+(++error));

                     return ds.getConnection();

              }catch(SQLException e){

                     System.out.print(e);

                     throw e;

              }

              catch(NamingException e){

                     System.out.print(e);

                     throw e;

              }

       }

       /***************************************************

       *函数名称:  getStmtread()<br>

       *函数功能:  获取数据库集合<br>

       *返回值:    Statement

       *                   stmt:返回数据库集合只用于SELECT语句<br>

       *参数说明:  无<br>

       ****************************************************/

       public Statement getStmtread(){

              try{

                     con=getCon();

                     stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

              }catch(Exception e){

                     System.out.println("getStmtread");

                     System.out.println(e.getMessage());

              }

              return stmt;

       }

       /***************************************************

       *函数名称:  getRowCount()<br>

       *函数功能:  返回表的行数<br>

       *返回值:    int count<br>

       *                   count>0返回的行数<br>

       *                   count=-1表名不存在或没有记录<br>

       *参数说明:  String sql<br>

       *                   sql 数据库中的表名

       ****************************************************/

       public int getRowCount(String sql){

              int count=0;;

              try{

                     stmt=this.getStmtread();

                     rs=stmt.executeQuery("SELECT COUNT(*) FROM "+sql);

                     rs.getMetaData();

                     if(rs.next()){

                            count=rs.getInt(1);

                     }else{

                            count=-1;

                     }

              }catch(Exception e){

                     System.out.println("getRowCount");

                     System.out.println(e.getMessage());

                     count=-2;

              }finally{

                     this.close();

              }

              return count;

       }

       /***************************************************

2分页显示的JavaBean的编写

在进行数据库查询操作时,往往会遇到数据量很大的情况,如果将所有数据在一个页面中显示是不现实的,因为这会给用户带来操作上的不方便,这是不愿意看到的,因此有必要将分页显示封装在一个类中,以提高这段代码的重用性。本系统用做分页显示的代码如下:

/**************************************oa/sys/Contact.java*************************************/

package oa.sys;

import oa.data.*;

import java.util.*;

import java.sql.*;

/**

 ****************************************************

 *类名称: #Contact<br>

 *类功能: 数据库分页操作<br>

 ****************************************************

public class Contact{

      private String state;        //员工状态

      private String job;         //员工职位

      private String dep;        //员工所在部门

      private ResultSet rs1;

      private Statement stmt1;

      private int stateid;        //员工状态序号

      private String addr;       //员工住址

      private String tel;         //电话

      private int jobid;         //员工职位序号

      private int deid;         //员工所在部门序号

      private String post;      //员工职称

      private String learn;      //学历

      private String birthday;     //出生日期

      private int sex;       //性别

      private String name;     //姓名

      private int id;       //员工ID号

      private Statement stmt=null;

      private ResultSet rs=null;

      private Db db=new Db();

      Collection coll;

      /***************************************************

      *函数名称:     Contact()<br>

      *函数功能:     构造函数初始化数据库连接、数据类型<br>

      *返回值:       无<br>

      *参数说明:     无<br>

      ****************************************************/

      public Contact()throws Exception{

            Calendar dd;

            stmt=db.getStmtread();

            coll= new ArrayList();

      }

      /***************************************************

      *函数名称:     getCount()<br>

      *函数功能:     获取数据库表格行数<br>

      *返回值:       int 行数<br>

      *参数说明:     String sql 表格名称<br>

      ****************************************************/

      public int getCount()throws Exception{

            int ret=0;

            String sql="SELECT count(*) FROM eminfo";

            rs=stmt.executeQuery(sql);

            if(rs.next()){

                  ret=rs.getInt(1);

            }

                  return ret;

      }

      /***************************************************

      *函数名称:     getCount()<br>

      *函数功能:     获取数据库表格行数<br>

      *返回值:       int 行数<br>

      *参数说明:     String sql 表格名称<br>

      ****************************************************/

      public Page listData(String page)throws Exception{

            try{

                  Page pages=new Page(this);

                  int pageNum=Integer.parseInt(page);

                  stmt=db.getStmtread();

                  Str str=new Str();

                  String sql="SELECT TOP "+pageNum*pages.rowsPerPage+" * FROM eminfo";

                  rs=stmt.executeQuery(sql);

                  int i=0;

                  while(rs.next()){

                        if(i>(pageNum-1)*pages.rowsPerPage-1){

                              id=rs.getInt(1);

                              name=rs.getString(2);

                              sex=rs.getInt(3);

                              birthday=rs.getString(4);

                              learn=rs.getString(5);

                              post=rs.getString(6);

                              deid=rs.getInt(7);

                              jobid=rs.getInt(8);

                              tel=rs.getString(9);

                              addr=rs.getString(10);

                              stateid=rs.getInt(11);

                              stmt1=db.getStmtread();

                              rs1=stmt1.executeQuery("SELECT Name FROM department WHERE departmentid="+deid);

                              if(rs1.next()){

                                    dep=rs1.getString(1);

                                    rs1.close();

                                    stmt1.close();

                                    db.close();

                              }

                              stmt1=db.getStmtread();

                              rs1=stmt1.executeQuery("SELECT Name FROM job WHERE jobid="+jobid);

                              if(rs1.next()){

                                    job=rs1.getString(1);

                                    rs1.close();

                                    stmt1.close();

                                    db.close();

                              }

                              stmt1=db.getStmtread();

                              rs1=stmt1.executeQuery("SELECT Name FROM emstate WHERE stateid="+stateid);

                              if(rs1.next()){

                                    state=rs1.getString(1);

                                    rs1.close();

                                    stmt1.close();

                                    db.close();

                              }

                              //字符转换

                              name=str.outStr(name);

                              birthday=birthday.substring(0,10);

                              dep=str.outStr(dep);

                              job=str.outStr(job);

                              state=str.outStr(state);

                              learn=str.outStr(learn);

                              post=str.outStr(post);

                              tel=str.outStr(tel);

                              addr=str.outStr(addr);

                              Eminfo eminfo=new Eminfo();

                              eminfo.setId(id);

                              eminfo.setName(name);

                              eminfo.setSex(sex);

                              eminfo.setBirthday(birthday);

                              eminfo.setLearn(learn);

                              eminfo.setPost(post);

                              eminfo.setDepartment(dep);

                              eminfo.setJob(job);

                              eminfo.setTel(tel);

                              eminfo.setAddr(addr);

                              eminfo.setState(state);

                              coll.add(eminfo);

                        }//if

                        i++;

                  }//while

                  db.close();

                  pages.curPage=pageNum;

                  pages.coll=coll;

                  return pages;

            }catch(Exception e){

                  e.printStackTrace();

                  throw e;

            }

      }

      public Collection getResult()throws Exception{

            return coll;

      }

}

3分页解决方案JavaBean的编写

数据信息分页显示的JavaBean编写如下:

/************************************oa/sys/Page.java******************************************/

package oa.sys;

import java.util.*;

/**

 ****************************************************

 *类名称: #Page<br>

 *类功能: 分页解决方案<br>

 ****************************************************

 */

public class Page {

      public int curPage;       //当前页

      public int maxPage;       //最大页

      public int maxRowCount;     //最大行

      public int rowsPerPage=5;     //每页行

      public Collection coll=null;

      public Page(){

      }

      /***************************************************

      *函数名称:     getCountPage()<br>

      *函数功能:     获取总页数<br>

      *返回值:       无<br>

      *参数说明:     无<br>

      ****************************************************/

      public void getCountPage(){

            if(this.maxRowCount%this.rowsPerPage==0){

                  this.maxPage=this.maxRowCount/this.rowsPerPage;

            }else{

                  this.maxPage=this.maxRowCount/this.rowsPerPage+1;

            }

      }

      public Collection getResult(){

            return this.coll;

      }

      public Page(Contact contact)throws Exception{

            this.maxRowCount=contact.getCount();

            this.coll=contact.getResult();

      }

}

4字符串转化JavaBean的编写

字符串转化JavaBean的编写的代码如下:

/************************************ oa/sys/Str.java *******************************************/

package oa.sys;

/**

 ****************************************************

 *类名称: Str<br>

 *类功能: 字符串转换操作<br>

 ****************************************************

 */

public class Str {

      public Str() {

            super();

      }

      /***************************************************

      *函数名称:chStr()<br>

      *函数功能:返回中文字符串<br>

      *返回值:  String<br>

      *参数说明:str<br>

      ****************************************************/

      public String chStr(String str){

            if(str==null){

                  str="";

            }else{

                  try{

                        str=(new String(str.getBytes("iso-8859-1"),"GB2312")).trim();

                  }catch(Exception e){

                        System.out.println("chStr");

                        System.out.println(e.getMessage());

                  }

            }

            return str;

      }

      /***************************************************

      *函数名称:inStr()<br>

      *函数功能:做编码一次转换,入库时防止sql攻击<br>

      *返回值:  String<br>

      *参数说明:str<br>

      ****************************************************/

      public String inStr(String str){

            if(str==null){

                  str="";

            }else{

                  try{

                        str=str.replace('\'',(char)1).trim();

                  }catch(Exception e){

                        System.out.println("inStr");

                        System.out.println(e.getMessage());

                  }

            }

            return str;

      }

      /***************************************************

      *函数名称:outStr()<br>

      *函数功能:做编码二次转换,出库时防止Exception<br>

      *返回值:  String

      *             返回中文字符串<br>

      *参数说明:str<br>

      ****************************************************/

      public String outStr(String str){

            if(str==null){

                  str="";

            }else{

                  try{

                        str=str.replace((char)1,'\'').trim();

                  }catch(Exception e){

                        System.out.println("outStr");

                        System.out.println(e.getMessage());

                  }

            }

            return str;

      }

}

5.1.2视图层的设计与实现

本系统中视图层主要有两个作用:

1、通过定义表单中的action属性来决定将表单中的数据交给哪个Servlet来处理。

这里以公告管理功能模块为例。首先,先定义一个表单<form name="form1" method="post" action="add">。然后,在web.xml中做如下配置:

  <servlet>

    <servlet-name>affice.add</servlet-name>

    <servlet-class>com.affice.Add</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>affice.add</servlet-name>

    <url-pattern>/affice/add</url-pattern>

  </servlet-mapping>

最后,通过这个表单映射来访问Servlet。

2、读取Servlet执行的结果,然后把结果显示在HTML中。

5.1.3员工管理模块

员工管理主要包括:浏览员工信息、查找员工信息和添加员工信息。

单击“员工管理”/“浏览员工信息”选项,系统自动进入员工信息一览表,通过此界面可以浏览所有的员工信息。

单击“员工管理”/“添加员工信息”选项,进入如图1.6所示的界面,单击“姓名”、“学历”、“出生日期”、“职称”、“电话”、“具体地址”等文本框,输入相应的内容,勾选“性别”的选项,单击“部门”、“职位”和“员工状态”的下拉按钮,选择相应的选项,最后单击【添加】按钮即完成添加操作。

图1.7  添加员工信息

单击“员工管理”/“查找员工信息”选项,系统自动查看短消息的界面,通过该界面可以查看所有的短消息。

5.1.4管理员登录

单击【管理员登录】按钮,界面下方自动显示管理员登录的界面,如图1.9所示,单击“用户名”和“密码”文本框,输入用户名和密码,最后单击【提交】按钮即可进入员工登录界面。如图1.10所示。

图1.9  管理员登录界面

图1.10  办公自动化系统后台

办公自动化系统后台管理页面主要包括:部门管理、职位管理、公告管理、公文查看、员工管理、账号管理、短消息管理、在线管理、员工状态管理和安全退出。

第六章 总结与展望

6.1 全文总结

本文的主要工作如下:

1.分析了办公自动化管理系统的背景以及意义,提出了些问题的重点及难点。

2.对java应用框架struts2,spring以及hibernate进行了相关介绍,以及对java IDE的选择进行了一番阐述。

3.通过不断的查阅相关资料和构思最终提出了一份办公自动化管理系统的需求分析和概要设计。

4.对j2ee项目的一般结构进行了一番介绍并给出相应详细描述。

5.通过代码实现了员工管理模块的功能需求。

6.2 展望

由于论文写作时间以及水平有限,本文尚存在不少需要进行更多的理论研究和实际开发的不足之处。虽然在实习公司的真实项目中学到不少项目设计思想,但是之后要完成的还有很多,比如在查找员工信息的时候后来程序执行效率很低,查找速度比较慢,还需要后期的数据库优化或者hibernate优化。

目前,本文只实现了办公自动化管理系统的主要功能,真正的办公自动化管理系统还有很多人性化方面的功能。需要不断推出新的需求。


结束语

时间很快,从去年年底到现在,转眼间已经过去了四五个月,从开始的项目开题到功能的设计、功能模块分化、数据库设计再到最后的编码和测试,总算一个完整的办公自动化管理系统完成了。

虽然,之前自学做过一个小系统,但这次算是又一次更大的尝试,一次尝试一次收获,但又是一次发现自己的不足,同时也又一次总结和下一次尝试的规划。

本次毕业设计的项目采用的是最主流的JSP + JavaBean + Servlet 模式,一般使用Servlet接收Http请求,然后执行连接数据库的操作,操作完成后,如果需要,将操作的结果保存在Http请求中,然后把视图派发到用于显示的JSP页。但是,目前用到的这类技术之停留在一些简单的应用,若深入还需时间和不断的项目开发训练。

人无完人,系统无最完美的系统,所以需要不断的完善和增强,在完善中不断完美……



致 谢

可以说本次的毕业设计算是又一次java项目的锻炼,在之前的项目积累的经验上又增加了一些小小经验,每次的做完一个小项目都或多或少有新的想法,并有下一个项目的计划和冲动。

在本次毕业设计中,我从自己身上学到很很多,同时又在导师的指导下解决了很多技术难题,也学到了很多东西,我非常感激。跑办公室是我的经常干的事情,次数之多之多以至于被我问问题的老师都对我很熟了,但从来都是非常欢迎,每一次都是细心的帮我找问题,查资料,以至于我离开办公室之后都能收到问题解决的通知消息,我很感动。而且我还有一个非常负责的辅导员,学习方面、考试方面、生活方面、工作就业方面等等,面面都在关心着,有这么样的一个辅导员,我很幸运。来到三江同样幸运的是:短短两年里在同学们中我找到了专业上面的伙伴,能坐下来一同分析问题的伙伴,能相互交流经验感受的伙伴,大家一同学习,一同进步。同时也认识了几个能敞开心胸说话的朋友,寂寞枯燥时候有他们在,我很幸福。最后我想说的是:我能来到三江是我的财富,是我的幸运,感谢陪我走过的同学,老师,朋友,有你们的存在才有今天的我,再次感谢你们的支持。

最后,我要向我的父母致以最崇高的敬意,没有你们无私的支持,就没有我今天的成绩!

更多相关推荐:
jsp实训报告总结

企业信息管理系统概述一企业信息管理需求分析1登录页面模块登录页面模块功能如下对登录页面进行设置要求输入用户名和密码正确之后才可登录系统若尚未注册则点击注册新用户注当用户名已存在时不能重复注册2首页面模块首页面模...

jsp个人博客实训报告

河南理工大学计算机科学与技术学院实训报告20xx20xx学年第2学期课程名称设计题目个人博客系统学生姓名侯嘉鑫学号专业班级计算机信息管理0901指导教师陈玮年月日目录目录1个人博客实现分析211功能要求212用...

jsp实习报告

一实习目的通过JSP的学习掌握编写在线网上购书系统连接SQLserver数据库掌握在线购物系统的需求分析系统设计代码编写和测试以及怎么样配置运行jsp服务器等二实习时间十六周20xx年6月18号6月22号三实习...

jsp实训报告

西安航空职业技术学院实验设计用纸西安航空职业技术学院课程课程设计说明书设计题目专业班级学号姓名指导教师20xx年6月第1页共17页西安航空职业技术学院实验设计用纸西安航空职业技术学院课程设计任务书课题名称学籍管...

动态网页编程实训报告(jsp)

天津电子信息职业技术学院暨国家示范性软件职业技术学院题目姓名系别专业网站规划与开发技术班级指导教师设计时间动态网页编程实训Iphone手机网站设计与实现郭雅倩网络技术系规划S091班林俊桂20xx年11月14日...

jsp技术实验报告_实验5

黑龙江大学实验报告黑龙江大学教务处实验名称JSP内置对象2实验目的掌握JSP的requestresponse对象实验类型验证性实验环境编程环境myeclipse8运行环境WindowsXP主要设计思想与算法实现...

jsp实训报告

衢州职业技术学院课程实设计题目专业班级学号姓名指导教师训设计报20xx年6月衢州职业技术学院第1页共17页告课程设计任务书课题名称学籍管理系统设计内容统要求管理员在使用过程中可以完成登录和检测的基本功能并在成功...

jsp实训报告1

JSP课程实训报告课题名称专业学号姓名成绩二一年五月十五日目录1网上购物车实现分析111上购物车模块功能要求112购物模块设计113购物车模块的模块结构12数据库设计121数据库book表ER模型222数据表B...

jsp实训报告2

职业学院大连软件目报告实训项10表格lttablegtlttrgtlttdwidthgtlttdgtlttrgtlttablegt2自己在项目制作中的问题及解决办法1在使用request内置对象时要用表单形式提...

jsp技术实验报告_实验4

黑龙江大学实验报告黑龙江大学教务处实验名称JSP内置对象1实验目的掌握JSP的requestoutsession对象实验类型验证性实验环境编程环境myeclipse8运行环境WindowsXP主要设计思想与算法...

动态网页编程实训报告(jsp)

佛山职业技术学院动态网页编程实训报告题目Iphone手机网站设计与实现姓名邵俊峰系别电子信息系专业计算机应用技术班级20xx级2班指导教师凌雄娟设计时间20xx年4月28日至20xx年5月15日目录第一章项目背...

jsp实训报告

JSP技术学习总结报告JSP技术是由SUN公司所倡导众多公司参与建立的一种动态技术标准它基于JAVA技术具有良好的可伸缩行与JavaEnterpriseAPI紧密结合在网络数据库应用开发方面有着得天独厚的优势具...

jsp实训报告(11篇)