1. 程式人生 > >機房收費系統之六(上下機窗體)

機房收費系統之六(上下機窗體)

上機

1.剛開始進行上下機窗體的時候,想的比較簡單,以至於後來遺漏很多問題。所以流程圖改了好幾遍才算比較完善。

上機模組主要功能就是輸入卡號開始計時消費,類似於登陸窗體模組。需要注意的有兩點:一是要考慮輸入的卡號是否正在上機(卡號不能重複上機),二是考慮餘額是否充足(不充足提醒充值)。

2.流程圖:


通過多次改進流程圖,基本上可以全面瞭解了上機模組的整個流程。然後再寫程式碼就很順暢了。

下機

1.下機模組和上機差不多。我覺得最複雜的地方就是計算消費。需要計算消費時間,通過消費時間計算出消費金額。這裡需要通過結合基本資料表來判斷和計算。我在這裡思考了好久。

2.流程圖:


3.重要的程式碼學習:

下機模組程式碼:

Private Sub cmdxiaji_Click()
    Dim txtSQL As String
    Dim txtSQL1 As String
    Dim txtSQL2 As String
    Dim txtSQL3 As String
    Dim txtSQL4 As String
    Dim msgText As String
    Dim mrc As ADODB.Recordset '連線student表
    Dim mrc1 As ADODB.Recordset '連線Online表
    Dim mrc2 As ADODB.Recordset '連線Line表
    Dim mrc3 As ADODB.Recordset '連線Basic表
    Dim mrc4 As ADODB.Recordset '連線Online,確認人數
    Dim intlinetime As Integer '用於儲存實際線上時間
    Dim intconsume As Single
    Dim curconsume As Single '用於儲存真正花費錢的時間
    Dim curbalance As Single '用於儲存使用者的餘額
    Dim fixedunit As Single '用於儲存單位金額
    Dim temunit As Single '用於儲存單位金額
    Dim a As Integer
    Dim Remaincash As Single
  
        '模組一:判斷卡號是否為空,判斷卡號是否為數字
        If Trim(txtcardno.Text = "") Then
            MsgBox "請輸入卡號!", vbOKOnly + vbExclamation, "提示"
            Call Clear_Info
            txtcardno.SetFocus
        Exit Sub
        Else
                If Not IsNumeric(Trim(txtcardno.Text)) Then
                MsgBox "卡號必須輸入數字!", vbOKOnly + vbExclamation, "提示"
                Call Clear_Info
'                txtcardno.Text = ""
                txtcardno.SetFocus
                Exit Sub
                End If
        End If
          
          
        '模組二:判斷卡號是否註冊,是否已經退卡。這裡先查student_Info
        txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"
        Set mrc = ExecuteSQL(txtSQL, msgText)
          
        If mrc.BOF And mrc.EOF Then
            MsgBox "該卡號未註冊,請先註冊資訊!", vbOKOnly + vbExclamation, "提示"
            Call Clear_Info
            txtcardno.SetFocus
        Exit Sub
        Else
                If Trim(mrc.Fields(10)) = "不使用" Then
                    MsgBox "該卡已經退卡", vbOKCancel + vbInformation, "提示"
                    Call Clear_Info
                    txtcardno.SetFocus
                    Exit Sub
                End If
        End If
        ' mrc.Close
        ':判斷卡號是否在上機,沒有上機不能退卡.連線Online表
        txtSQL1 = "select * from OnLine_Info where cardno= '" & Trim(txtcardno.Text) & "'"
        Set mrc1 = ExecuteSQL(txtSQL1, msgText)
          
        If mrc1.EOF = True Then
            MsgBox "該卡沒有上機,不能進行下機處理", vbOKOnly + vbExclamation, "警告"
            Call Clear_Info
            txtcardno.SetFocus
            Exit Sub
        End If
        
        '線上時長計算
        intlinetime = (Date - DateValue(mrc1!ondate)) * 1440 + (Hour(Time) - Hour(TimeValue(mrc1!OnTime))) * 60 + (Minute(Time) - Minute(TimeValue(mrc1!OnTime))) '時間單位為分鐘
          
          
          
        'txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" ' 多餘
        'Set mrc = ExecuteSQL(txtSQL, Msgtext)
           
        '獲得基本表的資料
        txtSQL3 = "select * from Basicdata_Info"
        Set mrc3 = ExecuteSQL(txtSQL3, msgText) 'mrc3連線basicdata表
        mrc3.MoveLast
        
        
        '單位時間的費用 (把固定使用者,臨時使用者單位時間的費用分別賦值給費用)
        
        fixedunit = Val(mrc3.Fields(0)) '把固定使用者的金額賦值給變數
        
        temunit = Val(mrc3.Fields(1)) '把臨時使用者的金額賦值給變數
        
        '判斷線上時間是否小於準備時間,若小於則 消費金額=0
        
        If intlinetime <= Val(Trim(mrc3.Fields(4))) Then
        txtxftime.Text = "0"
        Else
        '判斷線上時間是否小於最低消費時間,若小於則為0
             If intlinetime < Val(Trim(mrc3.Fields(3))) Then
             txtxftime.Text = "0"
             End If
        End If
          
         '線上時間大於單位時間,就按有幾個單位時間算,分為固定使用者和臨時使用者
        If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "固定使用者" Then
        a = Int(intlinetime / Val(Trim(mrc3!unitTime)))
                        If a = intlinetime / Trim(mrc3!unitTime) Then
                            curconsume = a
                        Else
                            curconsume = a + 1
                        End If
        txtxfjine.Text = Val(curconsume) * Val(fixedunit)
        
            If txtxfjine.Text = "" Then txtxfjine.Text = "0"
        Else
              If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "臨時使用者" Then
              a = Int(intlinetime / Val(Trim(mrc3!unitTime)))
                            If a = intlinetime / Trim(mrc3!unitTime) Then
                                curconsume = a
                            Else
                                curconsume = a + 1
                            End If
           
             txtxfjine.Text = Val(curconsume) * Val(temunit)
             End If
        End If
          
          
        '更新student表
        txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"
        Set mrc = ExecuteSQL(txtSQL, msgText)
        Remaincash = mrc!cash - Val(txtxfjine.Text)
          
            mrc.Fields(7) = Remaincash
            mrc.Update
            mrc.Close
              
          
        '下機顯示
        txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtcardno.Text) & "'"
        Set mrc1 = ExecuteSQL(txtSQL, msgText)
          
        txtxjdate.Text = Format(Date, "yyyy-mm-dd")
        txtxjtime.Text = Time
        txttype = Trim(mrc1.Fields(1))
        txtSID = Trim(mrc1.Fields(2))
        txtname = Trim(mrc1.Fields(3))
        txtxibie = Trim(mrc1.Fields(4))
        txtsex = Trim(mrc1.Fields(5))
        txtsjtime = Trim(mrc1.Fields(7))
        txtsjdate = Trim(mrc1.Fields(6))
        txtxftime.Text = intlinetime
        txtcash.Text = Remaincash
        
       
        '更新上機記錄表line表
          
        txtSQL2 = "select * from line_Info where cardno='" & Trim(txtcardno.Text) & "'"
        Set mrc2 = ExecuteSQL(txtSQL2, msgText)
        
        mrc2.Fields(8) = Trim(txtxjdate.Text)
        mrc2.Fields(9) = Trim(txtxjtime.Text)
        mrc2.Fields(10) = Trim(txtxftime.Text)
        mrc2.Fields(11) = Trim(txtxfjine.Text)
        mrc2.Fields(12) = Trim(txtcash.Text)
        mrc2.Fields(13) = Trim("正常下機")
        mrc2.Update
        mrc2.Close
          
        a = MsgBox("下機成功,歡迎下次再來", vbOKOnly + vbExclamation, "提示")
        
        If a = vbOK Then Call Clear_Info
          
          
        '刪除online表的資訊
        mrc1.Delete
        mrc1.Update
        mrc1.Close
        
       txtSQL4 = "select * from OnLine_Info"
       Set mrc4 = ExecuteSQL(txtSQL4, msgText)
    
        Label15.Caption = mrc4.RecordCount  '顯示上機人數
        
       mrc4.Close
          
          
End Sub


      總結:遇到問題,多思考,多請教“巨人”。感謝您的閱讀!