【机房收费系统】--下机

   机房收费系统可以看成网吧的系统,我们去网吧上网需要上机,当然也需要下机,下机同时要计算消费金额、消费时间等,还要从上机表中删除,添加到上机表中。

   一般的套路就是从上机表中需要下机的卡号的一行信息删去,在下机表中添加刚才下机的卡号的信息,当然大多数伙伴选择了这样的套路。大家可以先看一下下机表里需要填的信息:
这里写图片描述

   一共14列信息需要填写,也是因为这样,我突然想到了之前高占路师哥说触发器,我们可以定义一个触发器,使上机表中删除一行数据时,并把这条数据添加到下机表中,这样下机岂不是省去了好多代码。
有了这样的想法就要去做,首先先在SQL里建立一个触发器,结合百度把建立触发器的代码写出来了(如下图)

ALTER trigger [dbo].[xiaji]
on [dbo].[OnLine_Info]
for delete
as
begin
insert into Line_Info (cardno  ,studentNo  ,studentName ,Department ,sex ,ondate ,ontime,computer)
select cardno  ,studentNo  ,studentName ,Department ,sex ,ondate ,ontime,computer
from deleted
end

   现在问题来了,下机表中有好多值,上机表中是没有的,就会出现NULL,数据库是不允许这样的,那我之后再VB里把这些没有的字段都加上,调试的过程是很艰难的,中间的时候我有想过放弃这种方法,因为这样并没有起到减少代码的作用。但是我还是一条路走到黑了,既然有了这种想法,就要实现它,方法总是比困难多。下面是我成功的代码展示。

    Dim mrc As ADODB.Recordset
    Dim txtsql As String
    Dim msgtext As String
    Dim mrcc As ADODB.Recordset
    Dim mrccc As ADODB.Recordset
    Dim mrcccc As ADODB.Recordset
    Dim mrccccc As ADODB.Recordset
    Dim mrcccccc As ADODB.Recordset

    If Not testtxt(txtID.Text) Then
        MsgBox "请输入卡号!", 48, "警告"
    Exit Sub
    End If

    txtsql = "select * from basicdata_info "
    Set mrc = ExecuteSQL(txtsql, msgtext)

    txtsql = "select * from student_info where cardno = '" & txtID.Text & "'"
    Set mrcc = ExecuteSQL(txtsql, msgtext)

    txtsql = "select * from online_info where cardno = '" & txtID.Text & "'"
    Set mrccc = ExecuteSQL(txtsql, msgtext)

    txtsql = "select * from online_info where cardno = '" & txtID.Text & "'"
    Set mrccc = ExecuteSQL(txtsql, msgtext)

    If mrcc.EOF Then
        MsgBox "该卡号不存在", 48, "警告"
    Exit Sub
    End If

    If Trim(mrcc.Fields(10)) = "不使用" Then
        MsgBox "该卡号已经退卡!", 48, "提示"
    Exit Sub
    End If

    If mrccc.EOF Then
        MsgBox "该卡号以下机!", 48, "提示"
    Exit Sub
    End If

    txtOffDate = Date
    txtOffTime = Time
    txtCTime.Text = Abs(Val(DateDiff("n", Time, Trim(mrccc.Fields(7)))))    '计算消费时间
    If txtCTime.Text < Trim(mrc.Fields(3)) Then
        txtCash = mrcc.Fields(7)
        txtCTime.Text = "0"
        txtCMoney.Text = 0

    Else
        If Trim(mrcc.Fields(14)) = "临时用户" Then
            txtCMoney = (CInt(Trim(txtCTime / 30 + 1)) * (Trim(mrc.Fields(1)) / 3))     '计算消费金额
            txtCash = Trim(mrcc.Fields(7)) - txtCMoney.Text                             '计算余额
        Else
            txtCMoney = (CInt(Trim(txtCTime / 30) + 1) * (Trim(mrc.Fields(0)) / 2))
            txtCash = Trim(mrcc.Fields(7)) - txtCMoney.Text
        End If
    End If

    txtID = mrccc.Fields(0)
    txtSID = mrccc.Fields(2)
    txtName = mrccc.Fields(3)
    txtSex = mrccc.Fields(5)
    txtDepartment = mrccc.Fields(4)
    txtCardType = mrcc.Fields(14)
    txtOnDate = mrccc.Fields(6)
    txtOnTime = mrccc.Fields(7)
    mrcc.Fields(7) = txtCash.Text
    lblPeople.Caption = mrccc.RecordCount - 1
    mrccc.Delete
    mrccc.Update

    txtsql = "select * from line_info where ontime = '" & txtOnTime.Text & "'"
    Set mrcccccc = ExecuteSQL(txtsql, msgtext)

    txtsql = txtsql & Text1.Text & " " & " cardno = '" & Trim(txtID.Text) & "'"
    Set mrccccc = ExecuteSQL(txtsql, msgtext)

    mrccccc.Fields(8) = Date
    mrccccc.Fields(9) = Time
    mrccccc.Fields(10) = txtCTime.Text
    mrccccc.Fields(11) = txtCMoney.Text
    mrccccc.Fields(12) = txtCash.Text
    mrccccc.Fields(13) = "正常下机"

    mrccccc.Update

    MsgBox "下机成功", 48, "提示"

猜你喜欢

转载自blog.csdn.net/ywq1016243402/article/details/80463723