收藏 分享(赏)

办公自动化管理系统.doc

上传人:wo7103235 文档编号:6152393 上传时间:2019-03-30 格式:DOC 页数:36 大小:4.77MB
下载 相关 举报
办公自动化管理系统.doc_第1页
第1页 / 共36页
办公自动化管理系统.doc_第2页
第2页 / 共36页
办公自动化管理系统.doc_第3页
第3页 / 共36页
办公自动化管理系统.doc_第4页
第4页 / 共36页
办公自动化管理系统.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、毕业设计办公自动化管理系统学 院专 业班 级学 号姓 名指导教师教师职称年 月 日毕业设计摘要【摘要】办公自动化系统的开发,使得上网查收发邮件、收发文件、查看公司公文公告变得极为方便,因为系统提供了所有办公所需要的基本功能。并且简单易操作,无论单位内部有多少个部门,总部外有多少个分支机构,通过本系统可以实现无地域办公,操作简单,稳定安全,可以称为网络办公理念的一次变革。【关键词】 JSP+JavaBean+Servlet毕业设计 2 目录摘要 .1目录 .20 引言 .11 系统分析 .21.1 需求分析 .21.2 可行性分析 .22 总体设计 .22.1 项目规划 .22.2 系统功能结构

2、图 .23 系统设计 .33.1 设计目标 .33.2 开发及运行环境 .43.3 数据库设计 .44 JavaBean 的设计 .54.1 数据库操作的 JavaBean 的编写 .54.2 分页显示的 JavaBean 的编写 .104.3 分页解决方案 JavaBean 的编写 .135 视图层的设计与实现 .175.1 公告管理视图层的设计 .175.2 公文管理视 图层的设计 .206 控制层的设计 与实现 .246.1 公告管理控制层的设计 .256.2 公文管理控制层的设计 .27附录一 参 考文献 .29附录二 数据表 .34附录三 文件架构图 .37毕业设计0 引言网络办公自

3、动化管理系统(OA),是伴随着 Internet 技术在各个领域的广泛应用,和各行各业企业信息化建设步伐的加快应运而生。当代社会已经进入信息时代,信息技术革命使社会的各个领域都发生了翻天覆地的变化,每个企业都必须紧跟时代的步伐,加强企业竞争力和提升现代化企业的管理能力,以适应整个社会的发展变化。企业对信息需求的增长,使计算机、网络技术已经渗透到企业的日常工作中。传统的企业内信息的交流方式早已不能满足企业对大量信息的快速传递与处理的需求,网络办公自动化管理系统的应用满足了企业的办公网络化、自动化的管理需求,提高了企业内部的管理水平,进而全面提升了企业在市场竟争中的综合竞争力。毕业设计 2 1 系

4、统分析1.1 需求分析通过相关调查,要求网站具有以下功能; 员工通过前台发布和查看公告、公文信息。 设置员工信息的添加、浏览、查找功能。 通过前台可以查看部门和职位信息。 通过前台实现收发信息的功能 查看优秀员工信息和提交提优秀员工姓名。 通过后台对部门信息、职位信息进行管理。 管理公告信息,查看公文内容。 设置后台员工信息的管理模块。 通过后台管理员工前台登录账号 通过后台实现对短信信息进行查看、删除等管理。 通过后台实现查看、删除在线员工信息功能。 后台对员工在职状态信息进行管理。1.2 可行性分析通过办公自动化管理系统对企业日常办公进行管理,满足了企业日常办公管理各方面的的需求,实现了企

5、业员工之间消息的发送与接收功能,大大的方便了企业内部人员沟通。网站提供的前后台的公告与公文信息的管理方便员工及时的了解公司的动态。其他功能模块的设置使企业的日常管理步入了科学系统管理的轨道上。2 总体设计2.1 项目规划办公自动化管理系统是一个功能完备的网站,由前台管理和后台管理两大部分组成。 前台管理模块前台管理模块要求实现:公告管理、公文管理、员工管理、部门信息、收发信息和优秀员工管理 6 部分。 后台管理模块后台管理模块要求实现:部门管理、职位管理、公告管理、公文管理、员工管理、账号管理、短信息管理、在线管理和员工状态管理 9 部分。2.2 系统功能结构图办公自动化管理系统前台功能结构如

6、图 1 所示。毕业设计 3 图 1 办公自动化管理系统前台功能结构图办公自动化管理系统后台功能结构如图 2 所示。图 2 办公自动化管理系统后台功能结构图3 系统设计3.1 设计目标本系统是根据企业日常办公的需求进行开发设计的,主要实现如下目标: 实现前台的公告、公文管理。 实现前台员工信息管理功能。毕业设计 4 通过前台查看职位信息、部门信息。 实现优秀员工信息的查看与提名功能。 实现前台员工之间的短消息的发送与接收。 通过后台查看与删除公告信息、查看公文信息的功能。 后台管理员对员工信息、职位信息与部门信息的管理。 后台管理员对短消息的查看与删除功能。 后台管理员管理员工状态信息。 后台实

7、现对在线信息的查看与删除功能。 后台管理员工登录账号信息。 设置前后台的系统退出功能。3.2 开发及运行环境硬件平台: CPU:P41.8GHz。 内存:256MB 以上。软件平台: 操作系统:Windows XP/Windows 2000。 数据库:SQL Server 2000 。 开发工具包:JDK Version1.4.2。 JSP 服务器:Tomcat。 浏览器:IE5.0,推荐使用 IE6.0。 分辨率:最佳效果 1024768 像素。3.3 数据库设计本系统数据库采用 SQL Server 2000 数据库,系统数据库名称为 OA_Data。数据库 OA_Data中包含 9 张表

8、。关于数据库中的数据表请参见附录 B4 JavaBean 的设计在 JSP+JavaBean+Servlet 模式中,一般使用 Servlet 接收 Http 请求,然后执行连接数据库的操作,操作完成后,如果需要,将操作的结果保存在 Http 请求中,然后把视图派发到用于显示的 JSP 页。在这小节中,首先来介绍一下本系统中所使用的几个重要的 JavaBean。4.1 数据库操作的 JavaBean 的编写本系统采用的是数据库连接池技术来实现对数据库的连接。该类的主要功能是实现对数据库的连接操作和对数据库中数据的一些简单操作。在类中的每个方法都有详细的注释。全部代码如下:/*oa/sys/Db

9、.java*/package oa.sys;import java.sql.*;毕业设计 5 import javax.sql.*;import javax.naming.*;/*类名称: Db*类功能: 数据库操作 */public class Db private Connection con;private Statement stmt;private ResultSet rs;private PreparedStatement pstmt;public static int error=0;/*函数名称: getCon()*函数功能: 获取数据库连接*返回值: 无*参数说明: 无*/p

10、ublic static synchronized Connection getCon()throws ExceptionContext ctx;DataSource ds;tryctx = 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

11、e;catch(NamingException e)System.out.print(e);throw e;/*函数名称: getStmtread()毕业设计 6 *函数功能: 获取数据库集合*返回值: Statement* stmt:返回数据库集合只用于 SELECT 语句*参数说明: 无*/public Statement getStmtread()trycon=getCon();stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);catch(Exception e)S

12、ystem.out.println(“getStmtread“);System.out.println(e.getMessage();return stmt;/*函数名称: getRowCount()*函数功能: 返回表的行数*返回值: int count* count0 返回的行数 * count=-1 表名不存在或没有记录 *参数说明: String sql* sql 数据库中的表名*/public int getRowCount(String sql)int count=0;trystmt=this.getStmtread();rs=stmt.executeQuery(“SELECT C

13、OUNT(*) FROM “+sql);rs.getMetaData();if(rs.next()count=rs.getInt(1);elsecount=-1;catch(Exception e)System.out.println(“getRowCount“);System.out.println(e.getMessage();count=-2;毕业设计 7 finallythis.close();return count;/*4.2 分页显示的 JavaBean 的编写在进行数据库查询操作时,往往会遇到数据量很大的情况,如果将所有数据在一个页面中显示是不现实的,因为这会给用户带来操作上的

14、不方便,这是不愿意看到的,因此有必要将分页显示封装在一个类中,以提高这段代码的重用性。本系统用做分页显示的代码如下:/*oa/sys/Contact.java*/package oa.sys;import oa.data.*;import java.util.*;import java.sql.*;/*类名称: #Contact*类功能: 数据库分页操作*public class Contactprivate String state; /员工状态private String job; /员工职位private String dep; /员工所在部门private ResultSet rs1;

15、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; /员工 I

16、D号private Statement stmt=null;private ResultSet rs=null;private Db db=new Db();Collection coll;/*函数名称: Contact()*函数功能: 构造函数初始化数据库连接、数据类型毕业设计 8 *返回值: 无*参数说明: 无*/public Contact()throws ExceptionCalendar dd;stmt=db.getStmtread();coll= new ArrayList();/*函数名称: getCount()*函数功能: 获取数据库表格行数*返回值: int 行数*参数说明:

17、 String sql 表格名称*/public int getCount()throws Exceptionint 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 ExceptiontryPage p

18、ages=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

19、);birthday=rs.getString(4);learn=rs.getString(5);post=rs.getString(6);deid=rs.getInt(7);jobid=rs.getInt(8);毕业设计 9 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

20、.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=“+s

21、tateid);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

22、 eminfo=new Eminfo();eminfo.setId(id);eminfo.setName(name);eminfo.setSex(sex);eminfo.setBirthday(birthday);eminfo.setLearn(learn);eminfo.setPost(post);毕业设计 10 eminfo.setDepartment(dep);eminfo.setJob(job);eminfo.setTel(tel);eminfo.setAddr(addr);eminfo.setState(state);coll.add(eminfo);/ifi+;/whiledb.c

23、lose();pages.curPage=pageNum;pages.coll=coll;return pages;catch(Exception e)e.printStackTrace();throw e;public Collection getResult()throws Exceptionreturn coll;4.2 分页解决方案 JavaBean 的编写数据信息分页显示的 JavaBean 编写如下:/*oa/sys/Page.java*/package oa.sys;import java.util.*;/*类名称: #Page*类功能: 分页解决方案*/public class

24、 Page public int curPage; /当前页public int maxPage; /最大页public int maxRowCount; /最大行public int rowsPerPage=5; /每页行public Collection coll=null;public Page()/*函数名称: getCountPage()*函数功能: 获取总页数*返回值: 无*参数说明: 无毕业设计 11 */public void getCountPage()if(this.maxRowCount%this.rowsPerPage=0)this.maxPage=this.maxRo

25、wCount/this.rowsPerPage;elsethis.maxPage=this.maxRowCount/this.rowsPerPage+1;public Collection getResult()return this.coll;public Page(Contact contact)throws Exceptionthis.maxRowCount=contact.getCount();this.coll=contact.getResult();4.3 字符串转化 JavaBean 的编写字符串转化 JavaBean 的编写的代码如下:/* oa/sys/Str.java */

26、package oa.sys;/*类名称: Str*类功能: 字符串转换操作*/public class Str public Str() super();/*函数名称:chStr()*函数功能:返回中文字符串*返回值: String*参数说明:str*/public String chStr(String str)if(str=null)str=“;elsetrystr=(new String(str.getBytes(“iso-8859-1“),“GB2312“).trim();catch(Exception e)System.out.println(“chStr“);毕业设计 12 Sy

27、stem.out.println(e.getMessage();return str;/*函数名称:inStr()*函数功能:做编码一次转换,入库时防止sql攻击*返回值: String*参数说明:str*/public String inStr(String str)if(str=null)str=“;elsetrystr=str.replace(,(char)1).trim();catch(Exception e)System.out.println(“inStr“);System.out.println(e.getMessage();return str;/*函数名称:outStr()*

28、函数功能:做编码二次转换,出库时防止Exception*返回值: String* 返回中文字符串*参数说明:str*/public String outStr(String str)if(str=null)str=“;elsetrystr=str.replace(char)1,).trim();catch(Exception e)System.out.println(“outStr“);System.out.println(e.getMessage();return str;毕业设计 13 5 视图层的设计与实现本系统中视图层主要有两个作用:1、通过定义表单中的 action 属性来决定将表单

29、中的数据交给哪个 Servlet 来处理。这里以公告管理功能模块为例。首先,先定义一个表单。然后,在 web.xml 中做如下配置:affice.addcom.affice.Addaffice.add/affice/add最后,通过这个表单映射来访问 Servlet。2、读取 Servlet 执行的结果,然后把结果显示在 HTML 中。由于本系统中多个功能模块的代码相似,在此笔者只将几个具有代表性的功能介绍给读者,对于系统中的其他功能模块请读者参看随书附带的光盘。5.1 公告管理视图层的设计公告管理视图层主要用于控制层转发过来的运行结果,并将表单中的数据提交给控制层进行处理。发布最新公告页面的

30、运行结果如图 4 所示。图 4 发布最新公告页面的运行结果查看以前公告页面的运行结果如图 5 所示。毕业设计 14 图 5 查看以前公告页面的运行结果在公告管理视图层中主要有两个 JSP 文件,分别是 add.jsp 和 view.jsp。这两个文件的作用分别是:发布最新公告和查看以前公告。发布最新公告的具体代码如下:/*affice/add.jsp*/公告标题:具体公告:查看以前公告的具体代码如下:/*view.jsp*/发布人公告标题发布时间具体公告删除没有添加公告 “毕业设计 16 5.2 公文管理视图层的设计发送公文页面的运行结果如图 6 所示。图 6 发送公文页面的运行结果接收公文页

31、面的运行结果如图 7 所示。图 7 接收公文页面的运行结果在公文管理视图层中主要有两个 JSP 文件,分别是 accept.jsp 和 send.jsp。这两个文件的作用分别是:接收公文和发布公文。接收公文的具体代码如下:/*bumf/accept.jsp*/毕业设计 17 无待办公文发送人序号:现在有条待办公文公文第字号标题:附件:毕业设计 18 “发布公文的具体代码如下:/*bumf/send.jsp*/“ / 公文第字号 标 题:毕业设计 19 “ size=“15“ /接收人序号: “ size=“15“ /附 件:“ size=“15“/内 容:6 控制层的设计与实现在 JSP+Ja

32、vaBean+Servlet 模式中,一般使用 Servlet 接收 Http 请求,然后执行连接数据库的操作,操作完成后,如果需要(如:查询操作)操作,则把操作的结果保存在 Http 请求中,然后把视图派发到用于显示的 JSP 页中。6.1 公告管理控制层的设计公告管理控制层的主要任务是,根据客户端提出的请求在数据库中实现对公告的增、删、查的操作。处理发布公告(在数据库中实现对公告的增加操作)的代码如下:/*com.affice.Add*/package com.affice;import oa.sys.*;import oa.sys.Time;import java.io.IOExcept

33、ion;import java.io.PrintWriter;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;/*类名称: Add*类功能: 增加公告信息*/public class Add extends HttpServletprivate HttpSession session=null;private ResultSet rs=null;private Statement stmt=null;private String title,content,sqli,sqls;private int te

34、mp=0,id;public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOExceptionrequest.setCharacterEncoding(“gb2312“); /设定统一编码样式,解决中文显示问题response.setContentType(“text/html; charset=gb2312“);Str str=new Str(); /获得字符串转化类中的对象Db db=new Db(); /获得数据库连接对象Time time=n

35、ew Time(); /获得显示时间类中的对象PrintWriter out=response.getWriter(); /获得输出流对象毕业设计 21 session=request.getSession(); /返回和客户端关联的Sessionid=Integer.parseInt(String)session.getAttribute(“id“); /获得员工登录的ID 号title=request.getParameter(“title“); /接收表单提交过来公告标题content=request.getParameter(“content“); /接收表单提交过来的公告内容titl

36、e=str.inStr(title); /对标题进行字符串的格式转化content=str.inStr(content);sqli=“INSERT INTO affice(title,time,employeeid,content)“+“ VALUES(“+title+“,“+time.getYMD()+“,“+id+“,“+content+“)“;sqls=“SELECT * FROM affice WHERE time=“+time.getYMD()+“;try stmt=db.getStmtread();rs=stmt.executeQuery(sqls); /执行判断今日是否已经发布了

37、公告的SQL语句if(!rs.next() /如果今日还没有发布公告db.close();stmt=db.getStmt();temp=stmt.executeUpdate(sqli); /执行插入的SQL语句if(temp0)/通过“名-值“对的形式将信息保存在Request范围内request.setAttribute(“msg“,“发布成功“); elserequest.setAttribute(“msg“,“发布失败“);elserequest.setAttribute(“msg“,“今日已经发布公告,不能再发布“); catch (SQLException e) e.printSta

38、ckTrace();finallydb.close();/处理完客户请求后,将请求转发到相应的JSP页来显示处理结果RequestDispatcher dispatcher=request.getRequestDispatcher(“add.jsp“);dispatcher.forward(request,response);/doGet()方法的执行效果和doPost()方法一样public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOExcept

39、iondoPost(request,response);6.2 公文管理控制层的设计1发送公文公文管理控制层的主要任务是,根据客户端提出的请求在数据库中实现对公告的增、删、查的操作,并且完成附件的上传功能。公告的正文内容保存在数据库中,附件保存在服务器中。发送公文时,单击公文管理中发送公文的按钮,直接访问了 Servlet(com/bumf/Send.java) 。该毕业设计 22 Servlet 用来判断准备发送公文的用户在数据库中是否有临时公文。如果没有则生成一个临时文件并保存在数据库中;如果有则将临时文件的内容保存在 Collection 对象中,并将 Collection 对象通过“名

40、-值”的形式保存在 request 范围内,转发给 send.jsp 来显示。具体代码如下:/*com.bumf.Send.java*/package com.bumf;import oa.data.Bumf;import oa.sys.*;import oa.sys.Time;import java.io.*;import java.sql.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;/*类名称: Send*类功能: 公文发送(附件)*/public class Send extends HttpServletprivate int sign;/ 1代表公文已经发送,0代表未发送(也就是用户点击了暂时保存按钮)private int examine;/1代表处理完成, 0代表还未处理(也就是用户点击了以后处理)private int id;/发送人idprivate int accepte

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报