數(shù)據(jù)庫課程設(shè)計(jì)人事管理系統(tǒng)_第1頁
數(shù)據(jù)庫課程設(shè)計(jì)人事管理系統(tǒng)_第2頁
數(shù)據(jù)庫課程設(shè)計(jì)人事管理系統(tǒng)_第3頁
數(shù)據(jù)庫課程設(shè)計(jì)人事管理系統(tǒng)_第4頁
數(shù)據(jù)庫課程設(shè)計(jì)人事管理系統(tǒng)_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、人事管理系統(tǒng)第一章人事管理系統(tǒng)概述1.1人事管理系統(tǒng)簡介1.2企業(yè)信息化發(fā)展1.3 關(guān)于人事管理系統(tǒng)的幾個(gè)誤區(qū)第二章人事管理系統(tǒng)分析2.1系統(tǒng)初步調(diào)查 2.2系統(tǒng)可行性分析2.3系統(tǒng)詳細(xì)調(diào)查2.4系統(tǒng)的安全性第三章人事管理系統(tǒng)設(shè)計(jì)3.1方案設(shè)計(jì)3.2 開發(fā)工具選擇3.3數(shù)據(jù)庫設(shè)計(jì) 3.3.1人事管理系統(tǒng)的詳細(xì)調(diào)查3.3.2系統(tǒng)邏輯模型的提出3.3.3數(shù)據(jù)字典3.4數(shù)據(jù)模塊設(shè)計(jì)圖第四章人事管理系統(tǒng)的實(shí)現(xiàn)4.1開發(fā)環(huán)境的選擇4.2人事管理系統(tǒng)模塊設(shè)計(jì)舉例4.3人事管理系統(tǒng)測試4.4 系統(tǒng)運(yùn)行與維護(hù)4.5系統(tǒng)的轉(zhuǎn)換方案第五章開發(fā)總結(jié) 參考文獻(xiàn) 1設(shè)計(jì)目標(biāo)使用人事管理系統(tǒng),便于公司領(lǐng)導(dǎo)掌握人員的動(dòng)向,

2、及時(shí)調(diào)整人才的分配。本系統(tǒng)主要維護(hù)新員工資料;詳細(xì)記錄人事變動(dòng),包括崗位和部門的調(diào)整;員工信息的查詢和修改,包括員工個(gè)人信息和密碼等;作為公司人事管理信息系統(tǒng)的基礎(chǔ)部分,它為其他子系統(tǒng)如考勤管理系統(tǒng),工資管理系統(tǒng)等,提供員工的基本信息。 根據(jù)系統(tǒng)功能的要求,人事管理系統(tǒng)可以分為新員工檔案的輸入,人事變更,員工檔案的修改和查詢等模塊。2 功能設(shè)計(jì)企業(yè)人事管理系統(tǒng)主要用于員工個(gè)人資料的錄入,職務(wù)變動(dòng)的記錄和管理。使用人事管理系統(tǒng),便于公司領(lǐng)導(dǎo)掌握人員的動(dòng)向,及時(shí)調(diào)整人才的分配。本系統(tǒng)是公司人事管理信息系統(tǒng)的基礎(chǔ)部分,它為其他子系統(tǒng),如考勤管理系統(tǒng),工資管理系統(tǒng)和員工培訓(xùn)系統(tǒng),提供員工的基本信息。同

3、時(shí)為其他系統(tǒng)提供了員工登錄的密碼認(rèn)證和權(quán)限分配功能。人事管理系統(tǒng)在設(shè)計(jì)時(shí)主要考慮以下幾項(xiàng)功能要求:新員工資料的輸入。人事變動(dòng)的詳細(xì)記錄,包括崗位和部門的調(diào)整。員工信息的查詢和修改,包括員工個(gè)人信息和密碼等。為了更好的理解該系統(tǒng)和讀懂該系統(tǒng)的源碼,讀者應(yīng)對以下的知識點(diǎn)有所了解:MS SQL SERVER 2000數(shù)據(jù)庫操作的基礎(chǔ)知識。ODBC數(shù)據(jù)源基礎(chǔ)知識。基本的SQL語句,如添加,查詢,修改和刪除記錄語句。Visual C+界面設(shè)計(jì)和關(guān)于數(shù)據(jù)庫的基礎(chǔ)知識。3數(shù)據(jù)庫設(shè)計(jì)3.1 數(shù)據(jù)庫設(shè)計(jì)3.1.1 數(shù)據(jù)庫需求分析根據(jù)數(shù)據(jù)流程圖,可以列出以下數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):員工信息:員工號,密碼,權(quán)限,姓名,性

4、別,生日,部門,職務(wù),教育程度,專業(yè),通訊地址,電話,E-mail,當(dāng)前狀態(tài)和其他。人事變動(dòng):記錄號,員工,變動(dòng)和詳細(xì)描述。所需的外部數(shù)據(jù)支持。部門設(shè)置:部門編號,名稱等。3.1.2 數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)3.1.3 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)根據(jù)系統(tǒng)E-R圖,本系統(tǒng)需要有2個(gè)數(shù)據(jù)表分別來存放員工個(gè)人信息和人事變動(dòng)記錄。并且需要一個(gè)外部數(shù)據(jù)表(部門信息)的支持。同時(shí)部分記錄字段要用代碼來表示,銀次需要3個(gè)代碼表來分別記錄教育程度,職務(wù)和人事變更的代碼。最后,設(shè)立一個(gè)計(jì)數(shù)器數(shù)據(jù)表用于實(shí)現(xiàn)員工號的自動(dòng)分配。這7個(gè)數(shù)據(jù)表用Access 2000實(shí)現(xiàn),Access 2000中的設(shè)計(jì)視圖如表3-13-7所示。

5、其中數(shù)據(jù)類型的細(xì)節(jié)應(yīng)根據(jù)具體字段分別設(shè)置,如PERSON表的ID字段大小為6,AUTHORITY字段,SEX字段,EDU_LEVEL字段和STATE字段的大小為1,DEPARTMENT字段,JOB字段的大小為3。表3-1 員工個(gè)人信息表(PERSON)字段名稱數(shù)據(jù)類型說明ID文本員工號PASSWD文本密碼AUTHORITY文本用戶權(quán)限NAME文本姓名SEX文本性別BIRTHDAY日期/時(shí)間生日DEPARTMENT文本所在部門JOB文本職務(wù)EDU_LEVEL文本受教育程度SPECIALTY文本專業(yè)技能ADDRESS文本家庭住址TEL文本聯(lián)系電話EMAIL文本電子信箱STATE文本當(dāng)前狀態(tài)(T-員

6、工,F(xiàn)-非員工)REMARK文本備注表3-2 人事變更記錄表 (PERSONNEL)字段名稱數(shù)據(jù)類型說明ID數(shù)字記錄編號PERSON文本員工號CHANGE文本變更代碼RECORD_TIME日期/時(shí)間記錄時(shí)間DESCRIPTION備注詳細(xì)記錄表3-3 L受教育程度代碼表(EDU_LEVE)字段名稱數(shù)據(jù)類型說明CODE文本代碼DESCRIPTION文本描述表3-4 職務(wù)代碼表(JOB)字段名稱數(shù)據(jù)類型說明CODE文本代碼DESCRIPTION文本描述表3-5 人事變動(dòng)代碼表(PERSONNEL_CHANGE)字段名稱數(shù)據(jù)類型說明CODE文本代碼DESCRIPTION文本描述表3-6 計(jì)數(shù)器表(CO

7、UNTER)字段名稱數(shù)據(jù)類型說明ID文本計(jì)數(shù)器編號COUNTER_VALUE數(shù)字計(jì)數(shù)值DESCRIPTION文本描述表3-7 部門信息表(DEPARTMENT)字段名稱數(shù)據(jù)類型說明ID文本部門編號NAME文本部門名稱MANGER文本部門經(jīng)理INTRO備注簡介3.1.4初始數(shù)據(jù)的輸入本例中需要輸入的初始數(shù)據(jù)包括:部門信息,計(jì)數(shù)器,受教育程度代碼,職務(wù)代人事變動(dòng)代碼。部門信息和職務(wù)代碼可以根據(jù)需要設(shè)置。計(jì)數(shù)器和另外的兩種代碼的設(shè)置如表3-8表3-10所示。表3-8 計(jì)數(shù)器設(shè)置計(jì)數(shù)器編號說明P員工編號C人事變更記錄編號表3-9 受教育程度代碼代碼說明0小學(xué)1初中2高中3職高4大本5大專6碩士7博士8

8、博士后表3-10 人事變更代碼代碼說明0新員工加入1職務(wù)變動(dòng)2辭退3.2 系統(tǒng)設(shè)計(jì)3.2.1 系統(tǒng)功能分析人事管理系統(tǒng)主要有以下幾項(xiàng)功能要求:新員工資料的輸入。自動(dòng)分配員工號,并且設(shè)置初始的用戶密碼。人事變動(dòng)的詳細(xì)記錄,包括崗位和部門的調(diào)整。員工信息的查詢和修改,包括員工個(gè)人信息和密碼等。 系統(tǒng)功能模塊設(shè)計(jì)根據(jù)系統(tǒng)功能的要求,可以將系統(tǒng)分解成幾個(gè)功能模塊來分別設(shè)計(jì),功能模塊如圖3-2所示。人事管理系統(tǒng)人事管理系統(tǒng)新員工檔案輸入人事變更員工檔案查詢修改 圖3-2 人事管理系統(tǒng)功能模塊圖 數(shù)據(jù)流程圖系統(tǒng)的數(shù)據(jù)流程圖如圖3-3所示,所有數(shù)據(jù)由人事科管理人員輸入。個(gè)人信息查詢招聘新員工個(gè)人信息查詢招聘

9、新員工員工辭退崗位調(diào)整分配員工號員工信息數(shù)據(jù)人事變動(dòng)記錄人事科圖3-3 人事管理系統(tǒng)數(shù)據(jù)流程圖下面是系統(tǒng)運(yùn)行時(shí)主要界面信息。啟動(dòng)程序,首先出現(xiàn)主框架窗口。但是由于沒有登錄服務(wù)器,大部分菜單項(xiàng)都是不可用的。只有“連接”,“關(guān)于”和“退出”菜單可選。單擊“連接”菜單和工具條相應(yīng)按鈕會(huì)彈出“登陸”窗口,如圖3-4所示。登陸界面允許修改ODBC數(shù)據(jù)源名稱,無需重新編譯程序。 圖3-4 登錄對話框登錄后,相關(guān)菜單會(huì)被激活。此時(shí)可以單擊菜單或相應(yīng)的工具條按鈕來彈出相應(yīng)的子框架窗口和視圖。在MDI模式下,3個(gè)功能窗口可以同時(shí)被顯示,如圖3-5所示。圖3-5 人事管理系統(tǒng)“增加新員工”子窗口中,員工號和密碼會(huì)

10、自動(dòng)按順序生成,并且不允許修改?!叭耸伦儎?dòng)”和“員工信息查詢修改”子窗口中,須先輸入員工號, 確認(rèn)顯示的信息后才可進(jìn)行相關(guān)的修改。產(chǎn)生的3個(gè)窗體列在“窗口”菜單下。當(dāng)鼠標(biāo)在菜單項(xiàng)上移動(dòng)時(shí),狀態(tài)欄中會(huì)自動(dòng)顯示菜單項(xiàng)的Prompt屬性的內(nèi)容?!按翱凇辈藛沃械?項(xiàng)功能是標(biāo)準(zhǔn)的窗口排列功能。3.3 生成程序框架在本章中,將使用不支持文檔/視圖體系(Document/View architecture)的多文檔界面(Multiple-Document Interface, MDI)的結(jié)構(gòu)來開發(fā)數(shù)據(jù)庫管理程序。MDI結(jié)構(gòu)包括一個(gè)主框架窗口和若干個(gè)子框架窗口,子框架窗口可包含文檔類和相關(guān)的視圖,如果使用文檔

11、類,MDI文檔模板類CMultiDocTemplate將為文檔類和視圖之間提供方便的聯(lián)系,可簡化編程的工作量。在本實(shí)例中不使用文檔類,因此沒有創(chuàng)建文檔模板類的對象,此外實(shí)例中還創(chuàng)建了自己的視圖以實(shí)現(xiàn)相關(guān)功能。MDI界面可以方便地在各個(gè)子窗口之間切換。典型的MDI結(jié)構(gòu)軟件如Microsoft的Office系列軟件。在這里,用AppWizard生成程序框架,且手工加入數(shù)據(jù)庫支持。在MFC AppWizard-Step1中選擇Multiple document項(xiàng),并去掉Document/View architecturesupport?選項(xiàng)。其余均采用默認(rèn)配置。這樣生成的程序中包含CTestApp(

12、設(shè)應(yīng)用程序名為 Test),CMainFrame,CChildFrame,CChildView和CAboutDlg五個(gè)類。由于子框架類CChildFrame中自動(dòng)創(chuàng)建CChildView類,而此類并非所需,因此在程序中將不用CChildFrame和CChildView類,而創(chuàng)建自己的子框架和視圖。用Class Wizard創(chuàng)建一個(gè)新的子框架類CTheChildFrame,基類為CMDIChildWnd,程序中將用此子框架類包含視圖,因程序的功能主要在視圖中實(shí)現(xiàn),故無需修改默認(rèn)創(chuàng)建的CTheChildFrame類。本程序數(shù)據(jù)庫的操作是通過MFC的ODBC類實(shí)現(xiàn)的。為了使用ODBC類,需要在std

13、afx.h中加入#include“afxdb.h”一行。因本程序只需要連接一個(gè)數(shù)據(jù)庫,所以定義了一個(gè)CDatabase型的全局變量db,一次性的打開和關(guān)閉數(shù)據(jù)庫,方便程序的編寫。3.4 主框架窗口設(shè)計(jì)3.4.1 菜單的創(chuàng)建用VisualC+6.0的菜單編輯器(Menu Editor)可以會(huì)讓你方便的創(chuàng)建菜單。在菜單編輯器中打開的設(shè)計(jì)窗口如圖3-6所示。AppWizard創(chuàng)建的程序默認(rèn)有兩個(gè)菜單:IDR_MAINFRAME為主框架窗口所用,IDR_TESTTYPE(設(shè)應(yīng)用程序名為Test)為子框架窗口所用。因本例中沒有用默認(rèn)的子框架,所以將IDR_TESTTYPE菜單刪去,同時(shí)重新編輯IDR_M

14、AINFRAME菜單,菜單屬性設(shè)置如表3-11所示。圖3-6 菜單編輯器窗口表3-11 菜單屬性表菜單欄菜單項(xiàng)屬性取值(說明)系統(tǒng)Caption&S系統(tǒng)連接IDID_SYSTEM_CONNECTCaption&C連接tF2Prompt連接到服務(wù)器斷開連接IDID_SYSTEM_DISCONNECTCaption&D斷開連接tF3Prompt斷開當(dāng)前連接分割線選中SEPARATOR屬性退出IDID_APP_EXITCaption&X退出tCtl+QPrompt關(guān)閉整個(gè)應(yīng)用程序人事管理Caption&M人事管理增加新員工IDID_MANAGE_ADDCaption&增加新員工Prompt輸入新員工

15、的信息人事變動(dòng)IDID_MANAGE_CHANGECaption&C人事變動(dòng)Prompt記錄員工的職位變動(dòng)查詢修改IDID_MANAGER_SEARCHCaption&S查詢修改Prompt查詢修改員工信息窗口Caption&W窗口重疊排列IDID_WINDOW_CASCADECaption&C重疊排列Prompt重疊排列窗口水平平鋪IDID_WINDOW_TILE_HORZCaption&H水平平鋪Prompt水平排列窗口垂直平鋪IDID_WINDOW_TILE_VERTCaption&V垂直平鋪Prompt垂直排列窗口最小化所有窗口IDID_WINDOW_MINIALLCaption&M最

16、小化所有窗口Prompt將所有窗口最小化幫助Caption&H幫助關(guān)于IDID_APP_ABOUTCaption&A關(guān)于tF1Prompt本程序的說明其中,“退出”、“重疊排序”、“水平平鋪”、“垂直平鋪”和“關(guān)于”菜單項(xiàng)用了系統(tǒng)的標(biāo)準(zhǔn)ID,其功能已由MFC實(shí)現(xiàn),無需另外編程。3.4.2 工具條的創(chuàng)建用Visual C+6.0的工具條編輯器(Toolbar Editor)可以很方便的編輯工具條。本程序創(chuàng)建的工具條如圖3-7所示,其中工具條各按鈕的ID分別對應(yīng)相應(yīng)的菜單項(xiàng),按從左到右的次序?qū)?yīng)的菜單項(xiàng)ID如表3-12所示。表3-12 工具條按鈕對應(yīng)的菜單項(xiàng)ID次序ID1ID_SYSTEM_CON

17、NECT2ID_SYSTEM_DISCONNECT3ID_MANAGE_ADD4ID_MANAGER_CHANGE5ID_MANAGER_SEARCH6ID_WINDOW_CASCADE7ID_WINDOW_TILE_HORZ8ID_WINDOW_TILE_VERT9ID+APP_ABOUT3.4.3增加一個(gè)狀態(tài)欄指示器在程序中加入一個(gè)狀態(tài)欄指示器以顯示登錄狀態(tài)。首先用增加一個(gè)資源ID:ID_INDICATOR_LOGIN,然后在MainFrm.cpp中找到indicators變量的定義處,添加此ID至其列表,程序如下:Static UNIT indicators=ID_SEPARATOR,

18、/status line indicatorID_INDICATOR_LOGIN, /登錄狀態(tài)ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;3.4.4 程序相關(guān)代碼在CmainFrame中定義如下變量。CTheChildFrame *m_pAdd,*m_pChange,*m_pSearch; /指向3個(gè)功能子框架窗口BOOL m_bLogin; /登陸狀態(tài)BOOL m_bltemAdd,m_blItemChange,m_bltemSearch;/菜單項(xiàng)及工具單按鈕是否可用為了實(shí)現(xiàn)菜單項(xiàng)于工具條按鈕的開發(fā)與禁用,需要通過Class W

19、izard假日相應(yīng)ID的UPDATE_COMMAND_UI處理程序如下:void CMainFrame:OnUpdateSystemConnect(CCmdUI* pCmdUI) pCmdUI-Enable(!m_bLogin); / 根據(jù)登錄狀態(tài)改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateSystemDisconnect(CCmdUI* pCmdUI) pCmdUI-Enable(m_bLogin); / 根據(jù)登錄狀態(tài)改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManageAdd(CCmdUI* pCmdUI) pCmdUI

20、-Enable(m_bItemAdd); / 根據(jù)m_bItemAdd改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManagerSearch(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemSearch); / 根據(jù)m_bItemSearch改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManagerChange(CCmdUI* pCmdUI) / 根據(jù)m_bItemChange改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)pCmdUI-Enable(m_bItemChange); CMainFrame類的構(gòu)造函數(shù)中需

21、要初始化一些變量。CMainFrame:CMainFrame()/ TODO: add member initialization code herem_bLogin=FALSE; / 缺省未登錄m_bItemAdd=FALSE; / 增加新員工功能缺省為不可用m_bItemChange=FALSE; / 人事變動(dòng)功能缺省為不可用m_bItemSearch=FALSE; / 查詢修改功能缺省為不可用 m_pAdd=m_pChange=m_pSearch=NULL; / 初始化為空各菜單的Command事件處理代碼如下:void CMainFrame:OnSystemConnect() CLog

22、inDlg dlg;if(dlg.DoModal()=IDOK) /判斷是否通過m_bLogin=TRUE; / 已登錄m_bItemAdd=TRUE; / 開放增加新員工功能m_bItemChange=TRUE; / 開放人事變動(dòng)功能m_bItemSearch=TRUE; / 開放查詢修改功能/ 改變狀態(tài)欄m_wndStatusBar.SetPaneText(1, 已登錄到數(shù)據(jù)庫:+dlg.m_strDSN);void CMainFrame:OnSystemDisconnect() db.Close(); / 關(guān)閉數(shù)據(jù)庫/ 關(guān)閉所有子框架窗口if(m_pAdd) m_pAdd-Destroy

23、Window();if(m_pChange) m_pChange-DestroyWindow();if(m_pSearch) m_pSearch-DestroyWindow();m_bLogin=FALSE; / 未登錄m_bItemAdd=FALSE; / 禁止增加新員工功能m_bItemChange=FALSE; / 禁止人事變動(dòng)功能m_bItemSearch=FALSE; / 禁止查詢修改功能/ 改變狀態(tài)欄m_wndStatusBar.SetPaneText(1, 尚未登錄數(shù)據(jù)庫!請按F2登錄);void CMainFrame:OnUpdateSystemConnect(CCmdUI*

24、pCmdUI) pCmdUI-Enable(!m_bLogin); / 根據(jù)登錄狀態(tài)改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateSystemDisconnect(CCmdUI* pCmdUI) pCmdUI-Enable(m_bLogin); / 根據(jù)登錄狀態(tài)改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManageAdd(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemAdd); / 根據(jù)m_bItemAdd改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManagerS

25、earch(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemSearch); / 根據(jù)m_bItemSearch改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnUpdateManagerChange(CCmdUI* pCmdUI) pCmdUI-Enable(m_bItemChange); / 根據(jù)m_bItemChange改變菜單項(xiàng)和工具欄相應(yīng)按鈕狀態(tài)void CMainFrame:OnManageAdd() / 創(chuàng)建新子框架和視m_pAdd = new CTheChildFrame();CCreateContext context;context

26、.m_pNewViewClass=RUNTIME_CLASS(CAddView);if(!m_pAdd-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pAdd-InitialUpdateFrame(NULL,TRUE);m_bItemAdd=FALSE; / 禁止增加新員工功能void CMainFrame:OnManagerChange() / 創(chuàng)建新子框架和視m_pChange = new CTheChildFrame();CCreateContext con

27、text;context.m_pNewViewClass=RUNTIME_CLASS(CChangeView);if(!m_pChange-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pChange-InitialUpdateFrame(NULL,TRUE);m_bItemChange=FALSE; / 禁止人事變動(dòng)功能void CMainFrame:OnManagerSearch() / 創(chuàng)建新子框架和視m_pSearch = new CTheChildFra

28、me();CCreateContext context;context.m_pNewViewClass=RUNTIME_CLASS(CSearchView);if(!m_pSearch-LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context ) return;m_pSearch-InitialUpdateFrame(NULL,TRUE);m_bItemSearch=FALSE; / 禁止查詢修改功能void CMainFrame:OnWindowMiniall() / 最小化所有窗口if(m_p

29、Add) m_pAdd-ShowWindow(SW_MINIMIZE);if(m_pChange) m_pChange-ShowWindow(SW_MINIMIZE);if(m_pSearch) m_pSearch-ShowWindow(SW_MINIMIZE);在程序結(jié)束時(shí)需關(guān)閉數(shù)據(jù)庫,因此需處理CMAinFrame的M_DESTROY消息。void CMainFrame:OnDestroy()CMDIFrameWnd:OnDestroy();if(db.IsOpen() db.Close(); / 如數(shù)據(jù)庫未關(guān)閉則關(guān)閉3.5 增加新員工視類的創(chuàng)建首先加入一個(gè)新的窗體資源,在Insert R

30、esource對話框中選擇Dialog 的 IDD_FORMVIEW項(xiàng)。窗體創(chuàng)建后,在其上添加所需控件,最后的布局如圖3-8所示。創(chuàng)建好資源后,為窗體加入一個(gè)由CFormView類繼承的CAddView封裝此窗體資源,然后用Class Wizard為所需控件加入成員變量。主要控件類型、ID和對應(yīng)的成員變量及說明如表3-13所示。 圖3-8 增加新員工窗體 表1-13 增加新員工窗體控件列表控件類型ID成員變量說明Edit BoxIDC_ADD_EDT_IDm_strID員工號Edit BoxIDC_ADD_EDT_PASSWODm_strPassword密碼Edit BoxIDC_ADD_ED

31、T_NAMEm_strName姓名Radio ButtonIDC_ADD_RADIO_MALE無性別-男Radio ButtonIDC_ADD_RADIO_FEMALE無性別-女Edit BoxIDC_ADD_EDT_BIRTHDAYm_strBirthday生日Combo BoxIDC_ADD_CMB_DEPARTMENTm_cDepartmentm_strDepartment部門Combo BoxIDC_ADD_CMB_JOBm_cJobm_strJob職務(wù)Combo BoxIDC_ADD_CMB_EDULEVELm_cEdulevelm_strEdulevel受教育水平Edit BoxI

32、DC_ADD_EDT_SPECIALTYm_strSpecialty專業(yè)Edit BoxIDC_ADD_EDT_ADDRESSm_strAddress地址Edit BoxIDC_ADD_EDT_TELm_strTel電話Edit BoxIDC_ADD_EDT_EMALm_strEmailE-mailEdit BoxIDC_ADD_EDT_MEMOm_strMemo備注(Style選Multiline)ButtonIDC_ADD_BTN_ADD無“增加”按鈕CAddView類需要用到主框架窗口類和加密類,因此需要在cpp文件開頭加入以下兩行:#include Crypt.h#include Ma

33、inFrm.h另外,為了使用全局?jǐn)?shù)據(jù)庫變量db,需要在cpp文件開頭加入如下語句:Extern CDatabase db;每次增加新成員時(shí)需要先做一些初始化工作,如設(shè)置自動(dòng)生成員工號和密碼等,喲個(gè)ClassView加入初始化函數(shù)Init(),代碼如下:void CAddView:Init()/ 清空成員變量m_strID = _T();m_strPasswd = _T();m_strName = _T();m_strBirthday = _T();m_strDepartment = _T();m_cDepartment.SetCurSel(-1);m_strJob = _T();m_cJob.

34、SetCurSel(-1);m_strEdulevel = _T();m_cEdulevel.SetCurSel(-1);m_strSpecialty = _T();m_strAddress = _T();m_strTel = _T();m_strEmail = _T();m_strMemo = _T();/ 生成員工號CString str;int counter; / 用于計(jì)數(shù)CRecordset rs(&db); / 數(shù)據(jù)集rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=P);rs.Get

35、FieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 獲取計(jì)數(shù)值rs.Close();str.Format(P%05d, counter); / 產(chǎn)生標(biāo)準(zhǔn)格式的編號m_strID=str; / 自動(dòng)產(chǎn)生員工號m_strPasswd=str; / 默認(rèn)密碼為員工號/ 設(shè)置缺省性別為男(CButton*)GetDlgItem(IDC_ADD_RADIO_MALE)-SetCheck(TRUE);UpdateData(FALSE); / 更新界面數(shù)據(jù)重載CformView的OnInitialUpdate函數(shù)如下,其中調(diào)整窗口外觀,并設(shè)

36、置幾個(gè)ComboBox中的值:void CAddView:OnInitialUpdate() CFormView:OnInitialUpdate();/ 使框架窗口大小與視圖匹配GetParentFrame()-RecalcLayout(); ResizeParentToFit(FALSE);GetParentFrame()-SetWindowText(增加新員工); / 設(shè)置標(biāo)題CRecordset rs(&db); / 數(shù)據(jù)集CString str;/ 設(shè)置部門下拉框所取的值為DEPARTMENT表中的值rs.Open(CRecordset:forwardOnly, select NAME

37、 from DEPARTMENT);while(!rs.IsEOF()rs.GetFieldValue(NAME, str);m_cDepartment.AddString(str);rs.MoveNext();rs.Close();/ 設(shè)置職務(wù)下拉框所取的值為JOB表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from JOB);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cJob.AddString(str);rs.MoveNext();rs.Close();/

38、設(shè)置受教育水平下拉框所取的值為EDU_LEVEL表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from EDU_LEVEL);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cEdulevel.AddString(str);rs.MoveNext();rs.Close();Init(); / 調(diào)用初始化函數(shù)“增加”按鈕的COMMAND消息處理如下,其中完成的記錄的添加。void CAddView:OnAddBtnAdd() CString str,strSQL;int c

39、ounter; / 用于計(jì)數(shù)CRecordset rs(&db); / 數(shù)據(jù)集UpdateData(); / 更新數(shù)據(jù)if(m_strName.IsEmpty() / 姓名為空則返回AfxMessageBox(姓名不能為空!);return;/ 累加員工編號計(jì)數(shù)器rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=P);rs.GetFieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 獲取計(jì)數(shù)值rs.Close(); / 關(guān)閉數(shù)據(jù)集c

40、ounter+;/ 計(jì)數(shù)值加1str.Format(%d, counter); / 轉(zhuǎn)換為字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=P; / 設(shè)置SQL語句db.ExecuteSQL(strSQL); / 執(zhí)行/ 增加員工個(gè)人信息記錄CString strPasswd,strSex,strDepID,strJobID,strEduID;/ 判斷生日是否為空if(m_strBirthday.IsEmpty() m_strBirthday=1900-1-1; / 缺省值/ 加密密碼strPasswd=CCrypt:En

41、crypt(m_strPasswd, 123);/ 判斷性別if(CButton*)GetDlgItem(IDC_ADD_RADIO_MALE)-GetCheck() strSex=M;else strSex=F;/ 得到部門IDrs.Open(CRecordset:forwardOnly,select ID from DEPARTMENT where NAME= + m_strDepartment +);rs.GetFieldValue(ID, strDepID);rs.Close();/ 得到職務(wù)代碼rs.Open(CRecordset:forwardOnly,select CODE fr

42、om JOB where DESCRIPTION= + m_strJob +);rs.GetFieldValue(CODE, strJobID);rs.Close();/ 得到受教育水平代碼rs.Open(CRecordset:forwardOnly,select CODE from EDU_LEVEL where DESCRIPTION= + m_strEdulevel +);rs.GetFieldValue(CODE, strEduID);rs.Close();/ 寫SQL語句strSQL=insert into PERSON(ID,PASSWD,NAME,SEX,BIRTHDAY,DEP

43、ARTMENT,JOB,EDU_LEVEL,SPECIALTY,ADDRESS,TEL,EMAIL,REMARK) values(+ m_strID + , / ID+ strPasswd + , / PASSWD+ m_strName + , / NAME+ strSex + , / SEX+ m_strBirthday + , / BIRTHDAY+ strDepID + , / DEPARTMENT+ strJobID + , / JOB+ strEduID + , / EDU_LEVEL+ m_strSpecialty + , / SPECIALTY+ m_strAddress + ,

44、 / ADDRESS+ m_strTel + , / TEL+ m_strEmail + , / EMAIL+ m_strMemo + ); / REMARKdb.ExecuteSQL(strSQL); / 執(zhí)行/ 獲取人事變動(dòng)記錄號并累加rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=C);rs.GetFieldValue(COUNTER_VALUE, str);sscanf(str, %d, &counter); / 獲取計(jì)數(shù)值rs.Close(); / 關(guān)閉數(shù)據(jù)集counter+;/計(jì)數(shù)值

45、加1str.Format(%d, counter); / 轉(zhuǎn)換為字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=C; / 設(shè)置SQL語句db.ExecuteSQL(strSQL); / 執(zhí)行/ 追加人事變動(dòng)記錄str.Format(%d,counter); / 計(jì)數(shù)值轉(zhuǎn)換為字符串CTime time=CTime:GetCurrentTime();CString strNow=time.Format(%Y-%m-%d %H:%M:%S);/ 寫SQL語句strSQL=insert into PERSONNEL(ID,PER

46、SON,CHANGE,RECORD_TIME,DESCRIPTION)values(+ str + , / ID+ m_strID + , / PERSON+ 0 + , / CHANGE - 加入公司代碼+ strNow + , / RECORD_TIME+ 加入公司); / DESCRIPTIONdb.ExecuteSQL(strSQL);/ 重新初始化窗口Init();窗口關(guān)閉時(shí),需要恢復(fù)菜單項(xiàng)和工具條按鈕狀態(tài)并清空相應(yīng)的子框架窗口指針。void CAddView:OnDestroy() CFormView:OnDestroy();(CMainFrame*)AfxGetMainWnd()

47、-m_bItemAdd=TRUE; / 開放增加新員工功能(CMainFrame*)AfxGetMainWnd()-m_pAdd=NULL; / 清空窗口指針3.6 人事變動(dòng)視類的創(chuàng)建首先加入一個(gè)新的窗體資源,同樣在Insert Resource對話框中選擇Dialog的IDD_FORMVIEW項(xiàng)。窗體創(chuàng)建后,在其上添加所需控件,最后的布局如圖3-9所示。創(chuàng)建好資源后,為窗體加入一個(gè)由CFormView類繼承的CChangeView封裝此窗體資源,然后用Class Wizard為所需控件加入成員變量。主要控件類型,ID和對應(yīng)的成員變量及說明如表3-14所示。 圖3-9 人事變動(dòng)輸入窗體 表1-

48、14 人事變動(dòng)窗體控制列表控制類型 ID成員變量說明Edit BoxIDC_CHANGE_EDT_IDm_strID員工號Radio ButtonIDC_CHANGE_RADIO_JOB無職務(wù)變更Radio ButtonIDC_CHANGE_RADIO_FIRE無辭職退休DateTime PickerIDC_CHANGE_DATETIMEPICKERm_Time時(shí)間Edit BoxIDC_CHANGE_EDT_NAMEm_strName姓名Combo BoxIDC_CHANGE_CMB_DEPARTMENTm_cDepartment部門Combo BoxIDC_CHANGE_CMB_JOBm_

49、cJob職務(wù)Edit BoxIDC_CHANGE_EDT_DESCRIPTIONm_strDescription具體描述ButtonIDC_CHANGE_BTN_CHANGE無“修改”按鈕CChangeView中需要加入如下語句包含主框架窗口類:#include MainFrm.h同樣,本類也需要加入以下語句引用全局變量db。extern CDatabase db;初始化函數(shù)代碼如下:void CChangeView:Init()/ 初始化成員變量m_strID = _T();m_Time = CTime:GetCurrentTime();m_strName = _T();m_strDescr

50、iption = _T();m_cDepartment.SetCurSel(-1);m_cJob.SetCurSel(-1);/ 設(shè)置缺省變動(dòng)情況為職務(wù)變更(CButton*)GetDlgItem(IDC_CHANGE_RADIO_JOB)-SetCheck(TRUE);UpdateData(FALSE); / 更新界面數(shù)據(jù)重載CFormView類的OnInitialUpdate()函數(shù)如下:void CChangeView:OnInitialUpdate() CFormView:OnInitialUpdate();/ 使框架窗口大小與視圖匹配GetParentFrame()-RecalcLa

51、yout(); ResizeParentToFit(FALSE);GetParentFrame()-SetWindowText(人事變動(dòng)); / 設(shè)置標(biāo)題CRecordset rs(&db); / 數(shù)據(jù)集CString str;/ 設(shè)置部門下拉框所取的值為DEPARTMENT表中的值rs.Open(CRecordset:forwardOnly, select NAME from DEPARTMENT);while(!rs.IsEOF()rs.GetFieldValue(NAME, str);m_cDepartment.AddString(str);rs.MoveNext();rs.Close(

52、);/ 設(shè)置職務(wù)下拉框所取的值為JOB表中的值rs.Open(CRecordset:forwardOnly, select DESCRIPTION from JOB);while(!rs.IsEOF()rs.GetFieldValue(DESCRIPTION, str);m_cJob.AddString(str);rs.MoveNext();rs.Close();Init(); / 調(diào)用初始化函數(shù)當(dāng)員工號編輯框中輸入改變時(shí),需要檢索員工信息以顯示。用Class Wizard加入處理IDC_CHANGE_EDT-ID的EN_CHANGE消息的函數(shù),代碼如下:void CChangeView:On

53、ChangeChangeEdtId() UpdateData(); / 更新數(shù)據(jù)CRecordset rs(&db);CString strDep,strJob;rs.Open(CRecordset:forwardOnly,select NAME,DEPARTMENT,JOB from PERSON where ID= + m_strID + );if(!rs.IsEOF() / 非空則獲取員工信息rs.GetFieldValue(NAME, m_strName); / 名字rs.GetFieldValue(DEPARTMENT, strDep); / 部門編號rs.GetFieldValue

54、(JOB, strJob); / 職務(wù)代碼rs.Close();if(!strDep.IsEmpty()rs.Open(CRecordset:forwardOnly,select NAME from DEPARTMENT where ID= + strDep + );rs.GetFieldValue(NAME, strDep); / 部門名稱rs.Close();if(!strJob.IsEmpty()rs.Open(CRecordset:forwardOnly,select DESCRIPTION from JOB where CODE= + strJob + );rs.GetFieldVa

55、lue(DESCRIPTION, strJob); / 職務(wù)名稱rs.Close();UpdateData(FALSE); / 更新數(shù)據(jù)m_cDepartment.SelectString(-1,strDep);m_cJob.SelectString(-1,strJob);m_bExist=TRUE; / 該員工存在else / 否則清空員工信息rs.Close();m_strName.Empty();m_cDepartment.SetCurSel(-1);m_cJob.SetCurSel(-1);UpdateData(FALSE); / 更新數(shù)據(jù)m_bExist=FALSE; / 該員工不存

56、在單擊“修改”按鈕時(shí),添加人事變動(dòng)記錄。void CChangeView:OnChangeBtnChange() CRecordset rs(&db);CString str,strSQL;int counter;if(!m_bExist) / 該員工號不存在MessageBox(請確認(rèn)員工號!,輸入錯(cuò)誤);return;UpdateData(); / 更新數(shù)據(jù)/ 獲取人事變動(dòng)記錄號并累加rs.Open(CRecordset:forwardOnly,select COUNTER_VALUE from COUNTER where ID=C);rs.GetFieldValue(COUNTER_VA

57、LUE, str);sscanf(str, %d, &counter); / 獲取計(jì)數(shù)值rs.Close(); / 關(guān)閉數(shù)據(jù)集counter+; / 計(jì)數(shù)器加1str.Format(%d, counter); / 轉(zhuǎn)換為字符串strSQL=update COUNTER set COUNTER_VALUE= + str + where ID=C; / 設(shè)置SQL語句db.ExecuteSQL(strSQL); / 執(zhí)行/ 更新員工信息CString strDepID,strJobID,strState,strChange;/ 得到部門IDm_cDepartment.GetWindowText(s

58、tr);rs.Open(CRecordset:forwardOnly,select ID from DEPARTMENT where NAME= + str +);rs.GetFieldValue(ID, strDepID);rs.Close();/ 得到職務(wù)代碼m_cJob.GetWindowText(str);rs.Open(CRecordset:forwardOnly,select CODE from JOB where DESCRIPTION= + str +);rs.GetFieldValue(CODE, strJobID);rs.Close();if(CButton*)GetDlg

59、Item(IDC_CHANGE_RADIO_FIRE)-GetCheck()strState=F;strChange=2; / 辭退elsestrState=T;strChange=1; / 職務(wù)變動(dòng)strSQL=update PERSON set STATE= + strState + ,+ DEPARTMENT= + strDepID + ,+ JOB= + strJobID + ;db.ExecuteSQL(strSQL); / 執(zhí)行/ 追加人事變動(dòng)記錄str.Format(%d,counter); / 計(jì)數(shù)值轉(zhuǎn)換為字符串CString strNow=m_Time.Format(%Y-%

60、m-%d %H:%M:%S);/ 寫SQL語句strSQL=insert into PERSONNEL(ID,PERSON,CHANGE,RECORD_TIME,DESCRIPTION)values(+ str + , / ID+ m_strID + , / PERSON+ strChange + , / CHANGE+ strNow + , / RECORD_TIME+ m_strDescription + ); / DESCRIPTIONdb.ExecuteSQL(strSQL);/ 重新初始化窗口Init();窗口關(guān)閉時(shí)需要進(jìn)行一定的狀態(tài)修改,處理WM_DESTROY消息。void CC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論