【VB与数据库】——机房收费系统之结账

到现在机房收费基本完成,相对之前的学生管理系统,有了一些小难度,个人感觉尤其在结账部分,由于涉及的表比较多,这更需要我们理清思路,保持清晰的思路,才是我们尽快完成王道!

    在这一部分内容中涉及到一个之前我们运用较少的控件SSTab,这一部分的内容是自己在网上找的相关内容,再加上美红姐博客学习,使自己对这个控件有了很好的认识。

    结账部分主要是运用到多个表中记录的查询,以及结账后对表中记录的更新,这些简单的操作更能使我们对SQL语句有一个很好的利用,如果在之前的学习中对SQL没有很好的认识,也没有关系,只是在学习过程中多百度一下就好啦。【VB与数据库】——机房收费系统之结账_第1张图片

售卡——根据选择操作员的编号,在student表中选择由其办理的卡号(未结账),避免结账之后的卡号重复被计算,造成账目的混乱。

<strong><span style="font-weight: bold;"> </span>txtSQL = "select * from student_Info where userID = '" & ComUserID.Text & "'" & " " & "and Ischeck = '" & "未结账" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
                MsgBox "没有工作记录,请重新选择!", vbOKOnly + vbExclamation, "友好提示"
                Exit Sub
            End If
            With MSHFlexGrid1
                .Rows = 1
                .ColAlignment = 4
                .CellAlignment = 4
                .TextMatrix(0, 0) = "学号"
                .TextMatrix(0, 1) = "卡号"
                .TextMatrix(0, 2) = "日期"
                .TextMatrix(0, 3) = "时间"
                Do While Not mrc.EOF
                .Rows = .Rows + 1
                .ColAlignment = 4
                .CellAlignment = 4
                .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(1))
                .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(0))
                .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(12))
                .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(13))
                mrc.MoveNext
                Loop
            End With
            Call AdjustColWidth(frmCheckout, MSHFlexGrid1) '这一部分是调用自己写模块中的内容,目的使mshflexgrid1中内容居中
            mrc.Close<strong>
                </strong></strong>
在其之后的充值,退卡,以及临时用户和其大同小异,故就举售卡一例

汇总

【VB与数据库】——机房收费系统之结账_第2张图片

看起来比较复杂吧,但是要踏实坐下来也没有什么特别复杂的内容,统计每个表中符合条件的记录一共有多少条,这时候可以用上SQL语句中的count,还有统计金额的问题,也可以适用sum,使统计更高效完成。

<strong><strong>'售卡张数
            txtSQL = "select count(cardno) from student_Info where userID = '" & ComUserID.Text & "'" & " " & "and Ischeck = '" & "未结账" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
               Register = 0
            Else
                If IsNull(Trim(mrc.Fields(0))) Then
                    Register = 0
                Else
                    Register = mrc.Fields(0)
                End If
            End If
            txtshouka.Text = Register
            
            '退卡张数
            txtSQL = "select count(cardNo) from CancelCard_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
                Backcard = 0
            Else
                If IsNull(Trim(mrc.Fields(0))) Then
                    Backcard = 0
                Else
                    Backcard = mrc.Fields(0)
                End If
                
            End If
            txttuika.Text = Backcard
            
            
            '充值金额
            txtSQL = "select sum(addmoney) from ReCharge_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
                Charge = 0
            Else
                If IsNull(Trim(mrc.Fields(0))) Then
                    Charge = 0
                Else
                    Charge = mrc.Fields(0)
                End If
                
            End If
            txtchongka.Text = Charge
            
            '退卡金额
            txtSQL = "select sum(CancelCash)from CancelCard_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
                Refund = 0
            Else
                If IsNull(Trim(mrc.Fields(0))) Then
                    Refund = 0
                Else
                    Refund = mrc.Fields(0)
                End If
            End If
            txttuiyue.Text = Refund
            
            '临时金额
            txtSQL = "select cardno from student_Info where userID = '" & ComUserID.Text & "'" & " " & "and Ischeck = '" & "未结账" & "'" & " " & "and type = '" & "临时用户" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
            If mrc.BOF And mrc.EOF Then
                temPorary = 0

            Else
                i = mrc.RecordCount
            
            For j = 1 To i
                cardid = mrc.Fields(0)
                txtSQL1 = "select sum(cash) from line_Info where Ischeck = '" & "未结账" & "'" & _
                            " " & "and cardno = '" & cardid & "'"
                Set mrcc = ExecuteSQL(txtSQL1, MsgText1)
                If mrcc.BOF And mrcc.EOF Then
                    temPorary = 0
                Else
                    If IsNull(mrcc.Fields(0)) Then
                        mrcc.Fields(0) = 0
                 
                    End If
                    temPorary = mrcc.Fields(0) + temPorary
                End If
                mrc.MoveNext
            Next
            End If
            txtlinshi.Text = temPorary
 <span style="color:#ffffff;">           </strong></span></strong>

随后就是真正的结账内容了,单击结账按钮,需要完成表内容的更新,以及对消费金额,总的金额收入,还有总的售卡的统计等内容。

结账

<strong><strong>Private Sub cmdCheckout_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
Dim strSQL As String
Dim strMsg As String
Dim strMrc As ADODB.Recordset
Dim lastmoney As Single
    '更新学生表
     txtSQL = "select * from student_Info where userID = '" & ComUserID.Text & "'" & " " & "and Ischeck = '" & "未结账" & "'"
     Set mrc = ExecuteSQL(txtSQL, MsgText)
     Do While mrc.EOF = False
        mrc!IsCheck = "已结账"
        mrc.MoveNext
    Loop
    mrc.Close
    '更新充值表
    txtSQL = "select * from ReCharge_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    Do While mrc.EOF = False
        mrc!Status = "已结账"
        mrc.MoveNext
    Loop
    mrc.Close
    '更新退卡表
    txtSQL = "select * from CancelCard_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    Do While mrc.EOF = False
        mrc!Status = "已结账"
        mrc.MoveNext
    Loop
    mrc.Close
   '消费金额
   txtSQL = "select sum(consume)from line_Info where userID = '" & ComUserID.Text & "'" & " " & "and status = '" & "未结账" & "'"
   Set mrc = ExecuteSQL(txtSQL, MsgText)
   If mrc.BOF And mrc.EOF Then
        Charge = 0
   Else
        If IsNull(Trim(mrc.Fields(0))) Then
            Consume = 0
        Else
            Consume = mrc.Fields(0)
        End If
   End If
   txtConsume.Text = Consume
    '总售卡张数
    txtzongshouka.Text = Register - Backcard
    '总的收费金额
    Total = Charge - Refund
    txtyingshou.Text = Total
    strSQL = "select * from CheckDay_Info "
    Set strMrc = ExecuteSQL(strSQL, strMsg)
    strMrc.MoveLast
    lastmoney = strMrc.Fields(4)
    strMrc.AddNew
    strMrc.Fields(0) = lastmoney
    strMrc.Fields(1) = Charge
    strMrc.Fields(2) = Consume
    strMrc.Fields(3) = Refund
    strMrc.Fields(4) = Total
    strMrc.Fields(5) = Date
    strMrc.Update
    strMrc.Close
    MsgBox "结账成功!", vbOKOnly + vbInformation, "恭喜您"
    Call notuse   '这个过程使结账之后的文本框变为不可用,避免用户随意的改变(其实改也没关系,添加到数据库的数据还是查询内容为主,就是为了避免给用户一个误以为可以改动的错觉)
        
End Sub</strong></strong>
到现在为止,结账过程基本过程完成。当然需要不断的后续改进和优化,时刻保持为人民服务的原则,让程序可以做的更加完美。

【总结】

    其实结账部分早就该完成,但是当我看到结账界面的复杂,我就有点恐惧了,现在做完之后,这些东西比想象中要简单多,做事情的时候千万别让“感觉很难”阻挡了脚步,无论是怎样的问题只需要我们脚踏实地的去做,一切都OK!






你可能感兴趣的:(【VB与数据库】——机房收费系统之结账)