機房收費系統——下機
阿新 • • 發佈:2018-12-20
上下機是機房收費系統中比較重要的一部分,所以我們一定要把上下機的思路理清楚才可以,不然會很亂,一會兒就把自己繞進去了,現在我們一起分析一下下機的思路吧!
程式碼片段: 判斷上下機的情況
Private Sub cmdOffLine_Click() Dim mrconline As ADODB.Recordset Dim mrconline2 As ADODB.Recordset Dim mrcStudent As ADODB.Recordset Dim mrcbasic As ADODB.Recordset Dim mrcline As ADODB.Recordset Dim mrcline2 As ADODB.Recordset Dim mrc As ADODB.Recordset Dim time1 As Long Dim time2 As Long Dim time3 As Long Dim msgtext As String Dim txtsql1 As String Dim txtsql2 As String Dim txtsql3 As String '消費時間 Dim consumetime As String '連線表 txtsql2 = "select * from basicdata_info" '從資料表中獲取基本資料 Set mrcbasic = ExecuteSQL(txtsql2, msgtext) txtsql3 = "select * from student_info where cardno='" & Trim(txtCardNo.Text) & "'and status='" & "使用" & "'" '得出餘額 Set mrcStudent = ExecuteSQL(txtsql3, msgtext) If txtCardNo.Text = "" Then MsgBox "請輸入卡號!", 0 + 48, "警告" Else '判斷此卡是否已經下機 txtsql1 = "select * from online_info where cardno= '" & Trim(txtCardNo.Text) & "'" Set mrconline = ExecuteSQL(txtsql1, msgtext) If mrconline.EOF = True Then MsgBox "沒有上機" Else '從online_info資料表中獲取資料到下機介面 txtSID.Text = mrconline.fields(2) txtDept.Text = mrconline.fields(4) txttype.Text = mrconline.fields(1) txtName.Text = mrconline.fields(3) txtSex.Text = mrconline.fields(5) txtOndate.Text = mrconline.fields(6) txtOffDate.Text = Date txtOntime.Text = mrconline.fields(7) txtOffTime.Text = Time
計算消費時間和消費金額
time1 = Val(DateDiff("n", txtOntime.Text, Time)) '把時間差轉換為分鐘 time2 = Val(DateDiff("n", txtOndate.Text, Date)) '把日期差轉換成分鐘 If Val(time1) + Val(time2) < mrcbasic.fields(4) Then time3 = "0" txtCMoney.Text = "0" Else '判斷消費時間小於最小上機時間時消費金額為1 If (Val(time1) + Val(time2)) < mrcbasic!leasttime And (Val(time1) + Val(time2)) > mrcbasic.fields(4) Then txtCMoney.Text = "1" '消費金額為1元 txtBalance.Text = Trim(mrcStudent.fields(7)) - Trim(txtmoney.Text) Else time3 = Val(time1) + Val(time2) - Val(mrcbasic.fields(4)) '否則上機時間減去準備時間 txtCtime.Text = Val(time3) '按使用者不同的種類來進行收費 If mrconline.fields(1) = "固定使用者" Then txtCMoney.Text = (Int(Val(time3) / 60 + 1) * mrcbasic.fields(0)) '計算固定使用者金額 txtBalance.Text = Trim(mrcStudent.fields(7)) - Trim(txtCMoney.Text) Else txtCMoney.Text = (Int(Val(time3) / 60 + 1) * mrcbasic.fields(1)) '計算臨時使用者金額 txtBalance.Text = Trim(mrcStudent.fields(7)) - Trim(txtCMoney.Text) mrcbasic.Close End If End If End If
更新記錄
txtsql = "select * from line_info" Set mrcline2 = ExecuteSQL(txtsql, msgtext) If mrcline2.EOF = True Then MsgBox "沒有使用者,請退出!", 0 + 46, "提示" Else mrcline2.AddNew mrcline2.fields(1) = Trim(txtCardNo.Text) mrcline2.fields(2) = mrcStudent.fields(1) mrcline2.fields(3) = mrcStudent.fields(2) mrcline2.fields(4) = mrcStudent.fields(4) mrcline2.fields(5) = mrcStudent.fields(3) mrcline2.fields(6) = Trim(txtOndate.Text) mrcline2.fields(7) = Trim(txtOntime.Text) mrcline2.fields(8) = Date mrcline2.fields(9) = Time mrcline2.fields(10) = Trim(txtCtime.Text) mrcline2.fields(11) = Val(txtCMoney.Text) mrcline2.fields(12) = Val(txtBalance.Text) mrcline2.fields(13) = "正常下機" mrcline2.fields(14) = "FZH" mrcline2.Update mrcline2.Close If mrconline.EOF Then MsgBox "沒有人上機!", 0 + 46, "提示" Else mrconline.Delete mrconline.Update ' mrconline.Close End If End If txtsql = "select * from online_info" Set mrconline2 = ExecuteSQL(txtsql, msgtext) lblpeople.Caption = mrconline2.RecordCount mrconline2.Close
以上內容就是上下機的具體程式碼!上下機是機房的核心部分,也是最關鍵的部分,所以一定要一次性的把它做好,不然後期優化還會再找麻煩的,下機一般不同的人有不同的寫法, 以下是我遇到的兩個思路:
**1、先判斷online_info表中是否有記錄,若有則代表該卡正在上機,若沒有則代表該卡已經下機!
2、判斷line_info表中是否有“正常下機”的記錄,若有則代表已經下機,若沒有則代表正在上機!**
第二種思路可能會有漏洞,因為一個卡號如果多次上下機的話會出現錯誤,我剛開始就用的第二種思路,但是發現這種思路如果一直走下去的會很麻煩,所以還不如換個方向呢,於是我就採取了第一種思路,這種思路還是比較簡單的,同時也是我上面的思路,建議大家用第二種方法,會節省不少程式碼量! 以上就是下機的思路和程式碼,如果有不合適的程式碼,歡迎大家給我指正!