当先锋百科网

首页 1 2 3 4 5 6 7

项目报告

基于java+sql的办公自动化系统设计与实现代码说明

办公自动化系统是针对南开创元信息技术有限公司开发的,专门用于企业内部员工信息交流的软件,其开发过程主要包括前端应用程序的开发和后端数据库的建立两个方面。对于前者要求应用程序功能完备操作简单,对于后者要求建立起数据一致性、完整性和安全性好的数据库。

本报告在对南开创元信息技术有限公司充分调研的基础上,针对该公司实际情况,采用Client/Server模式、利用JAVA语言进行系统的开发,以SQL Server  作为网络数据库,实现办公自动化系统。

系统用网络数据库将企业内员工的基本信息统一管理起来,形成集成的信息源,系统会根据员工所属部门对员工进行分类,这样有利于发送者快速找到发送目标,也能方便的进行信息的群发,在该系统中总经理具有最高的权限,负责对系统的管理。

该系统可使企业内员工之间信息的交流更高效,更便捷,也使企业内各部门之间员工的频繁往来减到最少,从而提高企业整体的办公效率,为企业节约成本,使企业在激烈的市场竞争中赢得优势,实现企业整体战略目标。

办公自动化   客户机/服务器    系统管理

目   录

1.1 引言…………………………………………………………………………………1

1.2 办公自动化背景……………………………………………………………………1

1.3我国办公自动化发展现状…………………………………………………………2

1.4 我国办公自动化发展方向…………………………………………………………3

1.5 办公自动化系统开发背景……………………………………………………3

第二章 系统分析…………………………………………………………………4

2.1 办公自动化系统的需求分析…………………………………………………4

2.2 办公自动化系统的可行性分析………………………………………………4

2.3 办公自动化系统数据流程图…………………………………………………6

第三章 系统设计…………………………………………………………………12

3.1 系统设计原则………………………………………………………………………12

3.2 系统功能模块设计…………………………………………………………………12

3.3 系统物理配置方案设计……………………………………………………………14

3.4 数据库设计…………………………………………………………………………14

3.5 输入输出设计………………………………………………………………………16

3.6 系统的安全性设计…………………………………………………………………17

第四章 办公自动化系统的技术支持与实施………………………………18

4.1 选择编程语言………………………………………………………………………18

4.2 SQL Server2000数据库……………………………………………………………18

4.3 Java数据库解决方案………………………………………………………………18

4.4 Java局域网解决方案………………………………………………………………21

4.5 系统界面解决方案…………………………………………………………………25

第五章 结束语……………………………………………………………………29

致谢…………………………………………………………………………………30

参考文献……………………………………………………………………………31

第一章  概述

1.1  引言

在信息时代,一个具备一定规模的现代化组织,在其内部办公运作过程中对信息资源共享和信息实时交流的要求越来越高,高效的办公行政流程和业务运作的信息实时交流的要求越来越高,高效的办公行政流程和业务运作的规范管理成为提高机构管理水平和办公效率,减少资源的消耗,提高机构服务水平的必不可少的手段和方法。
     办公自动化系统的总体目标是:“以先进成熟的计算机和通信技术为主要手段,建成一个覆盖企业办公部门和企事业单位的办公信息系统,通过网络技术,提供本单位内部各部门,各员工之间的信息交换,建立高质量、高效率的信息网络”,本系统也是为实现这一根本目标建立的,它可以实现企业的办公现代化、信息资源化、传输网络化。
    办公自动化系统开发的真正意义不是简单的借助电脑处理收发电子邮件等日常办公作业,而是通过计算机系统的各种应用,使各独立的工作者能实现信息共享,协同工作,合理组织机构的公文和文档的流程等办公作业,全面提高组织机构的办公效率,实现信息共享。

1.2办公自动化背景

办公自动化(OfficeAutomation)是20世纪70年代中期发达国家迅速发展起来的一门综合性技术。我国的OA产业从80年代末发展至今,已从最初的提供面向单机的辅助办公产品,发展到面向企业级应用的大型协同工作软件。其发展过程大致分3个阶段。

第一阶段

以数据为处理中心的传统MIS系统它的最大特点是应用基于文件系统和关系型数据库系统,以结构化数据为存储和处理对象,强调对数据的计算和统计能力。其贡献在于把IT技术引入办公领域,提高了文件管理水平。但是这种方式缺乏对收发文等群组协作工作过程的处理能力,因而其自动化程度是有限的。

第二阶段

以工作流为中心的办公自动化系统办公自动化已实现了以工作流为中心。这种方式彻底改变了早期办公自动化的不足之处,以E-Mail文档数据库管理、复制、目录服务、群组协同工作等技术作支撑,以工作流为中心的第二代办公自动化系统包含众多的实用功能和模块,实现了对人、对事、对文档、对会议的自动化管理。与第一代办公自动化相比,第二代系统具有以网络为基础,以工作流自动化为主要的技术手段,缺少对知识管理的能力等特点。

第三阶段

知识管理技术为基础的自动化系统第三代OA的核心是知识,实现的基础是知识管理技术。知识管理是一个系统工程,可以帮助企业解决知识共享和再利用的问题,目标是将正确的知识传授给正确的人,使他们采取合适的行动,避免重复错误和重复工作。知识管理关注“如何获取、组织、利用和传播在企业信息系统和人们头脑中的知识”。第三代OA系统有几个显著的特点:实时通信,员工与专家可以网上实时交流,信息广泛集成的内容编目,知识门户的构造。第三代OA帮助企业从How To的过程转到Know的过程,将办公自动化系统由模拟手工作业向改变并提高手工作业效率的过渡。

1.3我国办公自动化发展现状

进入20世纪90年代中期以后,由于国内经济的飞速发展引发市场竞争的逐渐激烈,以及政府管理职能的扩大和优化,这一切导致政府和企业对办公自动化产品的需求快速增长。这时,办公自动化开始进入一个快速发展的阶段。国内专门从事软件开发的公司也逐渐成长起来,并专门为政府和企业订做办公自动化系统。由于这些系统是根据用户的具体需求开发的,所以需要功能比较完善,并能较好地满足用户的实际需要。但这是一个巨大而低效的OA市场,具体表现在投资大、效果不明显;水平低、重复建设多;硬件投入多、软件投入少;模拟手工作业增加管理负担等。这是因为开发商水平参差不齐,开发队伍组队模式不合理、缺乏开发办公自动化产品的经验、用户缺乏对办公自动化产品的认识等;部分软件产品质量不高,不顾中国企业的运作特点照搬国外技术,使得实施困难;对OA的理解起点不高,导致OA系统与其他系统集成度差;用户使用水平低,又不愿花太多的精力投入培训;售后服务不到位;定做开发又会因用户需求变化要对软件进行不断的修改维护。到最后,整个软件的性能和可使用性都大大降低,没有耐性的企业索性废弃掉从而导致项目失败。从技术来看,普遍存在如下缺点:为用户考虑的少,软件的柔性构造功能差。当前很多OA软件过分强调了软件之间功能的横向对比,为用户考虑的实际功能比较少,结果导致软件大而全,而真正为用户接受的功能模块很少。另一方面,软件的模块复用性很差,直接影响了软件的柔性构造功能,而当用户的需求改变时,哪怕是轻微的改变,都需要开发商来解决,从而影响了用户的使用效率,对开发商也是一个极大的负担。

1.4我国办公自动化发展方向

我国办公自动化的发展方向应该是数字化办公。所谓数字化办公即几乎所有的办公业务都在网络环境下实现。从技术发展角度来看,特别是互联网技术的发展,安全技术的发展和软件理论的发展,实现数字化办公是可能的。但从管理体制和工作习惯的角度来看,全面地数字化办公还有一段距离,首先数字化办公必然冲击现有的管理体制,使现有管理体制发生变革,而管理体制的变革意味着权力和利益的重新分配;另外管理人员原有的工作习惯、工作方式和法律体系有很强的惯性,短时间内改变尚需时日。尽管如此,全面实现数字化办公是办公自动化发展的必然趋势。

1.5办公自动化系统开发背景

通过我在南开创元信息技术有限公司的实习,我了解到该公司各部门各员工之间的信息交换十分频繁,但是该公司并没有一套完整的适合本公司的信息交换软件,各部门各员工之间的信息交换还是使用一些通用的软件,所以软件的利用率不是很高,因为很多人根本就不看信息,在很多情况下还需要口头传递。由于通用软件不是针对本公司开发的,对提高本公司的整体办公效率不是很明显,针对上述问题我开发了一套办公自动化软件,它的按部门分类查找功能,可以使发送人很容易找到接受者,节省了搜索查找的时间,当收到信息时还会有提醒,使接受者不会错过一条重要信息,由于软件的主界面是按照公司的部门与组的结构设置,所以员工可以对公司部门的设立、部门下的成员、成员的职务一目了然。

第二章  系统分析

2.1办公自动化系统的需求分析

办公自动化系统的建立,需要进行用户需求调查与分析,以确定系统目标,这是系统建设的重要环节。中小企业需求规模相对较小,在功能上对系统的需求也相对较少。大体可分为:一方面是通过收发消息为主的方式,与其他员工交流各种信息,基于工作流的方式实现诸如请假申请、物品申领等日常办公功能。另一方面则是面向公司办公业务方面的业务管理功能,即完全采用计算机技术处理办公业务,使企业内部人员能够方便快捷地共享信息、交流信息,高效地协同工作,既兼顾个人办公效率的提高,又可以实现群体协同工作。 

传统的办公方式极大的束缚了人的创造和想象力,埋没了人的智慧和潜能,使人们耗费了大量的时间和精力去手工处理那些繁杂重复的工作,手工处理的延时和差错,正是现代化管理中应去除的弊端。用先进的、现代化的工具代替手工作业,无疑是生产力发展的方向。办公自动化对传统办公方式的变革,正是适应了人们的普遍需求,也顺应了技术发展的潮流。

针对上述问题,我开发了办公自动化系统,它具有如下特点:

  1. 办公自动化系统可以将人们从繁重的重复性劳动中解放出来,大大节省工作时间,提高工作效率、减少办公费用。
  2. 办公自动化系统将是企业竞争取胜的法宝,它所收集、处理、分析的对象是“信息”。这些准确、及时、可靠的信息将大大有助于提高领导者决策的正确性和科学性。
  3.  通过办公自动化系统,能给企业的管理者在行为方式和思维模式上带来革命性进步。企业在管理手段与管理思想方面已经落后于发达国家,所以迫切需要通过推行办公自动化来改善管理手段,增强竞争力。

2.2办公自动化系统的可行性分析

不论采用何种开发MIS的方法,系统分析都是必要且十分重要的环节,虽然,分析的具体方法和详尽程度可能不尽相同。实践表明,系统分析工作的好坏,在很大程度上决定了系统的成败。

开发新系统得要求往往来自对原系统得不满。原系统可能是手工系统也可能是正在运行的信息系统。由于存在的问题可能充斥各个方面,内容分散,甚至含糊不清,这就要求系统分析人员针对用户提出的各种问题和初始要求,对问题进行识别,通过可行性分析确定开发系统的必要性!

可行性分析的任务是明确应用项目的开发的必要性与可行性,可行性取决于实现应用系统的资源和条件。系统的可行性主要包括三个方面:1、管理上的可行性;2、技术上的可行性;3、经济上的可行性;

(1)管理上的可行性:指管理人员对开发系统应用项目的态度和管理方面的条件。主管领导不支持的项目肯定不行。如果中高层管理人员的抵触情绪很大,就有必要等一等,积极做工作,创造条件。管理方面的条件只要指管理方法是否科学,应用管理制度改革的时机是否成熟,规章制度是否齐全以及原始数据十分正确等。公司具有合理的管理机制,完善的规章制度,稳定的经营秩序以及科学的管理方法和程序。并且原始数据完整准确。另外,公司领导具有现代化的管理水平和很强的信息意识,能从长远上支持本系统的运转。

因此本系统在管理上是可行的。

(2)技术上的可行性:指当前的软、硬件技术能否满足对系统提出的要求(如增加存储能力,实现通讯功能,提高处理速度)。此外,还要考虑开发人员的水平。信息系统属于知识密集型,对技术要求较高,如果缺乏足够的技术力量,或者单纯依靠外部力量进行开发,是很难成功的!

硬件方面:随着计算机的普及,公司各个部门已拥有相当数量的计算机,能够支持windows 2000 sever操作系统以及SQL sever 2000数据库管理系统。而且形成了一定规模的计算机网络,具有打印机等输出设备,能够满足本系统应用的需要。软件方面:由于本系统客户端使用JAVA语言进行开发所以可以运行在任何操作系统上,服务器端需要windows 2000 sever操作系统和SQL sever 2000数据库管理系统。开发使用的JBuilder9程序设计软件可以在短时间内安装并使用,符合系统的要求。人员方面:公司员工都经过计算机应用方面的专门培训,能够进行基本数据的输入输出,能够熟练使用相应的办公软件,经过短期培训,应该可以使用本系统进行办公。另外公司具有专职的计算机维护人员,定期对计算机进行硬件和软件的维护,符合系统的要求。

因此,本系统在技术上是可行的。

(3)经济上的可行性:主要是预估费用支出和对项目的经济效应进行评估。在费用支出方面,不仅要考虑主机费用,而且要计算外围设备费用、软件开发费用、人员培训费用和将来系统投入运行后的经常性支出费用(如管理、维护费用)和配件费用。经济效益应该从两方面考虑:一部分是可以用钱来衡量的效益,如加快流动资金周转,减少资金积压等;另一部分是难以用钱来表示的,例如提供更高质量的信息,提高取得信息的速度等。

硬件方面:公司已经为每个员工配备一台计算机

运行方面:本系统的运行所需的材料以及维护费用有限。

培训方面:本系统简单易用,界面友好,只需经过短期培训即可。

因此,本系统在经济上是可行的。综上所述,本系统的开发和使用完全是可行的。

2.3办公自动化系统数据流程图

2.3.1   数据流程图概念

数据流程图(DFD——Data Flow Diagram)是描述系统逻辑模型的主要工具,它可以用少数几种符号综合的反映出信息在系统中的流动、传递、存储、和处理的总情况。数据流程图具有抽象性和综合性两个特点,其中抽象性表现在已经完全舍去了具体的物质,如组织机构、工作场所、物质流、货币流等,只保留了数据的流动、存储、使用及加工的情况。综合性表现在它可以把系统中的各种业务处理过程联系起来,形成一个整体。

      1. 办公自动化系统数据流程图

        办公

        自动化系

        项目组

        F1

        F2

        F2

        F2

正在上传…重新上传取消
 

部门

 

职员

总经理

                                         F2

F3

                          

F2

                          

F4    

                                         

                            F5     

                 D1   职员资料表  

图2.1  办公自动化系统顶层DFD

F1:修改、查询、发送信息等              F2:接受信息

F3:管理信息        F4:修改职员资料   F5:返回职员资料

F1

   P1

注册

管理

                     

F2

服务器IP    D2

                  

 

F5

    F2

   P2

登陆

管理

 

F7

  F3

 

        F4                     F5                   F6         F8

F11

   P3

                

资料

管理

                                                       

F12

                                                    D1   职员资料表

F13

职员

               F9                                          

F14

                                                      D3    部门表   

F15

               F10                                              

F16

                                                     D4    项目组表  

F18

总经理

F17

F19

   P4

信息

传输

管理

F20

 

         

某项目组

某一部门

公司职员

F21

F21

F21

F21

其他职员

 

F22

                        

                     信息记录   D5

 图2.2  办公自动化系统第一层DFD

F1:取得服务器IP                    F2:写入服务器IP

F3:职员录入注册资料                F4:职员录入登陆信息

F5:职员资料                        F6:更新职员资料表

F7:取得登陆职员资料                F8:写入职员资料

F9:其他职员资料查询结果            F10:职员基本资料修改

F11:保存修改资料                   F12:取得职员资料

F13:取得部门                       F14:修改部门表

F15:取的项目组                     F16:修改项目组表

F17:查询职员资料                   F18:修改职员特殊资料

F19:所需信息                       F20:连接请求与交流信息输入

F21:交流信息输出                   F22:信息记录更新

办公自动化系统第一层DFD说明:

首先职员输入注册信息,注册管理会在服务器IP表里找到服务器IP以便进行数据库服务器的连接,连接到数据库以后,就会把职员资料插入职员资料表中。注册管理会把职员资料传入登陆管理中,如果以前已经注册就可以把资料直接输入登陆管理,登陆管理会在职员资料表中取得职员密码进行核对,如果输入正确就可以登陆自己的账户,并且把用户的状态设为在线。在资料管理中职员可以查询其他职员资料,也可以修改自己的基本资料,总经理可以修改职员的特殊资料,

也有输入部门,与组的权限。信息传输管理会根据用户的连接请求,对指定的职员进行连接,并向其发送信息。也可以向公司全体职员、某个部门的职员或部门中的某个组发送信息。接收信息的职员可以保存信息记录。

   P1.1

服务

器IP

管理

F1

 

F2

D2   服务器IP               

                                               D1  职员资料表

   P1.2

服务

连接

   P1.3

信息

核查

F3

F6

F5

 

F4

                                                             

职员

 

图2.3  办公自动化系统第二层DFD

如图2.3为办公自动化系统第二层DFD的注册管理。首先它会连接本地数据库,在本地数据库中的服务器IP表里找到服务器IP地址,如果表中存在服务器IP地址那么准备进行数据库服务器的连接,如果不存在那么会要求用户输入服务器IP地址,然后将服务器IP地址保存进表中,以便以后取用。连接好数据库服务器后,职员就可以输入注册信息,经过核查确认没有用户名相同的情况那么就可以对职员资料表进行更新,插入职员注册的资料。

以下是各数据流代表的意义:

F1:修改服务器IP                  F2:查询服务器IP

F3:服务器IP                      F4:输入注册信息

F5:表信息取得                    F6:插入注册信息

   P2.3

用户

本地信息取得

 

D2  服务器IP

   P2.1

服务

连接

F1

   P2.2

用户

信息

核对

F3

F3

 

F4

                                                 D1 职员资料表

职员

                                                                   

F2

                          

 图2.4  办公自动化系统第二层DFD

如图2.4为办公自动化系统第二层DFD的登陆管理。首先在服务器IP表里查到服务器IP地址进行数据服务器的连接,然后在职员资料表中取得用户信息对用户输入的信息进行核查,如果输入正确,就会取得本地信息,如端口号、IP地址等。最后把职员资料表中的用户状态设为在线并把IP地址,端口号等进行更新。

F1:取得服务器IP             F2:登陆信息输入 

F3:更新职员表               F4:该职员信息取得 

   P3.1

资料

修改

 

                                 

F4

                                 D1  职员资料表  

F5

F1

F8

 

F13

F11

   P3.2

查询

管理

                                 D5 电子公告表

职员

总经理

F2

 

F9

F6

D3                               D3 部门表

F12

F3

                                

F14

 

F10

F7

                                 D6 规章制度表

                                 D4 项目组表

                  

图2.5  办公自动化系统第二层DFD

如图2.5为办公自动化系统第二层DFD的资料管理。职员可以输入修改信息对职员注册信息进行修改,职员也可以输入查询信息,查询有关企业与用户资料的所有信息。总经理有最高的权限可以修改职员的信息,和企业的组织机构包括:组的增加与删除,部门的增加与删除,组与部门名称的修改,信息资料的修改等。

以下是各数据流代表的意义:

F1:修改信息输入                          F2:查询信息输入

F3:返回查询结果                          F4:修改职员表

F5:职员信息取得                          F6:部门信息取得

F7:项目组信息取得                        F8:修改职员特殊信息

F9:修改、添加部门                        F10: 修改、添加项目组

F11:取得公告内容                           F12: 取得规章制度

F13:输入公告内容                           F14:输入规章制度

   P4.2

资料取得处理

   P4.1

连接请求处理

                                                      

F1

职员       

F2

                                                    

 

F4

F3

                                                     D1职员资料表

F6

F5

F6

F7

F5

F5

F5

F6

   P4.3

连接其他职员

其他职员       

   P4.5

连接某一部门

某一部门

        

   P4.4

连接整个公司

公司职员       

F6

   P4.5

连接某

项目组

某项目组

        

 

             信息记录  D5

图2.6  办公自动化系统第二层DFD

如图2.6为办公自动化系统第二层DFD信息传输管理,首先职员选择想要连接的对象,输入发送信息,然后系统根据职员选择的连接对象在职员资料表中找到所需的连接信息,包括IP地址与端口号,然后根据选择的连接对象进行相应的连接,最后更新信息记录表,将职员的信息记录保存到本地数据库。

以下是各数据流代表的意义:

F1:输入连接信息与交流信息                  F2:连接信息

F3:其他职员资料输入                        F4:其他职员资料取得

F5:连接信息与交流信息                      F6:交流信息输出

F7:更新信息记录

第三章  系统设计

3.1系统设计原则

作为一套应用系统,除了要能够完成预定的各种功能外,在设计时还必须遵循实用性、完备性、可靠性、安全性、兼容性、可扩充性等原则。具体要求原则如下:

(1)安全性  主要是指系统运行的安全性、数据的安全性和保密性等。同时,应根据用户的工作和业务流程为用户提供合理可靠的安全策略。   

(2)实用性  是系统建设的主要目标。主要是指系统功能应能够满足当前和今后一段时间内企业办公的实际需要。

(3)可靠性  是指系统的数据结构合理、模块功能正确等,以保证数据处理和信息传输的正确可靠。  

(4)友好性  是指界面的美观和使用的方便程度,即界面友好,有良好的引导功能、容错和查错功能。   

(5)可维护性  是指系统应具有较好的可维护性,以方便系统管理员对系统进行维护。   

(6)可扩充性  本系统目前还不是很完善以后需要改进的地方还很多。随着计算机在企业各部门应用的进一步深入,也后需要增加的功能还很多。另外,系统还应该留有一定的接口,以便将来扩充的方便等;   

(7)可移植性和适应性  针对目前我国企业的实际情况,系统应具有较强的适应性和较好的可移植性,同时尽量避免对硬件的依赖。

3.2系统功能模块设计

办公自动化系统有五个子系统

(1)个人工作子系统

(2)信息中心子系统

(3)日常工作子系统

(4)流转中心子系统

(5)维护中心子系统

各子系统包含的功能模块如下:

个人工作子系统:电话簿、总经理工作计划
信息中心子系统:信息交流、电子公告、规章制度、新闻信息
日常工作子系统:资料管理、办公用品申领
流转中心子系统:公文管理
维护中心子系统:权限管理、注册管理

如图3.1为本系统的功能模块图

办公自动化系统

 

个人工作子系统

流转中心子系统

日常工作子系统

维护中心子系统

信息中心子系统

信息交流

电子公告

规章制度

新闻信息

资料管理

办公用品申领

注册管理

权限管理

公文管理

总经理工作计划

电话簿

 

            图3.1  办公自动化系统功能模块图

3.2.1  个人工作
  提供员工个人工作中的基本功能,电话簿(允许当前用户创建属于自己的名片信息,分类、管理个人名片,查阅组织内用户的名片)、总经理工作计划(主要是记录了总经理近期的工作计划)等。

3.2.2  信息中心
  是本单位发布信息与交流的平台,包括电子公告(用来向公告板上发布通知、制度、活动和会议等消息)、规章制度(数据库可以管理规章制度,用户可以看到已发布的规章制度)、新闻信息(企事业单位为让员工了解一些信息,而发布本单位的新闻信息,和录入一些国际国内新闻)等。

3.2.3  日常工作
  根据各部门及其工作流程定制相关内容,资料管理(辅助管理公司内部的各种资料)、办公用品申领(主要用来对企业中办公用品的使用情况进行统计,办公用品领用申请,办公用品领用申请进行批阅,以及办公用品的领用办理)等。

3.2.4  流转中心
  根据系统管理中设置的相应流程进行公文流转,最终实现无纸化办公,提供公文流转(实现了收、发文的管理、流转、批约、转出和归档)等功能。
3.2.5  系统管理
  包括组织机构的设置、用户权限角色的定义等功能。把系统管理员从烦琐的管理工作中解脱出来。

3.3系统物理配制方案设计

一、硬件环境:服务器端:主频2G以上CPU,512MB内存,通过局域网接入Internet。客户端:主频1GHZ以上CPU,128MB以上内存,20G以上硬盘,内部人员通过Intranet访问系统。   

二、软件环境:服务器端:windows2000 Server操作系统,SQL Server2000数据库客户端:windows 2000

3.4数据库设计

数据库的设计分为逻辑设计和物理设计两部分。在数据库逻辑设计方面,可以遵循自顶向下的结构化设计方法,确定系统目标后,采用E—R图设计数据库的概念模型,然后根据此模型导出数据库的关系模型。

用户的需求集中体现在各种信息的提供、保存、更新和查询等方面,这要求数据库结构要充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。

以下为本系统所用到的数据表:

1)ServerIP表位于本地数据库中用来存放数据库服务器的服务器名或服务器IP地址,它由系统自动生成,图3-2为该表的具体构成:

图 3-2   服务器IP表

2)BuMen表位于数据库服务器中用来存放公司的所有部门情况,包括部门名称、部门简介。

图3-3为该表的具体构成:

                   图3-3   部门表

3)XinXi表位于数据库服务器中用来存放用户不在线时,其他用户给其发送的信息。如图3-4为该表的具体构成。其中userName为发送者用户名,XinXiDuiXing为发送的目的地。

图3-4   信息表

4)YongHu表位于数据库服务器中用来存放企业内部员工的信息,以及用户的状态等。如图3-4为该表的具体构成。其中UserName为用户名,Name为用户真实姓名,IPAddress为用户的IP地址,State为用户的状态(是否在线),BuMen

为用户所在部门,Zu为用户所在组,Port为用户使用的端口号。

                  图3-4   职员资料表

5)信息记录表位于本地数据库中,用来存放用户的信息记录如图3-5为该表的具体构成。其中XinXiDuiXiang为用户交流的对象,XinXiJiaoHu为用户是发送数据还是接收数据。

                  图3-5   信息记录表

3.5输入输出设计

输入设计对系统的质量有着决定性的影响。一是由于输入数据的正确性将直接决定处理结果的正确性,二是输入设计是系统与用户的接口,决定着人机交互的质量和效率。输入设计主要包括输入方式、校对方式和输入界面及格式等设计。

    输出是系统产生的结果或提供的信息。输出设计要正确及时地反映各管理层所需的各种信息,系统输出的有效性、输出信息方式的可接受性将直接影响系统的使用效果。输出设计主要有打印方式输出、显示输出、对话输出等。   

系统输入输出界面设计

 (1)输入界面:

办公自动化输入界面分两大部分:左边部分为公司,部门,职员选择区,采用树形框形式,用于分类查找;底部为用户发送信息编辑区,用于编辑发送信息。用户先在选择区找到相应的职员或部门,然后在编辑区内对数据进行信息输入、附件添加等操作,各种按纽会根据需要出现在编辑区上方的面板内。

 (2)输出界面:

输出界面设计在主窗口的右边,用于接收其他职员的信息,输出界面的下面有一系列的按钮,用于对输出信息的操作。

 (3)用户界面风格:

用户界面的设计对整个系统的有效应用是至关重要的,因为它是操作员和管理员直接进行人机对话的重要组成部分。用户界面设计不好或者设计不合理,软件系统就难以发挥应有的效益。在本系统中坚持以下原则:

采用图形化操作界面,形式和术语要适应用户的能力和要求,做到六字原则—“简单、方便、一致”,尽量符合流行软件界面风格,为用户提供一个友好的操作环境;用户界面的设计保持一致性,系统的命令和菜单具有相同或类似的形式;

对于各菜单,控件可用鼠标操作外,还为用户提供对应的键盘操作功能常用的功能提供快捷键,以满足不同用户的操作习惯。

3.6系统的安全性设计

计算机系统的安全一直是用户关注的问题。如何才能使本企业的资料运行于网络之中又不让别人破坏,是一个棘手的问题。本系统有强大的权限管理功能。其权限分三种:普通员工级权限、部门级权限、经理级权限。由于权限可以按部门指定,因而不仅可以方便地设计部门员工的权限还可以指定部门下员工的特殊权限。通过权限设计保证数据的安全性。

第四章  办公自动化系统的技术支持与实施

4.1  选择编程语言

SUN公司的Java是一个广泛使用的网络编程语言,它是一种新的计算概念。 首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、 具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具有很高的性能。其次 它最大限度地利用了网络,Java的小应用程序 (applet)可在网络上传输而不受 CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。
    由于Java语言在网络方面的优异表现,故本系统的实现Java是一个最好的选择,然而Jbuilder是业内开发java程序的最好的工具之一,所以我选择了Jbuilder作为java的开发工具。

4.2  SQLServer2000 数据库

作为标准的关系数据库,至少应具备以下特征:   

(1)海量数据存储能力;   

(2)快速有效的数据处理能力;   

(3)优秀的多用户机制;   

(4)完善的数据安全控制机制;    

(5)具有开放性,并应与国际标准完全吻合;   

(6)可靠性、容错性;   

基于以上特征,我选择SQL Server2000作为我的数据库系统平台,这主要是因为SQL Server2000是Windows NT平台上性能较好的关系数据库,与NT平台在权限管理、目录服务、系统级配合等方面都可以很好地结合。

4.3  java数据库解决方案

在数据库应用中,Java的解决方案是JDBC(JavaDatabase Connectivity)。JDBC建立在X/OpenSQL CLI(调用层接口)基础上,可以编写访问任何关系数据库的统一的纯Java应用程序,实现对Internet环境下各种异构关系数据库的访问。同时,因为Java的平台无关性,采用JDBC编写数据库应用程序的开发者可以真正做到“编写1次,随处运行”。

4.3.1  JDBC工作原理

JDBC主要包含2种接口,分别是面向驱动程序低层的JDBC Driver API和面向应用程序开发人员的JDBC API。

一 JDBC Driver API

JDBC Driver API是为数据库厂商提供的驱动程序的编程接口。JDBC驱动程序是JDBC结构的支柱,用于提供与数据源的接口,解释和执行来自应用程序中的SQL语句,并返回结果。JDBC驱动程序包括4类:第l类是JDBC-ODBC Bridge Driver即JDBC桥加上ODBC驱动程序,在每个客户机上装入ODBC驱动程序,JDBC通过ODBC访问数据库。第2类是Native API(Partly Java Driver),即本机API加上部分Java驱动程序,将JDBC调用转换为各种数据库系统的客户API调用。第3类是JDBC/Net(Pure Java Driver),即JDBC Net加上Java驱动程序将JDBC调用翻译成独立于数据库网络协议,然后再由服务器翻译成数据库协议,可与各种不同的数据库相连。第4类是地native(Pure Java Driver),即本机协议加上Java驱动程序,将JDBC调用转换为数据库使用的网络协议,由客户直接调用数据库服务器。

二  JDBC API

JDBC应用程序实现对数据库的访问需要建立与数据库的连接,发送SQL语句,返回数据结果给客户。应用程序开发人员利用JDBC API来完成这些工作。JDBC API在java.sql包中定义,包含JDBC访问数据库用到的所有类和接口,主要有:   

(1)DriverManager类:用于装入驱动程序,定义在网络上需要访问的数据源的JDBC URL,根据定义的URL选择匹配的驱动程序、为建立数据库连接提供支持。   

(2)java.sql.Connection接口:用于特定数据库的连接。   

(3)java.Statement接口:为SQL语句提供一个容器,包括执行SQL语句、取得查询结果等方法。它包含2个重要的子类。一个是java.sql.PrepareStatement允许在SQL类中输入参数;另一个是java.sql.CallableStatement,用于执行SQL存储过程。   

(4)java.sql.ResultSet接口:提供对结果集进行处理的手段。

4.3.2  JDBC应用程序结构

利用JDBC API进行数据库访问的应用程序基本结构如图3-1所示,主要包括下列部分:   

(1)装载驱动程序:用DriverManager类提供的Class.forName()方法来加载驱动程序,例如用C1ass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)语句直接加载SUN公司的JDBC-ODBC桥接驱动程序。                       

用C1ass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")可以连接SQLServer2000数据库,由驱动程序负责向DriverManager注册,在与数据库相连时使用该驱动程序。

             图3-1   JDBC应用程序结构

(2)建立与数据库的连接。用DriverManager类提供的getConnection

(URL、userName,PassWord)方法来建立与数据源的连接,返回一个Connection对象。其中URL参数格式为:jdbc:<subprotocol>:<subName>。<subprotocol>指支持数据库连接的驱动程序使用的子协议,例如ODBC引擎。<subName>指数据源的信息、例如数据源的IP地址、端口号、数据源名。   

(3)创建语句对象。一旦建立了与数据库的连接,就可以利用Statement接口创建SQL语句对象,例如:Statement stmt=connect.createStatement()。根据需要还可以创建PrepareStatement对象来处理带参的SQL语句,或创建CallableStatement对象来处理SQL存储过程。   

(4)执行SQL语句。利用创建的语句对象,用Statement.executedXXX方法来执行SQL语句,并返回一个ResultSet对象。例如:

ResultSet rs=stmt.executeQuery(“select * from YongHu”)执行对YongHu表的查询操作,并返回rs结果集。以下代码是结合本系统数据库访问的具体实现:

String SQLDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

String cUser = "jdbc:microsoft:sqlserver://" + serverName + ":1433;" +

      "DatabaseName=User";         // serverName代表数据库服务器IP地址或服务器名

try {

    try {

         Class.forName(SQLDriver);                  //装载驱动

         connR = DriverManager.getConnection(cUser, "sa", "");  //创建连接

         stmR = connR.createStatement();           //创建SQL语句对象

        }

    catch (ClassNotFoundException es)               //捕获ClassNotFoundException异常

{          

            es.printStackTrace();                 //打印异常抛出地点等信息

        }

    }

catch (SQLException ex)                            //捕获SQLException异常

{                        

ex.printStackTrace();

    }

以上代码是实现数据库的连接,可以连接到服务器名为serverName的SQLServer2000网络数据库。

String  updateStatePort = "update YongHu set State=1,Port="+port+"where UserName='" + userName + "'";

       //设置用户为在线,将本地使用的Port在数据库服务器上更新的SQL语句

String updateIPAddresss = "update YongHu set IPAddress='" +localIP + "' where UserName='" + userName + "'";                //更新数据库服务器上用户的IP地址

int i = stmR.executeUpdate(updateState);     //执行SQL语句        

int l = stmR.executeUpdate(updateIPAddresss);//执行SQL语句

以上代码可以实现数据库的更新:当用户登录后,在网络数据库服务器上将其状态设为在线,即State为1,并将用户本地的IP地址,与端口号在表内更新。

4.4  Java局域网解决方案

4.4.1   C/S的概念

客户机/服务器网络中,以计算机主机或服务器为中心,其他计算机、工作站与服务器连接在一起。客户机之间要传递信息均要得到服务器的允许才能进行。在C/S模式中,将请求服务的一方称为客户(C1ient),将提供服务的一方称为服务器(Server)。服务程序一直在一个服务地址(端口)监听对该服务的请求,直到客户对这个服务地址提出请求,服务程序为客户请求作出适当的反应。

4.4.2   用Socket实现C/S编程   

套接字(Socket)编程采用客户机/服务器的网络模式。服务器进程一直驻守在服务器上,客户进程向服务器进程发出连接请求,服务器进程响应并建立连接;服务进程与客户进程建立连接后,客户进程发送数据,服务进程处理这些数据并将处理结果返回给客户端进程。

4.4.3   Java Socket

Java语言为实现其跨平台、制定Internet标准语言、增强与用户的互动等目标,在吸收BSD接口函数优点的基础上,加入Java跨平台、面向对象、支持Internet等特点,推出Java Socket API软件——Java.net。

Java.net的API分为4类:处理URL的java.net.URL;处理主机名称和IP地址的java.net.InetAddress;处理UDP通信协议的java.net.DatagramPacket、java.net.DatagramSocket、java.net.DatagramSocketlmpl等;处理TCP通信协议的java.net.ServerSocket、java.net.Socket、java.net.Socketlmpl。

而我们的实际应用中很多程序是基于TCP/IP网络编程的,这些应用程序中服务器端和客户端要用到的Socket API有:   

A)服务器端的API:   

(1)java.net.ServerSocket 设置通信端口。

(2)accept  侦听及接受客户端的连接请求,并建立与客户端的连接。 

(3)read    接受来自客户端发送的数据。   

(4)write   发送数据到客户端。   

(5)close   关闭Socket及客户端的通信连接。   

B)客户端的API:   

(1)iava.net.Socket  建立客户端的Socket并尝试与服务器建立连接。

(2)read   接受来自服务器端发送的数据。   

(3)write  将数据发送到服务器端。   

(4)close  关闭Socket及与服务器端的连接。

4.4.4   Java Socket在C/S中的体系结构   

服务器端程序用ServerSocket创建服务器进程,并用accept方法来进行监听并建立与客户端的连接,处理客户端请求,并将处理结果返回给客户端。客户端程序用Socket创建客户端进程并与服务器建立连接,发送数据给服务器端并接受服务器的处理结果。java Socket在C/S模式中的进程交互过程如图3-3,Socket是网络编程的基础,无论是服务器端还是客户端程序,Socket都是不可缺少的元素。

         图3-2  java  Socket在C/S模式中的进程交互过程图

4.4.5 办公自动化系统网络连接

void jButton7_actionPerformed(ActionEvent e) {       //发送按钮按下时触发的事件

String sendLine = jTextField1.getText();            //得到发送内容

for (int i = 0; i < listIP.size(); i++) {      //与listIP列表里的IP地址建//立连接

    try {

         Socket socket = new Socket(listIP.get(i).toString(), 8080);

                                                         //与对方的8080端口建立连接

         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(

               socket.getOutputStream())), true);       //建立输出流

         out.println(sendLine);                          //将发送内容输到输出流

         socket.close();                                 //关闭连接

        }

     catch (Exception ex) {

        try {

          socket.close();                              //如果发生异常也会关闭输出流

        }

        catch (IOException ec) {

        }

        ex.printStackTrace();

      }

    }

  }

以上是客户端的代码。它可以实现:在主界面中,用户点击发送按钮,系统就会根据listIP里的IP地址与服务器建立连接,其中listIP中的地址会在用户点击JTree时生成。连接成功后,会与服务器端建立输出流,以便输出信息。

class ServerThread extends Thread {                    //建立内部类

      public void run() {                              //内部类所执行的动作

      try {

          server = new ServerSocket(ZhuFrame.PORT);   //建立ServerSocket

          while (true) {

            socket = server.accept();                 //等待客户端的连接

            try {

              String userName = "";

              String userIP = socket.getInetAddress().toString().replaceAll("/","");

                                                   //得到连接成功后的客户端的IP地址

              String selectUser ="select UserName,State from YongHu where IPAddress='" +userIP + "'";                //根据IP地址查找用户名

              ResultSet r5 = stmR.executeQuery(selectUser);

              while (r5.next()) {

                userName = r5.getString("UserName");

                if (r5.getInt("State") == 1) {

                in = new BufferedReader(new InputStreamReader

                     (socket.getInputStream()));     //建立输入流

                  String getStr = in.readLine();     //在输出流中读数据

                  String str=userName + "对你说:" + getStr;

                  jdbTextArea1.append(str.replaceAll(" ","")+"\n");

                                                //输出读到的内容

                  socket.close();              //关闭Socket

                  if (jTextArea2.getText().equals("请选择成员或部门")) {

                    jTextArea2.append("发送对象:" + userName);

                    list.clear();              //清空用户名列表

                    listIP.clear();            //清空IP地址列表

                    list.add(userName);        //向用户名列表中加入发信息人的用户名

                    listIP.add(userIP);        //向IP地址列表中加入IP地址

                  }

                }

              }

              r5.close();

            }

            catch (Exception e) {

              e.printStackTrace();

              socket.close();

            }

          }

        }

        catch (IOException e) {

          e.printStackTrace();

        }

      }

}

以上是服务器端的代码。它是一个线程,当调用accept方法后,进入等待状态,等待客户端程序的连接。当连接建立后会建立与客户机的输入流,以便接收信息。如果接受者处于等待状态那么会把发信息职员的用户名与IP地址分别保存到list与listIP两个表中以便接受者直接回复信息,节省查找用户的时间。

4.5  系统界面解决方案

4.5.1 Java Swing的原理和特点   

Java开发工具包(JDK)包含了一个复杂的图形API和用户接口API的集合,该集合的核心软件被称为Java的基础类(JFC)。Java Swing是JFC中的一个重要的技术,其组合了大量的可用于构建复杂用户界面的轻量级组件。Swing组件是现有的抽象窗口工具包AWT组件的增强,但它又不完全取代AWT组件,这两种组件可以用在同一个界面上。本系统选择Java Swing组件进行开发,是由于Swing组件具有两个很显著的特点:轻量级和可插入外观。   

·轻量级组件并不是指其体积小,而是组件不依赖于“对等类”(“Peer”classes)而由Java的其他类所支持。所谓“对等类”是指本机系统类。因为Java Swing中的大多数组件都有其自己的由Java外观类所支持的视图,而并不依赖于本机系统类。所以,Swing组件集都为轻量级组件。   

·可插入外观组件(Pluggable Look—and—feel)允许应用程序能够在不重新启动的情况下看到Swing组件的外观效果。通常,本机外观效果是针对程序所运行的特定系统平台来确定的(如Windows和Motif等)。而由于Swing支持跨平台的外观(也称为Java外观),使得应用程序不论在哪个操作系统平台上运行都具有同样的效果。固本系统所有的界面均选用Java Swing进行开发。

4.5.2   用JTree实现公司部门人员分类   

Jtree使用人们熟悉的文件夹和树叶图来显示分层的数据。应用最广泛的树组件无疑是Windows Explorer,它包含一个用于导航目录的树组件。   

树由许多类和接口组成,这些类和接口在swing.tree包中定义,swing包中的JTree类代表树组件。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以是子节点,除根节点之外的所有节点都是只有一个父节点。查询树中的文件夹和树叶都来自数据库,因此树的结构很复杂。本系统树组件位于系统主界面的左侧,用于员工的分类查询,它可以清楚地描述各部门,各员工的层次关系,使企业的组织机构一目了然。本系统树组件实现的代码:

public JTree jbInit() throws Exception {                 //方法的返回类型为JTree

    boolean flag = true;

    String buMenName;

DefaultMutableTreeNode top = new DefaultMutableTreeNode("公司各部门成员一览");

                                                     //定义树根

    String searchBuMenName = "select * from BuMen";

    String searchBuMen;

    String userName;

    ResultSet r1 = stmR.executeQuery(searchBuMenName);

    int i = -1;                                         //使list可以取到

    while (r1.next()) {

      i = i + 1;

      buMenName = r1.getString("BuMenName");

      searchBuMen = "select * from YongHu where BuMen='" + buMenName + "'";

                                                   //从用户表里查找属于该部门的成员

      ResultSet r2 = stmR.executeQuery(searchBuMen);

      DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode(buMenName);

                                                   //定义树枝

      list.add(dmtn);                             //将树枝保存到list表中

      while (r2.next()) {          

        userName = r2.getString("UserName");

        DefaultMutableTreeNode dmtn1 = new DefaultMutableTreeNode(userName);

                                               //建立树叶

        dmtn.add(dmtn1);                      //将树叶加到树枝上

      }

      r2.close();

      r1 = stmR.executeQuery(searchBuMenName);

      for (int j = 0; j <= i; j++) {

        r1.next();                                 //使r1继续执行

      }

      top.add(dmtn);                               //把树枝与树叶加到根

      }

      r1.close();

      tree = new JTree(top);                         //初始化JTree

JScrollPane jsp = new JScrollPane(tree);

//将JTree包含到JScrollPane中使JTree加上滚动条

      return tree;

      }

以上代码可以根据数据库服务器上的YongHu表动态的生成Jtree,这棵树可以清楚地体现整公司各部门,各员工之间的关系

在查询中,树节点选取是很重要的,当双击某一节点时,要能提取该节点的信息,并同时击活一个事件.下面结出了本系统的addMouseListener()和mousePressed()方法.

void jTree1_mouseClicked(MouseEvent e) { //树click

    List getSelect = gouZaoJTree.treeConsult(e);    //得到所选择的对象

    list = getSelect;

    jTextArea2.setText("");

    if (list.size() == 1) {                         //发送对象为1个

      jComboBox1.setVisible(false);

      String listText = list.get(0).toString();

      if (listText.equals("请选择成员或部门")) {    //如果什么都没选

        jTextArea2.setText("请选择成员或部门");

      }

      else {                                      //选择一个对象的情况

        jTextArea2.setText("发送对象:" + listText);

        listIP.clear();                          //清空listIP列表

        searchIP = "select IPAddress from YongHu where UserName='" + listText +

            "'";                                 //找到选择用户的IP地址

        String ipAddress;

        try {

          ResultSet r4 = stmR.executeQuery(searchIP);

          while (r4.next()) {

            ipAddress = r4.getString("IPAddress");  //得到IP地址

            listIP.add(ipAddress);                  //将IP地址保存到列表中

          }

          r4.close();

        }

        catch (SQLException ex) {

          ex.printStackTrace();

        }

      }

    }

else if (list.size() == gouZaoJTree.getChengYuanCount()) {

                                                 //发送对象为整个公司

      jComboBox1.setVisible(false);

      jTextArea2.setText("发送对象:公司所有成员");

      listIP.clear();

      searchIP = "select IPAddress from YongHu";

      String ipAddress;

      try {

        ResultSet r4 = stmR.executeQuery(searchIP);

        while (r4.next()) {

          ipAddress = r4.getString("IPAddress");

          listIP.add(ipAddress);

        }

        r4.close();

      }

      catch (SQLException ex) {

        ex.printStackTrace();

      }

    }

    else {                              //发送对象为整个部门

      jComboBox1.setVisible(true);

      jTextArea2.append("发送对象:" + list.get(0).toString().replaceAll(" ", ""));

      for (int i = 1; i < list.size(); i++) {       //向用户基本资料里输出

        jTextArea2.append("," + list.get(i).toString().replaceAll(" ", ""));

      }

      jComboBox1.removeAllItems();                   //选择要发送的组

      jComboBox1.addItem("发送至部门内所有人");

      listZu.clear();

      for (int i = 0; i < list.size(); i++) { //向选择组里输出

        boolean flag = true;

        String selectZu = "select Zu from YongHu where UserName='" +

            list.get(i).toString() + "'";

        try {

          ResultSet r3 = stmR.executeQuery(selectZu);

          String str = "";

          while (r3.next()) {

            str = r3.getString("Zu");

          }

          for (int j = 0; j < listZu.size(); j++) {

            if (str.equals(listZu.get(j))) {

              flag = false;

              break;

            }

          }

          if (flag) {

            listZu.add(str);

            jComboBox1.addItem(str);

          }

          r3.close();

        }

        catch (SQLException ex) {

          ex.printStackTrace();

        }

      }

当用户点击tree,它会根据具体的情况返回你点击的职员的资料,当点击部门时,用户可以选择部门下的某个组进行群发,也可以给整个部门群发,当点击某个用户时可以给该用户发送消息,当点击整个公司时可以给整个公司的成员进行群发。这样会节省发送人的很多时间。

    本文在分析中国办公自动化现状和存在问题基础上,分析了中国办公自动化的特点和要求,并根据南开创元信息技术有限公司的实际情况,开发了一个颇具特色的办公自动化系统——,它代表快速,高效与界面美观并存。在实际应用中得到了较好的效果。在本文中介绍了办公自动化系统的体系结构、开发思想、功能模块设置。

最后,系统还存在以下不足之处,以后应该改进:

  1. 本地的数据库设置多余,应该把服务器IP地址保存在本地的文本文件中,将信息记录直接保存在服务器上。这样就免去了用户在本地安装SQLServer的麻烦。
  2. 系统的功能有些单薄需进一步完善。