基于J2EE的企业OA系统的设计与实现
摘要
办公自动化(OA)系统,是记录企业日常运营中的某些活动,集中管理部门的各种信息,同时能够方便、快速的得到所需要的信息,提高企业的办公质量和办公效率,降低办公成本,节省资源的有效途径。在传统的办公模式中,由于缺少重要的信息传递和工作流程环节,办公的各个部门之间无法实现信息共享和信息集成,从而难以实现各个部门之间的高效协作。随着信息技术的发展和国内信息技术应用水平的提高,在办公过程中,传统的工作方式和审批模式己经难以满足新的需求,实现办公自动化已经是提高机关和企事业单位办公效率,规范化管理的必然趋势。
本文分析了某企业的实际日常办公的作业流程,系统采用J2EE企业架构,是基于Struts架构的Web应用程序,同时结合B/S开发模式来实现企业办公自动化的管理。本文描述的企业OA系统其主要功能包括权限管理、人员管理、培训管理、项目管理、办公用品管理、会议室管理、加班管理、报销系统、订餐管理和图书管理等等。其中,报销管理用于员工报销信息的查询、增加、编辑、删除和查看等基本操作,行政人员可以对普通员工的报销信息进行管理,方便公司对员工报销信息的统计。加班管理用于员工的加班信息的查询、增加、编辑、删除等基本操作,行政管理人员对加班的信息能进行审批通过、审批不通过、统计、打印统计的Excel报表等操作,大大简化和方便了加班管理。会议室管理用于公司会议室资源的查询、增加、删除、编辑,能对会议室资源进行预定查询、预定、预定回填、取消预定等操作。
本课题设计的信息系统完全按照软件工程规范进行。本文对课题的需求分析、概要设计、详细设计、实现与系统测试等环节进行详细阐述。系统在企业中的部署和实测,得到了企业的肯定和好评。结果表明,系统具有很好的实用性和拓展价值。
关键词:办公自动化,J2EE,B/S模式,企业办公
I
工程硕士论文 Abstract
Design and Implementation of Enterprise OA Sytem Base on J2EE
Abstract
Office automation (OA) system is the record of day-to-day business operations of certain activities, focus on management of information, and to facilitate the rapid get the information they need to improve the quality of corporate office and office efficiency and lower the cost of office, an effective way to save resources. In the traditional office model, the lack of important aspects of information transfer and workflow, office can not be achieved between the various sectors of information sharing and information integration, which is difficult to achieve efficient collaboration between various sectors. With the development of information technology and national information technology standards, in the office during the traditional working methods and approve the new model has been difficult to meet the needs of office automation is already government agencies and enterprises to improve office efficiency, Standardized management of the inevitable trend.
This paper analyzes the actual daily work in an enterprise operating processes, systems, enterprise architecture using J2EE, Struts framework for Web-based applications, combined with the B/S development model to achieve business management office automation.Main features include access system management, personnel management, training management, project management, office supplies management, conference room management, overtime management, reimbursement systems, management and reservations, please book management. One employee claims for reimbursement of management information enquiries, increase, edit, delete and view the basic operation, the officers can be reimbursed for ordinary employees of information management, reimbursement to employees for the company's statistical information. Overtime for employees to work overtime management information enquiries, increase, edit, delete, and other basic operations, administrative staff to work overtime to the information through a vetting and approval is not passed, statistics, statistics excel print statements, and other operations, greatly simplified and convenient
II
工程硕士论文 Abstract
The management of overtime. Conference Room for the management of the company's resources for meeting rooms, to add, delete, edit, to the conference room is scheduled for resources, and is expected to, and is expected to backfill, cancellation and other operations.
The topic of information systems is full accordance with the design of software engineering specifications. In this paper, the subject needs analysis, outline design, detailed design, implementation and system testing and other links in detail. System in the enterprise deployment and measurement has been corporate recognition and praise. The results show that the system has good usability and expand value.
Key Words: OA,J2EE,B/S,Office of Enteprise
III
工程硕士论文 目录
目录
摘要 ................................................................................................................................... I ABSTRACT ..................................................................................................................... II 1绪论 ................................................................................................................................ 1
1.1课题来源 .............................................................................................................. 1 1.2课题背景 .............................................................................................................. 1 1.3 研究的意义 .......................................................................................................... 3 1.4系统开发技术路线 .............................................................................................. 4 1.5本文组织结构 ...................................................................................................... 4 2开发技术综述 ................................................................................................................ 5
2.1 设计思想 .............................................................................................................. 5 2.2 技术支持 .............................................................................................................. 5 2.3 相关技术分析 ...................................................................................................... 5
2.3.1 MVC模式简介 .......................................................................................... 5 2.3.2 Model1和Model2 ..................................................................................... 6 2.3.3 Struts框架简介 .......................................................................................... 7 2.4 开发环境 .............................................................................................................. 9
2.4.1 Eclipse 简介 .............................................................................................. 9 2.4.2 Tomcat 简介 ............................................................................................ 10 2.4.3 Oracle 简介 ............................................................................................. 10
3系统需求分析 .............................................................................................................. 11
3.1可行性概述 ........................................................................................................ 11
3.1.1技术可行性 .............................................................................................. 11 3.1.2 经济可行性 ............................................................................................. 11 3.1.3 操作可行性 ............................................................................................. 12 3.2需求总体约束 .................................................................................................... 12 3.3工作流程分析 .................................................................................................... 12 3.4子系统业务需求 ................................................................................................ 13 4系统概要设计 .............................................................................................................. 15
IV
工程硕士论文 目录
4.1功能与界面设计 ................................................................................................ 15
4.1.1报销基本信息维护 .................................................................................. 15 4.1.2 报销基本信息录入 ................................................................................. 17 4.1.3 加班维护 ................................................................................................. 18 4.1.4 加班统计 ................................................................................................. 21 4.1.5 会议室管理基本信息维护 ..................................................................... 22 4.1.6 会议室预定查询 ..................................................................................... 24 4.1.7 会议室预定 ............................................................................................. 25 4.1.8 会议室预定查询列表 ............................................................................. 26 4.2 数据库设计 ........................................................................................................ 27
4.2.1数据库的概念 .......................................................................................... 27 4.2.2 数据库的选择 ......................................................................................... 28 4.2.3数据库表的设计 ...................................................................................... 28
5系统详细设计与实现 .................................................................................................. 32
5.1 报销管理 ............................................................................................................ 32
5.1.1 报销基本信息维护 ................................................................................. 32 5.1.2 报销基本信息录入 ................................................................................. 38 5.1.3 报销单基本信息 ..................................................................................... 41 5.2 加班管理 ............................................................................................................ 42
5.2.1 加班维护 ................................................................................................. 42 5.2.2 加班统计 ................................................................................................. 44 5.3 会议室管理 ........................................................................................................ 49
5.3.1 会议室管理基本信息维护 ..................................................................... 49 5.3.2 会议室预定查询 ..................................................................................... 49 5.3.3 会议室管理预定列表 ............................................................................. 50
6系统测试 ...................................................................................................................... 51
6.1 模块测试 ............................................................................................................ 51 6.2 整体测试 ............................................................................................................ 51 7总结与展望 .................................................................................................................. 53
7.1课题总结 ............................................................................................................ 53
V
工程硕士论文 目录
7.2课题进一步研究方向 ........................................................................................ 53 致谢 ................................................................................................................................. 参考文献 ......................................................................................................................... 55
VI
工程硕士论文 绪论
1绪论
1.1课题来源
随着信息网络技术的不断发展和广泛应用,日前许多企事业单位都已建立了企业级网络硬件系统,一般都直接与互联网相连接,充分实现了网络互联和资源共享。硬件的不断更新换代推动这软平台的不断扩充。为了充分发挥网络的作用,提高办公处理效率,建设企业办公自动化系统已经是迫切需要。办公自动化将崭新的办公理念与先进的信息技术完美结合,不但避免了传统办公自动化的种种弊端。而且,无论您身处何地,只要有上网条件就可以利用网上办公系统,及时有效地对各种文件、报告进行处理,同时也将彻底摆脱桌面上沉沉繁杂的纸张文件,使得繁重的工作变得轻松自如,极大地提高工作效率。
为了充分发挥网络的效能,本文分析了某企业的目前物理办公流程。目前企业的日常办公管理工作项目众多,流程复杂,日常流转的公文非常多。业务管理和经手人员不断的在纸质文档中来回翻阅,一份文件的出台到发布,可以说忙坏了业务人员。为了改善这种传统的纸质文档和简易电子表格办公的时代,需要充分利用企业的网络系统,并结合先进的信息技术来完成企业信息化的自动化办公是企业的第一需求。因此,本课题立足与解决企业传统办公落后的手段而提出了设计开发一套基于网络的并符合具体企业的自身业务需求的办公自动化系统。
1.2课题背景
我国从80年始,尤其是进入90年代,办公自动化发展迅猛。随着计算机技术的发展,办公自动化系统从最初的汉字输入、字处理、排版编辑、查询检索等单机应用软件逐渐发展成为现代化的网络办公系统,通过联网将单项办公业务系统联成一个办公系统。
从办公自动化发展的过程和今后发展的趋势来讲,办公自动化已经经历了从第一代发展到目前的第二代,并且正在第三代发展,如图1-1所示。
1
工程硕士论文 绪论
MIS办公自动化系统群件办公自动化系统知识管理办公自动化系统数据信息知识 图1-1 办公自动化的发展
从80年代中期起步的第一代办公系统以个人电脑、办公套件为主要标志,实现了数据统计和文档写作电子化,完成了办公信息载体从原始纸介质方式向电子比特方式的飞跃[1]。
从20世纪90年代中期开始,随着以Lotus Notes为代表的工作流群件技术的问世,以及网络通讯技术的长足发展,办公自动化系统发生了第一次性演进,第二代办公自动化系统以网络技术和协同工作技术为主要特征,实现了工作流程自动化,实现了收发文从传统的手工方式向工作流自动化方式的飞跃。
第三代办公自动化则是从以工作流程为中心的第二代办公自动化系统提升到以知识管理为核心。以公文流转为例,第二代办公自动化实现了收发文和档案管理一体化的自动处理。比如,本文提出的办公自动化系统就是以公文流转为核心,并且基于工作流的协同工作方式的第二代办公自动化系统;第三代办公自动化在此基础上更为文件处理的每一个环节提供了该步骤所需要的相关知识,包括在线的专家、文件背景资料及企业其他的有关信息,确保每一个使用者都能够随时随地根据需要向专家学习、向企业现有知识学习,使员工在办公自动化系统中的地位从被动向主动转变,从而在提升每个员工创造能力的过程中,大大提高了企业与机构的整体创新和应变能力。
综上所述,办公自动化系统的发展经过三个阶段,两个飞跃过程。从以数据为核心发展到以信息交流为核心,进而提升为以系统地运用知识为核心。知识贯穿于各种方式的信息交流,从简单的电子邮件、群件与协作、直至构建Web应用,其核心目的都是获得应用知识。知识是企业网络上传递的最有价值的信息。对知识的运用效果关系到企业的综合发展实力。第三代OA帮助企业从How To的过
2
工程硕士论文 绪论
程转变到Know How的过程,即将办公自动化系统由模拟手工作业向提高手工作业效率过渡[2]。
1.3研究的意义
应该说没有人怀疑计算机的出现给办公室职员带来的便利,但是对现代的办公自动化而言,其目的己经不局限于减轻员工的工作量,而是要将员工从繁琐的事务性工作中出来,用更多的精力去关注最重要的事情,从而提高企业的效率,增强企业的综合竞争能力。在这种办公模式下,企业的组织结构能够得到简化,各个部门在信息共享的基础上进行协作,便于明确各个部门甚至每个员工的责任,而决策层可以迅速综合来自各个方面的信息,并以此为依据制定企业的战略决策。从这个意义上讲,在市场竞争日趋白热化的今天,办公自动化己经不再是一种手段、一种工具,而成为决定企业生存发展的命脉。
在传统的办公模式中,由于缺少重要的信息传递和工作流程环节,办公的各个部门之间无法实现信息共享和信息集成,从而难以实现各个部门之间的高效协作。在日常的办公过程中,比较容易出现以下的差错:
1、各部门的信息传递和事务交接仍然由人工完成,容易出现差错; 2、上下级和部门之间无法实现协同工作,难以及时沟通;
3、信息和工作流程相互分离,缺少至关重要的随时记录,使工作监控和评估困难重重。
可以想象,掺杂着如此大量的人工操作过程的事务处理方式根本无法适应现代化办公模式的需要。
随着信息技术的发展和国内信息技术应用水平的提高,在办公过程中,传统的工作方式和审批模式己经难以满足新的需求,实现办公自动化已经是提高机关和企事业单位办公效率,规范化管理的必然趋势。
办公自动化系统的带来的好处有:
1、信息传递与沟通交流顺畅:排除因职能、职位、距离等原因造成的信息联络不畅而带来的企业发展羁绊,通过构建内部通讯、信息发布与交流平台,实现多途径的联络与沟通,减少信息在途时间,提高信息的时效性,与此同时,缩短领导与职员之间,各部门之间的距离。
2、规范工作管理,提高整体效率:解决了跨地域跨部门多岗位间的业务处理
3
工程硕士论文 绪论
诸多问题,有效避免工作中出现的脱节、延误、错办等情况,杜绝职责不清、工作推脱等怠工现象,实现网上协同办公,增强组织协调能力,提高团队协作能力。同时,加强了领导实时了解事务状态,实时掌控工作进度,强化了过程控制与监督,加强了工作管理。
3、整合信息资源,实现知识管理:打破“信息孤岛”,彻底改变文件丢失遗漏、管理分散、查找不方便等现象,解决因人事变动导致经验流失等问题,通过知识管理,有效整合并积累各类资源,实现再利用。
4、增强凝聚力,提高响应能力:在降低管理成本,促进管理进步的同时,能够培养全员信息化关注与参与意识,激发掌握和利用先进信息技术的热情,提高专业素质,形成全新的企业文化[3]。
1.4开发技术路线
“办公自动化子系统”是基于Struts架构的Web应用程序,它是一个简单实用的办公管理系统。该系统主要是基于Struts架构,MVC模式,运用JSP进行WEB界面程序的编码,运用ORACLE进行数据库管理。本设计采用的开发环境是Eclipse3.2+Tomcat5.0+Oracle9i。
1.5本文组织结构
第一章,绪论,主要介绍了课题的来源、背景和研究目的意义,并提出了系统的技术路线。
第二章,关键技术分析,主要介绍了系统设计思想和开发环境。
第三章,系统需求分析,主要分析了课题可行性,明确了系统的工作流程、系统的业务流程和功能需求。
第四章,概要设计,主要提出了系统的界面设计规范和具体功能,并描述了数据库设计具体情况。
第五章,系统的详细设计与实现,主要描述了系统各模块实现细节。 第六章,系统测试,主要分析了系统模块测试和整体测试的具体情况。 第七章,总结了课题的研究状况并提出了下一步研究的具体内容。
4
工程硕士论文 开发技术综述
2开发技术综述
2.1 设计思想
随着信息技术的不断发展,如今,开发一个Web应用时,首先考虑的问题不是“我们是否需要框架”,而是“我们应该使用什么样的框架”。Java 2 Enterprise Edition(J2EE)平台已经日益成熟,并得到广泛的应用。在J2EE技术中发展最迅猛的当属Java Server Page(JSP)技术。几乎所有的基于Java的Web应用都使用JSP。随着JSP技术的成熟,越来越多的开发人员开始使用Web应用框架。框架为Web应用提供了完备的软件架构和相关的软件包,它大大提高了开发Web应用的效率。如果想综合利用Servlet和JSP的优点来建立可拓展的Web应用,Struts是很好的选择。因此,“办公自动化子系统”是基于Struts架构的Web应用程序。
随着软件系统的规模和复杂性的增加,传统的两层结构的应用系统已经不能满足需求,而三层客户/服务器(B/S)体系结构为企业资源规划的整合提供了良好的框架 ,这种结构把用户表示层和数据库代码分开,便于管理和维护。因此,本系统采用(B/S)模式。
2.2 技术支持
“办公自动化子系统”是基于Struts架构的Web应用程序,它是一个简单实用的办公管理系统。该系统主要是基于Struts架构,MVC模式,运用JSP进行WEB界面程序的编码,运用ORACLE进行数据库管理。
2.3 相关技术分析
2.3.1 MVC模式简介
MVC(Model-View-Controller),即模型-视图-控制器是当前最为流行的Web开发模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。
模型通常又称为“业务逻辑”,模型是真正完成任务的代码。在模型界面相分离的情况下,代码即可实现可管理性和可重用性。
5
工程硕士论文 开发技术综述
视图就是用户使用的界面,视图(界面)不处理数据,界面的每一部分都只能包含采集数据的足够逻辑,并把它传递给设计模式中的其他组成部分进行处理。
控制器控制模型和视图之间的交互过程。它决定着向用户返回哪个视图、检查通过界面输入的信息以及选择处理输入信息的模型。
图2.1 MVC模型、视图、控制器关系图
首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据; 最后控制器调用相应的视图格式化模型返回的数据,并通过视图呈现给用户。 2.3.2 Model1和Model2
单独使用JSP或JSP+JavaBean称为Model1。Model1中JSP页面响应请求并返回结果,同时充当视图和控制器,未能实现视图和业务逻辑完全分离,尽管十分简单但不适合开发大型应用程序,给网页设计和维护带来很多麻烦。如图2.2
图2.2 JSP Model1
JSP和Servlet可以一起使用来部署Web 应用。Servlet可以应付控制流,而 JSP 则可专注于编写HTML 的任务。在这种情况下,结合使用JSP和Servlet开发被称
6
工程硕士论文 开发技术综述
为Model2(如图2.3)。在实际的项目开发过程中,页面设计者可以方便的使用普通的HTML工具来开发JSP页面,Servlet却更适合于后端开发者使用,开发Servlet需要的工具是Java集成开发环境[4]。
图2.3 JSP Model2
2.3.3 Struts框架简介
Struts实际上就是在JSP Modle2的基础上实现的一个MVC框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。图2.4为Struts实现的MVC框架。
图2.4 Struts框架
Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关: 1、模型(Model),本质上来说在Struts中Model是一个Action类,开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。
7
工程硕士论文 开发技术综述
2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用它们我们可以快速建立应用系统的界面。
3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。
4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的。
Struts框架的初始化流程:
对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。Struts框架响应客户请求的工作流程: 图2.5显示了Struts相应用户请求的工作流程:
1、如果ActionMapping实例不存在,就创建一个ActionMapping对象,它包含了把请求转发给哪个Action的信息。
2、如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
3、根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
4、ActionServlet根据配置信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute方法。Action的execute方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
5、ActionForward对象指向的JSP组件生成动态网页,返回给客户。 对于以上流程的步骤4,如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法[5]。
8
工程硕士论文 开发技术综述
图2.5 Struts相应用户请求的工作流程
2.4 开发环境
本设计采用的开发环境是Eclipse3.2+Tomcat5.0+Oracle9i。 2.4.1 Eclipse 简介
在目前所有的IDE中,Eclipse可以说是最有发展前途的产品之一。它是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。Eclipse Platform是一个基于 Java的开放的可扩展的IDE。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础。MyEclipse在Eclipse的基础上,集成了一
9
工程硕士论文 开发技术综述
系列流行且强大的插件系统,例如UML双向建模工具、WYSIWYG的JSP/Struts designer、可视化的Hibernate/ORM工具、Spring和Web services支持,以及新的Oracle数据库开发,是更智能、更快捷、更简单和更便宜的J2EE工具[6]。 2.4.2 Tomcat 简介
Tomcat是一个免费的开源的Java Web应用容器,它是Apache基金会的Jakarta项目中的一个核心项目,是在SUN公司的JSWDK(JavaServer Web DevelopmentKit,SUN公司推出的小型Servlet/JSP调试工具)的基础上发展起来的。Tomcat是SUN公司官方推荐的Servlet/JSP容器(详情请参见http://java.sun.com/products/jsp/tomcat/),因此它受到越来越多软件公司和开发人员的喜爱。Servlet和JSP的最新规范都在Tomcat的新版本中得到了实现。作为一个开放源码的软件,Tomcat得到了开放源码志愿者的广泛支持,它可以和目前大部分的主流HTTP服务器(如IIS和Apache服务器)一起工作,而且运行稳定、可靠、效率高。利用它,我们可以轻松的构建和发布Web工程[7]。 2.4.3 Oracle 简介
Oracle数据库是由oracle公司提供的业内最完整的和集成化的电子商务软件基础设施, 是以高级结构化查询语言(SQL)为基础的大型关系数据库。主要具有以下特点:Oracle7.X以来引入了共享SQL和多线程服务器体系结构,减少了Oracle的资源占用,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户;提供了基于角色(ROLE)分工的安全保密管理,在数据库管理功能、完整性 检查、安全性、一致性方面都有良好的表现;提供了新的分布式数据库能力,可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。Oracle的存储结构可分为物理存储和逻辑存储:物理上是存储于硬盘的各种文件,它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化;逻辑上是由许多表空间构成,主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息[8]。
10
工程硕士论文 系统需求分析
3系统需求分析
3.1可行性概述
3.1.1技术可行性
在当今的公司员工一般都要求掌握计算机技术,具有一定的软硬件基础,会使用各种办公软件,熟悉IT产品。因为,随着的社会的发展,公司自身竞争力发展的需要。从管理层到下面的员工,都要求具有一定的计算机基础,所以在新系统投入使用时,只需进行少量的培训,系统的功能和使用方法就基本上能够使系统顺利运行。 3.1.2 经济可行性
因为通过以WEB方式来进行办公,可以节省很多人力和物力的开销。而且方便管理,由此可以减少不必要的开支。同时可以提高管理的效率,使办公的信息管理能够永远及时、正确的运转。为企业或学校带来更高的效益,所以从经济上完全是可行的。
企业或院校有能力承担系统开发的费用,开发新系统的工作是一项间距复杂的工作,它的投资主要是人力和物力的投资。对于本系统的开发者来说,其主要投资还是在人力和物力两个方面。如果是企业自己安排人手开发系统的话,其主要的投资还是在人力资源上,从系统的业务需求调查到系统的分析编码制作都是需要巨大的人力投入的。软件企业作为一个简短的高科技产业,其员工要求都比一般企业的要求要高,而且对系统开发及软件产业了解比较多,所以在自我开发管理系统的过程中,企业自己比较容易安排人手,这样就可以为企业节约大部分的额外开支。同时软件就其它产品来说,属于高端行业,无论是产品的价格还是质量都比较高,而经营产品的经销商或者是商家都要求有雄厚的资金支持。所以,在系统的开发过程中,企业完全有能力承担开发费用。
新系统将为企业或院校带来经济效益,办公系统是一个信息化、智能化和先进管理理念的集合体。而管理是一个动态过程,在其运行过程中要采取多项措施。所以在管理中获得经济效益是一个综合效益,要对它进行直接定量的分析是比较困难的。一般新系统带来的经济效益是间接的,其最主要的表现就是减少了企业
11
工程硕士论文 系统需求分析
管理费用和人力开支。而其它一些繁琐的事物都通过新系统来加以分析解决,不仅节省了大量的时间,还为企业的各项决策提供了宝贵的资料,为企业带来巨大的经济效益。 3.1.3 操作可行性
本系统采用基于Windows的图形用户界面,而该系统是大家熟悉的操作系统,对于那些有一般的计算机知识的人员就可以轻松上手。而整个培训质量管理系统采用了最友好的交互界面,简介明了,不需要对数据库进行深入的了解。
3.2需求总体约束
系统开发过程中在界面上需要满足:界面(登录及管理)专业便利,高度可读性,互动性强。
在易用性上满足:90%以上的功能将对公众易于学习,无需培训。 在性能上要求:对数据库信息的每项操作的平均响应时间不应超过10秒;其他信息的提交和查看的平均响应时间不应超过4秒。
在安全上要求:产品应保证系统功能只能被授权的用户所使用;在一些非正常事件(如掉电、异常操作、非正常的环境情况)发生后,产品应验证数据的完整性。
3.3工作流程分析
用户首先要登录,口令校验正确才能进入办公自动化子系统。进入系统后,有报销管理,加班管理,会议室管理等10个模块。其中报销管理主要是对员工报销信息的管理,分为报销信息录入,报销信息维护,报销单信息;加班管理主要是对员工加班信息的管理,分为加班维护,加班统计;会议室管理主要是对会议室资源进行管理,分为会议室维护,会议室预定。
其中办公自动化子系统数据流图如下:
输入口令操作结果用户办公自动化子系统用户图3.1 办公自动化子系统的顶层数据流图
12
工程硕士论文 系统需求分析
报销管理1报销管理系统操作结果用户 加班管理会议室2加班管理系统操作结果管理3会议室管理系统操作果结用户
图3.2 办公自动化子系统的分层数据流图
基本信息维护1.1报销维护报销单表基本信息录入报销项表1.2报销信息录入
图3.3 办公自动化子系统的第三层数据流图
1.1.2编辑记录选中一销记报条录编进行辑报销项表1.1.3删除记录查询记录1.1.1查询结果 选中一条录进行删或多条记除选中一条记录进报销单表行查看1.1.4查看记录图3.4 报销子系统细化数据流图
3.4子系统业务需求
1、报销管理子系统,包括对员工报销信息的查询、增加、编辑、删除和报销单信息管理等基本操作,行政人员可以对普通员工的报销信息进行管理, 方便公
13
工程硕士论文 系统需求分析
司对员工报销信息的统计。
2、加班管理子系统,包括对员工的加班信息的查询、增加、编辑、删除等基本操作,行政管理人员对加班的信息能进行审批通过、审批不通过、统计、打印统计的excel报表等操作,大大简化和方便了加班管理。
3、会议室管理子系统,包括对公司的会议室资源的查询、增加、删除、编辑、预定查询、会议室预定、预定回填、取消预定等功能。
整个管理系统的功能结构如图3.5所示:
办公自动化系统 权限管理 人员管理 培训管理 项目管理 公共用品管理 会议室管理 加班管理 报销管理 订餐管理 图书管理 个限 系统权限 招聘管理 个人信息管理 信息管理理智管理 请假管理 培训科目维护报名管理 培训反馈 项目基本信息 项目人员管理 工作量管理 项目事件信息设备管理 日常用品管理 基本信息维护 会议室预定加班管理 加班统计 报销管理 订餐管理 图书管理 图3.5 办公自动化系统的整体结构图
14
工程硕士论文 系统概要设计
4系统概要设计
4.1功能与界面设计
4.1.1报销基本信息维护
1、功能描述:实现对报销基本信息的查询、修改和删除。 2、主参与者:所有角色 3、事件流
(1)基本流程:用户选择报销基本信息维护。
系统显示报销基本信息维护主界面, 主界面显示信息包括:要求输入查询条件,增加、编辑、删除、查询、查看按钮。要求输入查询条件包括:姓名、所属项目组、项目编号、出差任务。
用户点击增加按钮。系统显示报销基本信息录入主界面, 主界面显示信息包括个人相关信息和外部差旅费报销单的信息,保存、取消按钮。用户填入要求填写的信息,点击保存按钮。系统保存所提交的信息,并提示保存成功。
(2)备选流程 ①第一备选流A1
A1.1 在基本流程3,用户填入查询条件,点击重新填写按钮。 A1.2 清空页面输入的查询条件,返回基本流程3。 ②第二备选流A2
A2.1 在基本流程3,用户填入查询条件,点击查询按钮。 A2.2 页面展示查询结果列表。
A2.3 用户在结果列表中选中一条记录,点击编辑按钮。 A2.4 系统显示新增页面,页面中的字段显示选中记录的数据。 A2.5 用户修改好要修改的信息并提交。 ③第三备选流A3
A3.1 在备选流A2.3,用户在结果列表中选中一条记录,点击删除按钮。 A3.2 系统提示删除确认。 A3.3 用户确认删除请求。 A3.4 返回备选流A2.6
15
工程硕士论文 系统概要设计
④第四备选流A4
A4.1 在备选流A3.3,用户取消请求。 A4.2 返回备选流A3.4。 ⑤第五备选流A5
A5.1 在基本流程3,用户点击查看按钮。 A5.2 系统显示报销单基本信息页面。 A5.3 用户看完信息后点击返回按钮。 A5.4 页面返回维护主页面,返回基本流程3。 4、权限规则
(1)如果是行政管理人登录,可以看到任何人的报销记录,但是其他人都是只能看到自己的报销记录,此时要求进入页面的时候查询条件中姓名一栏默认显示登录者的姓名并且为只读。
(2)如果合计为空,每个人都可以修改或者删除自己的报销记录,但如果已经填入合计,那么只有行政管理人员可以继续对这条记录进行修改,但是不可以删除。如果实报金额不为空,那么任何人不能再对这条记录进行修改。
(3)姓名、所属项目组、出差任务支持模糊查询。 (4)支持单行修改、多行删除。 5、报销基本信息维护界面设计
图4.1 报销基本信息维护
6、报销单基本信息界面设计
16
工程硕士论文 系统概要设计
图4.2 报销单基本信息
4.1.2 报销基本信息录入
1、功能描述:对报销费用信息进行录入。 2、主参与者:所有角色 3、事件流 (1)基本流程
①用户选择报销基本信息录入。
②系统显示报销基本信息录入主界面, 主界面显示信息包括个人相关信息和外部差旅费报销单的信息,保存、取消按钮。
③用户填入要求填写的信息,点击保存按钮。 ④系统保存所提交的信息,并提示保存成功。 4、权限规则
(1)出差人员自己录入需要录入的字段有姓名、所属项目组、项目编号、出差任务、出发时间、出发地、到达时间、到达地、天/人、机票费、市内交通费、车船费、宿费、其他,剩下的那些出差人员没有填写权限。出差人员修改的时候需判断合计是否已填写,如果已经填写,则出差人员没有删改权限,否则有删改权限。
(2)行政管理人员修改的时候填写伙食补助、交通补助、住宿补助等,没有的话可以填0,合计是当前面的所有金额填写完后自动生成。行政管理人员填写实报金额、实报金额填写之前行政管理人员可以修改信息,填写之后所有人都不能再对此记录进行修改。
17
工程硕士论文 系统概要设计
(3)报销单编号自动生成。
(4)合计、实报金额和主窗体中的信息存到报销单表中,其余信息存入报销项表中。
5、报销基本信息录入界面设计
图4.3 报销基本信息录入
4.1.3 加班维护
1、简要描述:加班人员对自己的加班记录进行维护,包括查询、增加、编辑、删除录入的信息,编辑和删除在查询的基础上进行。行政管理人员和SPSM对维护进去的记录进行审批,包括审批通过和审批不通过。
2、主参与者:全部角色 3、事件流 (1)基本流程 ①用户选择加班管理。
②系统显示加班管理主界面, 主界面显示信息包括:要求输入查询条件,增加、编辑、删除、查询、审批通过、审批不通过按钮。要求输入查询条件包括:加班时间、姓名、所属项目组。
③用户点击增加按钮。系统显示增加界面。增加界面包括要求输入的加班信息,加班信息的具体内容请看界面原形。
④用户填写要求信息并提交。提交信息包括增加界面的所有输入信息。 ⑤系统保存所提交的信息,并提示保存成功。 (2)备选流程 ①第一备选流A1
18
工程硕士论文 系统概要设计
A1.1 在基本流程3,用户填入查询条件,点击重新填写按钮。 A1.2 清空页面输入的查询条件,返回基本流程3。 ② 第二备选流A2
A2.1 在基本流程3,用户填入查询条件,点击查询按钮。 A2.2 页面展示查询结果列表。
A2.3 用户在结果列表中选中一条记录,点击编辑按钮。
A2.4 系统显示增加页面,页面中信息显示选中记录的数据库数据。 A2.5 用户编辑好要编辑的信息并提交。 A2.6 返回基本流程6。 ③ 第三备选流A3
A3.1 在备选流A2.3,用户在结果列表中选中记录,点击删除按钮。
A3.2 系统提示删除确认。 A3.3 用户确认删除请求。 A3.4 返回备选流A2.6。 ④ 第四备选流A4
A4.1 在备选流A3.3,用户取消请求。 A4.2 返回备选流A3.4。 ⑤ 第五备选流A5
A5.1在备选流A2.3,用户在结果列表中选中记录,点击审批通过按钮。 A5.2系统提示审批通过确认。 A5.3用户确认审批通过请求。 A5.4 返回备选流A2.6 ⑥ 第六备选流A6
A6.1 在备选流A5.3,用户取消请求。 A6.2 返回备选流A5.4。 ⑦ 第七备选流A7
A7.1在备选流A2.3,用户在结果列表中选中记录,点击审批不通过按钮。 A7.2系统提示审批不通过确认。 A7.3用户确认审批不通过请求。 A7.4 返回备选流A2.6。
19
工程硕士论文 系统概要设计
⑧ 第八备选流A8
A8.1 在备选流A7.3,用户取消请求。 A8.2 返回备选流A7.4。 4、权限规则
所有人均可以录入自己的相关信息,并可以查看个人或别人的录入信息,但编辑和删除只能操作个人录入的信息,不能操作别人的。行政管理人员和SPSM可以进行查询,并进行审批操作,普通员工没有权限。
5、补充说明
(1)将录入信息填写完毕提交后,将录入人和录入时间字段写入数据库。对选中的记录,编辑个人录入的详细信息,将编辑时间写入数据库。
(2)选中要删除的记录的复选框,实施删除操作后,将删除时间写入数据库,并将“有效标志”字段置位(逻辑删除),支持批量删除。
(3)审批通过和审批不通过时,将是否审批通过标志位置位,支持批量审批。
(4)编辑和删除的前置条件是“是否通过审批”为空,审批的时候不做前置条件的要求。
6、加班信息维护界面设计
图4.4 加班信息维护
7、加班信息录入界面设计
20
工程硕士论文 系统概要设计
图4.5 加班信息录入
4.1.4 加班统计
1、简要描述:管理人员输入统计条件,统计出人员/项目加班人次及总的加班人次。
2、主参与者:行政管理人员,SPSM 3、事件流 (1)基本流程
①行政管理人员或SPSM进入加班统计界面。
②系统显示加班统计主界面, 主界面显示信息包括:要求输入统计条件,统计和输出报表按钮。
③输入统计条件。 ④点击统计按钮。
⑤在页面下方显示统计结果。 (2)备选流程 ①第一备选流A1
A1.1 在基本流程3,用户填入查询条件,点击重新填写按钮。 A1.2 清空页面输入的查询条件,返回基本流程3。 ②第二备选流A2
A2.1 在基本流程4,点击输出报表按钮。
A2.2 以EXCEL的形式输出报表,返回基本流程5。 4、权限规则
行政管理人员和SPSM可以进行统计,并可以查看详细信息(只能统计通过
21
工程硕士论文 系统概要设计
审批的记录)。
5、补充说明
统计类别分为按人员统计和按项目统计,根据不同的统计类别会显示不同的统计条件和不同的统计结果列表。
6、加班信息统计界面设计
图4.6 统计结果
4.1.5 会议室管理基本信息维护
1、功能描述:会议室的增加、修改、查询、删除的操作。 2、主参与者:行政管理(秘书) 3、事件流 (1)基本流程
①行政管理(秘书)选择会议室维护。
②系统显示会议室维护主界面, 主界面显示信息包括:要求输入查询条件,查询、增加、编辑、删除按钮。要求输入查询条件包括:会议室编号、会议室名称、容纳人数和是否有投影仪。
③行政管理(秘书)点击增加按钮。
④系统显示新增界面。新增界面包括要求输入的会议室信息,会议室信息包括:会议室编号、会议室名称、容纳人数、是否有投影仪和备注。
行政管理(秘书)填写要求信息并提交。提交信息包括新增界面的所有输入信息。 系统保存所提交的信息,并提示保存成功。
22
工程硕士论文 系统概要设计
(2)备选流程 ①第一备选流A1
A1.1 在基本流程3,行政管理(秘书)填入查询条件,点击重新填写按钮。 A1.2 清空页面输入的查询条件,返回基本流程3。 ②第二备选流A2
A2.1 在基本流程3,行政管理(秘书)填入查询条件,点击查询按钮。 A2.2 页面展示查询结果列表。
A2.3行政管理(秘书)在结果列表中选中一条记录,点击编辑按钮。 A2.4 系统显示新增页面,页面中的内容显示选中记录的数据。 A2.5行政管理(秘书)修改好要修改的信息并提交。 A2.6 返回基本流程6。 ③第三备选流A3
A3.1 在备选流A2.3,行政管理在结果列表中选中一条记录,点击删除按钮。 A3.2 系统提示删除确认。
A3.3行政管理(秘书)确认删除请求。 A3.4 返回备选流A2.6 ④第四备选流A4
A4.1 在备选流A3.3,行政管理(秘书)取消请求。 A4.2 返回备选流A3.4。 4、权限规则
行政管理(秘书)可以对会议室进行增加、修改、删除、查询等相应操作。 5、补充说明
(1)录入的时候需要校验数据唯一性。 (2)删除数据时只有录入人才可以进行删除。
(3)查询结果没有数据不可以进行修改和删除的操作,按钮不可用。 6、会议室维护界面设计
23
工程硕士论文 系统概要设计
图4.7 会议室维护
7、会议室录入界面设计
图4.8 会议室录入
4.1.6 会议室预定查询
1、功能描述:预定查询分为按日期,按名称查询,根据用户选择的条件,显示满足条件的会议室信息,同时在查询页面中提供了会议室预定的超链接。
2、主参与者:全体人员 3、事件流: (1)基本流程:
①全体人员选择预定查询。
②系统显示预定查询主界面,主界面显示信息包括:要求输入查询条件,预定查询、会议室预定按钮。要求输入查询条件包括:预定开始时间、预定结束时间和会议室名称。
③全体人员填写要求信息并提交。提交信息包括预定界面的所有输入信息。 ④系统保存所提交的信息,并提示保存成功。 (2)备选流程: ①第一备选流A1、
24
工程硕士论文 系统概要设计
A1.1 在基本流程3,全体人员填入查询条件,点击重新填写按钮。 A1.2 清空页面输入的查询条件,返回基本流程3。 ②第二备选流A2
A2.1 在基本流程3,全体人员填入查询条件,点击查询按钮。 A2.2 页面展示查询结果列表。 4、权限规则
此处所有人都可以进行预定查询,不做权限 5、会议室预定查询界面设计
图4.9 预定查询
4.1.7 会议室预定
1、功能描述:预定一个时间段,确定该时间段供某个项目组使用。 2、主参与者:全体人员 3、事件流: (1)基本流程:
①预定人选择会议室预定。
②系统显示会议室预定界面,预定界面要求录入:会议室编号、预定时间、结束时间、预定人姓名、预定项目组、使用人数、是否需要投影仪、备注。
预定人填写完信息并提交。提交信息包括预定界面的所有输入信息。系统保存所提交的信息,并提示预定成功。
4、权限规则
此处所有人都可以进行会议室,不做权限
25
工程硕士论文 系统概要设计
5、会议室预定界面设计
图4.10 会议室预定
4.1.8 会议室预定查询列表
1、功能描述:显示当前用户所预定的会议室信息(部分信息),在此基础上进行预定回填,取消预定等操作。
2、主参与者:全体人员 3、事件流: (1)基本流程:
①全体人员选择预定列表。
②系统显示预定列表主界面,主界面显示信息包括:预定列表信息,预定回填、取消预定按钮。
③全体人员点击预定回填按钮。
④系统显示预定回填界面(此为弹出页面)。预定回填界面包括预定开始时间、预定结束时间。
⑤全体人员填写要求信息并提交。提交信息包括预定界面的预定结束时间。 ⑥系统保存所提交的信息,并提示保存成功。 (2)备选流程: ①第一备选流A3
A1.1在基本流程2,全体人员在结果列表中选中记录,点击取消预定按钮。 A1.2 系统提示取消确认。 A1.3全体人员确认取消请求。 A1.4 返回基本流程2 ②第二备选流A2
A2.1 在备选流A1.3,全体人员取消请求。
26
工程硕士论文 系统概要设计
A2.2 返回备选流A1.4。 4、权限规则
此处只有预定人可以对自己预定的会议室进行预定回填和取消预定的操作。 5、会议室预定列表界面设计
图4.11 预定列表
6、会议室预定回天界面设计
图4.12 预定回填
4.2 数据库设计
4.2.1数据库的概念
当人们从不同的角度来描述这一概念时就有不同的定义。例如,称数据库是一个“记录保存系统”(该定义强调了数据库是若干记录的集合)。又如称数据库是“人们为解决特定的任务,以一定的组织方式存储在一起的相关的数据的集合”(该定义侧重于数据的组织)。更有甚者称数据库是“一个数据仓库”。当然,这种说法虽然形象,但并不严谨。严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。
本系统将使用一直以来使用都最为广泛的关系模型作为数据库的建设依据。在用户的观点下,关系模型中数据的逻辑结构是一张二维表,一个关系对应通常说的一张表,并且关系的每一个分量必须是一个不可分的数据项。而一个基于关系模型的数据库则是由若干个二维表组成的。对于一些大型和中型的数据库,如
27
工程硕士论文 系统概要设计
Oracle,SQL Server 2000/7.0等都属于关系型数据库,同时它们所带有的数据库管理工具是其他小型数据库所没有的,而同时这些工具又为管理员的工作节省了很多的时间和财力。 4.2.2 数据库的选择
本系统使用的数据库是Oracle 9i关系数据库。
Oracle 9i是Oracle公司推出的数据库管理系统,是专门为在Internet上进行数据管理而设计的数据库开发平台。
Oracle 9i数据库是目前业内伸缩性最好、功能最齐全的数据库。无论是用于驱动网站、打包应用程序、数据仓库或者是OLTP应用程序,Oracle 9i数据库都是任何专业计算机环境的技术基础。Oracle公司核心技术产品的Oracle 9i的系列产品:Oracle 9i Database、Oracle 9i Application Server 和Oracle 9i Developr Suite。每一个都被重新构建以提供对最新技术的支持,同时这些产品帮助定义使用数据、进行商务活动以及支持公司更好地采用技术的新方法。 4.2.3数据库表的设计
1、用户权限表
表4.1用户权限表
2、人员信息表
表4.2 人员信息表
28
工程硕士论文 系统概要设计
3、报销信息表
表4.3 报销信息表
29
工程硕士论文 系统概要设计
4.报销单表
表4.4 报销单表
5.加班信息表
表4.5 加班信息表
6.会议室表
表4.6 会议室表
30
工程硕士论文 系统概要设计
7.会议室预定
表4.7 会议室预定表
31
工程硕士论文 系统详细设计与实现
5系统详细设计与实现
5.1 报销管理
5.1.1 报销基本信息维护
1、查询分页
图5.1 报销基本信息维护分页功能图
主要代码如下:
function gotopage() {
var re =/ /g;
var p=document.form1.toPage.value.replace(re,\"\"); if(p==\"\"){ } } if(p<=0){ }
alert(\"输入的数字非法!\"); return;
alert(\"请输入的要跳转的页数!\"); return;
if(isNaN(p)){
alert(\"请输入数字!\"); return ;
window.location.href=\"<%=basePath%>writeoff.do?method=doQuery&action=&toPage=\" +p+\"&inquiry=\";
}
<% String currentPage=\"\";
String totalPage=\"\";
if(request.getAttribute(\"currentPage\")!=null&&request.getAttribu te(\"totalPage\")!=null)
{ currentPage = request.getAttribute(\"currentPage\").toString();
totalPage = request.getAttribute(\"totalPage\").toString(); }
%>
2、按姓名、所属项目组、项目编号、出差任务进行模糊查询操作,支持模糊查询条件回显
32
工程硕士论文 系统详细设计与实现
图5.2 报销基本信息维护模糊查询功能图
主要代码如下:
public ArrayList queryLike(writeoffForm writeofftable) throws Exception {
String sql = \"select
AFF_NAME,PRO_NAME,PRO_NUM,ERRAND_TASK,SUM,REAL_SUM, REMARK ,ACCOUNT_SHEET_NUM from oa_account_sheet_t where active_flag = '1'\"; // 查询语句
if(writeofftable.getStaffName()!=null&&!\"\".equals(writeofftable.getStaffName()))
{ sql += \" and STAFF_NAME like '%\" + writeofftable.getStaffName() +\"%'\";
} // 若姓名不为空,支持姓名的模糊查询 if(writeofftable.getProName()!=null&&!\"\".equals(writeofftable.getProName()))
{ sql += \" and PRO_NAME like '%\" + writeofftable.getProName()+\"%'\";
} // 若所属项目组不为空,支持所属项目组的模糊查询
if(writeofftable.getProNum()!=null&&!\"\".equals(writeofftable.getProNum())) { sql += \" and PRO_NUM like '%\" + writeofftable.getProNum()+\"%'\";
} // 若项目编号不为空,支持项目编号的模糊查询 if(writeofftable.getErrandTask()!=null&&!\"\".equals(writeofftable.getErrandTask()))
{ sql += \" and ERRAND_TASK like '%\" + writeofftable.getErrandTask()+\"%'\";
} // 若出差任务不为空,支持出差任务的模糊查询 PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(sql); // 返回查询结果集 ArrayList list = new ArrayList();
// 若结果集不为空,则循环返回记录的姓名、所属项目组、项目编号、合计、实报金
额和备注
while(rs.next()){ writeoffDisplayForm writeoffdisplaytable= new writeoffDisplayForm();
writeoffdisplaytable.setAccountSheetNum(rs.getString(\"ACCOUNT_SHEET_NUM\")); // 返回报销单号
writeoffdisplaytable.setSum(rs.getString(\"SUM\")); // 返回合计 „„ writeoffdisplaytable.setRemark(rs.getString(\"REMARK\")); // 返回备注 list.add(writeoffdisplaytable); }
33
工程硕士论文 系统详细设计与实现
}
3、编辑操作
图5.3报销基本信息维护编辑功能图
主要代码如下:
{
int SUM=0; // 定义合计 String s=\"\"; int m;
if(leaveYear.length!=0) {
for( m=0;m { int md=Integer.parseInt(messSubsidyDate[m]); „„ int otc=Integer.parseInt(otherCost[m]); SUM+=(ac+itc+tosc+hoc+otc+md*mc+td*tc+hd*hc+oc); } else { s=\"\"; break; } } if(m==leaveYear.length) { s=Integer.valueOf(SUM).toString(); } else {s=\"\"; public int update(writeoffForm wfform,String accountSheetNum,String name,„„ String[] otherSubsidyCost)throws Exception 34 工程硕士论文 系统详细设计与实现 } } PreparedStatement ps=null; int rs1=0,rs2=0,rs3=0,rs=1; Statement stmt=null; try{ if(s!=null&&s!=\"\") { String sql1=\"update OA_ACCOUNT_SHEET_T set STAFF_NAME=?, PRO_NAME =?,PRO_NUM=?,ERRAND_TASK=?,REMARK=?,SUM=?,REAL_SUM=?,MODIFY_PER_ID=?,MODIFY_PER_NAME=?,MODIFY_NUM=MODIFY_NUM+1,MODIFY_DATE=SYSDATE where ACCOUNT_SHEET_NUM='\"+accountSheetNum+\"' and active_flag='1'\"; // 更新语句(如果所求合计不为空,更新数据库中的合计) conn.setAutoCommit(false); ps = conn.prepareStatement(sql1); ps.setString(1, writeoffform.getStaffName()); „„ ps.setString(9, name); rs1=ps.executeUpdate(); conn.commit(); }else{ Stringsql1=\"update OA_ACCOUNT_SHEET_T„„ REMARK=? ,MODIFY_PER _ID=?,„„ \"; // 更新语句( 如果所求合计为空,不更新合计与实报金额) conn.setAutoCommit(false); ps = conn.prepareStatement(sql1); ps.setString(1, writeoffform.getStaffName()); „„ ps.setString(7, name); rs1=ps.executeUpdate(); conn.commit(); } „„ String sql=\"select ACCOUNT_ITEM_NUM from oa_account_item_t where active_flag ='1' and account_sheet_num = '\"+accountSheetNum+\"'\";// 查询报销单 号 stmt=conn.createStatement(); ResultSet rst = stmt.executeQuery(sql); while(rst.next()){ list.add((Object)rst.getString(\"ACCOUNT_ITEM_NUM\")); } 35 工程硕士论文 系统详细设计与实现 if(list.size() String sql3 = \"INSERT into oa_account_item_t(ACCOUNT_SHEET_NUM,„„ACTIVE_FLAG)VALUES(?,SEQ_ACCOUNT_ITEM_ID.nextval,to_date(?,'yyyy-mm-dd'),?,to_date(?,'yyyy-mm-dd'),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SYSDATE,0,1)\"; for(int i=(leaveYear.length-1);i>(list.size()-1);i--) { leaveDate=leaveYear[i]+\"-\"+leaveMonth[i]+\"-\"+leaveDay[i]; arriveDate=arriveYear[i]+\"-\"+arriveMonth[i]+\"-\"+arriveDay[i]; ps=conn.prepareStatement(sql3); ps.setString(1, accountSheetNum); „„ ps.setString(19, name); rs2=ps.executeUpdate(); } conn.commit(); }else if(list.size()>leaveYear.length) { // 更新语句(如果查询结果数比编辑记录条数多) String sql4 =\"update oa_account_item_t set active_flag = '0' where ACCOUNT_ITEM_NUM=? \"; // 逻辑更新 for(int i=0;i<(list.size()-leaveYear.length);i++) { itemNum= (String)list.get(i); ps=conn.prepareStatement(sql4); ps.setString(1,itemNum); rs2=ps.executeUpdate(); } conn.commit(); } String sql2=\"update oa_account_item_t set LEAVE_DATE=to_date(?,'yyyy-mm-dd'),„„MODIFY_DATE=SYSDATE where active_flag='1' and ACCOUNT_ITEM_N UM=? and account_sheet_num = '\"+accountSheetNum+\"'\";// 更新报 销项表 ArrayList list1 = new ArrayList(); String sql5=\"select ACCOUNT_ITEM_NUM from oa_account_item_t where active_flag ='1' and account_sheet_num = '\"+accountSheetNum+\"'\"; stmt=conn.createStatement(); ResultSet rst1 = stmt.executeQuery(sql5); while(rst1.next()){ 36 工程硕士论文 系统详细设计与实现 list1.add((Object)rst1.getString(\"ACCOUNT_ITEM_NUM\")); } for(int i=0;i 4、删除操作(分别对报销单表和报销项表进行逻辑删除) 图5.4报销基本信息维护删除功能图 代码如下: public int delete(String []Num,String name,String id) throws Exception { Statement stmt=null; int rs1=0,rs2=0,rs=1; try{ conn.setAutoCommit(false); for(int i=0;i '\"+id+\"', 37 工程硕士论文 系统详细设计与实现 DEL_PER_NAME = '\"+name+\"',DEL_DATE = SYSDATE where ACCOUNT_SHEET_NUM ='\"+Num[i]+\"'\"; // 更新报销单表 stmt=conn.createStatement(); rs1=stmt.executeUpdate(sql1); String sql2=\"update oa_account_item_t set active_flag = '0' ,DEL_PER_ID = '\"+id+\"', DEL_PER_NAME = '\"+name+\"',DEL_DATE = SYSDATE where ACCOUNT_SHEET_NUM ='\"+Num[i]+\"'\"; // 更新报销项表 stmt=conn.createStatement(); rs2=stmt.executeUpdate(sql2); } conn.commit(); „„ } 5.1.2 报销基本信息录入 图5.5 报销基本信息录入功能图 1、在前台的权限设置 2、撤销报销单(当报销项记录一条也没有时,撤销该报销单) 38 工程硕士论文 系统详细设计与实现 图5.6 报销基本信息录入撤销功能图 代码如下: public int writeoffRollback(String accountSheetNum) throws Exception { Statement stmt=null; int rs1=0,rs2=0,rs=1; try{ conn.setAutoCommit(false); String sql1=\"update oa_account_sheet_t set active_flag = '0' where ACCOUNT_SHEET_NUM ='\"+accountSheetNum+\"'\"; // 从报销单表中逻辑删除 stmt=conn.createStatement(); rs1=stmt.executeUpdate(sql1); String sql2=\"update oa_account_item_t set active_flag = '0' where ACCOUNT_SHEET_NUM ='\"+accountSheetNum+\"'\"; // 从报销项表中逻辑删除 stmt=conn.createStatement(); rs2=stmt.executeUpdate(sql2); conn.commit(); if(rs1==0||rs2==0){ rs=0; } } „„ } 3、插入记录(分别向报销单表和报销项表中插入) 代码如下: public int insert(writeoffForm writeofftable,String num,String name,String id,String[] leaveYear, „„String[] otherSubsidyCost)throws Exception{ int rs1=0,rs2=0,rs=1; PreparedStatement ps=null; try{ // 生成报销单号 String sql=\"SELECT Seq_Account_ID.NEXTVAL accountSheetNum FROM dual\"; 39 工程硕士论文 系统详细设计与实现 // 插入到报销单表 String sql1 = \"INSERT into oa_account_sheet_t(ACCOUNT_SHEET_NUM,„„ ACTIVE_FLAG) VALUES(?,?,?,?,?,?,?,?,?,SYSDATE,0,1)\"; Statement stmt = conn.createStatement(); ResultSet result= stmt.executeQuery(sql); conn.commit(); String accountSheetNum=\"\"; while(result.next()) { accountSheetNum=result.getString(\"accountSheetNum\"); } stmt.close(); ps=conn.prepareStatement(sql1); „„ ps.setString(1, accountSheetNum); ps.setString(9, name); conn.setAutoCommit(false); rs1=ps.executeUpdate(); conn.commit(); String leaveDate=\"\"; String arriveDate=\"\"; // 插入到报销项 String sql2 = \"INSERT into oa_account_item_t (ACCOUNT_SHEET_NUM, ACCOUNT_I TEM_NUM,LEAVE_DATE,„„ACTIVE_FLAG) VALUES(?,SEQ_ACCOUN T_ITEM_ID.nextval,to_date(?,'yyyy-mm-dd'),?,to_date(?,'yyyy-mm-dd'),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SYSDATE,0,1)\"; //插入多条报销项记录到报销项表 if(num!=\"\") { int count=Integer.parseInt(num); for(int i=0;i ps.setString(19, name); rs2=ps.executeUpdate(); } conn.commit(); } // 插入单条报销项记录到报销项表 40 工程硕士论文 系统详细设计与实现 } if(num==\"\"||num==null) { leaveDate=leaveYear[0]+\"-\"+leaveMonth[0]+\"-\"+leaveDay[0]; arriveDate=arriveYear[0]+\"-\"+arriveMonth[0]+\"-\"+arriveDay[0]; ps=conn.prepareStatement(sql2); ps.setString(1, accountSheetNum); „„ ps.setString(19, name); rs2=ps.executeUpdate(); conn.commit(); } if(rs1==0||rs2==0){ rs=0; } } „„ 5.1.3 报销单基本信息 图5.7 报销单基本信息输出功能图 前台回显代码 <% int i = 0 ; %> <% if(i==0){%> <%=(request.getAttribute(\"sum\")==null)?\"\":request.getAttribute(\"sum\") %> 41 工程硕士论文 系统详细设计与实现 <%=(request.getAttribute(\"realSum\")==null)?\"\":request.getAttribute(\"realSum\") %> 5.2 加班管理 5.2.1 加班维护 1、加班查询 图5.8 加班信息维护查询功能图 代码省略(基本与报销查询类似) 2、审批通过 图5.9 加班信息维护审批通过功能图 代码如下: public int doapprove(String[] str) throws SQLException { int n =0; String sql =\"update OA_OVERTIME_INFO_T set IF_APPROVE='y' where ROW_ID=?\"; PreparedStatement pstmt = null; 42 工程硕士论文 系统详细设计与实现 try { conn.setAutoCommit(false); for(int i=0;i } } „„ return n; } int k = pstmt.executeUpdate(); if(k==1)n++; 3、审批未通过 图5.10 加班信息维护审批不通过功能图 代码如下: public int donotapprove(String[] str) throws SQLException { int n =0; String sql =\"update OA_OVERTIME_INFO_T set IF_APPROVE='n' where ROW_ID=?\"; PreparedStatement pstmt = null; try { conn.setAutoCommit(false); for(int i=0;i if(k==1)n++; } }catch (SQLException e) { e.printStackTrace(); }finally{ 43 工程硕士论文 系统详细设计与实现 conn.commit(); if(pstmt==null) { pstmt.close(); } } } } return n; 5.2.2 加班统计 1、从数据库中向下拉框中导入数据 图5.11 加班统计下拉框内容显示功能图 代码如下: public ArrayList doqueryGroup() { ArrayList list = new ArrayList(); String sql = \"select distinct(PROJECTING) groupName from OA_PERSONNEL_T\"; PreparedStatement pstmt=null; ResultSet rs = null; try { pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { list.add(rs.getString(\"groupName\")); } } return list; } 2、按项目进行统计 44 工程硕士论文 系统详细设计与实现 图5.12 加班统计按项目统计功能图 代码如下: public ArrayList staproject(OverTimeForm form) throws SQLException { ArrayList list = new ArrayList(); String sql = \"select BELONG_GROUP,to_char(OVERTIME_START,'yyyy-mm hh24:mi') endtime from OA_OVERTIME_INFO_T where ACTIVE_FLAG='y'\"; if(!(\"chooseproname\".equals(form.getProjectName())||(form.getProjectName()==\"chooseproname\" ))) { sql += \" and BELONG_GROUP='\"+form.getProjectName()+\"'\"; } PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { OverTimeForm myForm = new OverTimeForm(); myForm.setProjectName(rs.getString(\"BELONG_GROUP\")); if((\"\".equals(form.getOverTimeStart())||(form.getOverTimeStar t()==null))&&((\"\".equals(form.getOverTimeEnd())||(form.getOverTimeEnd()==null)))) { list.add(myForm); } elseif(!(„„)) //跟上一个if中的条件一样,下同 { if(rs.getString(\"starttime\").compareToIgnoreCase(form.getOverTim eStart())>=0) -dd hh24:mi') starttime,to_char(OVERTIME_END,'yyyy-mm-dd 45 工程硕士论文 系统详细设计与实现 { { if(rs.getString(\"endtime\").compareToIgnoreC ase(form.getOverTimeEnd())<=0) { list.add(myForm); } } else { if(!(„„)){ if(„„) list.add(myForm); } „„ return list; } } } } } }else if((„„)) list.add(myForm); 3、按人员姓名进行统计 图5.13 加班统计按人员统计功能图 代码如下: public ArrayList staperson(OverTimeForm form) throws SQLException { ArrayList list = new ArrayList(); String sql = \"select INPUT_PER_NAME,to_char(OVERTIME_START,'yyyy-mm-dd hh24:mi') starttime, to_char(OVERTIME_END,'yyyy-mm-dd hh24:mi') endtime from OA_OVERTIME_INFO_T where ACTIVE_FLAG='y'\"; 、 if(!(\"\".equals(form.getPersonName())||(form.getPersonName()==null))) { sql+= \" and INPUT_PER_NAME like'%\"+form.getPersonName()+\"%'\"; 46 工程硕士论文 系统详细设计与实现 } PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { OverTimeForm myForm = new OverTimeForm(); myForm.setPersonName(rs.getString(\"INPUT_PER_NAME\")); if((„„)) { { } else if(!(„„)) { if(„„){ list.add(myForm); } } else if((„„)){ if(rs.getString(\"endtime\"). compareToIgnoreCase(form.getOverTimeEnd())<=0) { if(!(\"\".equals(rs.getString(\"INPUT_PER_NAME\")) ||(rs.getString(\"INPUT_PER_NAME\")==null))) {list.add(myForm);} } } else{ if(!(„„)){ { list.add(myForm); } } } 47 if(!(„„)) list.add(myForm); } if((rs.getString(\"starttime\"). (rs.getString(\"endtime\"). compareToIgnoreCase(form.getOverTimeStart())>=0)&& compareToIgnoreCase(form.getOverTimeEnd())<=0)) if(!(\"\".equals(rs.getString(\"INPUT_PER_NAME\")) ||(rs.getString(\"INPUT_PER_NAME\")==null))) 工程硕士论文 系统详细设计与实现 } } „„ } 4、导出编码实现 图5.14 加班统计导出编码功能图 代码如下: <% %> cont.append(\"\\r\\n\"); cont.append(\" while(lister.hasNext()){ form=(OverTimeForm)lister.next(); cont.append(\" 48 try { response.setContentType(\"Application/msexcel\"); response.setHeader(\"Content-Disposition\\"attachment;filename=overtimestatistics.xls\"); StringBuffer cont = new StringBuffer(\"\"); <% <% cont.append(\"\\n\"); cont.append(\"\\n\"); cont.append(\" cont.append(\" cont.append(\" ArrayList list = (ArrayList)(request.getAttribute(\"Project\")); OverTimeForm form = new OverTimeForm(); Iterator lister = list.iterator(); %> align='center'>\"+form.getProjectName()+\"\\r\\n\"); 工程硕士论文 系统详细设计与实现 %> } cont.append(\" cont.append(\" cont.append(\" „„ > <% i++ ;%> > <%}%> \\r\\n\"); int k=1; \"+(k++)+\" \\r\\n\"); cont.append(\"cont.append(\" 1 \\r\\n\");\\r\\n\");
\\r\\n\"); cont.append(\"\\r\\n\"); \\r\\n\"); }序号 \\r\\n\"); cont.append(\"项目名称 \\r\\n\"); cont.append(\"加班人次 \\r\\n\");\\r\\n\"); \"+k+\" \\r\\n\"); cont.append(\"总计 \\r\\n\"); cont.append(\"\"+(k-1)+\" \\r\\n\"); cont.append(\"\\r\\n\"); cont.append(\"