機房收費系統之結賬
阿新 • • 發佈:2019-02-05
看評論,小夥伴們建議畫張流程圖來直觀表示,部落格釋出的意義之一在於廣開言路,察納雅言,故更新部落格,添上流程圖一張,贈與新的讀者~~~
彙總充值表中添加了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這個選項,便於檢視是誰結的賬