1. 程式人生 > >機房收費系統——下機

機房收費系統——下機

上下機是機房收費系統中比較重要的一部分,所以我們一定要把上下機的思路理清楚才可以,不然會很亂,一會兒就把自己繞進去了,現在我們一起分析一下下機的思路吧! 在這裡插入圖片描述

程式碼片段: 判斷上下機的情況

  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表中是否有“正常下機”的記錄,若有則代表已經下機,若沒有則代表正在上機!**

第二種思路可能會有漏洞,因為一個卡號如果多次上下機的話會出現錯誤,我剛開始就用的第二種思路,但是發現這種思路如果一直走下去的會很麻煩,所以還不如換個方向呢,於是我就採取了第一種思路,這種思路還是比較簡單的,同時也是我上面的思路,建議大家用第二種方法,會節省不少程式碼量! 以上就是下機的思路和程式碼,如果有不合適的程式碼,歡迎大家給我指正!