楊澤偉 鐵法煤業(yè)(集團(tuán))有限責(zé)任公司曉南礦
目前,井口顯示人員信息系統(tǒng)采用的是asp語言設(shè)計(jì),數(shù)據(jù)存取采用的是入棧和出棧的方式一次取出多組數(shù)據(jù),按一定時(shí)間進(jìn)行數(shù)據(jù)讀取,在測(cè)試過程中會(huì)發(fā)生時(shí)間偏差,使顯示信息和提出的聲音文件不能同步,達(dá)不到系統(tǒng)的要求。由于現(xiàn)系統(tǒng)不能修改,本文以c#語言代碼為標(biāo)準(zhǔn),闡述動(dòng)態(tài)指針的設(shè)計(jì)方法。
ASP.NET是微軟公司推出的一種Internet編程技術(shù),它采用效率較高的、面向?qū)ο蟮姆椒▉韯?chuàng)建動(dòng)態(tài)Web應(yīng)用程序。在原來的ASP技術(shù)中,服務(wù)器端代碼和客戶端HTML混合在一起,常常導(dǎo)致頁(yè)面的代碼冗長(zhǎng)而復(fù)雜,程序的邏輯難以理解。ASP.NET是一種獨(dú)立于瀏覽器的編程模型,可以在最新版本的IE、NetscapeNavigator以及諸如Opera等被廣泛使用的瀏覽器上運(yùn)行。
現(xiàn)在礦內(nèi)井口屏幕顯示入井人員信息系統(tǒng)從數(shù)據(jù)庫(kù)中取數(shù)據(jù)的方法采用的是按時(shí)間段一次取出多組數(shù)據(jù)后存在本地緩存中,再和服務(wù)器中人員聲音進(jìn)行對(duì)比播放到屏幕上,等這組數(shù)據(jù)都執(zhí)行完成后再?gòu)臄?shù)據(jù)庫(kù)中取下組數(shù)據(jù)存入本地緩存中,在測(cè)試過程中發(fā)現(xiàn)數(shù)據(jù)和人員聲音會(huì)發(fā)生偏差的問題,這是由于asp不能同時(shí)取出數(shù)據(jù)和聲音所產(chǎn)生的問題。
COM是開發(fā)軟件組件的一種方法。組件實(shí)際上是一些小的二進(jìn)制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng)以及其他組件提供服務(wù)。開發(fā)自定義的COM組件就如同開發(fā)動(dòng)態(tài)的,面向?qū)ο蟮腁PI。多個(gè)COM對(duì)象可以連接起來形成應(yīng)用程序或組件系統(tǒng)。并且組件可以在運(yùn)行時(shí)刻,在不被重新鏈接或編譯應(yīng)用程序的情況下被卸下或替換掉。Microsoft的許多技術(shù),如ActiveX,DirectX以及OLE等都是基于COM而建立起來的。并且Microsoft的開發(fā)人員也大量使用COM組件來定制他們的應(yīng)用程序及操作系統(tǒng)。入井信息系統(tǒng)運(yùn)行時(shí)要顯示人員照片、聲音、安全寄語等信息,為了同時(shí)顯示這些信息,調(diào)用vs2005的com組件把系統(tǒng)自帶的WindowsMediaPlayer播放器加入到了窗口中,這樣可以把事先錄制好的家屬對(duì)員工的安全寄語通過指針調(diào)用播放出來。WindowsMediaPlayer播放器只是用來播放聲音,不用顯示在主界面上,所以它的控件布局選擇了Invisible,在主界面不會(huì)顯示播放器的窗口,使界面美觀。
初始狀態(tài)是程序在最開始運(yùn)行時(shí)把所需的數(shù)據(jù)和變量都調(diào)用到程序中,首先從數(shù)據(jù)庫(kù)中按當(dāng)天一小時(shí)內(nèi)的數(shù)據(jù)用sql語句進(jìn)行篩選取入數(shù)據(jù)集中,這時(shí)我們可以看到一小時(shí)內(nèi)的數(shù)據(jù),從這些字段中把下井時(shí)間作為主鍵存放到文本中,為后面的調(diào)用做比較使用。這時(shí)以數(shù)據(jù)集中第一條數(shù)據(jù)作為動(dòng)態(tài)指針的開始位置,取出人員姓名、安全寄語等信息顯示在窗口上。以員工職號(hào)為主鍵調(diào)出服務(wù)器中的聲音文件,使用WindowsMediaPlayer播放器進(jìn)行播放,這樣就完成了數(shù)據(jù)和指針的初始狀態(tài)設(shè)置。
在對(duì)數(shù)據(jù)庫(kù)操作時(shí),對(duì)調(diào)用的表設(shè)置一個(gè)記錄位置的指針,指針?biāo)赶虻挠涗浄Q為當(dāng)前記錄,用sql語句可返回指針?biāo)赶虻挠涗浿?。?dāng)要修改某條數(shù)據(jù)時(shí),需將指針指向該記錄。在表文件打開時(shí),記錄指針指向第一條記錄,即首記錄成為當(dāng)前記錄。記錄指針可以移動(dòng)指向任何一個(gè)記錄位置上,也可指向最后一個(gè)條記錄,這時(shí)指針再向下移動(dòng)一條時(shí)可能判斷出是否到表尾。當(dāng)記錄指針指向表尾時(shí),可以用記錄數(shù)返回條數(shù),當(dāng)無數(shù)據(jù)時(shí)返回值為0。
指針循環(huán)調(diào)用是本系統(tǒng)中的重點(diǎn),由于數(shù)據(jù)庫(kù)是時(shí)時(shí)更新的,因此用一個(gè)時(shí)間控件,設(shè)置時(shí)間控件激活為7秒,這樣每7秒時(shí)間就會(huì)重新調(diào)用一次指針,讓篩選數(shù)據(jù)和顯示數(shù)據(jù)通過指針聯(lián)結(jié)起來,達(dá)到系統(tǒng)要求。首先,從初始狀態(tài)中取出人員下井時(shí)間字段作為標(biāo)識(shí),然后,在數(shù)據(jù)庫(kù)中進(jìn)行第一次數(shù)據(jù)篩選,把數(shù)據(jù)庫(kù)中一小時(shí)內(nèi)人員存入中間表。這里需要進(jìn)行一次判斷,因?yàn)閷?duì)數(shù)據(jù)庫(kù)取數(shù)時(shí)可能暫時(shí)無下井人員,無人員時(shí)讓屏幕顯示無人員,把指針?biāo)赶蜃詈笠粭l數(shù)據(jù)記錄內(nèi)容取出存入中間變量。當(dāng)根據(jù)標(biāo)識(shí)數(shù)據(jù)取出大于下井時(shí)間數(shù)據(jù)后,指針指向數(shù)據(jù)庫(kù)第一條記錄,取出人員信息顯示到屏幕上,把下井時(shí)間信息存入到中間變量。在時(shí)間控件下次執(zhí)行時(shí)系統(tǒng)根據(jù)中間變量再次的根據(jù)條件取出數(shù)據(jù),指針再次指向第一條數(shù)據(jù)取出人員信息,就樣就達(dá)到了指針的循環(huán)調(diào)用,每次時(shí)間控件都會(huì)更新一次,數(shù)據(jù)指針會(huì)重新調(diào)用一次。
通過對(duì)井口人員信息系統(tǒng)的改進(jìn),使用動(dòng)態(tài)指針讓系統(tǒng)對(duì)人員信息達(dá)到了時(shí)間監(jiān)控,使管理人員方便管理。使用時(shí)間控件和指針相結(jié)合,設(shè)計(jì)出循環(huán)指針,實(shí)現(xiàn)了動(dòng)態(tài)調(diào)用數(shù)據(jù)的要求,完成了系統(tǒng)要求。