办公自动化管理系统项目方案
摘要
【摘要】
办公自动化系统的开发,使得上网查收发邮件、收发文件、查看公司公文公告变得极为方便,因为系统提供了所有办公所需要的基本功能。并且简单易操作,无论单位内部有多少个部门,总部外有多少个分支机构,通过本系统可以实现无地域办公,操作简单,稳定安全,可以称为网络办公理念的一次变革。
【关键词】JSP+JavaBean+Servlet
目录
摘要 (1)
目录 (2)
0 引言 (1)
1 系统分析 (2)
1.1 需求分析 (2)
1.2 可行性分析 (2)
2 总体设计 (2)
2.1 项目规划 (2)
2.2 系统功能结构图 (2)
3 系统设计 (3)
3.1 设计目标 (3)
3.2 开发及运行环境 (4)
3.3 数据库设计 (4)
4 JavaBean的设计 (4)
4.1 数据库操作的JavaBean的编写 (4)
4.2 分页显示的JavaBean的编写 (7)
4.3 分页解决方案JavaBean的编写 (10)
5 视图层的设计与实现 (17)
5.1 公告管理视图层的设计 (17)
5.2 公文管理视图层的设计 (15)
6 控制层的设计与实现 (19)
6.1 公告管理控制层的设计 (19)
6.2 公文管理控制层的设计 (21)
附录一参考文献 (29)
附录二数据表 (34)
附录三文件架构图 (30)
– 2 –
0 引言
网络办公自动化管理系统(OA),是伴随着Internet技术在各个领域的广泛应用,和各行各业企业信息化建设步伐的加快应运而生。
当代社会已经进入信息时代,信息技术革命使社会的各个领域都发生了翻天覆地的变化,每个企业都必须紧跟时代的步伐,加强企业竞争力和提升现代化企业的管理能力,以适应整个社会的发展变化。
企业对信息需求的增长,使计算机、网络技术已经渗透到企业的日常工作中。传统的企业内信息的交流方式早已不能满足企业对大量信息的快速传递与处理的需求,网络办公自动化管理系统的应用满足了企业的办公网络化、自动化的管理需求,提高了企业内部的管理水平,进而全面提升了企业在市场竟争中的综合竞争力。
1 系统分析
1.1 需求分析
通过相关调查,要求网站具有以下功能;
?员工通过前台发布和查看公告、公文信息。
?设置员工信息的添加、浏览、查找功能。
?通过前台可以查看部门和职位信息。
?通过前台实现收发信息的功能
?查看优秀员工信息和提交提优秀员工姓名。
?通过后台对部门信息、职位信息进行管理。
?管理公告信息,查看公文内容。
?设置后台员工信息的管理模块。
?通过后台管理员工前台登录账号
?通过后台实现对短信信息进行查看、删除等管理。
?通过后台实现查看、删除在线员工信息功能。
?后台对员工在职状态信息进行管理。
1.2 可行性分析
通过办公自动化管理系统对企业日常办公进行管理,满足了企业日常办公管理各方面的的需求,实现了企业员工之间消息的发送与接收功能,大大的方便了企业内部人员沟通。网站提供的前后台的公告与公文信息的管理方便员工及时的了解公司的动态。其他功能模块的设置使企业的日常管理步入了科学系统管理的轨道上。
2 总体设计
2.1 项目规划
办公自动化管理系统是一个功能完备的网站,由前台管理和后台管理两大部分组成。
?前台管理模块
前台管理模块要求实现:公告管理、公文管理、员工管理、部门信息、收发信息和优秀员工管理6部分。
?后台管理模块
后台管理模块要求实现:部门管理、职位管理、公告管理、公文管理、员工管理、账号管理、短信息管理、在线管理和员工状态管理9部分。
2.2 系统功能结构图
办公自动化管理系统前台功能结构如图1所示。
– 2 –
图1 办公自动化管理系统前台功能结构图
办公自动化管理系统后台功能结构如图2所示。
图2 办公自动化管理系统后台功能结构图
3 系统设计
3.1 设计目标
本系统是根据企业日常办公的需求进行开发设计的,主要实现如下目标:
?实现前台的公告、公文管理。
?实现前台员工信息管理功能。
?通过前台查看职位信息、部门信息。
?实现优秀员工信息的查看与提名功能。
– 3 –
?实现前台员工之间的短消息的发送与接收。
?通过后台查看与删除公告信息、查看公文信息的功能。
?后台管理员对员工信息、职位信息与部门信息的管理。
?后台管理员对短消息的查看与删除功能。
?后台管理员管理员工状态信息。
?后台实现对在线信息的查看与删除功能。
?后台管理员工登录账号信息。
?设置前后台的系统退出功能。
3.2 开发及运行环境
硬件平台:
?CPU:P41.8GHz。
?内存:256MB以上。
软件平台:
?操作系统:Windows XP/Windows 2000。
?数据库:SQL Server 2000。
?开发工具包:JDK Version1.4.2。
?JSP服务器:Tomcat。
?浏览器:IE5.0,推荐使用IE6.0。
?分辨率:最佳效果1024×768像素。
3.3 数据库设计
本系统数据库采用SQL Server 2000数据库,系统数据库名称为OA_Data。数据库OA_Data 中包含9张表。关于数据库中的数据表请参见附录B
4 JavaBean的设计
在JSP+JavaBean+Servlet模式中,一般使用Servlet接收Http请求,然后执行连接数据库的操作,操作完成后,如果需要,将操作的结果保存在Http请求中,然后把视图派发到用于显示的JSP 页。在这小节中,首先来介绍一下本系统中所使用的几个重要的JavaBean。
4.1 数据库操作的JavaBean的编写
本系统采用的是数据库连接池技术来实现对数据库的连接。该类的主要功能是实现对数据库的连接操作和对数据库中数据的一些简单操作。在类中的每个方法都有详细的注释。全部代码如下:
/*************************************oa/sys/Db.java****************************** ***********/
package oa.sys;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
/**
– 4 –
****************************************************
*类名称:Db
*类功能:数据库操作
****************************************************
*/
public class Db {
p rivate Connection con;
p rivate Statement stmt;
p rivate ResultSet rs;
p rivate PreparedStatement pstmt;
p ublic static int error=0;
/***************************************************
*函数名称:getCon()
*函数功能:获取数据库连接
*返回值:无
*参数说明:无
****************************************************/
p ublic 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()
*函数功能:获取数据库集合
*返回值:Statement
*stmt:返回数据库集合只用于SELECT语句
*参数说明:无
– 5 –
****************************************************/
p ublic Statement getStmtread(){
try{
con=getCon();
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ _ONL Y);
}catch(Exception e){
System.out.println("getStmtread");
System.out.println(e.getMessage());
}
return stmt;
}
/***************************************************
*函数名称:getRowCount()
*函数功能:返回表的行数
*返回值:int count
*count>0返回的行数
*count=-1表名不存在或没有记录
*参数说明:String sql
*sql 数据库中的表名
****************************************************/
p ublic 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;
}
– 6 –
/***************************************************
4.2 分页显示的JavaBean的编写
在进行数据库查询操作时,往往会遇到数据量很大的情况,如果将所有数据在一个页面中显示是不现实的,因为这会给用户带来操作上的不方便,这是不愿意看到的,因此有必要将分页显示封装在一个类中,以提高这段代码的重用性。本系统用做分页显示的代码如下:/**************************************oa/sys/Contact.java************************* ************/
package oa.sys;
import oa.data.*;
import java.util.*;
import java.sql.*;
/**
****************************************************
*类名称:#Contact
*类功能:数据库分页操作
****************************************************
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()
*函数功能:构造函数初始化数据库连接、数据类型
*返回值:无
*参数说明:无
****************************************************/
public Contact()throws Exception{
Calendar dd;
stmt=db.getStmtread();
coll= new ArrayList();
}
– 7 –
/***************************************************
*函数名称:getCount()
*函数功能:获取数据库表格行数
*返回值:int 行数
*参数说明:String sql 表格名称
****************************************************/
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()
*函数功能:获取数据库表格行数
*返回值:int 行数
*参数说明:String sql 表格名称
****************************************************/
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();
– 8 –