摘 要:本文討論了高校機房課余時間對學生開放后所面臨的一系列問題,為了解決這些問題,用VFP6.0設計開發的一種結構簡單、運行成本較低的上機管理系統,并介紹了系統設計運行過程中部分難題及解決方案。
關鍵詞:上機管理系統 自定義函數 數據類型的轉換
一、學生上機管理面臨的問題
隨著我國信息技術教育的發展和需要,越來越多的高校都把機房在課余時間對學生開放,實行計時收費,但隨著學生人數的不斷增加,各種管理方面的問題就逐漸顯露出來。問題主要有以下幾個方面:(1)管理員工作量大、效率低,尤其是下機高峰時容易產生混亂。(2)費用計算誤差大,由于人工計時不精確,所收費用和上機時間換算可能出現很大誤差。(3)容易產生財務漏洞,不能進行有效、準確、方便的財務核查和統計。(4)信息難以統計。缺少系統地管理,不能詳細記錄每個學生上機的詳細信息(比如:每次上機開始時間和時長等),學校管理者無法對學生上機的情況很好地進行統計與分析。
上述問題顯然與我國信息技術發展的現狀極不協調,因此學生上機管理系統越來越受到很多學校的歡迎。該系統數據結構簡單、處理方便,為了節省開發費用和運行成本我們完全可以自主開發此系統。VFP6.0關系數據庫系統是小型數據庫管理系統的杰出代表,它以其強大的性能、完整而豐富的工具、較高的處理速度、友好的管理界面以及完備的兼容性等特點,成了小型數據庫系統開發人員的首選。VFP系統還允許用戶自己定義函數,一經定義用戶就可以像調用系統標準函數那樣來調用自定義函數,本文就VFP自定義函數在學生上機管理系統中的應用進行探討。
二、上機管理系統的設計與實現
(一)系統的的結構設計
系統主要有以下功能(模塊):
1. 服務器端:(1)學生信息管理,(2)機卡管理,(3)信息查詢統計,(4)用戶(管理員、值班教師)管理。
2. 客戶端:學生掃描機卡上機
(二)系統中主要的數據表及其結構
1.學生基本信息表xsxx.dbf,用于存儲學生的基本信息。
結構如下:卡號(C,12),姓名(C,8),班級(C,20),剩余機時(N,6),上機狀態(N,1)。
2.正在上機表zzsj.dbf,存儲正在上機的學生信息。
結構如下:卡號(C,12),姓名(C,8),班級(C,20),開始時間(C,8),已用時間(C,8),機卡剩余(C,11),狀態(C,10)。
(三)系統的主要運行過程分析
1.服務器端(略)。
2.客戶端:
(1)上機:學生自己在機房入口的條形碼掃描儀上掃描機卡,計算機讀出機卡信息傳送至服務器,服務器將接收到的數據進行驗證后傳回機卡剩余機時等信息。如果機時已用完,提醒學生不能上機,否則記錄學生上機開始時間,計時開始,系統將機卡號、剩余機時、開始時間等數據寫入正在上機表zzsj.dbf中。
(2)下機:學生下機時再次掃描機卡,計算機從正在上機表zzsj.dbf中讀出學生上機開始的時間,計算出本次上機的時長和機卡剩余時間并執行以下任務:①將學生的機卡號、上機開始時間、下機時間、上機時長等信息寫入上機記錄表sjjl.dbf。②將修改后的剩余機時傳送給服務器,修改學生信息表xsxx.dbf。③刪除正在上機表zzsj.dbf中的記錄。如果下機時學生較多,值班人員可以點擊客戶端界面上的“全部下機”按鈕,系統會自動批量地處理所有學生的上機信息。
(四)主要技術難題與解決方案
1. 機房分散,入口不唯一。我們學校的機房建筑布局比較分散,入口不唯一,多個機房同時開放時,需要在每個機房門口都放置一臺配置條形碼掃描儀的計算機。系統只需要安裝在服務器上,并將安裝目錄(如“sjgl”)設置為共享,在客戶機上將服務器上的共享目錄映射為j盤,客戶機運行時,只需要打開j盤中的主程序,輸入用戶名和口令即可運行客戶端程序。結構如圖(1):

2. 學生上機卡的制作。很多類似的系統都采用的是磁卡刷卡器,不僅要購買刷卡器,并且要給每個學生制作一張磁卡,增加了系統運行成本和學生的負擔。針對我校實際情況,每一位學生都有借書證,借書證號是唯一的,借書登記時采用條形碼掃描儀掃描,所以上機管理系統也采用了這種方式。系統運行前,只需要給每一臺客戶機配備一個條形碼掃描儀就可以了,不需要再給學生制作機卡,降低了軟件開發的難度并且節約了系統運行成本和學生的負擔,一舉兩得。
3. 重復掃描機卡。一些學生上機后,再把機卡給別的學生到別的機房上機,希望在第二次掃描機卡時結束計時,結果兩位學生都沒有計時。解決方案:在學生信息表xsxx.dbf中設置“上機狀態”字段,如果掃描機卡時發現上機狀態為1,而且該生又不在本機房上機,則肯定在別的機房上機,系統就給出警告信息。相關代碼如下:
ifsjzt=1上機狀態為1說明學生一定在上機
selectzzsj 選擇正在上機表zzsj.dbf
locate for 卡號=kahao 查找該卡是否在本機房上機
ifnot found()沒有找到,說明該卡只能在別處上機
messagebox(“此卡正在別處上機,機卡不能重復使用!”,48,“信息”)
else學生在本機房上機
……
endif
……
endif
4.數據類型的轉換。本系統中最關鍵的數據是時間類型數據,比如學生的機卡剩余時間、上機開始時間、下機時間、上機時長等。學生信息表xsxx.dbf中剩余機時存儲的為秒數,上機時長是以秒為單位統計的,為了使系統更人性化,每一秒都將上機時長、剩余機時進行更新(如圖2),所以每一秒都需要計算系統當前時間datetime( )與上機開始時間之差,但是在VFP系統中,兩個日期時間類型數據相減為數值型,而不是我們想看到的時分秒形式(如“00:05:06”)。當學生機時用完,剩余機時為負數時應該顯示的樣式形如“-00:02:29”。顯然,如果不對要操作的數據進行類型轉換,是不能實現上述要求的。由于學生信息表中存儲的剩余機時為秒數,而且日期時間型數據之差為數值類型,所以筆者在開發系統時自定義一個函數ntoc( ),將整數類型轉換成字符型,顯示成時間樣式(如“00:05:06”),相關代碼如下:

FUNCTION ntoc 定義函數名稱,功能是將數值類型轉換成字符類型,顯示為時間樣式
PARAMETERS ms 數值類型參數,單位為秒
k=sign(ms) 判斷參數是正數還是負數
ms=abs(ms) 求出秒數的絕對值
h=int(ms/3600)求出對應的小時數h
m=int(mod(ms,3600)/60) 求出對應分鐘數m
s=mod(ms,60) 求出秒數s
if h<10
h=\"0\"+alltrim(str(h)) 如果結果只有一位(如6),就加\"0\"顯示成兩位 如\"06\"
else
h=alltrim(str(h)) 直接顯示成兩位如\"12\"
endif
if m<10
m=\"0\"+alltrim(str(m))
else
m=alltrim(str(m))
endif
if s<10
s=\"0\"+alltrim(str(s))
else
s=alltrim(str(s))
endif
if k>=0
return h+\":\"+m+\":\"+s返回字符串類型的時間 如\"05:06:02\"
else
return \"-\"+h+\":\"+m+\":\"+s返回負的字符串類型的時間 如\"-05:06:02\"
Endif
小結
本系統采用條形碼掃描輸入學生機卡號進行上機、下機登記,代替了鍵盤輸入,提高了值班人員的工作效率。系統的開發不僅給學生的上機管理帶來了很大的方便,也提高了學生自主性與自覺性。
參考文獻:
[1]李淑華.Visual Forxpro程序設計[M].北京:高等教育出版社,2004.
[2]楊克玉等.Visual Forxpro6.0程序設計[M].合肥:安徽大學出版社.
[3]袁健.學校機房上機管理系統的設計與實現[J].計算機與現代化,2006,12:127-129.
[4]丁浩,錢麗麗.VFP自定義函數在編制資產負債表中的應用[J].中國管理信息化,2007,4:16-19.