机房下机,搞清关系是关键

下机,就是将正在上机的卡号进行下机,其他的要求不考虑,计算上机时间,消费金额,还有余额
几个概念要搞明白:

**

下机日期:就是系统当前日期 date

下机时间,即系统当前时间 time

消费时间 = (下机日期-上机日期) + (下机时间-上机时间)

消费金额 = 消费时间 ×单位消费金额 (一般单位时间为一小时,根据用户级别分别计算)

余额:上机前金额-消费金额 **

计算是时间差要用到DateDiff函数,定义数据类型为long,用法在代码中会体现到

下机流程图
在这里插入图片描述
下机代码展示

'是否输入卡号
If txtCardNo.Text = "" Then
    MsgBox "请输入要下机的卡号!", 48, "提示"
    txtCardNo.SetFocus
    Exit Sub
End If

'判断卡号是否为数字
If Not IsNumeric(Trim(txtCardNo.Text)) Then
        
    MsgBox "请输入数字!", 48, "提示"
    txtCardNo.SetFocus
    txtCardNo.Text = ""
    Exit Sub
End If

'该号是否上机
txtsql = "select * from OnLine_info where cardno = '" & txtCardNo.Text & "'"
Set mrc1 = ExecuteSQL(txtsql, msgtext)
    If mrc1.EOF = True Then
        MsgBox "该号没有上机!", 48, "提示"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
   Else
        txtType.Text = mrc1!cardtype
        txtStudentNO.Text = mrc1!studentno
        txtDept.Text = mrc1!department
        txtName.Text = mrc1!studentname
        ComboSex.Text = mrc1!sex
        txtonDate.Text = mrc1!ondate
        txtonTime.Text = mrc1!ontime
        
        '计算时间
        dim codate as long 
        dim cotime as long 
        txtoffDate.Text = Date  '下机日期
        txtoffTime.Text = Time  '下机时间
        codate = DateDiff("n", txtonDate.Text, txtoffDate.Text)   '日期差
        cotime = DateDiff("n", txtonTime.Text, txtoffTime.Text)   '时间差
        costTime.Text = (Val(codate) + Val(cotime))
    End If
        
        '计算消费金额
        txtsql = "select * from basicdata_info "
        Set mrc4 = ExecuteSQL(txtsql, msgtext)
        
        '消费时间小于等于准备时间,不收费,超过准备时间,按用户类型收费
        If costTime.Text <= Val(mrc4.Fields(4)) Then
            costMoney.Text = 0
        
        
        ElseIf txtType.Text = "固定用户" Then
            
            ElseIf 60 <= costTime.Text <= 420 Then
                costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 4, "0.00")
            ElseIf 420 < costTime.Text < 600 Then
                costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 2, "0.00")
                
        ElseIf txtType.Text = "临时用户" Then
            
            ElseIf 60 <= costTime.Text <= 420 Then
                costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 5, "0.00")
            ElseIf 420 < costTime.Text < 600 Then
                costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 5, "0.00")
        End If
           
           
        '计算余额 = 表内金额 - 消费金额
        txtsql = "select * from student_info where cardno= '" & Trim(txtCardNo.Text) & " 'and status= '使用'"
        Set mrc = ExecuteSQL(txtsql, msgtext)
        
        txtBalance.Text = mrc.Fields(7) - costMoney.Text
        
        '删除online表
        mrc1.Delete
        mrc1.Update
        mrc1.Close
        
        '更新line表
        txtsql = "select * from line_info where cardno = '" & txtCardNo.Text & "'"
        Set mrc2 = ExecuteSQL(txtsql, msgtext)
        With mrc2
            .Fields(8) = Trim(txtoffDate.Text)
            .Fields(9) = Trim(txtoffTime.Text)
            .Fields(10) = Trim(costTime.Text)
            .Fields(11) = Trim(costMoney.Text)
            .Fields(12) = Trim(txtBalance.Text)
            .Fields(13) = "正常下机"
            .Fields(14) = VBA.Environ("computername")
            .Update
            .Close
        End With
        
        '更新学生表
        txtsql = "select * from student_info "
        Set mrc2 = ExecuteSQL(txtsql, msgtext)
        mrc.Fields(7) = Trim(txtBalance.Text)
        mrc.Update
        mrc.Close
        
        '更新上机人数
        txtsql = "select count(*) from OnLine_info "
        Set mrc1 = ExecuteSQL(txtsql, msgtext)
        lblpeople.Caption = Trim(mrc1.Fields(0))
        '更新临时用户数
        txtsql = "select count(*) from OnLine_info where cardtype='临时用户 '"
        Set mrc1 = ExecuteSQL(txtsql, msgtext)
        lblplain.Caption = Trim(mrc1.Fields(0))
        '更新固定用户数
        txtsql = "select count(*) from OnLine_info where cardtype='固定用户 '"
        Set mrc1 = ExecuteSQL(txtsql, msgtext)
        lblmember.Caption = Trim(mrc1.Fields(0))
        mrc1.Close
        MsgBox "下机成功!", 48, "提示"
        txtCardNo.Text = ""
        txtStudentNO.Text = ""
        txtDept.Text = ""
        txtName.Text = ""
        ComboSex.Text = ""
        txtonDate.Text = ""
        txtType.Text = ""
        txtoffDate.Text = ""
        txtBalance.Text = ""
        txtonTime.Text = ""
        txtoffTime.Text = ""
        costTime.Text = ""
        costMoney.Text = ""

下机机房的一个重点,一定要搞清楚各个名词之间的关系,否则弄不好就要算错账了。
欢迎评论区留言!

猜你喜欢

转载自blog.csdn.net/qq_42758288/article/details/85101668