【文章內(nèi)容簡介】
b cmdOkCancel_Click(Index As Integer) Select Case Index Case 0 …… Userid = Trim() Userpwd = MD5(Trim()) sqlstr = select * from UserInfo where UserID=39。 amp。 Userid amp。 39。 sqlstr, con, 1, 1 If Not Then If rs(UserPWD) Userpwd Then 39。密碼錯誤時 MsgBox 您輸入的密碼不正確!, vbQuestion = 請輸入用戶名和密碼: loginno = loginno + 1 39。當(dāng)錯誤的密碼次數(shù)達到3次時,不能登陸,退出! If loginno = 3 Then MsgBox 對不起,您不能使用該系統(tǒng)!請與管理員聯(lián)系。, vbInformation Unload Me Exit Sub End If …… Else LoginUser = Userid 39。保存當(dāng)前登陸用戶名 LoginPower = (3) 39。將當(dāng)前登陸用戶的權(quán)限保存到LoginPower中 Unload Me End If Else MsgBox 沒有您輸入的用戶名!, 32 …… End If : Set rs = Nothing Case 1 ‘退出整個程序 Unload Me End SelectEnd Sub3.3.2 MDI主窗口(frmmain)本系統(tǒng)采取多文檔界面(MultiDocument Interface)。多文檔界面是一種Windows用戶界面標(biāo)準(zhǔn)。它有一個父窗口,在典型情況下,父窗口用來顯示程序菜單以及包含子窗口。在工程中添加一個MDI窗口,取名為“”,并為MDI窗體進行菜單和代碼的設(shè)計。3.3.2.1 菜單設(shè)計MDI主窗體是整個系統(tǒng)的容器,為了方便用戶的使用,應(yīng)設(shè)計相應(yīng)的菜單和代碼。3.3.2.2 窗體代碼設(shè)計1.在代碼窗口的通用部分,聲明一個API函數(shù)用于打開幫助文件和調(diào)用Outlook發(fā)送郵件。Private Declare Function ShellExecuteamp。 Lib Alias ShellExecuteA (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)2.判斷用戶權(quán)限如果登陸的為普通用戶類型的用戶,則用戶不能使用“用戶管理”這一功能,而對于管理員類型的用戶,則沒有此限制。所以在MDIForm的Load事件中需要判斷用戶類型。Private Sub MDIForm_Load() (2).Text = 當(dāng)前操作員: amp。 LoginUser amp。 amp。 LoginPower amp。 If LoginPower = 普通用戶 Then = False (5).Enabled = False End IfEnd Sub3.Form的QueryUnload事件當(dāng)用戶要退出MDI窗體時,需要在QueryUnload事件中詢問用戶是否真的要退出本系統(tǒng);如果用戶不要退出,則將Cancel置為1,取消整個退出過程。Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MsgBox(確定要退出員工檔案管理系統(tǒng)嗎?是/否,vbYesNo+vbQuestion+ vbDefaultButton1) = vbNo Then Cancel = 1 End IfEnd SubQueryUnload和Unload事件當(dāng)一個子窗體或一個Form對象關(guān)閉時,在那個窗體中的QueryUnload事件先于該窗體的Unload事件發(fā)生,Unload事件在Terminate事件之前發(fā)生。當(dāng)一個應(yīng)用程序關(guān)閉時,可使用QueryUnload或Unload事件過程將Cancel屬性設(shè)置為True來阻止關(guān)閉過程。但是,QueryUnload事件是在任一個卸載之前在所有窗體中發(fā)生,而Unload是在每個窗體卸載時發(fā)生。在這兩個事件中,均可將Cancel設(shè)置為任何非零的值來防止窗體被刪除。但Unload不能阻止其他事件,諸如從Microsoft Windows操作環(huán)境中退出等;而QueryUnload事件則可以阻止從Windows中的退出。有介于此,通常來說都是在QueryUnload中詢問用戶是否要退出當(dāng)前窗體。4.“重新登陸”子菜單的代碼當(dāng)單擊了“重新登陸”或者按下了“F2”鍵時,將會給出提示,如果用戶在提示框中按下了“確定”按鈕,則退出整個MDI主窗體,并顯示登陸窗體。Private Sub filemenu15_Click()If MsgBox(若重新登陸,所有窗體都將關(guān)閉!是否重新登陸?, vbYesNo + vbQuestion, 重新登陸) = vbYes Then Unload Me End IfEnd Sub5.“幫助主題”子菜單的代碼調(diào)用Windows API函數(shù)。Private Sub filemenu21_Click() ShellExecute 0, open, amp。 \, , , 1End Sub6.“給我發(fā)郵件”子菜單的代碼如果用戶單擊了“給我發(fā)郵件”子菜單,則會調(diào)用API函數(shù),調(diào)用Outlook。Private Sub filemenu22_Click() ShellExecute , open, mailto:datou158@, , , 1End Sub7.當(dāng)用戶單擊查詢員工資料菜單項或者按下F3鍵時,將會出現(xiàn)“查找員工”窗體,供用戶查找滿足特定要求的員工信息。Private Sub filemenu45_Click() 39。查找員工 1End Sub3.3.3 用戶管理窗體(frmmanage)向項目中添加窗體。 用戶管理界面如果登陸的用戶類型是管理員,用戶管理一項是可用的,當(dāng)單擊該子菜單時,將會出現(xiàn)用戶管理窗口,管理員可以對系統(tǒng)用戶進行添加和刪除操作。3.3.3.1 窗體代碼設(shè)計1.定義一個整型變量DelNO用來存儲當(dāng)前系統(tǒng)用戶的數(shù)目,當(dāng)DelNO=1時提示用戶不能再刪除用戶。在該窗體的通用部分寫如下代碼: Dim DelNO As Integer2.窗體加載時,初始化Listview用以顯示系統(tǒng)用戶列表,代碼如下Private Sub Form_Load()39。初始化ListViewDim clmX As ColumnHeaderSet clmX = (, , 用戶名, / 3)Set clmX = (, , 密碼, / 6, 2)Set clmX = (, , 姓名, / 4, 2)Set clmX = (, , 用戶權(quán)限, / 4, 2) 普通用戶 超級用戶 = 0LoadOperatorEnd Sub其中調(diào)用了LoadOperator函數(shù),該函數(shù)用來顯示和刷新Listview中的數(shù)據(jù)Private Sub LoadOperator() On Error Resume NextDim Listit As ListItem = lvwAuto = 3Dim ef As New sqlstr = select * from UserInfo sqlstr, con, 1, 1DelNO = Do While Not Set Listit = (, , (UserID)) (1) = *** 隱藏用戶的密碼,用***來替代。 (2) = ef(UserName) (3) = ef(UserPower) LoopSet ef = NothingEnd Sub3.添加用戶在Textbox中輸入了相應(yīng)的數(shù)據(jù)以后,按添加按鈕則調(diào)用該按鈕的Click事件,代碼如下當(dāng)單擊“添加”按鈕時,首先檢查輸入的用戶名和密碼是否為空,代碼如下:Private Sub Command4_Click() If Trim() = Then MsgBox 登陸用戶名不允許為空!, vbOKOnly + 48, 提示: Exit SubEnd IfIf InStr(1, Trim(), 39。, vbTextCompare) Then MsgBox 用戶姓名中有特殊字符 + 39。,請刪除。, vbOKOnly + 48, 提示: Exit SubEnd IfIf Trim() = Then MsgBox 密碼不能為空,請輸入密碼!, vbOKOnly + 48, 提示: = = Exit SubEnd IfEnd Sub如果不為空,則檢查用戶名是否有重復(fù),需要打開系統(tǒng)信息表,Private Sub Command4_Click()…… sqlstr = select * from UserInfo where UserID=39。 amp。 amp。 39。 sqlstr, con, 1, 1 End Sub如果當(dāng)前記錄不為空,則逐條記錄檢查是否有重復(fù)Private Sub Command4_Click()……Userid = Trim()Userpwd = MD5(Trim())Username = Trim()Userpower = Trim() DelNO = Do While Not …… Loop ……End Sub如果有重復(fù),則提示已存在這個用戶,然后將焦點設(shè)置給Text1,并將所有的文本框清空。Private Sub Command4_Click()…… Do While Not If = (UserID) Then MsgBox 已經(jīng)存在用戶名為 amp。 Userid amp。 的用戶帳號, vbInformation Exit Sub End If Loop: Set rs = NothingEnd Sub如果沒有重復(fù),再檢查兩次輸入的密碼是否一致,如果不一致,則提示“兩次密碼不一致”。Private Sub Command4_Click()……If Trim() Trim() Then MsgBox 兩次密碼不相同,請重輸入!, vbOKOnly + 48, 提示: = = Exit SubEnd IfEnd Sub如果以上全部正確無誤的設(shè)置好了,則將新用戶的信息添加到數(shù)據(jù)表中,并提示“添加新用戶成功”。Private Sub Command4_Click()sqlstr = insert into UserInfo(UserID,UserPWD,UserName,UserPower) sqlstr = sqlstr amp。 values(39。 amp。 Userid amp。 39。,39。 amp。 Userpwd amp。 39。, sqlstr = sqlstr amp。 39。 amp。 Username amp。 39。,39。 amp。Userpower amp。 39。) sqlstr MsgBox 添加用戶 amp。 amp。 成功, vbOKOnly, 添加系統(tǒng)用戶 = = = = 39。更新列表 LoadOperatorEnd Sub4.刪除系統(tǒng)用戶當(dāng)用戶雙擊ListView中的數(shù)據(jù)時,則會調(diào)用DeleteRecord()函數(shù),如果系統(tǒng)用戶只剩一個,則提示用戶不能再刪除;反之要求輸入您想要刪除的用戶的密碼,密碼正確時才可以將該用戶刪除,密碼錯誤時則不采取任何措施;最后調(diào)用LoadOperator顯示并刷新Listview中的數(shù)據(jù)。根據(jù)以上的設(shè)計,DeleteRecord()的代碼如下:Private Sub De