1. 程式人生 > >【機房收費系統】——知識點彙總

【機房收費系統】——知識點彙總

前言

經歷了兩個多月的機房收費系統算是結了,結了並不意味著不學了,在機房中還是有很多值得我們學習的知識點,值得讓我們思考的東西,有些邏輯思維還是很強的。現在將做的過程中感覺比較重要的一些知識點分享出來。

一、整體思路

在機房收費系統中有不同的級別,不同的級別有不同許可權,他們所做的事情也不一樣,許可權是有限的。整個收費系統就像網咖一樣,一般使用者就相當於去上網的人,但上網的人有經常去的,還有隻去一次的,這時就有了臨時使用者和固定使用者,為什麼要分固定使用者和臨時使用者呢?那就是他們的待遇不一樣!常去的人肯定會給予優惠,收的錢少。而只去一兩次的就收費稍微貴點了。

 

機房收費系統主要有三個級別的使用者,管理員,操作員,一般使用者,他們的許可權是從低到高。職能從圖可以看出來。

 

二、重點知識點

1.在開始之前我們首先應該理清模組中的知識,見部落格 。

https://blog.csdn.net/yyp0304Devin/article/details/82744485

2.級別登入

在登入的時候我們會選擇不同的級別登入,登入的時候如何讓他們擁有許可權,一般使用者登入只能顯示一般使用者的許可權,他看不了操作員和管理員的許可權,對他不可見。其次就是操作員,他相當於一個網咖的網管,他沒有網咖老闆的許可權,他在中間架起管理員和一般使用者的橋樑,讓管理員賺一般使用者的錢。而管理員就擁有最高許可權。

 

級別使用者登入程式碼

If Trim(mrc.Fields(2)) = Trim("一般使用者") Then               '一般使用者的許可權

        If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then     '判斷密碼是否正確

        txtsql1 = "select * from OnWork_Info"                         '獲取到正在上機表

        Set mrc1 = ExecuteSQL(txtsql1, MsgText)

        Me.Hide

        UserName = Trim(txtUserName.Text)              '將使用者名稱給username

        frmMain.Show

        frmMain.GeneralUserMenu.Enabled = True

        frmMain.GeneralUserMenu.Visible = True

        frmMain.OperatorMenu.Enabled = False

        frmMain.OperatorMenu.Visible = False

        frmMain.AdministratorMenu.Enabled = False

        frmMain.AdministratorMenu.Visible = False

        mrc1.AddNew                                              '新增更新到正在上機表裡

        mrc1.Fields(0) = Trim(UserName)

        mrc1.Fields(1) = Trim(mrc.Fields(2))

        mrc1.Fields(2) = Trim(Date)

        mrc1.Fields(3) = Trim(Time)

        mrc1.Fields(4) = VBA.Environ("computername")

        mrc1.Update

        mrc1.Close '關閉資料連線

    Else

        MsgBox "輸入密碼不正確,請重新輸入!", vbOKOnly, "提示"

        txtPassword.Text = ""

        txtPassword.SetFocus

        Exit Sub

   End If



   ElseIf Trim(mrc.Fields(2)) = Trim("操作員") Then '操作員的許可權

        If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then '判斷密碼是否正確

        txtsql1 = "select * from OnWork_Info" '獲取正在上機表

        Set mrc1 = ExecuteSQL(txtsql1, MsgText)

        Me.Hide

        UserName = Trim(txtUserName.Text) '將使用者名稱給username

        frmMain.Show

        frmMain.GeneralUserMenu.Enabled = True

        frmMain.GeneralUserMenu.Visible = True

        frmMain.OperatorMenu.Enabled = True

        frmMain.OperatorMenu.Visible = True

        frmMain.AdministratorMenu.Enabled = False

        frmMain.AdministratorMenu.Visible = False

        mrc1.AddNew '新增更新到正在上機表離去

        mrc1.Fields(0) = Trim(UserName)

        mrc1.Fields(1) = Trim(mrc.Fields(2))

        mrc1.Fields(2) = Trim(Date)

        mrc1.Fields(3) = Trim(Time)

        mrc1.Fields(4) = VBA.Environ("computername")

        mrc1.Update

        mrc1.Close '關閉資料連線



    Else

        MsgBox "輸入密碼不正確,請重新輸入!", vbOKOnly + vbExclamation, "警告"

        txtPassword.SetFocus

        txtPassword.Text = ""

        Exit Sub

     End If



  ElseIf Trim(mrc.Fields(2)) = Trim("管理員") Then '管理員的許可權

    If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then '判斷密碼是否正確

    txtsql1 = "select * from OnWork_Info"     '獲取到正在上機表

    Set mrc1 = ExecuteSQL(txtsql1, MsgText)

    Me.Hide

    UserName = Trim(txtUserName.Text)    '將使用者名稱給username

    frmMain.GeneralUserMenu.Enabled = True

    frmMain.GeneralUserMenu.Visible = True

    frmMain.OperatorMenu.Enabled = True

    frmMain.OperatorMenu.Visible = True

    frmMain.AdministratorMenu.Enabled = True

    frmMain.AdministratorMenu.Visible = True

    mrc1.AddNew                          '新增更新到正在上機的表裡

    mrc1.Fields(0) = Trim(UserName)

    mrc1.Fields(1) = Trim(mrc.Fields(2))

    mrc1.Fields(2) = Trim(Date)

    mrc1.Fields(3) = Trim(Time)

    mrc1.Fields(4) = VBA.Environ("computername")

    mrc1.Update

2.讓系統登入時顯示當前時間,並且不能被修改。但是顯示時間並且時間時刻更新的前提是要在窗體上放一個定時器。

 Label14.Caption = "當前時間:" & Time

3.學生檢視餘額

https://blog.csdn.net/yyp0304Devin/article/details/81274743

4.上下機

(1)上機

If Not Testtxt(txtCardNo.Text) Then
        MsgBox "請輸入學號!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
        Exit Sub
    End If
    
    '判斷是否為數字
   If Not IsNumeric(txtCardNo.Text) Then
        MsgBox "卡號為數字,請輸入數字!", vbOKOnly + vbExclamation, "提示"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
    End If
    
     
    '驗證使用者是否已上機
    txtSQL = "select * from onLine_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
            
    If mrc1.EOF = False Then
        MsgBox "該帳號已經上機,不允許重複登入!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.Text = ""
        txtName.Text = ""
        txtDept.Text = ""
        txtSex.Text = ""
        txtSID.Text = ""
        txtType.Text = ""
     Exit Sub
    Else
            
     
    '驗證卡號是否存在,有沒有註冊
    txtSQL = "select * from student_Info where cardno ='" & txtCardNo.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
                            
    If mrc.EOF = True Then
        MsgBox "此使用者名稱不存在,請重新輸入!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
    Else
         
      
    txtSQL = "select * from CancelCard_Info where cardno = '" & Val(Trim(txtCardNo.Text)) & "'"
    Set mrc6 = ExecuteSQL(txtSQL, MsgText)
     
    If mrc6.EOF = False Then
        MsgBox "該卡已退,無法上機!", 48, "警告"
        Exit Sub
     End If
    '驗證餘額是否充足
    txtSQL = "select * from BasicData_Info"
    Set mrc3 = ExecuteSQL(txtSQL, MsgText)
            
    If mrc.Fields(7) < mrc3.Fields(1) Then
        MsgBox "餘額小於最小限制金額,請充值後再上機!!", vbOKOnly + vbExclamation, "提示"
        frmRecharge.Show
        frmRecharge.txtCardNo.Text = txtCardNo.Text
        Exit Sub
    Else
        
        txtCardNo.Text = mrc.Fields(0)
        txtName.Text = mrc.Fields(2)
        txtDept.Text = mrc.Fields(4)
        txtSex.Text = mrc.Fields(3)
        txtSID.Text = mrc.Fields(6)
        txtType.Text = mrc.Fields(14)
        txtOnDate.Text = Date
        txtOnTime.Text = Time
        txtCash = mrc.Fields(7)
 
    '更新上機人數
    txtSQL = "select * from User_Info"
    Set mrc2 = ExecuteSQL(txtSQL, MsgText)
        
    txtSQL = "select * from onLine_Info"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        mrc1.AddNew
        mrc1.Fields(0) = Trim(txtCardNo.Text)
        mrc1.Fields(1) = Trim(txtType.Text)
        mrc1.Fields(2) = Trim(txtCardNo.Text)
        mrc1.Fields(3) = Trim(txtName.Text)
        mrc1.Fields(4) = Trim(txtDept.Text)
        mrc1.Fields(5) = Trim(txtSex.Text)
        mrc1.Fields(6) = Date
        mrc1.Fields(7) = Time
        mrc1.Fields(8) = VBA.Environ("computername")
        mrc1.Fields(9) = ""
        mrc.Fields(9) = mrc2.Fields(0)
        mrc1.Update
        Label15.Caption = "當前上機人數:" & mrc1.RecordCount
        mrc1.Close
    txtSQL = "select * from Line_info "
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
'更新到line表
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(13) = "上機"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close

(2)下機

If txtCardNo.Text = "" Then
        MsgBox "請輸入學號!", vbOKOnly + vbExclamation, "警告"
    Else
  
'判斷該使用者是否上機
    txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
    If mrc.EOF = True Then
        MsgBox "該卡號未上機,請重新確認", vbOKOnly + vbExclamation, "警告"
        txtCardNo.Text = ""
        txtName.Text = ""
        txtDept.Text = ""
        txtSex.Text = ""
        txtSID.Text = ""
        txtType.Text = ""
        txtOnDate.Text = ""
        txtOnTime.Text = ""
    Else
    
    
'顯示上機帳號資料
    txtSQL = "select * from student_Info"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)

    txtSQL = "select * from BasicData_Info"
    Set mrc2 = ExecuteSQL(txtSQL, MsgText)

        txtType.Text = mrc.Fields(1)
        txtCardNo.Text = mrc.Fields(0)
        txtName.Text = mrc.Fields(3)
        txtDept.Text = mrc.Fields(4)
        txtSex.Text = mrc.Fields(5)
        txtOnDate.Text = Format(Trim(mrc.Fields(6)), "yyyy-mm-dd")
        txtOnTime.Text = Format(Trim(mrc.Fields(7)), "hh:mm:ss")
        txtSID.Text = mrc.Fields(2)
        txtOffDate.Text = Format(Date, "yyyy-mm-dd")
        txtOffTime.Text = Format(Time, "hh:mm:ss")
        
 
       '更新上機人數
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "當前上機人數:" & mrc.RecordCount
        mrc.Close
 
            '顯示當前時間
        Label14.Caption = "當前時間:" & Time

 
'下機結算:時間,金額
        txtdate = DateDiff("n", txtOnDate.Text, txtOffDate.Text)
        txttime = DateDiff("n", txtOnTime.Text, txtOffTime.Text)
        txtCTime.Text = Int(txtdate) + Int(txttime)
        intcousumetime = txtCTime.Text
        
        
    If Val(intcousumetime) < mrc2.Fields(4) Then               '判斷消費時間是否小於準備時間
        txtCTime = "0"
        txtCMoney.Text = "0"
        txtCash.Text = Trim(mrc1.Fields(7))
     
    txtSQL = "Delete from online_info where cardno = '" & Trim(txtCardNo.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "當前上機人數:" & mrc.RecordCount
        mrc.Close
 
        
        MsgBox "下機成功!", vbOKOnly + vbExclamation, "提示"
    Dim ctr1 As Control
    For Each ctr1 In Me.Controls
        If TypeOf ctr1 Is TextBox Then
            ctr1.Text = ""
        End If
    Next
        Exit Sub
  End If

 '判斷臨時使用者的消費金額
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        
    '查詢cardno的使用者類別是 臨時還是固定
    If Trim(mrc1.Fields(14)) = "臨時使用者" Then
        txtCMoney.Text = (Int(intcousumetime / 60) + 1) * Trim(mrc2.Fields(1))
        txtCash.Text = Trim(mrc1.Fields(7)) - Trim(txtCMoney.Text)
        '==================================================
        '更新表
    If Val(txtCash.Text) < 0 Then
           
        MsgBox "下機失敗,請先充值!", vbOKOnly + vbExclamation, "提示"
        frmRecharge.Show
        frmRecharge.txtCardNo.Text = txtCardNo.Text
        Exit Sub
     End If
        MsgBox "下機成功!", vbOKOnly + vbExclamation, "提示"

    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        Label15.Caption = "當前上機人數:" & mrc.RecordCount
           
        mrc1.Close
        mrc.Delete
        mrc.Update
        mrc.Close
        '更新歷史下機記錄
    txtSQL = "select * from Line_info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
    
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(8) = Trim(txtOffDate.Text)
        mrc4.Fields(9) = Trim(txtOffTime.Text)
        mrc4.Fields(10) = Trim(txtCTime.Text)
        mrc4.Fields(11) = Trim(txtCMoney.Text)
        mrc4.Fields(12) = Trim(txtCash.Text)
        mrc4.Fields(13) = "下機"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close
    
               '更新學生表學生資訊(餘額)
       
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
       
        mrc1.Fields(7) = Trim(txtCash.Text)
        mrc1.Fields(9) = UserName
        mrc1.Fields(10) = "使用"
        mrc1.Fields(11) = "結賬"
        mrc1.Fields(12) = Date
        mrc1.Fields(13) = Time
        mrc1.Update
        mrc1.Close
        
    Else
'判斷固定使用者的消費金額
        txtCMoney.Text = (Int(intcousumetime / 60) + 1) * Trim(mrc2.Fields(0))
        txtCash.Text = Trim(mrc1.Fields(7)) - Trim(txtCMoney.Text)
        
    If Val(txtCash.Text) < 0 Then
           
        MsgBox "下機失敗,請先充值!", vbOKOnly + vbExclamation, "提示"
          frmRecharge.Show
          frmRecharge.txtCardNo.Text = txtCardNo.Text
          Exit Sub
        
    End If
        MsgBox "下機成功!", vbOKOnly + vbExclamation, "提示"
        
        txtSQL = "select * from online_info"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        Label15.Caption = "當前上機人數:" & mrc.RecordCount
           
        mrc1.Close
        mrc.Delete
        mrc.Update
        mrc.Close
        
'更新歷史下機記錄
    txtSQL = "select * from Line_info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
    
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(8) = Trim(txtOffDate.Text)
        mrc4.Fields(9) = Trim(txtOffTime.Text)
        mrc4.Fields(10) = Trim(txtCTime.Text)
        mrc4.Fields(11) = Trim(txtCMoney.Text)
        mrc4.Fields(12) = Trim(txtCash.Text)
        mrc4.Fields(13) = "下機"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close
 
'更新學生表學生資訊(餘額)
    
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
    
        mrc1.Fields(7) = Trim(txtCash.Text)
        mrc1.Fields(9) = UserName
        mrc1.Fields(10) = "使用"
        mrc1.Fields(11) = "結賬"
        mrc1.Fields(12) = Date
        mrc1.Fields(13) = Time
        mrc1.Update
        mrc1.Close
 
'更新上機人數
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "當前上機人數:" & mrc.RecordCount
        mrc.Close

5.檢視學生充值記錄,之前在檢視的時候只能查出來每次充值的記錄,但是把第一次註冊的時候充的錢查不出來,那這樣系統就存在缺陷了,使用者想查自己的充值記錄,可是沒有第一條,這時就可以用一個語句把它加到充值表中,在註冊時把記錄同時存在充值表中。

txtSQL = "select * from Recharge_Info where cardno='" & Trim(txtCardno.Text) & "'"    '使卡號等於充值記錄表中的卡號,如果不相等給出提示
        Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        Do While Not mrc1.EOF
        .Rows = .Rows + 1
        .CellAlignment = 4
        .TextMatrix(.Rows - 1, 1) = Trim(mrc1.Fields(1))
        .TextMatrix(.Rows - 1, 0) = Trim(mrc1.Fields(2))
        .TextMatrix(.Rows - 1, 2) = Trim(mrc1.Fields(3))
        .TextMatrix(.Rows - 1, 3) = Trim(mrc1.Fields(4))
        .TextMatrix(.Rows - 1, 4) = Trim(mrc1.Fields(5))
        .TextMatrix(.Rows - 1, 5) = Trim(mrc1.Fields(6))
        
        mrc1.MoveNext
        Loop
        End With

6.讓所有學生都下線

'刪除online表中的資訊,讓所有的學生下線
    OnlineSQL = "select * from online_Info "
    Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)
    '如果沒有人上線,提示
    If mrcOnline.RecordCount = 0 Then
        MsgBox "沒有學生上線!", vbOKOnly + vbInformation, "提示"
        Exit Sub
    End If
    a = myflexgrid.Rows - 1
    If myflexgrid.Rows = 0 Then
        MsgBox "沒有學生上線!", vbOKOnly + vbInformation, "提示"
        Exit Sub
    End If

    myflexgrid.Rows = 1
    For b = a To 1 Step -1
        '從basicdata表中讀取資料
        BasicDataSQL = "select * from basicdata_Info"
        Set mrcBasicData = ExecuteSQL(BasicDataSQL, BMsgtext)

        '從student表中讀取資料
        studentSQL = "select * from student_Info"
        Set mrcStudent = ExecuteSQL(studentSQL, Smsgtext)

        '從line表中讀取資料
        LineSQL = "select * from line_Info"
        Set mrcLine = ExecuteSQL(LineSQL, LMsgtext)

        '從online表中讀取資料
        OnlineSQL = "select * from online_Info"
        Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)

        CostTime = DateDiff("n", Trim(Hour(Time)), Trim(mrcOnline!ontime))
        CostDate = DateDiff("n", Trim(Date), Trim(mrcOnline!OnDate))
        intLineTime = Format(Str(Val(CostTime) + Val(CostDate)))



        '判斷實際線上時間是否小於準備時間,若小於則消費時間為0
        If intLineTime < mrcBasicData!prepareTime Then
            intConsumeTime = 0
         '判斷實際線上時間是否小於最低消費時間,若小於,則消費時間為最低消費時間
         ElseIf intLineTime < mrcBasicData!leasttime Then
            intConsumeTime = mrcBasicData!leasttime
         Else
            intConsumeTime = Round(intLineTime / mrcBasicData!unittime) * mrcBasicData!unittime 'round()函式為四捨五入函式
         End If

         '計算消費金額(消費金額=消費時間/30*使用者型別的半小時費用)
         '固定使用者(為什麼要除以30)
         If Trim(mrcStudent.Fields(14)) = "固定使用者" Then
            curConsume = intConsumeTime / 30 * mrcBasicData!rate
         Else

            curConsume = intConsumeTime / 30 * mrcBasicData!tmpRate
         End If

        '計算餘額(賬戶餘額=原賬戶餘額-消費金額)
        curBalance = mrcStudent!cash - curConsume

         '更新學生資訊表的餘額
         mrcStudent.Fields(7) = curBalance
         mrcStudent.Update
         mrcStudent.Close

         '更新上機記錄表(line表)
         LineSQL = "select * from line_Info"
         Set mrcLine = ExecuteSQL(LineSQL, LMsgtext)
         mrcLine.AddNew
         mrcLine.Fields(1) = Trim(mrcOnline!Cardno)
         mrcLine.Fields(2) = Trim(mrcOnline!studentNo)
         mrcLine.Fields(3) = Trim(mrcOnline!studentName)
         mrcLine.Fields(4) = Trim(mrcOnline!Department)
         mrcLine.Fields(5) = Trim(mrcOnline!Sex)
         mrcLine.Fields(6) = Trim(mrcOnline!OnDate)

         mrcLine.Fields(7) = Trim(mrcOnline!ontime)
         mrcLine.Fields(8) = Date
         mrcLine.Fields(9) = Trim(Time & "")
         mrcLine.Fields(10) = intConsumeTime

         mrcLine.Fields(11) = curConsume
         mrcLine.Fields(12) = curBalance
         mrcLine.Fields(13) = "強制下機"
         mrcLine.Fields(14) = Trim(Environ("computername"))
         mrcLine.Update

         '刪除線上表中的資訊
         OnlineSQL = "select * from online_Info"
         Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)
         mrcOnline.Delete
         mrcOnline.Update


         Next b

7.選中學生下線

If myflexgrid.RowSel = 0 Then
        MsgBox "請選擇資料!", 48, "警告"
        Exit Sub
    End If

    txtSQL = "select * from basicdata_info "
    Set mrccc = ExecuteSQL(txtSQL, MsgText)

    With myflexgrid

    For j = 0 To .Rows - 1
        i = 0
        If j > .Row Then
            Exit Sub
        End If

            If .TextMatrix(j, 5) = "√" Then
                hanghao(i) = j

                    txtSQL = "select * from online_info where cardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                    Set mrc = ExecuteSQL(txtSQL, MsgText)

                    txtSQL = "select * from student_info where cardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                    Set mrcc = ExecuteSQL(txtSQL, MsgText)


                    SJ = 0: XF = 0: ontime = ""


                    SJ = Abs(Val(DateDiff("n", Time, Trim(mrc.Fields(7)))))
                        If SJ < Trim(mrccc.Fields(3)) Then

                        Else
                            If Trim(mrcc.Fields(14)) = "臨時使用者" Then
                                XF = (CInt(Trim(SJ) / 30 + 1)) * (Trim(mrccc.Fields(1)) / 3)
                                mrcc.Fields(7) = Val(Trim(mrcc.Fields(7))) - XF
                                mrcc.Update
                            Else
                                XF = (CInt(Trim(SJ) / 30) + 1) * (Trim(mrccc.Fields(0)) / 2)
                                mrcc.Fields(7) = Val(Trim(mrcc.Fields(7))) - XF
                                mrcc.Update
                            End If
                        End If


                        ontime = mrc.Fields(7)

                        mrc.Delete
                        mrc.Update
                        mrc.Close
'

                        txtSQL = "select * from line_info where ontime = '" & ontime & "'"
                        Set mrcccc = ExecuteSQL(txtSQL, MsgText)

                        txtSQL = txtSQL & txtOnTime & " " & " txtcardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                        Set mrccccc = ExecuteSQL(txtSQL, MsgText)

                        mrcccc.Fields(8) = Date
                        mrcccc.Fields(9) = Time
                        mrcccc.Fields(10) = SJ
                        mrcccc.Fields(11) = XF
                        mrcccc.Fields(12) = mrcc.Fields(7)
                        mrcccc.Fields(13) = "正常下機"

                        mrcccc.Update
                        myflexgrid.TextMatrix(Val(j), 5) = ""
                        myflexgrid.RemoveItem hanghao(i)

                    j = j - 1

            End If

    Next j
    End With

    MsgBox "選中學生已下機!", vbOKOnly + vbInformation, "提示"

8.註冊

https://blog.csdn.net/yyp0304Devin/article/details/81415405

9.充值

https://blog.csdn.net/yyp0304Devin/article/details/81542552

10.學生基本資訊維護

https://blog.csdn.net/yyp0304Devin/article/details/82707661

11.結賬

結賬在機房收費系統中也是三大難點之一,有很多讓人頭疼的東西。

(1)通過使用者名稱讓顯示操作員的真實姓名

txtSQL = "select * from User_Info where UserID='" & Trim(comboUserName.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    comboTrueName.Text = mrc.Fields(3)

    mrc.Close

(2)彙總

其他的還好弄,就是在彙總這一塊有點燒腦,算賬的時候不用心就算不對了,包括一些售卡統計等,在這裡有涉及到了臨時使用者應收金額等就難做了,但是思路理對了也沒有多難。


    '彙總
   
        '售卡數量
    txtSQL = "select * from student_Info where UserID='" & Trim(comboUserName.Text) & _
            "' and Ischeck='" & "未結賬" & " '"
    Set mrcS = ExecuteSQL(txtSQL, MsgText)

    If mrcS.RecordCount = 0 Then
        txtSellCard.Text = "0"
    Else
        txtSellCard.Text = mrcS.RecordCount
    End If

        '退卡數量
    txtSQL = "select * from CancelCard_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未結賬" & " '"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)

    If mrcc.RecordCount = 0 Then
        txtRtnNum.Text = "0"
    Else
        txtRtnNum.Text = mrcc.RecordCount
    End If

        '退卡金額=該操作員操作的所有使用者退卡金額的總和
    txtSQL = "select sum(CancelCash) from CancelCard_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未結賬" & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)

    If IsNull(Trim(mrcc.Fields(0))) Then
        txtRtnSum.Text = "0"
    Else
        txtRtnSum.Text = Val(mrcc.Fields(0))
    End If

        '充值金額(不區分臨時使用者和固定使用者)
    txtSQL = "select sum(addmoney) from Recharge_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未結賬" & "'"
    Set mrcR = ExecuteSQL(txtSQL, MsgText)

    If IsNull(Trim(mrcR.Fields(0))) Then
        txtRechargeSum.Text = "0"
    Else
        txtRechargeSum.Text = Val(mrcR.Fields(0))
    End If
        
        '總售卡數=售卡數量-退卡數量
    txtSaleCardNumber.Text = Val(txtSellCard.Text) - Val(txtRtnNum.Text)

        '應收金額=充值金額-退卡金額
    txtSum.Text = Val(txtRechargeSum.Text) - Val(txtRtnSum.Text)


        Dim mrc1111 As ADODB.Recordset
        '臨時收費金額=臨時使用者註冊金額
    txtSQL = "select sum(cash) from student_Info where UserID = '" & Trim(comboUserName.Text) & "'and Ischeck='未結賬' and type='臨時使用者'"
    Set mrc1111 = ExecuteSQL(txtSQL, MsgText)
        
    If IsNull(Trim(mrc1111.Fields(0))) Then
        txtTemporarySum.Text = "0"
    Else
        txtTemporarySum.Text = Val(mrc1111.Fields(0))
    End If

(3)報表

在日結賬和周結賬這裡要做報表,以下是做報表的步驟

https://blog.csdn.net/yyp0304Devin/article/details/82081515

三、收穫

1.通過做機房,讓自己對程式碼也有了更深的瞭解,之前遇到問題就只是找解決方法,問題也不知道出在哪裡,有些問題雖然解決了也不知道怎麼解決的,由於不斷地積累,現在遇到問題就知道出在哪裡,針對性比以前強了。機房收費系統不僅考驗我們自己寫程式碼,思考,更多的在體驗在使用者方面,在軟體開發工具中學過,系統介面就是軟體本身,那我們在做一個軟體的時候就要換位思考,怎樣讓使用者對這個軟體更喜歡,更想用這個軟體。

2.做完這個軟體讓我在分析問題,認識問題有了不一樣的認識,換位思考就是一個方面,還有做的時候怎樣能降低程式碼的冗餘度,簡潔,讓人一看就懂。

3.對很多函式也有了認識,在之前做的時候不知道什麼地方該用什麼函式,某個函式用在某個地方起什麼作用.........................

 

PS :厚積薄發