1.办公自动化管理系
统
3.
2.学
院
4.专
5.
业
7.
6.班
级
8.学
9.
号
11.
10.姓
名
12.指导
13.
教师
15.
14.教师
职称
吉林省明日科技有限公司监制
– 2 –
16.
17. 年18. 19. 月20. 21. 日
22.摘要
23.【摘要】
a)办公自动化系统的开发,使得上网查收发邮件、收发文件、查看公司公文公告变得极为
方便,因为系统提供了所有办公所需要的基本功能。并且简单易操作,无论单位内部有多少个部门,总部外有多少个分支机构,通过本系统可以实现无地域办公,操作简单,稳定安全,可以称为网络办公理念的一次变革。
24.【关键词】JSP+JavaBean+Servlet
吉林省明日科技有限公司监制
– 2 –
25. 目录
i. ................................................................................................................................ 摘要
(1)
ii. ................................................................................................................................ 目录
(2)
iii. ................................................................................................................................ 0 引
言 (1)
iv. ................................................................................................................................ 1 系
统分析 (2)
1. ...................................................................................................................... 1.1
需求分析 (2)
2. ...................................................................................................................... 1.2
可行性分析 (2)
v. ................................................................................................................................ 2 总
体设计 (2)
1. ......................................................................................................................
2.1
项目规划 (2)
2. ...................................................................................................................... 2.2
系统功能结构图 (2)
vi. ................................................................................................................................ 3 系
统设计 (3)
1. ...................................................................................................................... 3.1
设计目标 (3)
2. ......................................................................................................................
3.2
开发及运行环境 (4)
3. ...................................................................................................................... 3.3
数据库设计 (4)
vii. (4)
JavaBean 的设计 (4)
1. ...................................................................................................................... 4.1
数据库操作的JavaBean 的编写 (4)
2. ...................................................................................................................... 4.2
分页显示的JavaBean 的编写 (7)
3. ......................................................................................................................
4.3
分页解决方案JavaBean 的编写 (10)
viii. ................................................................................................................................ 5 视
图层的设计与实现 (17)
1. ...................................................................................................................... 5.1
公告管理视图层的设计 (17)
2. ...................................................................................................................... 5.2
吉林省明日科技有限公司监制
– 3 –
公文管理视图层的设计 (15)
ix. ................................................................................................................................ 6 控
制层的设计与实现 (19)
1....................................................................................................................... 6.1
公告管理控制层的设计 (19)
2....................................................................................................................... 6.2
公文管理控制层的设计 (21)
x. ................................................................................................................................ 附录
一 参考文献 (29)
xi. ................................................................................................................................ 附录
二 数据表 (34)
xii. ................................................................................................................................ 附录
三 文件架构图 (31)
0引言
b)网络办公自动化管理系统(OA),是伴随着Internet技术在各个领域的广泛应用,和各行
各业企业信息化建设步伐的加快应运而生。
c)当代社会已经进入信息时代,信息技术革命使社会的各个领域都发生了翻天覆地的变
化,每个企业都必须紧跟时代的步伐,加强企业竞争力和提升现代化企业的管理能力,以适应整个社会的发展变化。
d)企业对信息需求的增长,使计算机、网络技术已经渗透到企业的日常工作中。传统的企
业内信息的交流方式早已不能满足企业对大量信息的快速传递与处理的需求,网络办公自动化管理系统的应用满足了企业的办公网络化、自动化的管理需求,提高了企业内部的管理水平,进而全面提升了企业在市场竟争中的综合竞争力。
吉林省明日科技有限公司监制
– 2 –
1 系统分析
1.1 需求分析
e) 通过相关调查,要求网站具有以下功能; 26.
员工通过前台发布和查看公告、公文信息。 27.
设置员工信息的添加、浏览、查找功能。 28.
通过前台可以查看部门和职位信息。 29.
通过前台实现收发信息的功能 30.
查看优秀员工信息和提交提优秀员工姓名。 31.
通过后台对部门信息、职位信息进行管理。 32.
管理公告信息,查看公文内容。 33.
设置后台员工信息的管理模块。 34.
通过后台管理员工前台登录账号 35.
通过后台实现对短信信息进行查看、删除等管理。 36.
通过后台实现查看、删除在线员工信息功能。 37. 后台对员工在职状态信息进行管理。
1.2 可行性分析
a) 通过办公自动化管理系统对企业日常办公进行管理,满足了企业日常办公管理各方面的
的需求,实现了企业员工之间消息的发送与接收功能,大大的方便了企业内部人员沟通。
网站提供的前后台的公告与公文信息的管理方便员工及时的了解公司的动态。其他功能
模块的设置使企业的日常管理步入了科学系统管理的轨道上。
2 总体设计
2.1 项目规划
b) 办公自动化管理系统是一个功能完备的网站,由前台管理和后台管理两大部分组成。
38. 前台管理模块
a) 前台管理模块要求实现:公告管理、公文管理、员工管理、部门信息、收发信息和优秀
员工管理6部分。
39. 后台管理模块
a) 后台管理模块要求实现:部门管理、职位管理、公告管理、公文管理、员工管理、账号
管理、短信息管理、在线管理和员工状态管理9部分。
2.2 系统功能结构图
b) 办公自动化管理系统前台功能结构如图1所示。
吉林省明日科技有限公司监制
– 3 –
40.
41. 图1 办公自动化管理系统前台功能结构图
a) 办公自动化管理系统后台功能结构如图2所示。
42.
43. 图2 办公自动化管理系统后台功能结构图
3 系统设计
3.1 设计目标
a) 本系统是根据企业日常办公的需求进行开发设计的,主要实现如下目标: 44.
实现前台的公告、公文管理。 45.
实现前台员工信息管理功能。 46.
通过前台查看职位信息、部门信息。 47. 实现优秀员工信息的查看与提名功能。
吉林省明日科技有限公司监制 – 4 –
48.
实现前台员工之间的短消息的发送与接收。 49.
通过后台查看与删除公告信息、查看公文信息的功能。 50.
后台管理员对员工信息、职位信息与部门信息的管理。 51.
后台管理员对短消息的查看与删除功能。 52.
后台管理员管理员工状态信息。 53.
后台实现对在线信息的查看与删除功能。 54.
后台管理员工登录账号信息。 55. 设置前后台的系统退出功能。
3.2 开发及运行环境
a) 硬件平台:
56. CPU :P41.8GHz 。
57. 内存:256MB 以上。
a) 软件平台:
58. 操作系统:Windows XP/Windows 2000。
59. 数据库:SQL Server 2000。
60. 开发工具包:JDK Version1.4.2。
61. JSP 服务器:Tomcat 。
62. 浏览器:IE5.0,推荐使用IE6.0。
63. 分辨率:最佳效果1024×768像素。
3.3 数据库设计
a) 本系统数据库采用SQL Server 2000数据库,系统数据库名称为OA_Data 。数据库
OA_Data 中包含9张表。关于数据库中的数据表请参见附录B
4 JavaBean 的设计
b) 在JSP+JavaBean+Servlet 模式中,一般使用Servlet 接收Http 请求,然后执行连接数据库
的操作,操作完成后,如果需要,将操作的结果保存在Http 请求中,然后把视图派发到
用于显示的JSP 页。在这小节中,首先来介绍一下本系统中所使用的几个重要的
JavaBean 。
4.1 数据库操作的JavaBean 的编写
c) 本系统采用的是数据库连接池技术来实现对数据库的连接。该类的主要功能是实现对数
据库的连接操作和对数据库中数据的一些简单操作。在类中的每个方法都有详细的注
释。全部代码如下:
d) /*************************************oa/sys/Db.java**************************
***************/
e) package oa.sys;
f) import java.sql.*;
g) import javax.sql.*;
h) import javax.naming.*;
吉林省明日科技有限公司监制
– 5 –
i) /**
i. ****************************************************
ii. *类名称: Db
iii. *类功能: 数据库操作
iv. ****************************************************
v. */
j) public class Db {
k) private Connection con;
l) private Statement stmt;
m) private ResultSet rs;
n) private PreparedStatement pstmt;
o) public static int error=0;
p) /***************************************************
q) *函数名称: getCon()
r) *函数功能: 获取数据库连接
s) *返回值: 无
t) *参数说明: 无
u) ****************************************************/
v) public static synchronized Connection getCon()throws Exception{
1. Context ctx;
2. DataSource ds;
3. try{
0 ctx = new InitialContext();
1 ds = (DataSource)ctx.lookup("java:comp/env/jdbc/OA");
2 System.err.println();
3 System.err.println("数据连接+"+(++error));
4 return ds.getConnection();
4. }catch(SQLException e){
0 System.out.print(e);
1 throw e;
5. }
6. catch(NamingException e){
0 System.out.print(e);
1 throw e;
7. }
w) }
x) /***************************************************
y) *函数名称: getStmtread()
z) *函数功能: 获取数据库集合
aa) *返回值: Statement
stmt:返回数据库集合只用于SELECT 语句
吉林省明日科技有限公司监制 – 6 –
bb) *参数说明: 无
cc) ****************************************************/
dd) public Statement getStmtread(){
1. try{
0 con=getCon();
ii. s tmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_R
EAD_ONL Y);
1. }catch(Exception e){
0 System.out.println("getStmtread");
1 System.out.println(e.getMessage());
2. }
3. return stmt;
ee) }
ff) /***************************************************
gg) *函数名称: getRowCount()
hh) *函数功能: 返回表的行数
ii) *返回值: int count
● count>0返回的行数
● count=-1表名不存在或没有记录
jj) *参数说明: String sql
● sql 数据库中的表名
kk) ****************************************************/
ll) public int getRowCount(String sql){
1. int count=0;;
2. try{
0 stmt=this.getStmtread();
1 rs=stmt.executeQuery("SELECT COUNT(*) FROM "+sql);
2 rs.getMetaData();
3 if(rs.next()){
● count=rs.getInt(1);
4 }else{
● count=-1;
5 }
3. }catch(Exception e){
0 System.out.println("getRowCount");
1 System.out.println(e.getMessage());
2 count=-2;
4. }finally{
0 this.close();
5. }
6. return count;
mm) }
吉林省明日科技有限公司监制
– 7 –
nn) /***************************************************
4.2 分页显示的JavaBean 的编写
oo) 在进行数据库查询操作时,往往会遇到数据量很大的情况,如果将所有数据在一个页面
中显示是不现实的,因为这会给用户带来操作上的不方便,这是不愿意看到的,因此有
必要将分页显示封装在一个类中,以提高这段代码的重用性。本系统用做分页显示的代
码如下:
i. /**************************************oa/sys/Contact.java******************
*******************/
ii. package oa.sys;
iii. import oa.data.*;
iv. import java.util.*;
v. import java.sql.*;
vi. /**
vii. ****************************************************
viii. *类名称: #Contact
ix. *类功能: 数据库分页操作
x. ****************************************************
xi. public class Contact{
xii. private String state; //员工状态
xiii. private String job; //员工职位
xiv. private String dep; //员工所在部门
xv. private ResultSet rs1;
xvi. private Statement stmt1;
xvii. private int stateid; //员工状态序号
xviii. private String addr; //员工住址
xix. private String tel; //电话
xx. private int jobid; //员工职位序号
xxi. private int deid; //员工所在部门序号
xxii. private String post; //员工职称
xxiii. private String learn; //学历
xxiv. private String birthday; //出生日期
xxv. private int sex; //性别
xxvi. private String name; //姓名
xxvii. private int id; //员工ID 号
xxviii. private Statement stmt=null;
xxix. private ResultSet rs=null;
xxx. private Db db=new Db();
xxxi. Collection coll;
xxxii. /***************************************************
xxxiii. *函数名称: Contact()
xxxiv. *函数功能: 构造函数初始化数据库连接、数据类型
xxxv. *返回值: 无
xxxvi. *参数说明: 无
xxxvii. ****************************************************/
xxxviii. public Contact()throws Exception{
1. Calendar dd;
2. stmt=db.getStmtread();
3. coll= new ArrayList();
吉林省明日科技有限公司监制 – 8 –
xxxix.
} xl.
/*************************************************** xli.
*函数名称: getCount()
xlii.
*函数功能: 获取数据库表格行数
xliii.
*返回值: int 行数
xliv.
*参数说明: String sql 表格名称
xlv.
****************************************************/ xlvi.
public int getCount()throws Exception{ 1. int ret=0; 2. String sql="SELECT count(*) FROM eminfo"; 3. rs=stmt.executeQuery(sql); 4. if(rs.next()){ 0 ret=rs.getInt(1); 5. } 0 return ret; xlvii.
} xlviii.
/*************************************************** xlix.
*函数名称: getCount()
l.
*函数功能: 获取数据库表格行数
li.
*返回值: int 行数
lii.
*参数说明: String sql 表格名称
liii.
****************************************************/ liv. public Page listData(String page)throws Exception{
1. try{
0 Page pages=new Page(this);
1 int pageNum=Integer.parseInt(page);
2 stmt=db.getStmtread();
3 Str str=new Str();
4 String sql="SELECT TOP "+pageNum*pages.rowsPerPage+" * FROM eminfo";
5 rs=stmt.executeQuery(sql);
6 int i=0;
7 while(rs.next()){
if(i>(pageNum-1)*pages.rowsPerPage-1){
1. id=rs.getInt(1);
2. name=rs.getString(2);
3. sex=rs.getInt(3);
4. birthday=rs.getString(4);
5. learn=rs.getString(5);
6. post=rs.getString(6);
7. deid=rs.getInt(7);
8. jobid=rs.getInt(8);
9. tel=rs.getString(9);
10. addr=rs.getString(10);
11. stateid=rs.getInt(11);
12. stmt1=db.getStmtread();
13. rs1=stmt1.executeQuery("SELECT Name FROM department
WHERE departmentid="+deid);
14. if(rs1.next()){
a) dep=rs1.getString(1);
吉林省明日科技有限公司监制
– 9 –
b) rs1.close();
c) stmt1.close();
d) db.close();
15. }
16. stmt1=db.getStmtread();
17. rs1=stmt1.executeQuery("SELECT Name FROM job WHERE
jobid="+jobid);
18. if(rs1.next()){
a) job=rs1.getString(1);
b) rs1.close();
c) stmt1.close();
d) db.close();
19. }
20. stmt1=db.getStmtread();
21. rs1=stmt1.executeQuery("SELECT Name FROM emstate WHERE
stateid="+stateid);
22. if(rs1.next()){
a) state=rs1.getString(1);
b) rs1.close();
c) stmt1.close();
d) db.close();
23. }
24. //字符转换
25. name=str.outStr(name);
26. birthday=birthday.substring(0,10);
27. dep=str.outStr(dep);
28. job=str.outStr(job);
29. state=str.outStr(state);
30. learn=str.outStr(learn);
31. post=str.outStr(post);
32. tel=str.outStr(tel);
33. addr=str.outStr(addr);
34. Eminfo eminfo=new Eminfo();
35. eminfo.setId(id);
36. eminfo.setName(name);
37. eminfo.setSex(sex);
38. eminfo.setBirthday(birthday);
39. eminfo.setLearn(learn);
40. eminfo.setPost(post);
41. eminfo.setDepartment(dep);
42. eminfo.setJob(job);
43. eminfo.setTel(tel);
44. eminfo.setAddr(addr);
45. eminfo.setState(state);
46. coll.add(eminfo);
● }//if
● i++;
8 }//while
9 db.close();
吉林省明日科技有限公司监制 – 10 –
10 pages.curPage=pageNum; 11 pages.coll=coll; 12 return pages; 2. }catch(Exception e){ 0 e.printStackTrace(); 1 throw e; 3. } lv.
} lvi.
public Collection getResult()throws Exception{ 1. return coll; lvii.
} lviii. }
4.3 分页解决方案JavaBean 的编写
pp) 数据信息分页显示的JavaBean 编写如下:
i. /************************************oa/sys/Page.java***********************
*******************/
ii. package oa.sys;
iii. import java.util.*;
iv. /**
v. ****************************************************
vi. *类名称: #Page
vii. *类功能: 分页解决方案
viii. ****************************************************
ix. */
x. public class Page {
xi. public int curPage; //当前页
xii. public int maxPage; //最大页
xiii. public int maxRowCount; //最大行
xiv. public int rowsPerPage=5; //每页行
xv. public Collection coll=null;
xvi. public Page(){
xvii. }
xviii. /***************************************************
xix. *函数名称: getCountPage()
xx. *函数功能: 获取总页数
xxi. *返回值: 无
xxii. *参数说明: 无
xxiii. ****************************************************/
xxiv. public void getCountPage(){
1. if(this.maxRowCount%this.rowsPerPage==0){
0 this.maxPage=this.maxRowCount/this.rowsPerPage;
2. }else{
0 this.maxPage=this.maxRowCount/this.rowsPerPage+1;
3. }
xxv. }
xxvi. public Collection getResult(){
1. return this.coll;
xxvii. }
吉林省明日科技有限公司监制
– 11 –
xxviii. public Page(Contact contact)throws Exception{
1. this.maxRowCount=contact.getCount();
2. this.coll=contact.getResult();
xxix. }
xxx. }
4.4 字符串转化JavaBean 的编写
qq) 字符串转化JavaBean 的编写的代码如下:
i. /************************************ oa/sys/Str.java
*******************************************/
ii. package oa.sys;
iii. /**
iv. ****************************************************
v. *类名称: Str
vi. *类功能: 字符串转换操作
vii. ****************************************************
viii. */
ix. public class Str {
x. public Str() {
1. super();
xi. }
xii. /***************************************************
xiii. *函数名称:chStr()
xiv. *函数功能:返回中文字符串
xv. *返回值: String
xvi. *参数说明:str
xvii. ****************************************************/
xviii. public String chStr(String str){
1. if(str==null){
0 str="";
2. }else{
0 try{
● str=(new String(str.getBytes("iso-8859-1"),"GB2312")).trim();
1 }catch(Exception e){
● System.out.println("chStr");
● System.out.println(e.getMessage());
2 }
3. }
4. return str;
xix. }
xx. /***************************************************
xxi. *函数名称:inStr()
xxii. *函数功能:做编码一次转换,入库时防止sql 攻击
xxiii. *返回值: String
xxiv. *参数说明:str
xxv. ****************************************************/
xxvi. public String inStr(String str){
1. if(str==null){
吉林省明日科技有限公司监制 – 12 –
0 str=""; 2. }else{ 0 try{ ● str=str.replace('\'',(char)1).trim(); 1 }catch(Exception e){ ● System.out.println("inStr"); ● System.out.println(e.getMessage()); 2 } 3. } 4. return str; xxvii.
}
xxviii.
/*************************************************** xxix.
*函数名称:outStr()
xxx.
*函数功能:做编码二次转换,出库时防止Exception
xxxi.
*返回值: String ● 返回中文字符串
xxxii.
*参数说明:str
xxxiii.
****************************************************/ xxxiv. public String outStr(String str){
1. if(str==null){
0 str="";
2. }else{
0 try{
● str=str.replace((char)1,'\'').trim();
1 }catch(Exception e){
● System.out.println("outStr");
● System.out.println(e.getMessage());
2 }
3. }
4. return str;
xxxv. }
xxxvi.
} 5 视图层的设计与实现
rr) 本系统中视图层主要有两个作用:
1、 通过定义表单中的action 属性来决定将表单中的数据交
给哪个Servlet 来处理。
ss) 这里以公告管理功能模块为例。首先,先定义一个表单
c) 查看以前公告的具体代码如下:
i. /****************************************view.jsp*************************
*******************/
ii.
发布人 | 公告标题 | 发布时间 | 具体公告 | 删除 |