【机房收费系统】上机时动态刷新余额

来源:互联网 发布:自我介绍 知乎 编辑:程序博客网 时间:2024/04/28 11:16

       机房收费系统在敲完上下机后,在一次下机时,发现由于上机时间过长,卡号余额都成了负数,很显然,在真正机房上机时,这种情况是不允许发生的,所谓机房收费系统,那么就要做出一个尽量真实的机房模拟环境,所以就要再多写一个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 viewdataEnd Sub

      然后改动Timer控件的Interval属性,不过最大只能是60000,也就是一分钟,所以说最长时间就是每分钟来刷新一次了。

0 0
原创粉丝点击