【文章內(nèi)容簡(jiǎn)介】
統(tǒng)流程圖 登陸表單(管理員或者普通用戶身份登陸) Splash 表單 MDI 主窗口 (系統(tǒng)主窗口) 管理員工檔案信息(員工基本信息管理,職業(yè)管理,部門管理和業(yè)績(jī) 管理 管理系統(tǒng)用戶(添加,刪除) 對(duì)員工信息進(jìn)行查找(按身份證號(hào) 或姓名) 返回查詢信息 管理員登陸 重新登陸 13 圖 系統(tǒng)流程圖 2. 3 系統(tǒng)功能分析 系統(tǒng)開發(fā)的目標(biāo)是實(shí)現(xiàn)公司 員工檔案 管理的系統(tǒng)化、規(guī)范化和自動(dòng)化,這是在 用戶要求的基礎(chǔ)上提出來的,功能要求如下: (一)員工信息管理:能對(duì)員工 信息進(jìn)行添加、修改、刪除。 (二)職員管理:對(duì)職員 進(jìn)行添加、修改、刪除操作。 (三) 部門 設(shè)置: (三)業(yè) 績(jī)管理: (四)查詢員工信息:根據(jù)身份證號(hào)或姓名對(duì)員工 信息進(jìn)行精確 /模糊查詢 (五)用戶管理:定義使用本系統(tǒng)的用戶名稱及密碼 第三章 系統(tǒng)具體實(shí)現(xiàn) 經(jīng)過需求分析、功能模塊設(shè)計(jì)之后要進(jìn)入詳細(xì)設(shè)計(jì)階 段,本階段將按系統(tǒng)的主要模塊進(jìn)行論述,重在闡述具體的某項(xiàng)功能的實(shí)現(xiàn)方法或運(yùn)用到的相關(guān)技術(shù)。 3. 1 準(zhǔn)備工作 1. 添加引用:?jiǎn)螕艄こ滩藛沃械囊眠x項(xiàng),添加 Microsoft ActiveX Data Objects Library 和 Microsoft Excel Object Library 兩個(gè)引用。 2. 添加部件:?jiǎn)螕艄こ滩藛沃械牟考x項(xiàng),添加 Microsoft ADO Data Control (OLEDB)、 Microsoft Common Dialog Control (SP3) 、 Microsoft FlexGrid Control 、 Microsoft Windows Common Controls (SP4)和Microsoft Windows Common Controls2 五項(xiàng)。 3. 2 模塊設(shè)計(jì) 添加兩個(gè)模塊 module1 和 module2,在 module1 中添加如下代碼 Option Explicit Global con As New Global rs As New Global classid As String, stuid As String Global LoginUser As String, LoginPower As String LoginUser 記錄當(dāng)前登陸用戶的用戶名 ,LoginPower 記錄當(dāng)前登陸用戶的權(quán)限 Dim Userid As String, Userpwd As String, Username As String, Userpower As String Dim sqlstr As String 14 Sub Main() If = True Then MsgBox 注意程序已經(jīng)運(yùn)行,不能再次裝載! , vbOKOnly Exit Sub Else Provider=。Data Source=amp。+\ End If End Sub 在 module2 中添加代碼 (MD5 算法 ) 詳細(xì)代碼見程序中 3. 3 用戶界面實(shí)現(xiàn) 3. 3. 1 登陸界面 (frmlogin) 因?yàn)楸鞠到y(tǒng)是按 員工檔案 管理的思想設(shè)計(jì)的,故而登陸部分主要完成密碼校驗(yàn)、確定管理員等功能,對(duì)于密碼本系統(tǒng)采用的是 MD5 算法。這里附上本程序的登陸界面。 在代碼窗口的“通用”部分,定義一個(gè)模塊級(jí)的公共變量 loginno 用來記錄當(dāng)前密碼輸入錯(cuò)誤的次數(shù) Dim loginno As Integer 在 Form 的 Load 事件中,將 txtuser 設(shè)置為焦點(diǎn),初始化 loginno。 Private Sub Form_Load() loginno = 0 End Sub 這里將“確定”和“取消”兩個(gè)按鈕作為一個(gè)按鈕數(shù)組 cmdOkCancel:確定按鈕的 index 屬性為 0,取消按鈕的 index 屬性為 1。 利用 SQL 語句,在數(shù)據(jù)庫中查詢,如果查到相應(yīng)的記錄,則調(diào)用 Case 0 事件,15 用戶的登陸獲得通過,此時(shí)可以退出登陸窗口,并進(jìn)入 MDI 主窗口,同時(shí)將用戶類型和用戶名分別傳遞到 MDI 主窗口和 frmmanage 中;如果沒有相應(yīng)的記錄,則給出提示錯(cuò)誤信息,同時(shí)將用戶輸入錯(cuò)誤密碼次數(shù)增加 1,如果錯(cuò)誤超過 3次,則退出整個(gè)系統(tǒng);若次數(shù) 還沒有超過 3 次,則提示用戶重新輸入。 根據(jù)以上的設(shè)計(jì), cmdOkCancel 的 Click 事件的代碼如下: Private Sub 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。密碼錯(cuò)誤時(shí) MsgBox 您輸入的密碼不正確! , vbQuestion = 請(qǐng)輸入用戶名和密碼: loginno = loginno + 1 39。當(dāng)錯(cuò)誤的密碼次數(shù)達(dá)到 3次時(shí),不能登陸,退出! If loginno = 3 Then MsgBox 對(duì)不起,您不能使用該系統(tǒng)!請(qǐng)與管理員聯(lián)系。 , vbInformation Unload Me Exit Sub End If ?? Else LoginUser = Userid 39。保存當(dāng)前登陸用戶名 LoginPower = (3) 39。將當(dāng)前登陸用戶的權(quán)限保存到 LoginPower 中 16 Unload Me End If Else MsgBox 沒有您輸入的用戶名! , 32 ?? End If : Set rs = Nothing Case 1 ‘ 退出整個(gè)程序 Unload Me End Select End Sub 3. 3. 2 MDI 主窗口 (frmmain) 本系統(tǒng)采取多文檔界面 (MultiDocument Interface)。多文檔界面是一種Windows 用戶界面標(biāo)準(zhǔn)。它有一個(gè)父窗口,在典型情況下,父窗口用來顯示程序菜單以及包含子窗口。 在工程中添加一個(gè) MDI 窗口,取名為“ ”,并為 MDI 窗體進(jìn) 行菜單和代碼的設(shè)計(jì)。 3. 3. 2. 1 菜單設(shè)計(jì) MDI 主窗體是整個(gè)系統(tǒng)的容器,為了方便用戶的使用,應(yīng)設(shè)計(jì)相應(yīng)的菜單和代碼。 3. 3. 2. 2 窗體代碼設(shè)計(jì) 1.在代碼窗口的通用部分,聲明一個(gè) 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)限 如果登陸的為普通用戶類型的用戶,則用戶不能使用“用戶管理”這一功能,而對(duì)于管理員類型的用戶,則沒有此限制。所以在 MDIForm 的 Load 事件中需要判斷用戶類型。 17 Private Sub MDIForm_Load() (2).Text = 當(dāng)前操作員: amp。 LoginUser amp。 amp。 LoginPower amp。 If LoginPower = 普通用戶 Then = False (5).Enabled = False End If End Sub 3. Form 的 QueryUnload 事件 當(dāng)用戶要退出 MDI 窗體時(shí),需要在 QueryUnload 事件中詢問用戶是否真的要退出本系統(tǒng);如果用戶不要退出,則將 Cancel 置為 1,取消整個(gè)退出過程。 Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MsgBox(確定要退出員工 檔案管理系統(tǒng)嗎?是 /否 , vbYesNo+vbQuestion+ vbDefaultButton1) = vbNo Then Cancel = 1 End If End Sub QueryUnload 和 Unload 事件 當(dāng)一個(gè)子窗體或一個(gè) Form 對(duì)象關(guān)閉時(shí),在那個(gè)窗體中的 QueryUnload 事件先于該 窗體的 Unload 事件發(fā)生, Unload 事件在 Terminate 事件之前發(fā)生。 當(dāng)一個(gè)應(yīng)用程序關(guān)閉時(shí),可使用 QueryUnload 或 Unload 事件過程將 Cancel屬性設(shè)置為 True 來阻止關(guān)閉過程。但是, QueryUnload 事件是在任一個(gè)卸載之前在所有窗體中發(fā)生,而 Unload 是在每個(gè)窗體卸載時(shí)發(fā)生。 在這兩個(gè)事件中,均可將 Cancel 設(shè)置為任何非零的值來防止窗體被刪除。但 Unload 不能阻止其他事件,諸如從 Microsoft Windows 操作環(huán)境中退出等;而 QueryUnload 事件則可以阻止從 Windows 中的退出。有介于此,通常來說都是在 QueryUnload 中詢問用戶是否要退出當(dāng)前窗體。 4.“重新登陸”子菜單的代碼 當(dāng)單擊了“重新登陸”或者按下了“ F2”鍵時(shí),將會(huì)給出提示,如果用戶在提示框中按下了“確定”按鈕,則退出整個(gè) MDI 主窗體,并顯示登陸窗體。 Private Sub filemenu15_Click() If MsgBox(若重新登陸,所有窗體都將關(guān)閉!是否重新登陸? , vbYesNo + 18 vbQuestion, 重新登陸 ) = vbYes Then Unload Me End If End Sub 5.“幫助主題”子菜單的代碼 調(diào)用 Windows API 函數(shù),打開 幫助文件。 Private Sub filemenu21_Click() ShellExecute 0, open, amp。 \, , , 1 End Sub 6.“給我發(fā)郵件”子菜單的代碼 如果用戶單擊了“給我發(fā)郵件”子菜單,則會(huì)調(diào)用 API 函數(shù),調(diào)用 Outlook。 Private Sub filemenu22_Click() ShellExecute , open, mailto:, , , 1 End Sub 7.當(dāng)用戶單擊查詢員工 資料菜單項(xiàng)或者按下 F3 鍵時(shí),將會(huì)出現(xiàn)“查找員工”窗體,供用戶查找滿足特定要求的員工 信息。 Private Sub filemenu45_Click() 39。查找員工 1 End Sub 3. 3. 3 用戶管理窗體( frmmanage) 向項(xiàng)目中添加窗體,并命名為 。窗體的控件設(shè)計(jì)如圖 所示 圖 用戶管理界面 如果登陸的用戶類型是管理員,用戶管理一項(xiàng)是可用的,當(dāng)單擊該子菜單時(shí),19 將會(huì)出現(xiàn)用戶管理窗口,管理員可以對(duì)系統(tǒng)用戶進(jìn)行添加和刪除操作。 3. 3. 3. 1 窗體代碼設(shè)計(jì) 1. 定義一個(gè)整型變量 DelNO 用來存儲(chǔ)當(dāng)前系統(tǒng)用戶的數(shù)目,當(dāng) DelNO=1 時(shí)提示用戶不能再刪除用戶。在該窗體的通用部分寫如下代碼: Dim DelNO As Integer 2.窗體加載時(shí),初始化 Listview 用以顯示 系統(tǒng)用戶列表,代碼如下 Private Sub Form_Load() 39。初始化 ListView Dim clmX As ColumnHeader Set clmX = (, , 用戶名 , / 3) Set