第一次机房收费系统——上下机

本文详细介绍了上下机管理系统的实现流程,包括上机时将数据从student表写入online表,下机时计算时间和消费金额并更新数据库。文章还讨论了临时用户下机等特殊情况的处理方法。

前言:上下机的核心操作:上机就是将数据从student表中写入到online表中,然后并在line表中写上一部分的内容,而下机的时候就是计算好时间和消费金额,然后写入到line表中,删除online的内容,并且将金额同步到student表中,

主要流程

在这里插入图片描述

注意:我在下机表中添加了日期和Userid这一列,为了在结账的时候更方便计算。

上机

注意: 因为我一开始没有领悟那么深,所以我在下机的时候才把数据添加到line表中。

Private Sub cmdOnline_Click()
    '判断是否输入卡号
    If Trim(txtCardNo.Text) = "" Then
        txtCardNo.BackColor = vbRed
        txtCardNo.SetFocus
        Exit Sub
    Else
        txtCardNo.BackColor = vbWhite
    End If
    
    '判断卡号是否为数字
    If Not IsNumeric(txtCardNo.Text) Then
        MsgBox "您的卡号应该为数字,请重新输入!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
    End If
    '连接数据库,判断是否正在登陆
    txtSQL = "select *from online_info where cardno='" & txtCardNo.Text & "'"
    Set mrc_On = ExecuteSQL(txtSQL, MsgText)

    '如果表中有数据,证明正在上机
    If mrc_On.EOF = False Then
        MsgBox "此卡正在上机", vbOKOnly + vbExclamation, "警告"
        '将对应数据传送到表格中
        txtType.Text = Trim(mrc_On.Fields(1))
        txtSID.Text = Trim(mrc_On.Fields(2))
        txtName.Text = Trim(mrc_On.Fields(3))
        txtDept.Text = Trim(mrc_On.Fields(4))
        txtSex.Text = Trim(mrc_On.Fields(5))
        txtOnDate.Text = Format(Trim(mrc_On.Fields(6)), "yyyy-MM-dd")
        txtOnTime.Text = Trim(mrc_On.Fields(7))
        mrc_On.Close '关闭数据库
        Exit Sub
    End If

    '连接数据库,加载信息
    txtSQL = "select*from student_info where cardno='" & txtCardNo.Text & "'"
    Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)


    '如果没有这个卡号
    If mrc_Stu.EOF Then
        MsgBox "此卡尚未注册", vbOKOnly + vbExclamation, "警告"
        mrc_Stu.Close
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
        
        
    End If

    '判断是否停用
    If Trim(mrc_Stu.Fields(10)) = "不使用" Then

        MsgBox "此卡尚未注册", vbOKOnly + vbExclamation, "警告"
        mrc_Stu.Close
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
        
    End If
    
            '将数据从stu表中传到控件中
            txtType.Text = mrc_Stu.Fields(14)
            txtSID.Text = Trim(mrc_Stu.Fields(1))
            txtName.Text = Trim(mrc_Stu.Fields(2))
            txtDept.Text = Trim(mrc_Stu.Fields(4))
            txtSex.Text = Trim(mrc_Stu.Fields(3))
            txtOnDate.Text = Format(Date, "yy-mm-dd")
            txtOnTime.Text = Format(Now, "hh:mm:ss")
            txtBalance.Text = Trim(mrc_Stu.Fields(7))
            mrc_Stu.Close
            
    txtSQL = "select *from online_info where cardno='" & txtCardNo.Text & "'"
    Set mrc_On = ExecuteSQL(txtSQL, MsgText)
            '将数据写到上机表上
            mrc_On.AddNew
            mrc_On.Fields(0) = Trim(txtCardNo.Text)
            mrc_On.Fields(1) = Trim(txtType.Text)
            mrc_On.Fields(2) = Trim(txtSID.Text)
            mrc_On.Fields(3) = Trim(txtName.Text)
            mrc_On.Fields(4) = Trim(txtDept.Text)
            mrc_On.Fields(5) = Trim(txtSex.Text)
            mrc_On.Fields(6) = Trim(txtOnDate.Text)
            mrc_On.Fields(7) = Trim(txtOnTime.Text)
            '将计算机名同步到数据库的相应表格中
             mrc_On.Fields(8) = GetThisComputerName
            mrc_On.Fields(9) = Date
            mrc_On.Update
            mrc_On.Close
           ‘这里还需要写入到下机表,但是我没有做!
End Sub

下机

临时用户问题?

思考: 对于临时用户,那么下机是否等于退卡呢?
我的答案: 对于临时用户下机就等于退卡。
所以在下机的时候做了如下判断。

    '修改学生表中的不使用
    txtSQL = "select *from student_info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)
    mrc_Stu.Fields(7) = Trim(txtBalance.Text)
    mrc_Stu.Update
    If Trim(mrc_Stu.Fields(14)) = "临时用户" Then
        mrc_Stu.Fields(10) = "不使用"
        mrc_Stu.Update
        mrc_Stu.Close
        
        
        '下机表
        txtSQL = "select *From cancelcard_info "
        Set mrc_CCard = ExecuteSQL(txtSQL, MsgText)
        mrc_CCard.AddNew
        mrc_CCard.Fields(0) = Trim(txtSID.Text) '学号
        mrc_CCard.Fields(1) = Trim(txtCardNo.Text) ' 卡号
        mrc_CCard.Fields(2) = Trim(txtBalance.Text)  '消费金额
        mrc_CCard.Fields(3) = Format(Date, "yyyy-MM-dd") '日期
        mrc_CCard.Fields(4) = Format(Now, "hh:mm:ss") '时间
        mrc_CCard.Fields(5) = Trim(UserName) '操作人名称
        mrc_CCard.Fields(6) = "未结账" '状态
        mrc_CCard.Update
        mrc_CCard.Close
    End If

时间和余额的问题

首先得到基础数据

    '得到最低消费金额
    txtSQL = "select *from basicdata_info "
    Set mrc_BData = ExecuteSQL(txtSQL, MsgText)
    If mrc_BData.EOF Then
        MsgBox "没有基础数据,请添加基础数据,请联系管理员", 0 + 48, "警告"
        mrc_BData.Close
        txtCardNo.Text = ""
        Exit Sub
    Else
        LessTime = mrc_BData.Fields(3) '准备时间
        Rate = mrc_BData.Fields(0) '会员价格
        TmpRate = mrc_BData.Fields(1) '临时价格
        UnitTime = mrc_BData.Fields(2) '递增时间
        mrc_BData.Close
    End If

计算上机时间

'计算上机时间(分钟)
	’判断上下机时间是不是同一天
    If Trim(txtOffDate.Text) = Trim(txtOnDate.Text) Then
        WorkMin = DateDiff("n", txtOnTime.Text, txtOffTime.Text) '分钟
        Work = WorkMin
    Else 如果不是
        Work =DateDiff("n", txtOnDate.Text, txtOffDate.Text) - 1440
        WorkDay = DateDiff("n", "00:00:00", txtOffTime.Text)
        Work = Work + WorkDay
        WorkDay = DateDiff("n", txtOnTime.Text, "23:59:00")
        Work = Work + WorkDay + 1
    End If
  txtCTime = Work '消费时间

金额计算

	’根据不同类型,使用不同的金额
            If Trim(txtType.Text) = "临时用户" Then
                Cost = TmpRate
            Else
            	Cost = Rate
            End If
            
            '判断是否大于准备时间
            If Work < LessTime Then
            	'如果小于就相当于不收钱
                OnHour = 0
            Else
            	’如果大于就算取金额
            	‘根据分钟,换算出小时,这里采用的进一法。
                OnHour = (Fix((Work - 2) / UnitTime))
                If (Work Mod 60) > 0 Then
                    OnHour = OnHour + 1
                End If
            End If
        '消费金额计算
        txtCMoney.Text = OnHour * Cost

希望我的分享能你有所帮助!
感谢您的阅读,如果您有更好的方法,欢迎分享给我,谢谢您!

评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值