机房收费系统之自动下机(获取程序运行时间)

        机房收费系统的手动下机有很多的逻辑在里面,当时做的有些费脑细胞但整体做下来还算顺利,而自动下机就费了大劲儿了,想到了很多方法也进行了很多尝试,考虑的角度也很多,分别是:从VB程序本身、从数据库、从余额等等角度都有考虑尝试过,但都未成功,其中占用时间最长的一个尝试是从数据库角度出发,把余额转化为最长上机时间,在数据库中加一列数据最长上机时间,然后把数据更新到数据库,数据库则每分钟进行递减,有用到触发器进行递减操作但没起作用。后来一个思路让我找到了方向,最终完成了自动下机,但前提是我在数据库的数据表里加了一列数据,一个获取下机时长的数据,那具体是怎么操作的呢,现在分享给大家^_^

一、自动下机流程

 

以上流程图中的自动下机时间是什么呢?请往下看

 

 二、错误集

自动下机里最多的错误就是逻辑错误,要不都下不了机、要不就都下机了(没到时间的也下机了),逻辑的调整问题就不在此赘述了,因为是错误的逻辑,再加上太多了很多都忘记了(⊙o⊙)…

三、查询集

①、如何获取程序运行时长?

https://zhidao.baidu.com/question/53321889.html

四、代码片段

①、获取当前程序的运行时间

Private Sub Timer2_Timer()                    '获取当前程序运行时间
    S = DateDiff("S", Tim, Time)
    If S > 60 Then
    B = S
    M = B \ 60                                '将运行时间转化为分钟数
    End If
    lbltime.Caption = M                       '将分钟数赋值给lbltime控件
End Sub

②、 判断卡类型并算出某卡的下机时长

    If txttype.Text = 固定用户 Then
        longtime = txtcash.Text / 2       '如果是固定用户则余额除以2得出总上机时长
    Else
        longtime = txtcash.Text / 3       '如果是临时用户则余额除以3得出总上机时长
    downtime = longtime + lbltime.Caption '下机时长=总上机时长+程序已运行时长

③、防止重复timer3事件时因无法搜索到已下机卡号而报错,将正在上机数据表中的数据更新到界面

    onlinetxtSQL = "select * from online_Info "    '防止重复timer事件时的数据库无内容报错
    Set onlinemrc = ExecuteSQL(onlinetxtSQL, onlineMsgText)

    '获取正在上机数据表中的数据
    If onlinemrc.EOF Then
        MsgBox "无上机人员!", vbOKOnly, "温馨提示:"
        txtcardno.SetFocus
        
    Else
        txtcardno.Text = onlinemrc.Fields(0)
        txttype.Text = onlinemrc.Fields(1)
        txtstudentno.Text = onlinemrc.Fields(2)
        txtstudentName.Text = onlinemrc.Fields(3)
        txtdepartment.Text = onlinemrc.Fields(4)
        txtsex.Text = onlinemrc.Fields(5)
        txtondate.Text = onlinemrc.Fields(6)
        txtontime.Text = onlinemrc.Fields(7)
        txtoffdate.Text = Format(Now(), "yyyy-MM-dd")
        txtofftime.Text = Format(Now(), "HH:mm:ss")
    End If
    lblonline.Caption = onlinemrc.RecordCount
    onlinemrc.Close

④、在数据库中循环查询下机时长符合条件的卡号,自动下机

Private Sub Timer3_Timer()
    Dim onlinetxtSQL As String
    Dim onlineMsgText As String
    Dim onlinemrc As ADODB.Recordset
    
    Call Timer2_Timer                         '调取timer2时间事件,获取当前时间
    onlinetxtSQL = "select * from online_Info where longtime='" & lbltime.Caption & "'"
    Set onlinemrc = ExecuteSQL(onlinetxtSQL, onlineMsgText)
    '查询数据库中正在上机数据表中的下机时间列数据
    
    If onlinemrc.EOF Then                '如果该下机时间,那么继续执行timer3事件,循环寻找
        Timer3.Enabled = True
    Else
        MsgBox "您的卡内余额不足,即将下机!", vbOKOnly, "温馨提示:"  
    '如果有符合的下机时间则提示下机
        Call cmddown_Click                     '调取下机过程进行下机
    End If
    
    
End Sub

以上四个代码片段便是自动下机的核心代码,看上去可能没什么特别,然而他们的先后顺序,两个timer的调用顺序,两个Timer的运行与停止位置,代码的位置也是一些要思考的问题。上面的办法可能看上去笨笨的,不过能自动下机就很开心了,自动下机就到此结束了,下一站退卡窗体走起^_^

 

猜你喜欢

转载自blog.csdn.net/Elsa15/article/details/82663457
今日推荐