機房系統(六)——【下機】
阿新 • • 發佈:2018-12-02
相對於上機來說,小編覺得下機還是有點兒難度的,在進行下機時,也是耗費了很長的時間。
在機房收費系統中,涉及到下機的,有三部分:首先是主介面上的下機,其次是操作員的所有學生下機和部分學生下機。這些部分的主要功能就是,實現上機使用者的下機。總體來說,實現主體功能的思路是一樣的。小編做的流程圖如下:
實現下機功能的總體流程,有三大部分:
其一:對上機卡號的判定。
其二:計算消費
其三:更新相應的表
在這部分中,計算使用者的消費是重難點。在給定的資料庫中,對它給出的各個欄位的含義自己要有一個明確方向。小編最初就處於一個稀裡糊塗的狀態,到算錢的時候才去想這些欄位到底有什麼用(當沒有明確規定的時候,每個人的理解可能存在偏差)。實現這部分的部分程式碼如下;
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
當時做這部分的時候,真是一頭霧水,花費了很長時間,完成之後再回顧的時候,才發現其實並沒有很多難理解的內容。弄明白一部分的下機,其他的都是大同小異的。