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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 50
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值