机房收费系统-结账

本文探讨了机房收费系统中的结账功能,包括计算一天的收入,涉及充值、消费和退卡金额的处理。结账逻辑是:今日充值加上今日消费,再减去今日退卡。在实际操作中,重复结账会覆盖前一次记录,但不影响其他日期数据。退卡和充值金额的计算利用了SQL的SUM()和IsNull()函数。随着三大难点的解决,系统已准备好初步验收。

前言:前面的文章提过,机房收费系统的三大重点:组合查询、上下机和结账,那么今天的文章就迎来了三难点的最后一位:结账。

结账的功能就是对一天内流入的金额与流出的金额进行相减(当然实际过程要比这复杂得多,后面我会详细讲解),所剩余的就是这段时间内的收入。我所设计系统的逻辑是:点击相应操作员后,在“结账”栏目中出现各种数据,如充值金额、上机收费金额、上期余额、退卡金额…点击结账后,各项数据被放入到日结账表中,完成结账。若今天重复结账,则以最新的一次覆盖上一次,但不会覆盖其他日期的数据。

其中略微复杂的就是对收费合计的计算。计算公式:今日充值+今日消费-今日退卡

流程图:
在这里插入图片描述

代码部分:

Option Explicit
Dim mru As ADODB.Recordset
Dim mrcs As ADODB.Recordset
Dim mrcsb As ADODB.Recordset
Dim mrcc As ADODB.Recordset
Dim mrcc1 As ADODB.Recordset
Dim mrcr As ADODB.Recordset
Dim mrcd As ADODB.Recordset
Dim mrcsum As ADODB.Recordset
Dim mrcst As ADODB.Recordset
Dim mrbd As ADODB.Recordset
Dim txtSQL$
Dim MsgText$

Private Sub comboUserName_Click()
    txtSQL = "select * from user_info where userid='" & Trim(comboUserName.Text) & "'"
    Set mru = ExecuteSQL(txtSQL, MsgText)
    
    '点击时txtUserName随着comboUserName变化
    txtUserName.Text = mru!UserName
    
    '计算购卡张数
    txtSQL = "select * from student_info where userid='" & Trim(comboUserName.Text) & "' and ischeck='" & "未结账" & "' and date='" & Date & "'"
    Set mrcs = ExecuteSQL(txtSQL, MsgText)
    
        If mrcs.EOF Then
            txtBuyCard.Text = 0
        Else
            txtBuyCard.Text = mrcs.RecordCount
        End If
        
    '计算上期余额
    txtSQL = "select allcash from checkday_info where date='" & Date - 1 & "'"
    Set mrcc1 = ExecuteSQL(txtSQL, MsgText)
    
        If mrcc1.EOF Then
            txtYesCash.Text = 0
        Else
            txtYesCash.Text = mrcc1.Fields(0)
        End If
    
    '计算退卡张数
    txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserName.Text) & "' and status='" & "未结账" & "' and date='" & Date & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    
        If mrcc.EOF Then
            txtCancelCard.Text = 0
        Else
            txtCancelCard.Text = mrcc.RecordCount
        End If
    
    '计算充值余额
    txtSQL = "select sum(addmoney) from recharge_info where userid='" & Trim(comboUserName.Text) & "' and status='" & "未结账" & "' and date='" & Date & "'"
    Set mrcr = ExecuteSQL(txtSQL, MsgText)        
    If IsNull(mrcr.fields(0)) Then
            txtRechargeCash.Text = 0
        Else
            txtRechargeCash.Text = mrcr.Fields(0)
        End If
        
    '计算退卡余额
    txtSQL = "select sum(cancelcash) from cancelcard_info where userid='" & Trim(comboUserName.Text) & "' and status='" & "未结账" & "' and date='" & Date & "'"
    Set mrcc1 = ExecuteSQL(txtSQL, MsgText)
        
    If IsNull(mrcc1.fields(0)) Then
         txtCancelCardCash.Text = 0
    Else
         txtCancelCardCash.Text = mrcc1.Fields(0)
    End If
    
    '计算总卡数
    txtSumBuyCard.Text = Val(txtBuyCard.Text) - Val(txtCancelCard.Text)
    
    txtSQL = "select * from basicdata_info "
    Set mrbd = ExecuteSQL(txtSQL, MsgText)
    
    '计算用户上机计时收费
    txtSQL = "select sum(consume) as sum_info from line_info where ondate='" & Date & "'"
    Set mrcst = ExecuteSQL(txtSQL, MsgText)
    
            If mrcst.Fields(0) = Null Then
                txtUnTmpCash.Text = 0
            Else
                txtUnTmpCash.Text = mrcst.Fields(0)
            End If
            
    '计算应收费
    txtEarnCash.Text = Val(txtUnTmpCash.Text) + Val(txtRechargeCash.Text) - Val(txtCancelCardCash.Text)
    
    '购卡
    txtSQL = "select * from student_info where userid='" & Trim(comboUserName.Text) & "'"
    Set mrcs = ExecuteSQL(txtSQL, MsgText)
    
    With MSHFlexGrid1
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "卡号"
            .TextMatrix(0, 1) = "学号"
            .TextMatrix(0, 2) = "日期"
            .TextMatrix(0, 3) = "时间"
        
        Do While Not mrcs.EOF
        
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrcs!cardno)
            .TextMatrix(.Rows - 1, 1) = Trim(mrcs!studentno)
            .TextMatrix(.Rows - 1, 2) = Trim(mrcs!Date)
            .TextMatrix(.Rows - 1, 3) = Trim(mrcs!Time)            mrcs.MoveNext
            
        Loop
        End With
    
    '充值
    txtSQL = "select * from recharge_info where userid='" & Trim(comboUserName.Text) & "'"
    Set mrcr = ExecuteSQL(txtSQL, MsgText)
    
    With MSHFlexGrid2
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "卡号"
            .TextMatrix(0, 1) = "学号"
            .TextMatrix(0, 2) = "充值金额"
            .TextMatrix(0, 3) = "日期"
            .TextMatrix(0, 4) = "时间"
        
        Do While Not mrcr.EOF
        
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrcr!cardno)
            .TextMatrix(.Rows - 1, 1) = Trim(mrcr!studentno)
            .TextMatrix(.Rows - 1, 2) = Trim(mrcr!addmoney)
            .TextMatrix(.Rows - 1, 3) = Trim(mrcr!Date)
            .TextMatrix(.Rows - 1, 4) = Trim(mrcr!Time)            mrcr.MoveNext
            
        Loop
        End With
    '退卡
    txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserName.Text) & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    
    With MSHFlexGrid3
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "卡号"
            .TextMatrix(0, 1) = "学号"
            .TextMatrix(0, 2) = "退还金额"
            .TextMatrix(0, 3) = "日期"
            .TextMatrix(0, 4) = "时间"
        
        Do While Not mrcc.EOF
        
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrcc!cardno)
            .TextMatrix(.Rows - 1, 1) = Trim(mrcc!studentno)
            .TextMatrix(.Rows - 1, 2) = Trim(mrcc!cancelcash)
            .TextMatrix(.Rows - 1, 3) = Trim(mrcc!Date)
            .TextMatrix(.Rows - 1, 4) = Trim(mrcc!Time)            mrcc.MoveNext
            
        Loop
        End With
         
    '临时用户
    txtSQL = "select * from student_info where userid='" & Trim(comboUserName.Text) & "' and type='" & "临时用户" & "'"
    Set mrcs = ExecuteSQL(txtSQL, MsgText)
    
    With MSHFlexGrid4
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "卡号"
            .TextMatrix(0, 1) = "学号"
            .TextMatrix(0, 2) = "日期"
            .TextMatrix(0, 3) = "时间"
        
        Do While Not mrcs.EOF
        
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrcs!cardno)
            .TextMatrix(.Rows - 1, 1) = Trim(mrcs!studentno)
            .TextMatrix(.Rows - 1, 2) = Trim(mrcs!Date)
            .TextMatrix(.Rows - 1, 3) = Trim(mrcs!Time)            mrcs.MoveNext
            
        Loop
        End With
End Sub

Private Sub cmdFinCash_Click() 
    Dim mrcd1 As ADODB.Recordset    
    If comboUserName.Text = "" Then
        Label12.Caption = "请选择用户!"
        comboUserName.SetFocus
        Exit Sub
    End If
    
    '将统计的数据放入日结账单表中
    txtSQL = "select * from checkday_info where date='" & Date & "'"
    Set mrcd = ExecuteSQL(txtSQL, MsgText)
    
    '若有重复记录,覆盖添加新的记录
    If mrcd.EOF = False Then
        With mrcd
            !remaincash = Trim(txtYesCash.Text)
            !rechargecash = Trim(txtRechargeCash.Text)
            !consumecash = txtUnTmpCash.Text
            !cancelcash = Trim(txtCancelCardCash.Text)
            !allcash = Trim(txtEarnCash.Text)
            !Date = Date
        End With
        mrcd.Update
        
     '如果没结过账就添加新记录
    Else
        txtSQL = "select * from checkday_info "
        Set mrcd1 = ExecuteSQL(txtSQL, MsgText)
        
        mrcd.AddNew
        mrcd!remaincash = Trim(txtYesCash.Text)
        mrcd!rechargecash = Trim(txtRechargeCash.Text)
        mrcd!consumecash = Trim(txtUnTmpCash.Text)
        mrcd!cancelcash = Trim(txtCancelCardCash.Text)
        mrcd!allcash = Trim(txtEarnCash.Text)
        mrcd!Date = Date
        mrcd.Update
        mrcd.Close    End If    MsgBox "结账完成!"
    Unload MeEnd SubPrivate Sub Form_Activate()
    Dim str As String
    
    txtSQL = "select * from user_info"
    Set mru = ExecuteSQL(txtSQL, MsgText)
    
    '判断表内是否有记录
    If mru.EOF Then
        MsgBox "没有记录了,是否前往添加?", vbOKCancel, "提示"
        '若选择是
        If str$ = vbOK Then
            frmAddUser.Show
            frmFinCas.Hide
        Else
            Exit Sub
            Unload Me
        End If
    End If
End Sub 

Private Sub Form_Load()
    Label3.ForeColor = vbRed
    txtUserName.Enabled = False
    
    Dim i As Integer

    txtSQL = "select * from user_info "
    Set mru = ExecuteSQL(txtSQL, MsgText)
    
    '显示表内所有用户
    For i = 1 To mru.RecordCount
        comboUserName.AddItem mru!UserID
        mru.MoveNext
    Next i
    mru.Close
    
End Sub

PS:在结账部分中,有一个很重要的步骤:即对退卡金额、充值金额的计算。该部分的计算与判断空值需要涉及两个较重要的SQL语法:SUM()与IsNull()。前者功能为将该列中数据的加和;而后者则是用于判断是否有空值。在之后的优化部分,我会对这两方面做出详细讲解。

结语:三大困难都已经解决,可以做第一遍验收了

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值