1. 程式人生 > >機房收費系統——修改密碼

機房收費系統——修改密碼

對於修改密碼也是一個比較熟悉的窗體了,在做學生資訊系統時有一個問題沒有解決:每次開啟程式改密碼原密碼驗證都是登入時用的那個密碼,即改密碼後再改密碼驗證的不是新密碼,而是舊密碼。當時用的是用文字框傳值,為了避免此類現象對修改次數進行了限制,每次登入只能改一次密碼。現在又遇到改密碼窗體,這次對資料庫有了更深的認識,所以充分利用了資料庫的特點,完成了完美的改密碼驗證功能。這次把用文字框傳值改為用資料庫傳值,資料庫可以把很多條資料同時儲存、還可以進行資料更新,這是控制元件所不具備的。

體會到了這些,接下來就看程式碼部分:

Private Sub cmdok_Click()
'連線user表
strSQL_user = "select * from user_info where pwd='" & Trim(txtmiold.Text) & "'"
Set mrc_user = ExecuteSQL(strSQL_user, MsgString)
'空值
If Trim(txtmiold.Text) = "" Then
        MsgBox "請輸入原密碼進行驗證", , "提示"
        txtmiold.SetFocus
        Exit Sub
    End If
    If Trim(txtmi.Text) = "" Then
        MsgBox "請輸入修改後的密碼", , "提示"
        txtmi.SetFocus
        Exit Sub
    End If
    If Trim(txtmiok.Text) = "" Then
        MsgBox "請確認密碼", , "提示"
        txtmiok.SetFocus
        Exit Sub
    End If
'原密碼一致
If mrc_user.EOF Then
        MsgBox "原密碼驗證失敗", , "提示"
        txtmiold.Text = ""
        txtmiold.SetFocus
    Exit Sub
    End If
'驗證新密碼與原密碼一致
If Trim(txtmi.Text) = Trim(txtmiold.Text) Then
        MsgBox "新密碼不能和近期用過的密碼相同", , "提示"
        txtmi.Text = ""
        txtmiok.Text = ""
        txtmi.SetFocus
    Exit Sub
    End If
'確認密碼
    If Trim(txtmiok.Text) <> Trim(txtmi.Text) Then
        MsgBox "兩次密碼輸入不一致", , "提示"
        txtmi.Text = ""
        txtmiok.Text = ""
        txtmi.SetFocus
    Else
        mrc_user.Fields(1) = Trim(txtmiok.Text)
        mrc_user.Update
        MsgBox "修改成功", , "提示"
        txtmiold.Text = ""
        txtmi.Text = ""
        txtmiok.Text = ""
    End If
End Sub

程式碼思路很簡單:先進行原密碼驗證→修改密碼與原密碼查重→確認密碼與修改密碼一致→資料庫更新。

你以為到這裡就結束了嗎,不!還有很多細節:

幾個密碼間驗證的邏輯,如果不注意會出現很多問題。比如先驗證密碼點確定,驗證通過提示請輸入修改後的密碼及確認密碼,再驗證確不會通過。原因,程式碼沒有在該 exit sub 的地方停住,而是繼續進行後續驗證,但新密碼什麼都沒輸入,如果不加trim,那麼就把新密碼在無意中改為空格了。還有連續彈出驗證三個文字框位置的提示,稍不注意就會出現此類現象。多改幾次密碼成功後再進行原密碼驗證的操作,發現之前改過的密碼都能驗證通過,為啥,這就出現了開始提到的資料庫(也就是存放密碼的容器)沒有更新的問題,就一個 mrc.update 就能引起如此大的麻煩。等等。所以窗體雖簡單,邏輯性確很強,萬不能因此輕視了程式碼邏輯的問題啊。

vb是一門過程化語言,在敲程式碼的時候可以深刻體會到面向過程,同樣的程式碼放在不同的位置所得結果有天壤之別。可見,面向過程注意的是各部分間的銜接及過程的具體運作狀況,目的是由過程決定,目的又不能唯一確定過程。更高階的語言應該是面向物件的了吧。面向物件本人認為你只要告訴你想要什麼結果就行,至於怎樣得到這個結果,要去做什麼就不屬於你的範疇了,這些都由機器來完成。

大膽的聯想一下,並不專業,不要笑啊,歡迎指出不足。