所见即所得流量程序的实现方法
2014-03-05姚广华许昌水文水资源勘测局
□姚广华(许昌水文水资源勘测局)
所见即所得流量程序的实现方法
□姚广华(许昌水文水资源勘测局)
有关流量计算的程序在日常工作中也时常能见,其实现的方法无论是使用其他计算机语言还是用EXCEL都很难实现真正的所见即所得;文中介绍的程序以PowerBuilder的Datawindow为开发工具,以流量记载薄为模板,开发出了真正的所见即所得流量计算程序,并在实际工作中得到了广泛使用。
数据窗口;打造流量记载簿;逆向修改;四舍六入与有效位数
0 引言
对水文工作者而言,流量计算是一项基本但又繁琐的工作,特别是基层水文站长期以来都是采用流量记载簿加计算器的方法进行流量计算,而对于采用计算机进行流量计算大多数人都不是很熟练,更不要说使用EXCEL或程式化比较强的流量计算程序进行流量计算了。
1 PowerBuilder的数据窗口技术
数据窗口是开发语言PowerBuilder包含的一种编程控件,PowerBuilder是美国著名的数据库应用开发工具生产厂商Sybase公司研制的一种新型、快速开发工具,基于客户机/服务器结构的一个集成化开发工具,提供与当前流行的大型数据库的接口,适于数据应用程序的客户端和网络应用程序的开发,为顺应时代发展的需要其版本从1991年6月的1.0版本到2011年推出的12.5历经了系列版本的变革,已更加完善与成熟。而PowerBuilder的技术核心与灵魂则当属独一无二的专利技术——数据窗口技术(Datawindow),这种技术对定义和开发数据库连接过程进行了抽象,使程序开发人员能够完全可视化地完成应用程序中有关数据库的编程工作。通过数据窗口,用户可以轻松完成客户端和服务器端之间的数据交互,方便地显示、修改和更新数据库中的数据。Datawindow下面分别有Grid、Tabular、Group、Freefrom、Label、N-Up、CrossTab、Graph、Composite 等十几个不同的类型分别适用于不同的工作需要。
图1 流量录入主界面图
2 使用Datawindow之Tabular打造流量记载簿
要打造与流量记载簿神似的流量录入窗口必须使用完全自定义的报表格式,因此使用Datawindow的Tabular类型也就成为了首选,因为这种数据窗口在新建之前字段之间没有网格线分隔,字段和标签的布局可以随意调整,在headerband中的标签可以随意拖放到detailband中,detailband中的字段也可以拖动到headerband中。这种显示格式的数据窗口布局安排非常灵活,在流量程序设计中就可以根据需要设计字段和标签的布局,然后采用手工画线制作成流量原始记载簿样式的录入界面了,图1即为流量录入界面的一部分界面。
2.1 不规则表格的绘制
因为原始流量记载簿是一种不规则的报表形式,其表头虽然复杂但是却相对固定,因此可以手工绘制而成。但是其表格的数据录入部分却是动态的不能设定为固定行,并且左侧的表格与右侧的表格(以部分平均流速为分界线)也不对应,右侧的表格线刚好在左侧表格线的两线之间,这就更增加了表格绘制的难度。通过反复的研究与分析终于找到解决这种问题的方法:部分平均流速后面的表格线与之前的表格分两部分绘制;Detail的顶端(即整个表格不分前后)不放置表格线,Detail的末端从前到后放置一根完整的表格线;在Detail顶端与末端之间以部分平均流速为分界线,之前的不放置表格线,之后的表格线则放置在Detail顶端与末端之间1/2的位置处,并且其对应的字段要放置在表格线之下,前面的字段放置在Detail区域的正中间位置;通过上面的设计后标准的流量记载簿就诞生了。
2.2 测深数控制
虽然流量记载簿的录入部分可以实现了,但根据流量测量的实际需要在测量之前首先需要确定整个测流断面的测深数,然后再以此为基础逐根测流。基于这一点的考虑流量计算程序在生成记载簿之前先设定一个确定测深数的输入框,当用户输入一个测深数后,其后面将由Datawindow自动生成一个行数为测深数的空白表格。表格共有3列:测深、测速、测法,测深列中的数值由1到设定的测深数自动生成,根据前面的测深数测速列自上而下由1开始到用户的设定的数值为止,该数据可以小于等于测深数,而一旦前面的测速数确定其后的测法列则不能为空,可以根据用户的需要输入1点法、2点法、3点法、5点法等数据。
2.3 逆向修改
当测深数表格确定之后点击生成按钮,流量程序将会生成一张完整的流量记载簿供用户录入。该流量程序采用了简捷快速的录入方式:只需要用户输入表格中的4列(标明为蓝色的部分)数值,系统就可以自动计算出其他剩余的部分。通常其他流量程序一旦完成流量计算就会变成一张不可修改的流量成果表,若数值发生了变量则只能重新录入一张新的流量成果表。但是在流量计算的过程中常常会有初次录入、复核、校核等过程,特别是原始数据录入错误的情况时有发生。基于这种需求,本流量程序在生成流量结果之后还可以允许用户对之前录入的数值进行修改,当用户完成数值修改后只需要点击一下重新计算按钮系统就会计算出新的流量结果,从而实现了无论是输入还是修改都方便快捷的人性化操作模式。
3 四舍六入与有效位数在程序中的实现方法
流量计算除实现所见即所得的界面外,其结果的正确性也是非常重要的,特别是流量计算中使用了不同于大多数计算的四舍六入进位法,所以要想计算出正确的结果就必须要了解流量计算中各项目的有效位数确定标准和取值范围,其常用的参数如表1所示。
表1中虽然有各项目的取用位数但其取用方法却不能使用传统的四舍五入法,因为按照《河流流量测验规范》有些项目要采用四舍六入的进位法。要想实现四舍六入就要先了解其进位的规律,其规律为:4舍6入5看齐,5后有数进上去,尾数为零向左看,左数奇进偶舍弃(5后全为零奇进偶不进)。在流量计算中要逐一地对各项目加以取舍进位是一项繁琐且容易混淆出错的工作,对此本流量程序特编制了四舍六入函数of_4out_6in()与有效位函数of_youxiaozhi()。其主要代码如下:
表1 流量各项目取用有效位表
通过上面的代码可以看出四舍六入函数与有效位函数是密切相连的,并且四舍六入函数的产生是为有效位函数调用服务的。通过这两个函数的建立就可以完美地解决流量计算过程中繁琐易错的有效位数取舍问题,并且以函数的形式予以封装不仅方便本程序的调用而且还可以做为开发其他系统的公用函数。
4 结论
使用PowerBuilder的数据窗口技术实现了近乎完美的流量记载簿计算程序,使其不但具备了录入上的方便快捷而且还实现了逆向修改功能。因为其完全按照最新的河流流量测验规范编制,所以其计算方法和结果将成为一种可靠的标准,为用户在流量计算和校核方面提供一个有力的参考,从而方便了日常的流量测验工作。
TV222·1
D
1673-8853(2014)02-0015-02
2013-11-04
左英勇)