上圖是機房收費系統的主介面,其中包含了上機學生的資訊!今天我來跟大家說說怎麼讓它實現當學生餘額不足時自動下機的功能
實現這個功能,首先我們需要乙個timer控制項,如下圖所示:
圖中紅色框代表這個timer控制項的時間間隔為1800ms即3分鐘,意思就是每隔3分鐘,將執行一下timer_timer()這個事件;
private sub timer2_timer() '每過3分鐘,自動檢查一次所有正在上機的卡號是否餘額不足
dim mrc as adodb.recordset
dim mrcc as adodb.recordset
dim mrccc as adodb.recordset
dim txtsql as string
dim txtsqll as string
dim txtsqlll as string
dim msgtext as string
static consumecash as single
dim count as integer
dim rate as string
dim strtime as string
dim strlimitcash as string
dim sbuffer as string
dim lsize as long
sbuffer = space$(255)
lsize = len(sbuffer)
call getusername(sbuffer, lsize) '得到當前電腦的使用者名稱
'通過對資料庫中basicdata(基礎資料)表,查詢出學生上機花費的比率和最小金額
txtsql = "select rate,limitcash from basicdata_info"
set mrc = executesql(txtsql, msgtext)
rate = trim$(mrc.fields(0))
strlimitcash = trim$(mrc.fields(1))
mrc.close
'查詢資料庫中online(正在上機人員)表
txtsql = "select * from online_info"
set mrc = executesql(txtsql, msgtext)
if not mrc.eof then
do while mrc.eof = false '迴圈正在上機人員表中的每一條記錄
txtsqll = "select cash from student_info where cardno='" & _
trim$(mrc.fields(0)) & "' and status='使用'" '從student(學生資訊)表中查詢學生的餘額
set mrcc = executesql(txtsqll, msgtext)
strtime = datediff("s", mrc.fields(7), cstr(format$(now, "hh:mm"))) '計算學生從開始上機到現在的時間差
strtime = format$(strtime / 3600, "0.00")
if csng(mrcc.fields(0)) - csng(csng(rate) * csng(strtime)) <= csng(strlimitcash) then ' 如果餘額不足,則強制下機
'往line(上機記錄)表中新增新的下機資訊,並強制該學生下機
txtsqlll = "select * from line_info"
set mrccc = executesql(txtsqlll, msgtext)
mrccc.addnew
mrccc.fields(1) = trim$(mrc.fields(0))
mrccc.fields(2) = trim$(mrc.fields(1))
mrccc.fields(3) = trim$(mrc.fields(2))
mrccc.fields(4) = trim$(mrc.fields(3))
mrccc.fields(5) = trim$(mrc.fields(5))
mrccc.fields(6) = trim$(mrc.fields(6))
mrccc.fields(7) = trim$(mrc.fields(7))
mrccc.fields(8) = cstr(format$(now, "yyyy-mm-dd"))
mrccc.fields(9) = cstr(format$(now, "hh:mm"))
mrccc.fields(10) = trim$(strtime)
mrccc.fields(11) = cstr(csng(rate) * csng(strtime))
mrccc.fields(12) = cstr(csng(mrcc.fields(0)) - csng(csng(rate) * csng(strtime)))
mrccc.fields(13) = "強制下機"
mrccc.fields(14) = trim$(sbuffer)
mrccc.update
mrccc.close
'修改student(學生資訊)表中的餘額
txtsqlll = "select cash from student_info where cardno='" & _
trim$(mrc.fields(0)) & "' and status='使用'"
set mrccc = executesql(txtsqlll, msgtext)
mrccc.fields(0) = cstr(csng(mrcc.fields(0)) - csng(csng(rate) * csng(strtime)))
mrccc.update
mrccc.close
'刪除online(正在上機人員)表中該學生的資訊
txtsqlll = "select * from online_info where cardno='" & _
trim$(mrc.fields(0)) & "'"
set mrccc = executesql(txtsqlll, msgtext)
if not mrccc.eof then
mrccc.delete
end if
mrccc.close
'彈出對話方塊「餘額不足,已強制下機!」
msgbox "卡號" & mrc.fields(0) & "餘額不足,已強制下機!", vbokonly + vbexclamation, "警告"
end if
mrc.movenext
loop
end if
end sub
上面的**清楚的向我們展示出了,我們是怎麼一步一步實現每隔三分鐘,檢查一次所有正在上機的同學是否餘額不足!
如果有看不懂的同學,可以私下找我!交流一下大家的看法!
機房收費系統 之 結賬
結賬,顧名思義就是把錢算一下。這的結賬不是給每乙個卡號結賬,而是給乙個操作員結賬,算一下這個操作員一共賣卡張數,退卡張數,實收金額,應收金額等等。結賬的介面是這個樣子的,其中用到乙個選項卡 這個窗體相比較而言還有有點難度的。別看乙個小小的操作員使用者名稱,它不是一般的combo控制項,對於一般的co...
機房收費系統 之結賬
通過使用者名稱顯示真實姓名 txtsql select from user info where userid comboopuserid.text set mrc executesql txtsql,msgtext combooprealname.text mrc username mrc.clo...
機房收費系統之」結賬「
根據使用者名稱選姓名 txtsql select from user info where userid trim combousername.text set mrc executesql txtsql,msgtext comboname.text mrc.fields 3 mrc.close 根...