1. 程式人生 > >【機房收費系統】——結賬

【機房收費系統】——結賬

       結賬,結的都是哪些賬,給誰結賬,結賬需要涉及到哪些表?這些都是開始設計程式碼之前首先要想的。

       看到這個介面,你會怎麼想?你也許會想,這是給誰結賬,怎麼查的是操作員啊?不該給一般使用者結賬嗎?一個操作員每天給一般使用者進行註冊,充值,退卡等,這些工作是由操作員完成的,管理員要做的就是將操作員的工作進行彙總,然後結賬,所以我認為是給操作員結賬,結的當然是每天沒結的賬了。

               

首先我們來看需要哪些表來查詢相關資訊。

user_info表:查詢相關操作員,在這裡注意,管理員也可以是操作員,優化的時候要想到這點,在以下的程式碼中我沒有體現,大家自己想想,很簡單。

student_info表:查詢購卡數及購卡資訊

recharge_info表:查詢充值記錄,充值金額

cancelcard_info表:查詢退卡記錄,退卡數,退卡金額

checkday_info表:將以上查到的資訊更新到日結賬表

checkweek_info表:將以上查到的資訊更新到周結賬表

明白了這些,我們就來看看具體怎麼實現。

一、首先,查詢操作員及他的真實姓名,Tab表裡顯示的都是該操作員進行過的工作,要一致。

       先將已經新增的操作員使用者名稱載入到combouserid框中,

Private Sub Form_Load()
    '從user中查詢操作員使用者名稱
    txtSQL = "select * from user_info where level='操作員'"
    Set umrc = ExecuteSQL(txtSQL, MsgText)
   
    While (umrc.EOF = False)
        comboUserId.AddItem umrc.Fields(0) '載入使用者名稱
        umrc.MoveNext  '移動到下一條記錄
    Wend
    
    '從user中查詢操作員真實名
    txtSQL = "select * from user_info where level='操作員'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    
    While (mrcc.EOF = False)
        comboUserName.AddItem mrcc.Fields(3) '載入真名
        mrcc.MoveNext '移動到下一條記錄
    Wend
    
End Sub
然後,單擊使用者名稱,即出現相應的真名。
Private Sub comboUserId_Click()
    '單擊combouserid,查詢使用者名稱,真實名
    '從user表中查
    txtSQL = "select username from user_info where userid='" & Trim(comboUserId.Text) & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    '賦值,真名顯示在combousername
    comboUserName.Text = mrcc.Fields(0)
    '關閉資料集物件
    mrcc.Close
End Sub
二、在選中要結賬的操作員後查詢出相應的資訊,這裡以充值為例:
'查詢充值表語句
    txtSQL = "select * from recharge_info where userid= '" & Trim(comboUserId.Text) & "'and status='未結賬'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    '執行查詢語句
    Set remrc = ExecuteSQL(txtSQL, MsgText)
    '將查到的資訊顯示到mycharge(1)控制元件中
    '如果沒有記錄,則顯示名稱就可以
    If (remrc.EOF Or remrc.BOF) Then
        With myCharge(1)
            .Rows = 1 '第一行
            .CellAlignment = 4
            .TextMatrix(0, 0) = "學號"
            .TextMatrix(0, 1) = "卡號"
            .TextMatrix(0, 2) = "充值金額"
            .TextMatrix(0, 3) = "日期"
            .TextMatrix(0, 4) = "時間"
        End With
        Exit Sub
    Else
    '否則顯示全部查詢到的資訊
        With myCharge(1)
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "學號"
            .TextMatrix(0, 1) = "卡號"
            .TextMatrix(0, 2) = "充值金額"
            .TextMatrix(0, 3) = "日期"
            .TextMatrix(0, 4) = "時間"
            Do While Not remrc.EOF '若有記錄,加進去
                .Rows = .Rows + 1  '防止空行的出現
                .CellAlignment = 4
                .TextMatrix(.Rows - 1, 0) = Trim(remrc.Fields(1))
                .TextMatrix(.Rows - 1, 1) = Trim(remrc.Fields(2))
                .TextMatrix(.Rows - 1, 2) = Trim(remrc.Fields(3))
                .TextMatrix(.Rows - 1, 3) = Trim(remrc.Fields(4))
                .TextMatrix(.Rows - 1, 4) = Trim(remrc.Fields(5))
                .ColWidth(3) = 1600
                remrc.MoveNext  '移動到下一條記錄
            Loop
            remrc.Close  '關閉資料集物件
        End With
    End If
    
其他幾個,購卡、退卡、臨時使用者與充值雷同,在這裡就不再多寫了。

三、彙總,結賬

       彙總,彙總,無非就是把查到的所有記錄加和,顯示在文字框中,主要是計算,結賬的時候我是結的當天的賬,一天一結賬,這樣就不會出現結賬重複的情況。

'彙總,結賬
    Dim N As Integer  '定義卡數
    Dim TmpRate As Single  '定義金額
    Dim cancelCash As Single  '定義退卡金額


    '查學生表中的臨時使用者,計算臨時使用者收費
    txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and type='臨時使用者'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    TmpRate = 0
    '計算臨時使用者收費
    While (mrc.EOF = False)
        TmpRate = TmpRate + mrc.Fields(7)
        mrc.Fields(11) = Trim("結賬") '更新資料庫
        mrc.MoveNext '移動到下一條記錄
    Wend
    txtRegister = TmpRate  '將臨時收費賦值給txtregister
    mrc.Close  '關閉資料庫物件

    '查使用者名稱,獲取總卡數
    txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    N = 0
    TmpRate = 0
    '迴圈計算總卡數
    While (mrc.EOF = False)
        N = N + 1
        mrc.Fields(11) = Trim("結賬") '更新資料庫結賬
        mrc.MoveNext '移動到下一條記錄
    Wend
    txtnum = N  '購卡數
    mrc.Close  '關閉資料集物件

    '查退卡表,獲取退卡數和退卡金額
    txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrccan = ExecuteSQL(txtSQL, MsgText)
    N = 0
    cancelCash = 0
    '計算退卡金額
    While (mrccan.EOF = False)
        N = N + 1
        cancelCash = cancelCash + mrccan.Fields(2)
        mrccan.Fields(6) = Trim("結賬") '更新資料庫
        mrccan.MoveNext
    Wend
    txtbackcard = N
    txtbackmoney = cancelCash '將退卡金額賦值給txtbackmoney
    mrccan.Close '關閉資料集物件


    '查充值表,獲取充值金額
    txtSQL = "select * from recharge_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set remrc = ExecuteSQL(txtSQL, MsgText)
    TmpRate = 0
    '計算充值金額
    While (remrc.EOF = False)
        TmpRate = TmpRate + remrc.Fields(3)
        remrc.Fields(7) = Trim("結賬") '更新資料庫
        remrc.MoveNext '移動到下一條記錄
    Wend
    txtrecharge = TmpRate  '將充值金額賦值給txtrecharge
    
    '計算購卡數
    txtBuycard.Text = Val(txtnum) + Val(txtbackcard)
    '計算應收金額
    txtcash.Text = Val(txtrecharge) + Val(txtRegister) - Val(txtbackmoney)
    '關閉資料集物件
    remrc.Close
       最後把結賬資訊更新到日結賬表和周結賬表中。
'填寫日結賬表的內容
    
    '本期餘額
    txtSQL = "select * from student_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'and type='固定使用者'"
'    txtSQL = "select * from student_info where datediff(dd,offtime,getdate())=1"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    Do While Not mrc.EOF
        allcash = allcash + mrc.Fields(7)  '本期餘額
        mrc.MoveNext
    Loop
    '當日消費餘額
    txtSQL = "select * from line_info where offdate='" & Format(Date, "yyyy-mm-dd") & "'"
    Set lmrc = ExecuteSQL(txtSQL, MsgText)
    Do While Not lmrc.EOF
        consumecash = consumecash + lmrc.Fields(11)
        lmrc.MoveNext
    Loop
    '當日充值金額
    txtSQL = "select * from recharge_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set remrc = ExecuteSQL(txtSQL, MsgText)
    Do While remrc.EOF = False
        Rechargemoney = Rechargemoney + remrc.Fields(3)
        remrc.MoveNext
    Loop
    '當日退還金額
    txtSQL = "select * from cancelcard_info where userid='" & Trim(comboUserId.Text) & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrccan = ExecuteSQL(txtSQL, MsgText)
    Do While mrccan.EOF = False
        cancelCash = cancelCash + mrccan.Fields(2)
        mrccan.MoveNext
    Loop
    remaincash = allcash - Rechargemoney + consumecash + cancelCash
    
    '關閉資料集物件
    mrc.Close
    lmrc.Close
    remrc.Close
    mrccan.Close
    
    '查詢日結賬表
    txtSQL = "select * from checkday_info "
    Set dmrc = ExecuteSQL(txtSQL, MsgText)
    '更新日結賬表內容
    With dmrc
        .AddNew
        .Fields(0) = remaincash
        .Fields(1) = Rechargemoney
        .Fields(2) = consumecash
        .Fields(3) = cancelCash
        .Fields(4) = allcash
        .Fields(5) = Format(Date, "yyyy-mm-dd")
        .Update
        MsgBox "結賬成功!"  '提示結賬成功
        
    End With
    
    '更新周結賬單
    txtSQL = "select * from checkweek_info"
    Set wmrc = ExecuteSQL(txtSQL, MsgText)
    '更新到周結表中
        With wmrc
            .AddNew
            .Fields(0) = dmrc.Fields(0)
            .Fields(1) = dmrc.Fields(1)
            .Fields(2) = dmrc.Fields(2)
            .Fields(3) = dmrc.Fields(3)
            .Fields(4) = dmrc.Fields(4)
            .Fields(5) = dmrc.Fields(5)
            .Update '更新資料集物件
            wmrc.MoveNext  '移動到下一條記錄
        End With
        wmrc.Close  '關閉資料集物件
       這就是整個結賬的過程。

       結賬這部分花了很長時間弄好的,但是我相信時間是檢驗真理的標準,也是磨練我們意志的最硬的基石。奉勸大家一句,剛看到結賬不要急著做,要先搞清思路,搞清算賬的過程,根據自己想的試著去做,相信只要思路正確很快就可以做出來的,這也是我做結賬的感受,如果以上有不合理的,歡迎大家來指正!