1. 程式人生 > >機房系統(六)——【下機】

機房系統(六)——【下機】


    相對於上機來說,小編覺得下機還是有點兒難度的,在進行下機時,也是耗費了很長的時間。
    在機房收費系統中,涉及到下機的,有三部分:首先是主介面上的下機,其次是操作員的所有學生下機和部分學生下機。這些部分的主要功能就是,實現上機使用者的下機。總體來說,實現主體功能的思路是一樣的。小編做的流程圖如下:

在這裡插入圖片描述


    實現下機功能的總體流程,有三大部分:
    其一:對上機卡號的判定。
    其二:計算消費
    其三:更新相應的表
    在這部分中,計算使用者的消費是重難點。在給定的資料庫中,對它給出的各個欄位的含義自己要有一個明確方向。小編最初就處於一個稀裡糊塗的狀態,到算錢的時候才去想這些欄位到底有什麼用(當沒有明確規定的時候,每個人的理解可能存在偏差)。實現這部分的部分程式碼如下;
    Rem 定義變數,儲存資料
    Dim intLineTime As Integer '定義實際上機時間
    Dim IntConSume As Single   '定義消費金額
    Dim curConsume As Single   '定義真正消費的單位時間個數
    Dim curBalance As Single   '定義餘額
    Dim t As String           '定義使用者型別
    
    Dim FixEdunit As Single    '定義固定使用者單位時間費用(分鐘)
    Dim TeMunit As Single
'定義臨時使用者單位費用 Dim a As Single Dim RemainCash As Single '定義餘額 Rem 獲取BasicData表資料,把基礎資料賦值給變數 txtSQLBD = "select * from BasicData_Info" Set mrcBD = ExecuteSQL(txtSQLBD, MsgTextBD) Rem 線上時長計算,時間單位為分鐘 txtSQLOL = "select * from OnLine_Info where cardno='" &
Trim(txtCardNo.Text) & "'" Set mrcOL = ExecuteSQL(txtSQLOL, MsgTextOL) intLineTime = (Date - DateValue(mrcOL!ondate)) * 1440 + (Hour(Time) - Hour(TimeValue(mrcOL!OnTime))) * 60 + (Minute(Time) - Minute(TimeValue(mrcOL!OnTime))) Rem 判斷消費時間是否小於準備時間,若小於,消費時間為0,消費金額為0 If intLineTime < Val(Trim(mrcBD.Fields(4))) Then txtConsumeTime.Text = "0" txtConsume.Text = "0" Else Rem 判斷消費時間是否小於最低消費時間,若小於,則消費金額為最低消費金額 If intLineTime < Val(Trim(mrcBD.Fields(3))) Then txtConsumeTime.Text = intLineTime txtConsume.Text = Trim(mrcBD.Fields(5)) Else a = Int(intLineTime / Val(Trim(mrcBD!unitTime))) '單位時間個數,實際上機時間大於最低消費時間,則按單位時間個數計算,不足一個數,向上加1 If (intLineTime Mod Trim(mrcBD!unitTime)) = 0 Then curConsume = a Else curConsume = a + 1 End If End If End If Rem 判斷使用者型別 計算金額 txtSQLOL = "select * from OnLine_Info where cardno='" & Trim(txtCardNo.Text) & "'" Set mrcOL = ExecuteSQL(txtSQLOL, MsgTextOL) If Trim(mrcOL.Fields(1)) = "固定使用者" Then txtConsume.Text = Val(curConsume) * Trim(mrcBD.Fields(0)) / 30 '遞增時間的個數 * 一個遞增時間內的錢 Else txtConsume.Text = Val(curConsume) * Trim(mrcBD.Fields(1)) / 30 End If Rem 計算餘額 txtSQLStu = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'" Set mrcStu = ExecuteSQL(txtSQLStu, MsgTextStu) RemainCash = mrcStu!Cash - Val(txtConsume.Text)

    對於操作員的選擇或使全部學生下機的功能來說,與主介面上下機不同的是,增加了對需要下機同學的選擇與判斷。
    全部下機使用Do While...Loop 迴圈實現的,【DoWhile...Loop:先判斷條件是否滿足,若滿足,則進入迴圈;Do...Loop While:先進入迴圈執行,然後判斷條件是否滿足,若滿足,則進入下一次的迴圈】。選擇下機使用For...Next 迴圈 和定義陣列實現的。
    選擇下機時,給需要下機的學生做標誌,將已選擇的學生資訊放在一個容器裡面,用以區分需下機和非下機的資訊。
    1、Rem 記錄選中下機做標記的卡號,所有卡號資訊存放到數組裡
    With MSFlexGrid1
        i = 0
        For j = 1 To .Rows - 1
            If .TextMatrix(j, 5) = "√" Then
                sz(i) = .TextMatrix(j, 0) '存放卡號
                xh(i) = Val(j)
                i = i + 1
            End If
        Next j
    2、Rem 然後使用for...next迴圈體
    
    3、Rem 更新表格記錄
            Rem 更新介面
        For s = 0 To i - 1
            .RemoveItem xh(s)
        Next s


    當時做這部分的時候,真是一頭霧水,花費了很長時間,完成之後再回顧的時候,才發現其實並沒有很多難理解的內容。弄明白一部分的下機,其他的都是大同小異的。