机房收费系统在敲完上下机后,在一次下机时,发现由于上机时间过长,卡号余额都成了负数,很显然,在真正机房上机时,这种情况是不允许发生的,所谓机房收费系统,那么就要做出一个尽量真实的机房模拟环境,所以就要再多写一个Timer事件来实现上机时动态检测卡号余额的功能了,代码如下:
Private Sub viewdata() Dim mrc5 As ADODB.Recordset '定义变量 Dim mrc6 As ADODB.Recordset Dim mrc7 As ADODB.Recordset Dim mrc8 As ADODB.Recordset Dim mrcc As ADODB.Recordset Dim txtSQL As String Dim MsgText As String Dim cardnoo As String Dim Usetime, UnitNumber, a, b, c, d, e, cost, Balance As Single Dim Intindex As Long txtSQL = "select * from online_info" Set mrcc = ExecuteSQL(txtSQL, MsgText) If mrcc.EOF Then Timer1.Enabled = False '如果数据库为空,则Timer停止 Else mrcc.MoveFirst '从第一条记录开始查询 End If ReDim DynCard(mrcc.RecordCount) As String '定义卡号数组 For Intindex = 0 To mrcc.RecordCount - 1 DynCard(Intindex) = mrcc!cardno '查找第一条记录的卡号 cardnoo = DynCard(Intindex) '将查找到的卡号赋值给cardnoo,便于后面SQL查询 txtSQL = "select * from OnLine_Info where cardno='" & Trim(cardnoo) & "'" '进行表查询 Set mrc5 = ExecuteSQL(txtSQL, MsgText) txtSQL = "select * from student_info where cardno='" & Trim(cardnoo) & "'" Set mrc6 = ExecuteSQL(txtSQL, MsgText) txtSQL = "select * from Line_Info where status ='正常上机' and cardno ='" & Trim(cardnoo) & "'" Set mrc7 = ExecuteSQL(txtSQL, MsgText) a = Format(Date, "yyyy-mm-dd") b = Format(Time, "hh:mm:ss") c = Abs(Int(DateDiff("n", mrc5.Fields("ondate"), a)) + Int(DateDiff("n", mrc5.Fields("ontime"), b))) '计算当前上机话费的时间c txtSQL = "select * from BasicData_Info" Set mrc8 = ExecuteSQL(txtSQL, MsgText) If Val(mrc8.Fields(4)) <= Val(c) And Val(c) <= Val(mrc8.Fields(3)) Then '如果c大于准备时间且小于最小上机时间,则消费1元 Balance = mrc6.Fields(7) - 1 '余额为student表里的cash-1 Else If Val(c) > Val(mrc8.Fields(3)) Then '如果c大于最小上机时间 Usetime = Val(c) - Val(mrc8.Fields(4)) '计算消费的时间=上机时间-准备时间 UnitNumber = Usetime Mod Val(mrc8.Fields(2)) 'Usetime/60 求余 If UnitNumber = 0 Then '如果余0 UnitNumber = Int(Usetime / Val(mrc8.Fields(2))) '计算小时数 Else UnitNumber = Int(Usetime / Val(mrc8.Fields(2))) + 1 '如果不余0,则向下取整并小时数+1 End If End If If mrc6.Fields(14) = "固定用户" Then e = Val(mrc8.Fields(0)) '如果是固定用户,则2元/小时 Else e = Val(mrc8.Fields(1)) '如果是临时用户,则3元/小时 End If cost = Format(UnitNumber * e, "0.0") '计算消费金额 Balance = Val(mrc6.Fields(7)) - cost '计算余额 End If If Val(Balance) > 0 And Val(Balance) <= 4 Then '如果余额大于0且小于4则给出提醒 MsgBox DynCard(Intindex) & ",您卡内的金额已不足4元,请尽快充值!", vbOKOnly + vbInformation, "提示" mrcc.MoveNext End If If Balance <= 0 Then '如果余额小于等于0元,则强制下机 MsgBox DynCard(Intindex) & ",您卡内金额不足,即将下机", vbOKOnly + vbExclamation, "警告" txtCardNo.Text = Trim(cardnoo) Command2_Click mrcc.MoveNext '继续查询下一个卡号 End If Next End Sub
Private Sub Timer1_Timer() Timer1.Enabled = True Call viewdata End Sub