福建省公安消防總隊信息通信處 章瑞斌
用ACCESS設計消防運動會記分統計系統
福建省公安消防總隊信息通信處 章瑞斌
本文通過對近年來消防運動會項目設置規律的研究,利用微軟OFFICE組件之一的ACCESS數據庫軟件,從數據庫、成績錄入、名次統計等主要方面進行設計,以期快速建設一個適應消防部隊需要的、較為完善的記分統計系統。
運動會;記分;消防;ACCESS
近年來,隨著我國經濟體制改革的深入,人民群眾生活水平得到有效提高,但與此同時各類火災等安全隱患也呈上升趨勢。為應對這一變化,消防部隊推行了實戰化訓練,并依此開展了消防運動會等比武、競賽活動,以激勵部隊訓練熱情、檢驗部隊訓練成果。
由于參加人員、比賽場地、裝備本性斬差異,消防運動會在項目設置、計分方式等方面差異較大,每次比武、比賽都需定制開發記分統計系統。能否研制一款適應消防部隊比武、競賽需要的記分統計系統,實現快速成績統計和成績發布,成為當前消防部隊的現實需要。
近年來,為適應實戰化訓練的要求,消防部隊開展了多種多樣的比武競賽活動。僅就福建省而言,全省消防部隊每年舉辦各類拉動演練或比武競賽活動過百場。分析這些比武競賽有如下特點:
1.1 參賽隊伍不確定。依據人員構成不同,參賽隊伍可分為:有現役隊、專職隊、義務隊。專職隊又分為:政府專職隊、鄉鎮專職隊、企業專職隊。現役隊又分為:特勤隊、普通隊。
1.2 比賽項目不確定。比賽項目分為:個人項目、兩人項目、多人項目、整建制項目、集體項目、團體項目等。項目設置依據比賽場地和當前業務發展需要設置,具有較大的隨機性和不確定性。
1.3 計分方式不確定。由于參賽隊伍多樣性、比賽項目多樣性,導致計分方式也存在許多不確定性。有的采取百分制記取分數、有的采取時間記取分數;以時間為記分方式的,又可分為:記取單人成績的、記取雙人成績的、記取整體成績的、分段記取成績的等,其中還存在違規加秒和不計取成績等多種情況。
Microsoft Office Access是由微軟發布的關系數據庫管理系統。它結合了Microsoft Jet Database Engine和圖形用戶界面兩項特點,是Microsoft Office的系統程序之一。
Microsoft Office Access提供了一個豐富的開發環境,可以讓開發人員減少代碼工作量,快速搭建設應用程序。
通過對消防比賽項目的分析,我們可以將比賽項目按記分方式進行分類:
3.1.1 計分制項目。指直接計取比賽項目的整數或小數成績的項目。此類項目成績越高,其排名越靠前。如:總分為100分制的項目等。
3.1.2 計時制項目。指計取比賽用時的項目。此類項目用時越短,其排名越靠前。采用全程計時或分段累積計時的復合計時項目中的子項目都列入此類項目。
3.1.3 復合計時項目。該項目成績由各子項目分段計時累加而成,其關聯項目填寫在子項目ID字段中。其子項目可以獨立排名計分,也可以只記取復合計時項目的排名。
3.1.4 團體集體項目。指不直接由計時或計分方式產生成績的項目,其成績由與其關聯的子項目的排名或得分情況確定,如:團體項目、集體項目、隊別項目等。
具體項目表結構如下:

字段名稱 類別 長度 說明ID 數字 2 自動編號項目名稱 文本 255項目類別 文本 2 10、計分制項目20、計時制項目80、復合計時項目90、團體集體項目子項目ID 文本 255 項目ID中間以半角“,”分隔項目分值 數字 2 長整型
成績表用于記錄各類比賽成績,不同的類別項目其記取成績的方式也就不同。
3.2.1 計時制項目、復合計時項目。
在實際的比賽過程中,記取比賽成績往往需要精確到小數字后3位,而ACCESS時間字段只能記取整數秒信息,無法滿足統計精度的需要。故我們采用文本形式記取計時制項目成績,記錄在比賽計時字段中,以滿足日常顯示和打印的需要。同時我們也將比賽計時以雙精度數字形式存放在比賽成績字段中,以利于計算和排序。
3.2.2 計分制的項目。
由于其成績本來就是數字,可以直接記錄在比賽成績字段中。
3.2.3 團體集體項目。
根據各單項項目的排名和項目分值(權重)記錄比賽排名和積分。
具體成績表結構如下:

字段名稱 類別 長度 說明ID 數字 2 自動編號項目ID 文本 2參賽隊伍 文本 255參賽人員 文本 255 人員姓名中間以全角“、”分隔比賽計時 文本 50 文本格式為:“XX時XX分XX秒XXX”比賽成績 數字 16 雙精度比賽排名 數字 2 整型項目分值 數字 2 整型比賽積分 數字 2 整型
為方便操作人員錄入,我們規定錄入時以半角“:”作為時、分、秒間的間隔符。那么:當我們輸入“5:6:7.009”時,程序將自動轉換為“05時06分07秒009”;當我們輸入“3:2.1”時,程序將自動轉換為“03分02秒100”;當我們輸入“05.08”時,程序將自動轉換為“05秒080”。
由于輸入的時間格式為字符型,必須進行適當的轉換。
4.1.1 確定字符“:”數量及位置。
A、當數量為0時,判斷輸入時間字符串為僅存在秒。
B、當數量為1時,判斷輸入時間字符串有分和秒。字符“:”前的數值為“分”,字符“:”后的數值為“秒”。
C、當數量為2時,判斷輸入時間字符串有時、分和秒。第1個“:”前的數值為“時”,第1個“:”與第2個“:”間的數值為“分”,第2個“:”后的數值為“秒”。
其實現框圖如下:

4.1.2 確定字符“.”數量及位置。
小數點前數字為整數秒,小數點后數字為千分秒。
其實現框圖如下:

研究ACCESS中控件,控件在獲得焦點時觸發的事件順序為:Enter、GotFocus,在數據錄入時觸發的事件順序為:KeyDown、KeyPress、Change、KeyUp,在失去焦點時觸發的事件順序為:BeforeUpdate、AfterUpdate、Exit、LostFocus。
從以上分析,我們得知:
(1)在Enter、GotFocus事件時,由于數據還未錄入,不合適觸發時間轉換過程;
(2)由于每按一次鍵盤都將觸發一輪:KeyDown、Key-Press、Change、KeyUp事件,此時觸發時間轉換過程,將導致轉換過程被頻繁觸發,且容易因輸入錯誤或不完整導致轉換過程崩潰;
(3)比較合適的觸發時機應為:BeforeUpdate、AfterUpdate、Exit、LostFocus。
進一步研究,我們僅按“左”、“右”、“HOME”、“END”等按鍵,未更改控件輸入內容時,控件不會觸發Key-Press、Change事件,而在失去焦點時也不會觸發BeforeUpdate、AfterUpdate事件。
(1)在控件內容未發生改變時也將觸發Exit、LostFocus事件,程序不夠優化;
(2)AfterUpdate事件觸發后,控件中的OldValue屬性已發生改變,不利于數據的保留;
(3)綜上,最佳觸發時間轉換過程時機為控件觸發BeforeUpdate事件時。
根據項目的類別不同,排名與積分的計算方法也不同。我們可以利用ACCESS提供的數據庫特性,快速實現對項目的排序,從而獲得相應的排名與積分。
5.1 計分制項目。由于計分制項目,成績越高,其排名越靠前。可依據比賽成績字段對比賽記錄進行降序排列,其排序順序即為比賽名次,并可以依據規定計算出積分。
5.2 計時制項目。由于計時制項目,用時越短,其排名越靠前。由于我們已將比賽用時記錄在比賽成績字段中,可依據比賽成績字段對比賽記錄進行降升排列,其排序順序即為比賽名次,并可以依據規定計算出積分。
5.3 復合計時項目。與計時制項目相同,排序前應將各子項目成績進行累加。
5.4 團體集體項目。與計分制項目相同,排序依據為各項目積分,排序前應將各項目積分進行累加。
其實現框圖如下:

隨著消防部隊改革的深入,消防運動會項目設置將越來越貼近實戰化,其記分統計系統將越來越復雜。本系統充分考慮到將來業務發展的需要,可利用ACCESS方便地擴展系統功能。
在實際的比賽過程中,計時員往往不只一名,需從多個記錄中選取符合規定的記錄進行計算;各比賽項目還存在,犯規加秒、取消比賽成績、取消比賽資格等情況;以上情況還需進一步進行優化。