【机房收费系统】上下机

像这类的技术博客我写的不多,因为我写不好,技术博客然而技术含量还不高,惭愧。

原本的机房收费系统是学生教师一体的,我不想这么做,所以做了一个教师端一个学生端,开始之前我认为应该不难,对于现阶段的自己,但是实施起来就上下机而言就阻拦了我一天半。

有不足的还望大神提点

就上机而言,教师端应该并不能上机,只能是赋予学生上机的权限,检测登录语句没有填太多

    If txtKaHao.Text = "" Then
        MsgBox "请输入需要登录的卡号"
        Exit Sub
    End If
    
    txtSQL = "select quanxian from student_info where kahao='" & txtKaHao.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, Msgtxt)
    If mrc.EOF Then
        MsgBox "没有该用户"
        mrc.Close
        Exit Sub
    End If
    
    If Trim(mrc.Fields(0)) = "允许" Then
        MsgBox "该用户已经允许上线或已经上线"
        mrc.Close
        Exit Sub
    Else
        mrc.Fields(0) = "允许"
        mrc.Update
        mrc.Close
        MsgBox "登录成功"
    End If

这里用的Timer比较多,因为我想要的是:一登录就可以动态的计算和显示目前消费的时间和费用。

【机房收费系统】上下机_第1张图片

首先定义变量

Dim hh, dd, ss As Integer           '用于计算时间
Dim txtSQL As String
Dim Msgtxt As String
Dim mrc As ADODB.Recordset          '定义数据记录集
Dim JanGe As Integer                '计算上机费用的时候用
Dim XianShi(1) As String            '同上
Dim LeiXing As String               '得到登录学生的类型,计算费用
Dim YuE As Single                   '中间变量
Dim XiaoJin As Single               '中间变量
然后在窗体加载的时候 将需要的数据取出,赋给变量
    txtSQL = "select * from student_info where kahao = '" & StudentID & "'"     '先从数据库中找到对应的记录
    Set mrc = ExecuteSQL(txtSQL, Msgtxt)                                        '
    YuE = mrc.Fields(8)                                                         '将目前卡里的余额取出
    Timer6.Enabled = True                                                       '用户计算费用的timer启动
    Timer1.Enabled = True                                                       '显示现在的时间
    XiaoJin = txtXiaoJin.Text                                                   '将消费金额Text框中的取出
    LeiXing = Trim(mrc.Fields(10))                                              '将数据的类型取出
    mrc.Close                                                                   '关闭数据库链接

像逻辑这部分的主要是Timer之间有些混乱,不能将所有的东西都讲那么细,长期以往,你的主观能动性就没有了,不妨说的是上机的过程中,金额就已经计算了,不需要再在下机的时候计算了,下机的工作就比之前要轻松了,只需要将数据放回数据库就行了。

Private Sub Timer1_Timer()
    txtTime.Text = Time
End Sub

Private Sub Timer2_Timer()
    txtXiaoFei.Text = DateDiff("s", txtOnTime.Text, Time)
    If Int(txtXiaoFei.Text) >= 3600 Or Int(txtXiaoFei.Text) Mod 3600 > 60 Or Int(txtXiaoFei.Text) Mod 3600 <= 60 Then
        hh = Int(txtXiaoFei.Text) \ 3600
        dd = (Int(txtXiaoFei.Text) Mod 3600) \ 60
        ss = (txtXiaoFei.Text - (hh * 3600 + dd * 60))
    End If
    txtXiaoFei.Text = Format(hh & ":" & dd & ":" & ss, "hh:nn:ss")
End Sub

Private Sub Timer3_Timer()          '固定用户消费情况
    JanGe = DateDiff("n", txtOnTime.Text, Time)                     '得到现在上机的第几分钟
    XianShi(0) = Format(Round(GuFei / 60 * JanGe, 1), "0.0")        '计算上机的费用
    XianShi(1) = Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1)  '使得消费的最小单位是5毛
    If Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) <= 5 Then
        XianShi(1) = 5
        XianShi(0) = Fix(XianShi(0)) & "." & XianShi(1)
    Else
        XianShi(0) = Format(Round(XianShi(0)), "0.0")
    End If
    txtXiaoJin.Text = XianShi(0)                '让上机费用显示在文本框中
    If YuE <= 0.5 Then
        Label6.Visible = True
        Timer5.Enabled = True
    Else
        Timer5.Enabled = False
        Label6.Visible = False
    End If
    
    
End Sub


Private Sub Timer4_Timer()          '临时用户消费情况
    JanGe = DateDiff("n", txtOnTime.Text, Time)                     '得到现在上机的第几分钟
    XianShi(0) = Format(Round(LinFei / 60 * JanGe, 1), "0.0")        '计算上机的费用
    XianShi(1) = Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1)  '使得消费的最小单位是5毛
    If Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) <= 5 Then
        XianShi(1) = 5
        XianShi(0) = Fix(XianShi(0)) & "." & XianShi(1)
    Else
        XianShi(0) = Format(Round(XianShi(0)), "0.0")
    End If
    txtXiaoJin.Text = XianShi(0)            '让结果显示在文本框中
    If YuE <= 0.5 Then
        Label6.Visible = True<span style="white-space:pre">		</span><span style="color:#ff0000;">显示余额不足的label</span>
        Timer5.Enabled = True
    Else
        Timer5.Enabled = False
        Label6.Visible = False
    End If
End Sub

Private Sub Timer5_Timer()
    txtSQL = "select jinE from student_info where kahao = '" & StudentID & "'"
    Set mrc = ExecuteSQL(txtSQL, Msgtxt)
    YuE = mrc.Fields(0)
    mrc.Close
    If YuE <= 0 Then
        Unload Me
    End If
End Sub

Private Sub Timer6_Timer()                  '动态的将数据库中的金额赋给YuE
    If Val(txtXiaoJin.Text) <> Format(XiaoJin, "0.0") Then
        XiaoJin = txtXiaoJin.Text
        txtSQL = "select jine from student_info where kahao = '" & StudentID & "'"
        Set mrc = ExecuteSQL(txtSQL, Msgtxt)
        YuE = Val(mrc.Fields(0)) - 0.5
        mrc.Fields(0) = Val(mrc.Fields(0)) - 0.5
        mrc.Update
        mrc.Close
    End If
    If LeiXing = "固定" Then
        Timer2.Enabled = True
        Timer3.Enabled = True
    Else
        Timer2.Enabled = True
        Timer4.Enabled = True
    End If
End Sub
这是学生端的下机,还是那句话,没有过多的检测性语句,简单的有一些,严密的检测语句在后期还可以填。

当然,教师端可以强制使学生端下机

    If LeiXing = "固定" Then
        txtSQL = "select * from student_info where kahao = '" & StudentID & "' and zhuangtai='使用'"
        Set mrc = ExecuteSQL(txtSQL, Msgtxt)
    
        If mrc.EOF = True Then
            MsgBox "卡号不存在或已经注销,请检查后重新输入"
            mrc.Close
            Exit Sub
        End If
        mrc.Close
        
        txtSQL = "select * from online where kahao = '" & StudentID & "'"
        Set mrc = ExecuteSQL(txtSQL, Msgtxt)
        If mrc.EOF = False Then
            Timer1.Enabled = False
            Timer2.Enabled = False
            Timer3.Enabled = False
            Timer4.Enabled = False
            Timer5.Enabled = False
            Timer6.Enabled = False
            mrc.Delete
            mrc.Update
            mrc.Close
        
            txtSQL = "select * from line where kahao = '" & StudentID & "' and status = '正常上机'"
            Set mrc = ExecuteSQL(txtSQL, Msgtxt)
            mrc.Fields(5) = Date
            mrc.Fields(6) = Time
            mrc.Fields(7) = "正常下机"
            mrc.Update
            mrc.Close

            txtSQL = "select * from student_info  where kahao = '" & StudentID & "'"
            Set mrc = ExecuteSQL(txtSQL, Msgtxt)
            'mrc.Fields(8) = mrc.Fields(8) - Val(txtXiaoJin.Text)
            mrc.Fields(11) = "禁止"
            mrc.Fields(12) = "离线"
            mrc.Update
            mrc.Close
            MsgBox "下机成功"
            Unload Me
        End If
    Else
        MsgBox "请到服务台办理退卡"
    End If
这是教师端的下机

    If Trim(txtKaHao.Text) = "" Then            '判断卡号是否为空
        MsgBox "请输入卡号"
        Exit Sub
    End If
    
    txtSQL = "select * from student_info where kahao = '" & txtKaHao.Text & "' and zhuangtai = '使用'"
                                                '判断卡号是否正在使用
    Set mrc = ExecuteSQL(txtSQL, Msgtxt)        '用mrc读取 student 表中的数据
    
    If mrc.EOF Then                             '如果记录集中没有数据
        MsgBox "卡号不存在或已经注销,请检查后重新输入"
        mrc.Close                               '给出相应的提示,关闭mrc库链接
        Exit Sub
    Else                                        '如果正在使用
        txtSQL = "select * from online where kahao = '" & txtKaHao.Text & "'"
                                                '判断卡号是否在线
        Set mrcc = ExecuteSQL(txtSQL, Msgtxt)   '用mrcc装载online表数据
        If mrcc.EOF = True Then
            MsgBox "该卡号早已不在线啦"
            mrcc.Close
            Exit Sub
        Else
            mrcc.Delete
            mrcc.Update
            mrcc.Close
'***************************************************************************************
            txtSQL = "select * from line where kahao = '" & txtKaHao.Text & "' and status = '正常上机'"
            Set mrcc = ExecuteSQL(txtSQL, Msgtxt)
            mrcc.Fields(5) = Date
            mrcc.Fields(6) = Time
            mrcc.Fields(7) = "正常下机"
            
            XiaoFeiShiJian(0) = DateDiff("s", mrcc.Fields(4), Time)
            If Int(XiaoFeiShiJian(0)) >= 3600 Or Int(XiaoFeiShiJian(0)) Mod 3600 > 60 Or Int(XiaoFeiShiJian(0)) Mod 3600 <= 60 Then
                hh = Int(XiaoFeiShiJian(0)) \ 3600
                dd = (Int(XiaoFeiShiJian(0)) Mod 3600) \ 60
                ss = (XiaoFeiShiJian(0) - (hh * 3600 + dd * 60))
            End If
            XiaoFeiShiJian(0) = Format(hh & ":" & dd & ":" & ss, "hh:nn:ss")
            mrcc.Fields(9) = XiaoFeiShiJian(0)
            
            If Trim(mrc.Fields(10)) = "固定" Then
                XiaoFeiShiJian(1) = DateDiff("n", mrcc.Fields(4), Time)                     '得到现在上机的第几分钟
                XiaoFeiJinE(0) = Format(Round(GuFei / 60 * XiaoFeiShiJian(1), 1), "0.0")        '计算上机的费用
                XiaoFeiJinE(1) = Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1)  '使得消费的最小单位是5毛
                If Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) <= 5 Then
                    XiaoFeiJinE(1) = 5
                    XiaoFeiJinE(0) = Fix(XiaoFeiJinE(0)) & "." & XiaoFeiJinE(1)
                Else
                    XiaoFeiJinE(0) = Format(Round(XiaoFeiJinE(0)), "0.0")
                End If
            Else
                XiaoFeiShiJian(1) = DateDiff("n", mrcc.Fields(4), Time)                     '得到现在上机的第几分钟
                XiaoFeiJinE(0) = Format(Round(LinFei / 60 * XiaoFeiShiJian(1), 1), "0.0")        '计算上机的费用
                XiaoFeiJinE(1) = Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1)  '使得消费的最小单位是5毛
                If Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) <= 5 Then
                    XiaoFeiJinE(1) = 5
                    XiaoFeiJinE(0) = Fix(XiaoFeiJinE(0)) & "." & XiaoFeiJinE(1)
                Else
                    XiaoFeiJinE(0) = Format(Round(XiaoFeiJinE(0)), "0.0")
                End If
            End If
            mrcc.Fields(10) = XiaoFeiJinE(0)
            
            'mrc.Fields(8) = mrc.Fields(8) - Val(XiaoFeiJinE(0))
            mrc.Fields(11) = "禁止"
            mrc.Fields(12) = "离线"
            
            txtKaHao.Text = Trim(mrc.Fields(0))
            txtXueHao.Text = Trim(mrc.Fields(1))
            txtXiBie.Text = Trim(mrc.Fields(4))
            txtLeiXing.Text = Trim(mrc.Fields(10))
            txtName.Text = Trim(mrc.Fields(2))
            txtXingBie.Text = Trim(mrc.Fields(3))
            txtOnDate.Text = Trim(mrcc.Fields(3))
            txtOffDate.Text = Trim(mrcc.Fields(5))
            txtOnTime.Text = Trim(mrcc.Fields(4))
            txtOffTime.Text = Trim(mrcc.Fields(6))
            txtXiaoFei.Text = XiaoFeiShiJian(0)
            txtXiaoJin.Text = Format(XiaoFeiJinE(0), "0.0")
            
            mrcc.Update
            mrcc.Close
            mrc.Update
            mrc.Close
            MsgBox "下机成功"
        End If
    End If
基本上,上下机就完成了, 还有不足的,敬请提点



你可能感兴趣的:(【机房收费系统】上下机)