在機房系統中,強制下機是非常必要的,當使用者餘額用完時自動下機。做這個功能還是比較坎坷的,用時2天才完成。最開始的思路是在timer中使用迴圈,當上機時間每大於5分鐘時進行扣費,更新表裡餘額,寫好**執行,發現上機時間大於5分鐘後,每次執行timer都要扣一次費,也就是只要上機時間到了5分鐘,用不了1s卡里的錢都被扣光。這時,需要定義乙個時間變數,上機時長大於5分鐘後,上機時長要+5分鐘,以防止扣之前5分鐘的費。就是這個時間變數花費了很長時間,**也比較亂,果斷換個思路。下面看看實現功能的思路是什麼樣的!
dim 和 redim的區別
dim :dimension(維度的縮寫)定義函式時使用,例如:dim a as integer,定義整型變數。
redim :在有些時候不知道需要多大的陣列,就可以使用乙個能改變大小的陣列,就是動態陣列,redim是很方便,靈活的可以隨時改變大小的陣列。有效管理記憶體,可以將記憶體空間釋放給系統,大大節省記憶體,提高執行速度。
redim使用:只能在過程中使用。redim有兩種用法,乙個帶preserve,乙個不帶,區別是是否保留原來的資料。
例如:有乙個byte陣列a,如果知道它的上限最大只能是4,就用dim
dim a as byte()
但如果不能事先確定大小,或在執行時改變它的大小就要用動態陣列。
dim a as byte()
redim a (4) '這樣改變大小時會清空原來的資料,進行重新定義
redim preserve a (4) 這樣改變大小時會保留原來的資料
timer.interval設定為60000,也就是1min.
private sub timer2_timer()
dim txtsql as string
dim msgtext as string
dim mrc as adodb.recordset
dim mrc1 as adodb.recordset
dim mrc2 as adodb.recordset
dim mrc3 as adodb.recordset
dim mrc4 as adodb.recordset
dim mrc5 as adodb.recordset
dim m, i, a, valuedate, valuetime as integer
dim pay as single
txtsql =
"select * from online_info"
set mrc =
executesql
(txtsql, msgtext)
'判斷是否有卡號上機
if mrc.
eof then
timer2.enabled = false
exit sub
else
mrc.movefirst
end if
'將上機卡號定義為乙個陣列
redim a
(mrc.recordcount) as string
for i =
0 to mrc.recordcount -1a
(i)=
trim
(mrc!cardno)
cardno =
a(i)
txtsql =
"select * from online_info where cardno='"
&trim
(cardno)
&"'"
set mrc1 =
executesql
(txtsql, msgtext)
txtsql =
"select * from student_info where cardno='"
&trim
(cardno)
&"'"
set mrc2 =
executesql
(txtsql, msgtext)
txtsql =
"select * from line_info where status='"
&"正常上機"
&"' and cardno='"
&trim
(cardno)
&"'"
set mrc3 =
executesql
(txtsql, msgtext)
'記錄上機日期時間
ondate =
trim
(mrc1.
fields(6
))ontime =
trim
(mrc1.
fields(7
))'函式計算上機時長
valuedate =
datediff
("n"
, ondate, date)
valuetime =
datediff
("n"
, ontime, time)
valuetime = valuedate + valuetime
txtsql =
"select * from basicdata_info"
set mrc4 =
executesql
(txtsql, msgtext)
'計算單位金額
if mrc2.
fields(14
)="固定使用者" then
pay =
format
(mrc4.
fields(0
)/60,
"0.0"
) else
pay =
format
(mrc4.
fields(1
)/60,
"0.0"
) end if
'判斷上機時間是否大於2min,計算消費金額
if valuetime >=
2 then
valuetime1 = valuetime -
(valuetime -1)
pay =
format
(pay * valuetime1,
"0.0"
) else
pay =
format
(pay * valuetime,
"0.0"
) end if
'更新student的cash
mrc2.
fields(7
)= mrc2.
fields(7
)- pay
mrc2.update
if val
(mrc2.
fields(7
))>
0 and val
(mrc2.
fields(7
))=val
(mrc4.
fields(5
)) then
msgbox a
(i)&
",您卡內金額已不足"
&val
(mrc4.
fields(5
))&"元,請盡快充值!",48
, end if
'判斷是否餘額為0,更新student,online表
if val
(mrc2.
fields(7
))<=
0 then
mrc2.
fields(7
)=0 mrc2.update
mrc.delete
mrc.update
msgbox "卡號:"&a
(i)&
",餘額不足,即將下機!",48
,"警告"
end if
mrc.movenext
'更新line表
mrc3.
fields(8
)= date
mrc3.
fields(9
)= time
mrc3.
fields(12
)= mrc2.
fields(7
) mrc3.
fields(10
)= valuetime
mrc3.
fields(11
)= pay
mrc3.update
next i
end sub
機房收費系統 下機
有了上機的思路,下機當然也就很簡單了,不過總是要比別人多想一步,這樣你就能夠比別人更加的優秀。下機的流程圖 下機的注意事項 txtontime.text trim mrc3.fields 7 txtdowndate.text format now yyyy mm dd txtdowntime.tex...
機房收費系統 下機
上下機是機房收費系統中比較重要的一部分,所以我們一定要把上下機的思路理清楚才可以,不然會很亂,一會兒就把自己繞進去了,現在我們一起分析一下下機的思路吧!片段 判斷上下機的情況 private sub cmdoffline click dim mrconline as adodb.recordset ...
機房收費系統 下機
計算消費時間 計算上機時間 intlinetime date datevalue onw ondate 1440 hour time hour timevalue onw ontime 60 minute time minute timevalue onw ontime 計算機上機時間 txtcti...