基于B/S模式的统计图形生成系统设计与实现

来源:岁月联盟 作者:钱广 赵正文 秦 时间:2010-08-30
  摘  要  文章介绍了B/S模式的统计图形系统的分析、设计与实现,结合统计数据的结构和特点,给出了简洁、方便、美观的统计图形定制流程和解决方案。能够快捷地进行统计图形定制,达到了良好的效果。该系统能够很好的满足用户的需求。    关键词  B/S;图形系统;统计图形定制 

1 系统关键问题及解决方法

    随着机技术、技术、信息技术的迅猛和普及,计算机在全球范围内得到了广泛应用。计算机已经成为人们日常生活和工作以及追求效率和效益不可缺少的工具。信息、网络和计算机技术作为先进的生产力,充分运用可以大大促进和加快企业的发展,为企业带来巨大的效益和社会效益。    目前,许多企业在发展业务过程中可能大量的数据,同时需要通过这些数据来绘制和统计一些图形用于分析企业的现状、预测企业的发展趋势,从而对企业的决策起到辅助作用。我们研制此系统的目的也正是针对目前企业对这类软件的需求。

2 读取不同类型数据库数据表和字段名称

    基于设计的灵活性,图形系统需要建立数据字典,因此图形系统要从不同类型的数据库(本系统主要涉及到的数据库有:SQL Server和Oracle)的数据服务器获取待访问数据库的表和字段的名称,对于SQL Server2000而言,获取当前访问的数据库的表和视图名相对来说较为简单,可用语句:select name,case xtype when 'u' then '表' end as xtype from sysobjects where xtype='u' and name<>'dtproperties' union select name,case xtype when 'v' then '视图'end as xtype from sysobjects where xtype='v' and status>0。即可获得当前登录的用户能访问的表和视图名。    语句select a.name,b.name, a.colorder from syscolumns a join systypes b on a.xtype=b.xtype where a.id=object_id(“表名称”)and b.name<>'sysname' order by a.colorder 就可以得到具体表的字段名称。    但对oracle 9i而言则比较复杂,因为登录用户的表空间下可能已经存在部分表的访问权限,而一些权限比较大的用户又授权给这个用户另一个表空间下部门表的访问权限。所以如果访问Oracle数据库,获取当前登录用户所能够访问的表存在一些问题,通过认真分析,我们采取了以下方法来获取:    select distinct owner, table_name, '表' as LX" from  user_all_privs where owner = ‘用户名’    Union select‘用户名’as owner, table_name,'表' as LX  from  user_all_tables Union select‘用户名’as owner, view_name as table_name, '视图' as LX From user_views order by table_name",其中的“用户名”指当前登录oracle数据库的帐号。如果上述语句未找到记录,则再用select distinct owner, table_name, '表' as LX" from user_all_privs 获取所有的用户表记录。获取表名之后,获取每个表的字段就较为容易了,SQL语句为:select owner, column_name,data_type,column_id from all_tab_columns where table_name =“表名称”and owner = “用户名”order by column_id。

2.1 解决建立数据字典时的效率问题

    根据系统的设计原则,系统需要连接远程数据库,并从远程数据库获取所访问数据库的表和字段写入到本地数据库服务器,从而在本地数据库建立远程数据库的数据字典。而这一过程主要的问题就是访问、读取、写入数据库的效率问题。试想,如果远程连接数据库的表和字段数量成千上万的话,那在本地数据库服务器建立数据字典时,如果不处理好语句的效率问题,在本地数据库服务器访问量较大的情况下极有可能造成数据库服务器的瘫痪,造成较大的损失。为此我们进行了多次实验,找到了比较有效地解决方法,就是利用存储过程实现:关键代码:    @iSJYID int, --  数据源ID     @sBDM varchar(30),     --  表/视图代码      @sBLX varchar(10),     -- 表/视图类型     @sZDStr varchar(8000),  -- 字段串    @iRtn  int  OUTPUT   --  返回值     -- 判断表是否存在    set @i = (select count(*) from tblSJBZD where SJYID = @iSJYID and BDM = @sBDM) if @i > 0  goto Error_1   -- 写入数据表字典insert into tblSJBZD (SJYID, BDM, LX) values (@iSJYID, @sBDM, @sBLX)if @@error <> 0  goto Error_2 -- 写入数据字典set @iPos = PATINDEX('%/%', @sZDStr)      WHILE @iPos > 0     begin-- 取字段set @sZD = left(@sZDStr, @iPos-1)set @sZDStr = right(@sZDStr, len(@sZDStr)-@iPos) -- 取类型set @iPos = PATINDEX('%/%', @sZDStr)if @iPos = 0   set @sLX = @sZDStrelsebegin  set @sLX = left(@sZDStr, @iPos-1) set @sZDStr = right(@sZDStr, len(@sZDStr)-@iPos)set @iPos = PATINDEX('%/%', @sZDStr)end                --insert into tblSJZD (SJYID, BDM, ZDDM, SJLX) values (@iSJYID, @sBDM, @sZD, @sLX)   if @@error <> 0  goto Error_2     end  -- WHILE @i > 0         commit tran  SJZD     set @iRtn=0      return @iRtnError_1:     rollback tran SJZD     set @iRtn=1      return @iRtnError_2:      rollback tran SJZD     set @iRtn=-1      return @iRtn

2.2 用Ajax技术实现图形的局部放大

    要想更方便、更好地展示图形系统生成的图形,实现图形的即时缩放,用传统的技术是很难实现的。Ajax技术是使用客户端脚本与Web服务器交换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。为了实现图形系统的即时放大功能,我们在系统实现时使用了Ajax技术,可以随意地对图形进行缩放,增加了操作的方便性。缩放的关键代码如下:function smallit(){            var height1=PhotoViewer.images1.height;            var width1=PhotoViewer.images1.width;            PhotoViewer.images1.height=height1/1.2;            PhotoViewer.images1.width=width1/1.2;           }function bigit(){            var height1=PhotoViewer.images1.height;            var width1=PhotoViewer.images1.width;PhotoViewer.images1.height=height1*1.2;          PhotoViewer.images1.width=width1*1.2;           }

2.3 系统功能分析

    通过分析,该统计图形系统主要包括以下几个方面的功能:    1)数据源管理    对存放数据的数据库进行管理,主要是配置访问数据库的参数,系统支持SQL Server,Oracle等常见数据库。    2)数据字典管理    管理数据库中各数据表及字段,实现数据表和字段的中对照功能。    3)图表样式设置    完成统计图形中图表样式的设置,包括图形标题样式、背景样式、边框样式等。    4)区域样式设置    完成统计图形中各区域样式的设置,包括区域的背景样式、网格样式等。    5)系列数据及样式设置    完成统计图形中各系列的数据项配置、系列类型以及系列的样式设置,系列样式包括标题样式、边框样式、网格样式等。    6)统计图形分类管理    一条统计图形必须属于一个分类,“图形分类管理”集中对分类进行管理,其包含的操作有添加同级、添加下级、修改、删除等操作。    7)统计图形浏览    根据已经设置好的统计图形属性和数据过滤条件,提取数据,生成相应的统计图形。在浏览统计图形的同时还可以对其属性进行设置,并支持图形导出。

3 系统关键流程

    经过分析,统计图形系统需要做成灵活的工具性软件,在其每个环节都需要提供可自定义的设置功能。定制统计图形可按照下图的流程进行就可完成定义。系统关键流程如图2所示。图2  流程图    该系统将统计图形的后台定制和前台发布分开,所以该系统的使用人员有两类,分别为图形定制人员和统计图形浏览人员。即管理员将统计图形定义好发布后,一般用户才可以在前台浏览。其用例图如图3所示。图3  用例图

4 系统实现

    通过详细设计,系统实现了上述所有功能,功能结构如图4所示。图4  系统功能结构图    系统主要操作:首先按照需要定义统计图形的各种分类和名字,完成分类定义后再选择数据源管理,添加需要连接数据库服务器,并建立中的数据字典。这样第一阶段的定制工作就基本完成。另外系统管理员在定制统计图形前首先要进行系统参数设置,包括对图形的区域、轴、线条样式颜色、粗细等进行设置。在进行统计图形定义的时候,统计图形将读取已经设置好的系统参数,定制者可以根据需要对具体统计图形的参数值进行更改。定义具体的一条统计图形的主要步骤如图5所示。
图5 定义统计图形步骤图    完成这一系列步骤后就完成了统计图形的具体定制工作。     完成后前台浏览者就可以看到通过定制发布的统计图形了。

5 结束语

    本文通过对统计图形系统的分析和设计工作,建立了统计图形数据库,解决了生产数据可视化展示和实现了图形灵活定制的需求。建立了图形多元化的展示,满足了用户图形展示多样化的需求。开发了完整的统计图形系统。本系统提供的自行定制机制有效解决了用户不断增加统计图形的需求。利用Ajax技术实现了B/S模式下图形的拖动缩放效果,方便查看图形的详细信息。由于统计图形定制流程具有通用性,所以该系统经过改进还可以成为适用于其它行业的通用的统计图形工具软件。

[1] 张海藩. 软件工程[M]. 北京:人民邮电出版社, 2004.9[2] 倪明田,吴良芝. 机图形学[M]. 北京:北京大学出版社,1999.11[3] Terry Winograd 等著,韩柯 等译.软件设计的[M]. 北京:机械出版社,2005.1

图片内容