□姚廣華(許昌水文水資源勘測(cè)局)
所見(jiàn)即所得流量程序的實(shí)現(xiàn)方法
□姚廣華(許昌水文水資源勘測(cè)局)
有關(guān)流量計(jì)算的程序在日常工作中也時(shí)常能見(jiàn),其實(shí)現(xiàn)的方法無(wú)論是使用其他計(jì)算機(jī)語(yǔ)言還是用EXCEL都很難實(shí)現(xiàn)真正的所見(jiàn)即所得;文中介紹的程序以PowerBuilder的Datawindow為開(kāi)發(fā)工具,以流量記載薄為模板,開(kāi)發(fā)出了真正的所見(jiàn)即所得流量計(jì)算程序,并在實(shí)際工作中得到了廣泛使用。
數(shù)據(jù)窗口;打造流量記載簿;逆向修改;四舍六入與有效位數(shù)
對(duì)水文工作者而言,流量計(jì)算是一項(xiàng)基本但又繁瑣的工作,特別是基層水文站長(zhǎng)期以來(lái)都是采用流量記載簿加計(jì)算器的方法進(jìn)行流量計(jì)算,而對(duì)于采用計(jì)算機(jī)進(jìn)行流量計(jì)算大多數(shù)人都不是很熟練,更不要說(shuō)使用EXCEL或程式化比較強(qiáng)的流量計(jì)算程序進(jìn)行流量計(jì)算了。
數(shù)據(jù)窗口是開(kāi)發(fā)語(yǔ)言PowerBuilder包含的一種編程控件,PowerBuilder是美國(guó)著名的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)工具生產(chǎn)廠商Sybase公司研制的一種新型、快速開(kāi)發(fā)工具,基于客戶機(jī)/服務(wù)器結(jié)構(gòu)的一個(gè)集成化開(kāi)發(fā)工具,提供與當(dāng)前流行的大型數(shù)據(jù)庫(kù)的接口,適于數(shù)據(jù)應(yīng)用程序的客戶端和網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā),為順應(yīng)時(shí)代發(fā)展的需要其版本從1991年6月的1.0版本到2011年推出的12.5歷經(jīng)了系列版本的變革,已更加完善與成熟。而PowerBuilder的技術(shù)核心與靈魂則當(dāng)屬獨(dú)一無(wú)二的專利技術(shù)——數(shù)據(jù)窗口技術(shù)(Datawindow),這種技術(shù)對(duì)定義和開(kāi)發(fā)數(shù)據(jù)庫(kù)連接過(guò)程進(jìn)行了抽象,使程序開(kāi)發(fā)人員能夠完全可視化地完成應(yīng)用程序中有關(guān)數(shù)據(jù)庫(kù)的編程工作。通過(guò)數(shù)據(jù)窗口,用戶可以輕松完成客戶端和服務(wù)器端之間的數(shù)據(jù)交互,方便地顯示、修改和更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。Datawindow下面分別有Grid、Tabular、Group、Freefrom、Label、N-Up、CrossTab、Graph、Composite 等十幾個(gè)不同的類型分別適用于不同的工作需要。

圖1 流量錄入主界面圖
要打造與流量記載簿神似的流量錄入窗口必須使用完全自定義的報(bào)表格式,因此使用Datawindow的Tabular類型也就成為了首選,因?yàn)檫@種數(shù)據(jù)窗口在新建之前字段之間沒(méi)有網(wǎng)格線分隔,字段和標(biāo)簽的布局可以隨意調(diào)整,在headerband中的標(biāo)簽可以隨意拖放到detailband中,detailband中的字段也可以拖動(dòng)到headerband中。這種顯示格式的數(shù)據(jù)窗口布局安排非常靈活,在流量程序設(shè)計(jì)中就可以根據(jù)需要設(shè)計(jì)字段和標(biāo)簽的布局,然后采用手工畫(huà)線制作成流量原始記載簿樣式的錄入界面了,圖1即為流量錄入界面的一部分界面。
因?yàn)樵剂髁坑涊d簿是一種不規(guī)則的報(bào)表形式,其表頭雖然復(fù)雜但是卻相對(duì)固定,因此可以手工繪制而成。但是其表格的數(shù)據(jù)錄入部分卻是動(dòng)態(tài)的不能設(shè)定為固定行,并且左側(cè)的表格與右側(cè)的表格(以部分平均流速為分界線)也不對(duì)應(yīng),右側(cè)的表格線剛好在左側(cè)表格線的兩線之間,這就更增加了表格繪制的難度。通過(guò)反復(fù)的研究與分析終于找到解決這種問(wèn)題的方法:部分平均流速后面的表格線與之前的表格分兩部分繪制;Detail的頂端(即整個(gè)表格不分前后)不放置表格線,Detail的末端從前到后放置一根完整的表格線;在Detail頂端與末端之間以部分平均流速為分界線,之前的不放置表格線,之后的表格線則放置在Detail頂端與末端之間1/2的位置處,并且其對(duì)應(yīng)的字段要放置在表格線之下,前面的字段放置在Detail區(qū)域的正中間位置;通過(guò)上面的設(shè)計(jì)后標(biāo)準(zhǔn)的流量記載簿就誕生了。
雖然流量記載簿的錄入部分可以實(shí)現(xiàn)了,但根據(jù)流量測(cè)量的實(shí)際需要在測(cè)量之前首先需要確定整個(gè)測(cè)流斷面的測(cè)深數(shù),然后再以此為基礎(chǔ)逐根測(cè)流。基于這一點(diǎn)的考慮流量計(jì)算程序在生成記載簿之前先設(shè)定一個(gè)確定測(cè)深數(shù)的輸入框,當(dāng)用戶輸入一個(gè)測(cè)深數(shù)后,其后面將由Datawindow自動(dòng)生成一個(gè)行數(shù)為測(cè)深數(shù)的空白表格。表格共有3列:測(cè)深、測(cè)速、測(cè)法,測(cè)深列中的數(shù)值由1到設(shè)定的測(cè)深數(shù)自動(dòng)生成,根據(jù)前面的測(cè)深數(shù)測(cè)速列自上而下由1開(kāi)始到用戶的設(shè)定的數(shù)值為止,該數(shù)據(jù)可以小于等于測(cè)深數(shù),而一旦前面的測(cè)速數(shù)確定其后的測(cè)法列則不能為空,可以根據(jù)用戶的需要輸入1點(diǎn)法、2點(diǎn)法、3點(diǎn)法、5點(diǎn)法等數(shù)據(jù)。
當(dāng)測(cè)深數(shù)表格確定之后點(diǎn)擊生成按鈕,流量程序?qū)?huì)生成一張完整的流量記載簿供用戶錄入。該流量程序采用了簡(jiǎn)捷快速的錄入方式:只需要用戶輸入表格中的4列(標(biāo)明為藍(lán)色的部分)數(shù)值,系統(tǒng)就可以自動(dòng)計(jì)算出其他剩余的部分。通常其他流量程序一旦完成流量計(jì)算就會(huì)變成一張不可修改的流量成果表,若數(shù)值發(fā)生了變量則只能重新錄入一張新的流量成果表。但是在流量計(jì)算的過(guò)程中常常會(huì)有初次錄入、復(fù)核、校核等過(guò)程,特別是原始數(shù)據(jù)錄入錯(cuò)誤的情況時(shí)有發(fā)生。基于這種需求,本流量程序在生成流量結(jié)果之后還可以允許用戶對(duì)之前錄入的數(shù)值進(jìn)行修改,當(dāng)用戶完成數(shù)值修改后只需要點(diǎn)擊一下重新計(jì)算按鈕系統(tǒng)就會(huì)計(jì)算出新的流量結(jié)果,從而實(shí)現(xiàn)了無(wú)論是輸入還是修改都方便快捷的人性化操作模式。
流量計(jì)算除實(shí)現(xiàn)所見(jiàn)即所得的界面外,其結(jié)果的正確性也是非常重要的,特別是流量計(jì)算中使用了不同于大多數(shù)計(jì)算的四舍六入進(jìn)位法,所以要想計(jì)算出正確的結(jié)果就必須要了解流量計(jì)算中各項(xiàng)目的有效位數(shù)確定標(biāo)準(zhǔn)和取值范圍,其常用的參數(shù)如表1所示。
表1中雖然有各項(xiàng)目的取用位數(shù)但其取用方法卻不能使用傳統(tǒng)的四舍五入法,因?yàn)榘凑铡逗恿髁髁繙y(cè)驗(yàn)規(guī)范》有些項(xiàng)目要采用四舍六入的進(jìn)位法。要想實(shí)現(xiàn)四舍六入就要先了解其進(jìn)位的規(guī)律,其規(guī)律為:4舍6入5看齊,5后有數(shù)進(jìn)上去,尾數(shù)為零向左看,左數(shù)奇進(jìn)偶舍棄(5后全為零奇進(jìn)偶不進(jìn))。在流量計(jì)算中要逐一地對(duì)各項(xiàng)目加以取舍進(jìn)位是一項(xiàng)繁瑣且容易混淆出錯(cuò)的工作,對(duì)此本流量程序特編制了四舍六入函數(shù)of_4out_6in()與有效位函數(shù)of_youxiaozhi()。其主要代碼如下:

表1 流量各項(xiàng)目取用有效位表



通過(guò)上面的代碼可以看出四舍六入函數(shù)與有效位函數(shù)是密切相連的,并且四舍六入函數(shù)的產(chǎn)生是為有效位函數(shù)調(diào)用服務(wù)的。通過(guò)這兩個(gè)函數(shù)的建立就可以完美地解決流量計(jì)算過(guò)程中繁瑣易錯(cuò)的有效位數(shù)取舍問(wèn)題,并且以函數(shù)的形式予以封裝不僅方便本程序的調(diào)用而且還可以做為開(kāi)發(fā)其他系統(tǒng)的公用函數(shù)。
使用PowerBuilder的數(shù)據(jù)窗口技術(shù)實(shí)現(xiàn)了近乎完美的流量記載簿計(jì)算程序,使其不但具備了錄入上的方便快捷而且還實(shí)現(xiàn)了逆向修改功能。因?yàn)槠渫耆凑兆钚碌暮恿髁髁繙y(cè)驗(yàn)規(guī)范編制,所以其計(jì)算方法和結(jié)果將成為一種可靠的標(biāo)準(zhǔn),為用戶在流量計(jì)算和校核方面提供一個(gè)有力的參考,從而方便了日常的流量測(cè)驗(yàn)工作。
TV222·1
D
1673-8853(2014)02-0015-02
2013-11-04
左英勇)