1. 程式人生 > >機房收費系統之結賬

機房收費系統之結賬

  看評論,小夥伴們建議畫張流程圖來直觀表示,部落格釋出的意義之一在於廣開言路,察納雅言,故更新部落格,添上流程圖一張,贈與新的讀者~~~

彙總

  充值表中添加了UserID這個欄位,便於在學生註冊的時候就將金額相關資訊存入充值表中,減少了計算的複雜性。

        '彙總(注意count和sum的區別)
        If SSTab1.Tab = 4 Then
            If comboOpUserID.Text = "" Then     
                MsgBox "請選擇操作員使用者!", vbOKOnly + vbExclamation, 提示
                Exit Sub
            End If
            '計算售卡張數,少用 count(欄位名),因為它會排除NULL值
            txtSQL = "select * from student_Info where userID = '" & comboOpUserID.Text & "'and Ischeck = '" & "未結賬" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)'              
                If mrc.RecordCount = 0 Then
                    txtSellCardSum.Text = 0
                Else
                    txtSellCardSum.Text = mrc.RecordCount  '售卡張數
                End If            
              
            '計算退卡張數
            txtSQL = "select * from CancelCard_Info where userID = '" & comboOpUserID.Text & "'and status = '" & "未結賬" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)             
                If mrc.RecordCount = 0 Then
                    txtBackCardSum.Text = 0
                Else
                    txtBackCardSum.Text = mrc.RecordCount '退卡張數
                End If  
              
            '計算充值金額(不區分固定使用者還有臨時使用者)
            txtSQL = "select sum(addmoney) as sum_info from Recharge_Info  where userID = '" & comboOpUserID.Text & "'and status = '" & "未結賬" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
                If IsNull(Trim(mrc.Fields(0))) Then
                    txtRecharge.Text = 0
                Else
                    txtRecharge.Text = mrc.Fields(0)   '括號裡需要是0,因為臨時表sum_info只有一列
                End If 
              
            '計算退卡金額
            txtSQL = "select sum(CancelCash) as sum_info from CancelCard_Info where userID = '" & comboOpUserID.Text & "'and status = '" & "未結賬" & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)                
                If IsNull(Trim(mrc.Fields(0))) Then  '為空
                    txtBackCardMoney.Text = 0
                Else
                    txtBackCardMoney.Text = mrc.Fields(0)
                End If
              
            '計算臨時收費金額
         
            txtSQL = "select sum(addmoney) as sum_info from Recharge_Info where userID = '" & comboOpUserID.Text & " 'and type = '臨時使用者' and status = '未結賬'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)
                If IsNull(mrc.Fields(0)) Then       '無記錄
                    txtTemRecharge.Text = 0
                Else
                    txtTemRecharge.Text = mrc.Fields(0)
                End If
                
                '計算總售卡數
                txtSellCardActual.Text = Val(txtSellCardSum.Text) - Val(txtBackCardSum.Text)
                
                '計算應收金額
                txtCollectMoney.Text = Val(txtRecharge.Text) - Val(txtBackCardMoney.Text)
        End If
                        

sum是對符合條件的記錄的數值列求和

count 是對查詢中符合條件的結果(或記錄)的個數
例如:
表fruit
id     name    price
1     apple     3.00
2     pear       4.00
select count(price) from fruit; ----執行之後結果為:2  (表示有2條記錄)
select  sum(price) from fruit;---執行之後結果為:7:00(表示各記錄price欄位之和為7.00)



結賬

'結賬分為兩部分:
'一是將相關資訊存入日結賬單中
'二是改變相關表中的結賬狀態,即將"未結賬"改為"已結賬"
Private Sub cmdAccount_Click()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrcS As ADODB.Recordset
    Dim mrcR As ADODB.Recordset
    Dim mrcc As ADODB.Recordset    '退卡
    Dim mrcday As ADODB.Recordset
    Dim mrcL As ADODB.Recordset
    Dim ConsumeCash As Integer   '消費金額中間變數
    Dim sumcash As Integer
    Dim mrc As ADODB.Recordset    'sum的臨時表即sum_info
    
    If comboOpUserID.Text = "" Then
        MsgBox "請選擇操作員後再結賬!", vbOKOnly + vbExclamation, 提示
        Exit Sub
    End If
        
    '計算上期充值卡餘額
    txtSQL = "select sum(cash) from student_Info where UserID='" & Trim(comboOpUserID.Text) & "'and ischeck = '" & "未結賬" & "'"
    Set mrcS = ExecuteSQL(txtSQL, MsgText)
        If IsNull(mrcS.Fields(0)) Then
            sumcash = 0
        Else
            sumcash = mrcS.Fields(0)
        End If
    
    '從line表計算當日消費金額
    txtSQL = "select sum(consume) from Line_Info "
    Set mrcL = ExecuteSQL(txtSQL, MsgText)
        If IsNull(mrcL.Fields(0)) Then   '為空
            ConsumeCash = 0
        Else
            ConsumeCash = mrcL.Fields(0)
        End If
    
    '將相應的記錄存入到日結表
    txtSQL = "select * from CheckDay_Info where UserID='" & Trim(comboOpUserID.Text) & "'and date=' " & Date & "'"
    Set mrcday = ExecuteSQL(txtSQL, MsgText)
    
    '當天結多次賬的情況,就在原有基礎上更新
    If mrcday.EOF = False Then
        mrcday!RemainCash = sumcash + mrcday!RemainCash
        mrcday!RechargeCash = Val(txtRecharge.Text) + mrcday!RechargeCash                                    
        mrcday!ConsumeCash = ConsumeCash + mrcday!ConsumeCash
        mrcday!CancelCash = Val(txtBackCardMoney.Text) + mrcday!CancelCash
        mrcday!AllCash = (sumcash + Val(txtRecharge.Text) - Val(txtBackCardMoney.Text) - ConsumeCash) + mrcday!AllCash
        mrcday!Date = Date
        mrcday!UserID = comboOpUserID.Text
        mrcday.Update
        mrcday.Close
        mrcS.Close
        mrcL.Close
    Else
        '如果沒結過賬就新增新記錄
        mrcday.AddNew
        mrcday!RemainCash = sumcash
        mrcday!RechargeCash = Val(txtRecharge.Text)   
        mrcday!ConsumeCash = ConsumeCash
        mrcday!CancelCash = Val(txtBackCardMoney.Text)
        mrcday!AllCash = sumcash + Val(txtRecharge.Text) - Val(txtBackCardMoney.Text) - ConsumeCash
        mrcday!Date = Date
        mrcday!UserID = comboOpUserID.Text
        mrcday.Update
        mrcday.Close
        mrcS.Close
        mrcL.Close
    End If
    
'------------------------------------------------------------------------------------------------------------------
    '更新學生表
    txtSQL = "select * from student_Info where UserID='" & Trim(comboOpUserID.Text) & "'and Ischeck = '" & "未結賬" & "'"
    Set mrcS = ExecuteSQL(txtSQL, MsgText)
        Do While Not mrcS.EOF
            mrcS!Ischeck = "已結賬"
            mrcS.Update
            mrcS.MoveNext
        Loop
    mrcS.Close
    
    '更新充值表
    txtSQL = "select * from Recharge_Info where UserID='" & Trim(comboOpUserID.Text) & "'and status = '" & "未結賬" & "'"
    Set mrcR = ExecuteSQL(txtSQL, MsgText)
        Do While Not mrcR.EOF
            mrcR!Status = "已結賬"
            mrcR.Update
            mrcR.MoveNext
        Loop
    mrcR.Close
    
    '更新退卡表
     txtSQL = "select * from Cancelcard_Info where UserID='" & Trim(comboOpUserID.Text) & "'and status = '" & "未結賬" & "'"
     Set mrcc = ExecuteSQL(txtSQL, MsgText)
        Do While Not mrcc.EOF
           mrcc!Status = "已結賬"   
           mrcc.Update
           mrcc.MoveNext
        Loop
     mrcc.Close
     
     MsgBox "結賬成功!", vbOKOnly + vbExclamation, "提示"
     
'------------------------------------------------------------------------------------------------------------------
    '清空文字框顯示的資訊
        Dim ctr1 As Control
        For Each ctr1 In Me.Controls
            If TypeOf ctr1 Is TextBox Then
                ctr1.Text = ""
            End If
        Next
    
    Unload Me
End Sub

  日結賬單添加了UserID這個選項,便於檢視是誰結的賬