《機房收費系統》 之 自動結賬

2021-08-27 15:42:13 字數 3628 閱讀 3900

上圖是機房收費系統的主介面,其中包含了上機學生的資訊!今天我來跟大家說說怎麼讓它實現當學生餘額不足時自動下機的功能

實現這個功能,首先我們需要乙個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 根...