1. 程式人生 > >機房收費系統——問題總結(二)

機房收費系統——問題總結(二)

   這篇部落格總結了三個知識點:一是統計當前上機人數;二是學生資訊維護的修改按鈕;三是修改密碼!

一、如何動態統計當前上機人數

       剛開始的時候弄的特別麻煩,又是設定全域性變數,又是寫大量的程式碼,但是還是效果不理想,之後才發現其實只要在主介面加一個Timer控制元件就行了!具體實現步驟:①在主窗體介面加一個Timer控制元件。②雙擊進入程式碼窗體,寫下如下程式碼: 

<span style="font-size:18px;">Private Sub Timer1_Timer1()
     Dim mrc As ADODB.Recordset
     Dim txtSQL As String
     Dim Msgtext As String

     txtSQL ="select getdate()"     '獲取資料庫系統時間
     Set mrc = ExecuteSQL (txtSQL,Msgtext)
     Label1.caption =Formate(mrc.Fields(0),"yyyy-mm-dd hh:mm:ss")
End sub</span>

二、如何實現學生資訊維護窗體中的修改按鈕功能

      主要實現的功能是:在學生資訊維護窗體中選中查詢到的某一行資訊,點選修改後,彈出修改窗體,而裡面存在有剛剛選擇的那一行資訊!其實裡面主要涉及到一個全域性變數,而我之前沒想到!具體操作步驟:①在模組中定義一個全域性變數P,程式碼如下:

<span style="font-size:18px;">Public P as Integer</span>

②在學生資訊維護窗體介面實現:單擊選擇的是整行,把選擇的那一行資訊的卡號賦值給全域性變數P,程式碼如下:

<span style="font-size:18px;">Dim txtSQL, Msgtext As String
Dim mrc As ADODB.Recordset
Dim mrcc As ADODB.Recordset

     MSFlexGrid1.SelectionMode = flexSelectionByRow  '單擊的時候選擇的是整行
     txtSQL = "select * from student_Info  where cardno ='" & Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)) & "'"
     Set mrc = ExecuteSQL(txtSQL, Msgtext)
     p = Trim(mrc.Fields(0))                         '把卡號資訊傳遞給全域性變數P
     mrc.Close
     frmModifyStuInfo.Show                           '顯示出frmModifyInfo的窗體</span>

③把查詢到的資訊填寫到修改窗體裡面,程式碼如下:

<span style="font-size:18px;">Private Sub Form_Load()

    Dim Msgtext As String
    Dim txtSQL As String
    Dim mrc As ADODB.Recordset
                         '全域性變數p的值從學生基本資訊維護窗體賦予的,然後查詢出此卡號資訊
    txtSQL = "select * from student_Info where cardno =  '" & p & "'"
    Set mrc = ExecuteSQL(txtSQL, Msgtext)
                         '將查詢的資料填入窗體的文字框中
        Text1.Text = Trim(mrc.Fields(1))
        Text2.Text = Trim(mrc.Fields(2))
        Text3.Text = Trim(mrc.Fields(4))
        Text4.Text = Trim(mrc.Fields(5))
        Text5.Text = Trim(mrc.Fields(6))
        Text6.Text = Trim(mrc.Fields(0))
        Text7.Text = Trim(mrc.Fields(7))
        Text8.Text = Trim(mrc.Fields(10))
        Text9.Text = Trim(mrc.Fields(8))
        Combo1.Text = Trim(mrc.Fields(3))
        Combo2.Text = Trim(mrc.Fields(14))
        mrc.Close
    
    Combo1.AddItem "男"         '把資料載入到組合框中
    Combo1.AddItem "女"
   
    Combo2.AddItem "固定使用者"
    Combo2.AddItem "臨時使用者"
   
End Sub
</span>

三、修改密碼時的思路

       ①判斷舊密碼是否正確(是否是正在登陸使用者的密碼,遍歷使用者表),若不是,提示資訊!

       ②判斷新密碼和確認密碼是否一致,若不一致則提示!

       ③修改成功後將表中的使用者密碼進行更改!(優化:當新密碼沒輸入的時候,不能輸入確認密碼;當新密碼與原密碼一致時提示!)程式碼如下:

<span style="font-size:18px;">Private Sub cmdOK_Click()
    Dim strSQL As String
    Dim MsgString As String
    Dim mrs As ADODB.Recordset
                                    '調出User表中的登入使用者的一行資訊
    strSQL = "select * from User_info where UserID =  '" & UserName & "'"
    Set mrs = ExecuteSQL(strSQL, MsgString)
    
    If txtOldPwd.Text <> Trim(mrs.Fields(1)) Then
        MsgBox "原密碼不正確,請重新輸入!", vbOKOnly + vbExclamation, "提示"
        txtOldPwd.Text = ""
        txtOldPwd.SetFocus
    Else
        If Trim(txtNewPwd.Text) = "" Then
            MsgBox "請輸入新密碼!", vbExclamation + vbOKOnly, "提示"
            txtNewPwd.Text = ""
            txtNewPwd.SetFocus
        Else
            If Trim(txtNewPwd.Text) = Trim(txtOldPwd.Text) Then
                MsgBox "新密碼與原密碼一致,請重新輸入!", vbOKOnly + vbExclamation, "提示"
                txtNewPwd.Text = ""
                txtReNewPwd.Text = ""
                txtNewPwd.SetFocus
            Else
                If Trim(txtReNewPwd.Text) = "" Then
                    MsgBox "請輸入確認密碼!", vbOKOnly + vbExclamation, "提示"
                    txtReNewPwd.SetFocus
                Else
                    If txtReNewPwd.Text <> txtNewPwd.Text Then
                        MsgBox "兩次輸入密碼不一致,請重新輸入密碼!", vbOKOnly + vbExclamation, "提示"
                        txtReNewPwd.Text = ""
                        txtReNewPwd.SetFocus
                    Else
                        mrs.Fields(1) = txtNewPwd.Text
                        mrs.Update
                        mrs.Close
                
                        MsgBox "修改密碼成功!", vbOKOnly + vbInformation, "修改密碼"
                        txtOldPwd.Text = ""
                        txtNewPwd.Text = ""
                        txtReNewPwd.Text = ""
                        Me.Hide
                    End If
                End If
            End If
        End If
    End If
    
End Sub</span>
<span style="font-size:18px;">Private Sub txtOldPwd_LostFocus()              '當舊密碼文字框失去焦點時判斷輸入是否正確   
Dim Msgtext As String
Dim txtSQL As String
Dim mrc As ADODB.Recordset
    
    txtSQL = "select * from User_Info where UserID = '" & UserName & "'"
    Set mrc = ExecuteSQL(txtSQL, Msgtext)
    
    If txtOldPwd.Text = "" Then
        Exit Sub
    End If
    
    If txtOldPwd.Text <> Trim(mrc.Fields(1)) Then
        MsgBox "原密碼不正確,請重新輸入!", vbOKOnly + vbExclamation, "提示"
        txtOldPwd.Text = ""
        txtOldPwd.SetFocus
    End If
    
End Sub</span>
<span style="font-size:18px;">Private Sub Timer1_Timer()     '利用Timer事件保證,當新密碼為空的時候,確認密碼也為空
    If txtNewPwd.Text = "" Then
        txtReNewPwd.Text = ""
    End If
End Sub
</span>

總結

       以上三點都是自己在做機房的過程中遇到的問題,總結下來,算是回顧一遍。希望這些可以幫到你!