logo资料库

基于web的动态图形报表(毕设).pdf

第1页 / 共64页
第2页 / 共64页
第3页 / 共64页
第4页 / 共64页
第5页 / 共64页
第6页 / 共64页
第7页 / 共64页
第8页 / 共64页
资料共64页,剩余部分请下载后查看
1 引言 1.1 研究背景 随着企业信息系统集成与企业电子商务系统建设的兴起,基于 Internet 的 数据共享、格式化、个性化及传输日益成为业界研究的热点。报表作为一种重要 的信息载体在系统中有着极其重要的作用,而报表生成系统作为应用系统的重要 组成部分也越来越为软件开发者关注与研究。 图形报表作为一种的非常常见的报表样式,用于直观地表现数据规律,深受 大家的欢迎。且由于B/S 结构的流行,使得基于 web 的动态图形报表已经成为当 前社会报表研究的热点。 它通过对数据库数据读取,统计和分析,生成非常直观地,形象化且易懂地 统计图形,如:柱状图、折线图和圆饼图等,提高了人们对信息的获取效率,方 便人们的对复杂信息的需求,为人们在处理问题时提供了决策依据。同时它又是 基于 web 的,人们用 IE 即可非常方便浏览,不用装专门的软件。因此它现在已 经成为了当前社会新宠儿。由于人们对各种复杂图形报表的需求越来越高,对其 技术的挑战也在不断增加。 目前,有很多公司开发出自己的生成图形报表的工具和组件,已经形成商业 化。如: ChartDirector,EasyCharts,Ireport,FastReport 等,当然也有免 费开源的,如:JFreeChart,Cewolf 等。 当然也有许多专门做基本 web 动态图形报表的公司,资金雄厚或项目对报表 质量要求较高时,找他们也是一个不错的选择。 本研究课题是在学习研究其相关资料前提下,主要解决如何通过对后台数据 库数据的读取,统计和分析,并生成非常直观,形象化且易懂的基于 Web 的动态 统计图形报表,如:柱状图、折线图和圆饼图等。 1.2 研究的目的和意义 随着互联网络技术的发展,基于Web 的应用软件正逐步成为当今应用软件的 主流。虽然现在有很然而看似简单的报表,在 Web 软件中却成了非常复杂的问题, 报表的制作、显示难以实现,要获得满足客户需求的、复杂的、高质量的报表就 更难了。 尽管现在已经有许多新的报表软件也如雨后春笋一样冒了出来。这些工具大 1
都是对开源软件进行包装改造,基本上有两种流派,一类来自于 FastReport 这 种基于 Delphi 的软件,通过控件方式实现 Web 报表,进而将报表计算移至服务 器上进行,再改进为支持 Linux;另一类是来自于 Jasper 的基于 Java 的开源软 件。这些工具的整体思路还是沿袭了 C/S 时的方式,仍然是传统的分组报表的模 式,仍然无法解决表样和大作量的代码编写问题。复杂报表的制作已经成了这些 工具挥之不去的阴影,成了很多程序员的噩梦。 因此,对此课题的研究是非常有意义的。作为Web 动态图形报表爱好者的我, 学习了一下相关资料做了此毕业设计,能有效解决有关这方面的一些基本问题以 及理解一些图形报表开发组件的实现原理和使用方法。 1.3 发展现状 报表技术的发展主要分为以下几个阶段: 第零阶段:以自己编写代码为主。 这个阶段的报表需求还没有被单独的列出来,而是作为信息系统的一部分。 报表生成一般都是项目人员编写程序代码完成。 第一阶段:分组报表的时代 正是由于编写代码生成报表很繁琐,因此出现了基于分组的报表。笔者最早 接触的是 MS Access数据库中内置的报表,它基于数据表或视图,不仅可以生成 数据的列表,还可以进行分组、简单的计算。早期的 Crystal Report 也是这种 报表的典型。可以说,基本上主要的报表工具,早期都是从这种模式发展而来的。 第二阶段:B/S 报表的时代。 基于分组的报表,为快速制作报表提供了方便的工具,但同时也面对着用户 不断提高的要求的挑战。同时,应用系统中,对 B/S 报表的要求也越来越强烈, 于是报表工具逐步进入的 B/S 报表的时代。 这一时代的特点是,基本上报表工具还是沿袭了传统的方式,但是进行了若 干改进与加强,比如增加了单独的交叉表的功能,增加了子报表。同时,普遍开 始支持 B/S 结构。 在这一阶段,著名的报表工具如 Crystal Report 继续发展,并终于跨入了 支持 B/S 的行列,而许多新的报表工具也如雨后春笋一样冒了出来。这些工具大 都来源于开源软件,进行包装改造,基本上有两种流派,一类来自于 FastReport 2
这种基于 delphi 的软件,通过控件方式实现 B/S 报表,进而将报表计算移至服 务器上进行,再改进为支持 Linux,另一类是来自于 Jasper 的基于 Java 的开源 软件。但它们共同的特点,就是仍然是传统的分组报表的模式。 第三阶段:新的数学模型的时代 虽然各种报表工具越来越多,功能越来越多,但是其基本模式决定了处理很 多复杂报表时仍然会面临很大的困难。很多时候仍然需要借助大量的程序编码和 复杂的 SQL 语句(存储过程)加以实现。面对这种问题,就出现了第三代的报表产 品,其代表产品是润乾报表。这种产品根据报表的需求设计了全新的数学模型, 可以解决报表单元格与数据字段之间的弱关联性,在制作复杂报表时,开发效率 与运行效率都高出传统工具数倍。 同时,还有必要提一下表格式的工具,如最著名的 Formula1。这种类 Excel 的工具,为制作很多报表带来了巨大的便利。但是,它无法对数据进行展开,所 以,长期以来,它一直是与分组报表互补的一种产品。 1.4 本章小结 本章主要介绍了“基于 web 的动态统计图形报表的设计与实现”该课题的总 体情况,给大家一个对于基于 web 的动态统计图形报表的初步了解,首先概述了 项目开发的研究背景,其次介绍了该项目的研究目的和意义,即为什么要做此课 题和它在图形报表应用中的重要作用,最后描述了基于 web 的动态统计图形报表 技术发展现状以及发展方向的相关知识,所有这些都是为我们后面的设计提供前 提和依据的。 2 总体设计思想 2.1 总体设计任务 本课题的功能模块图,如图 2-1 所示: 3
图 2-1 系统功能模块图 1.类实现组 要求组:报表图形形式有 2D 柱状、3D 柱状、3D 圆柱、2D 饼状、3D 饼形、 3D 分裂饼形、曲线。 数据交互:提供对要求组部分的后台数据的操作,操作表有计算机编程类图 书月销售统计表、销售量按月统计表。 2.类实现扩展组 静态组:该组数据为静态数据,其报表图形形式有 3D 全分饼图、文字效果 图、股市指数走势图。 随机组:该组数据为随机生成的,其报表图形形式有甘特图、透明 3D 水平 直方堆叠图。 动态数据组:该组数据为动态的,其报表图形形式有透明 3D 饼图、曲线数 据对比图、柱状数据对比对比图、3D 柱状数据对比图。 数据交互:提供对类实现扩展组中的动态数据组后台数据的操作,操作的表 有计算机编程类图书对比统计表。 3.JFreeChart 组 该组数据为动态的,其报表图形形式有 3D 饼形,单曲线图,曲线对比图, 矩体对比图。该组为课题非要求内容,因此没有提供数据交互部分。 2.2 系统开发环境 4
本课题采用的 Eclipse 3.2 集成开发平台,MyEclipse 5.5、Tomcat 5.5 插 件。 Eclipse 是著名的平台无关的开源 IDE(集成开发环境)软件。最初主要用来 Java 语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如 C++编程 语言和 Python 编程语言的开发工具。Eclipse 的本身只是一个框架平台,但是 众多插件的支持使得 Elipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活 性。Eclipse 最初由 IBM 公司斥资 4000 万美金开发,后来交给非赢利性的软件 供应商联盟 Eclipse 基金会(Eclipse Foundation)管理。 Eclipse 采用的技 术是 IBM 公司开发的 swt 技术,这是一种基于 java 的窗口组件,类似 java 本身 提供的 awt 和 swing 窗口组件;不过 IBM 声称 swt 比其他 java 窗口组件更有效 率。 Eclipse 开 发 环 境被 称 为 Workbench , 它 主 要 由 三 个部 分组 成 : 视 图 (Perspective),编辑窗口(Editor)和观察窗口(View)。其强大的功能有: 支持多语言、跨平台、丰富的工具等。尤其是支持插件和多语言功能非常适合开 发复杂的 web 项目,所以我采用了此开发平台[12]。 2.3 设计方法 2.3.1 JDBC 概述与工作过程 JDBC(Java DataBase Connectivity,Java 数据库连接)是一套允许 Java 与 SQL 数据库对话的程序设计接口,它是用于执行 SQL 语句的 Java API,是 Java 应用程序连结数据库、存取数据的一种机制,可以为多种关系数据库提供统一的 访问,它由一组用 Java 语言编写的类和接口组成。类似于在 SQLSERVER 2000 里面的查询分析器和在 ORACLE 里面的 SQL PLUS 写 SQL 语句一样。JDBC 是一种 把 SQL 语句欠套在 JAVA 代码里面执行的。这样的话就是独立于数据库的一种编 程了。 JDBC 接口与驱动程序常见的形式:JDBC-ODBC 桥驱动程序,部分 Java、部 分本机驱动程序、中间数据访问服务器、纯 Java 驱动程序。如图 2-2: 5
图 2-2 JDBC 数据库驱动程序图 JDBC 完成数据库的操作过程主要步骤或说工作过程有:1,加载 JDBC 驱动 程序;2,建立与数据库的连接;3,建立语句对象,通过该语句对象将 SQL 语句 传送给数据库,进行数据库操作,获取结果及有关结果集的信息;4,关闭相关 连接[3]。 2.3.2 生成图形报表工作过程 1.页面请求,页面通过标签引用; 2.获取相关的图形或图像的绘制参数和数据,首先通过 jtds 连接数据库, 然后通过 DAO 获取数据,实例化 VO,存到集合变量里; 3.调用 java.awt.image、java.awt 等 Java 图像类库进行绘制; 4.将绘制完成的结果,以图像的格式(jpg/jpeg/gif/png)返回给发出请 求的客户端即页面[11]。 2.4 相关技术的介绍 2.4.1 Servlet 简介 在 Java 中,给我们提供了编写扩展功能的技术—Servlet。Java Servlet (Java 服务器小程序)是一个基于 Java 技术的 Web 组件,运行在服务器端,由 Servlet 容器所管理,用于生成动态的内容。Servlet 是平台独立的 Java 类,编 写一个 Servlet,实际上就是按照 Servlet 规范编写一个 Java 类。Servlet 被编 译为平台中立的字节码,可以被动态地加载到支持 Java 技术的 Web 服务器中运 行。目前 Servlet 最新的版本是 Servlet 2.4。 Servlet 类一般从 HttpServlet 类继承而来,在这个类中至少要实现 doGet 6
或者 doPost 函数,在这两个函数中处理来自客户的请求,然后将结果返回。 Servlet 和 Jsp 是 Sun 公司 J2EE 架构中重要的部分。由于基于 Java 语言,因此 其可以方便的调用功能强大的 Java API(如 JDBC)。 Servlet 容器有时候也叫做 Servlet 引擎,是 Web 服务器或应用程序服务器 的一部分,用于在发送的请求和响应之上提供网络服务,解码基于 MIME 的请求, 格式化基于 MIME 的响应。Servlet 容器在 Servlet 的生命周期内包容和管理 Servlet。 Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。 与 cgi 的区别在于 servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于 servlet[2]。 2.4.2 Java2D API 简介 Java 2D API 是 JFC (Java Fundation Classes)的一员,加强了传统 AWT ( Abstract Windowing Toolkit )的描绘功能。在 JDK1.2 中已经支援 Java 2D 的使用。透过 Java 2D API ,Programmer 可以轻松地描绘出任意的几何图形、 运用不同的填色效果、对图形做旋转( rotate)、缩放( scale)、扭曲( shear) 等。当然,2D API 还有许多增强 AWT 能力的部分,像是处理影像档案可以有不 同的滤镜(filter)效果、对於任意的几何图形亦能做碰撞侦测(hit detection)、 图形重叠混色计算(composite)等功能。Java 2D API Packages主要介绍如下: 1.java.awt java.awt 包含了一些新增的 2D API 类别(classes)和界面(interfaces)。 其中 Graphics2D 继承自 java.awt.Graphics ,是描绘 2D 图形的物件(object)。 如同前版本的 JDK 所使用的绘图模式一样,当有物件要被描绘时,paint 或是 update method 会自动根据适当的 Graphics Context 来做绘图的工作。所谓的 Graphics Context 是与 Graphics Object 相关状态属性(state attribute)的 集合。在 Graphics2D 中新增了许多状态属性,像是 Stroke、 Paint、Clip、 Transform 等。 7
2.java.awt.geom java.awt.geom 则包含可以勾勒任何形状的 GeneralPath 类别。它可以由 许多不同种类的 subpath 构成,像是 lines 和 quadratic curves 等。为了兼顾 方便性,此 package 中更定义了许多基本几何图形,包括 Arc2D 、CubicCurve2D、 Line2D 等 。 这些 类 别都 有 两种 型 态 ,分 别 是 Float precision 与 Double precision。此外,还有一种特别的图形类别:Area,它支援 Constructive Area Geometry( CGA)。CGA 是对既有图形物件做布尔运算(Boolean Operation)而 产生新图形物件的过程。Areas 支援联集( union)、交集( intersection)、 差集(subtraction )、Exclusive OR (XOR)等布尔运算。最後, AffineTransform 类别则提供图形物件做 Scale、Shear 、Rotate 等座标上的转换。 3. java.awt.font java.awt.font 中定义了 TextLayout 类别,负责建构 text shape、执行适 当的 text operations,如碰撞侦测与打光 (highlighting)等,以及决定 text 的适当位置与顺序。 4. java.awt.image Java 2D API 支援三种影像模式。包括 producer/consumer (push) model、 immediatemode model 和 pipeine(pull) model。Push model 在前版本的 JDK 中支援。而 Pull model 则在即将出现的 Java Advanced Imaging AP中会支援。 於此,我们只探讨 JDK1.2 中出现的 Immediate mode imaging model。在此 model 下, Programmer 可以透过 2D API 对 image data( BufferedImage or Raster) 做滤镜的效果。在 Package java.awt.image 中,immediate mode imaging APIs 可以被归为六大类: interfaces、image data classes、 image operation classes、sample model classes、 color model classes 和 exceptions。其 中 operation classes 即定义了许多 filter ,包括了 AffinTransformOp 、 BandCombineOp、 ColorConvertOp、 ConvolveOp、 LookupOp、 RescaleOp 等。 透过以上所提之滤镜,可以做到 geometrically transform、blur、 sharpen、 enhance contrast、 threshold 和 color correct images 等效果。 5. java.awt.color Package java.awt.color 定义了 class ColorSpace。此 class 提供 8
分享到:
收藏