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

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)人事考勤管理系統(tǒng)目錄第一部分:開發(fā)背景……………..3第二部分:系統(tǒng)分析………………3第三部分:系統(tǒng)設(shè)計(jì)……………..9第四部分:公共類設(shè)計(jì)………….15第五部分:主題窗設(shè)計(jì)………….16第六部分:用戶登錄模塊設(shè)計(jì)……………...17第七部分:用戶管理模塊設(shè)計(jì)………………20第八部分:部門管理模塊設(shè)計(jì)………………23第九部分:人員信息管理模塊設(shè)計(jì)……...32第十部分:考勤模塊設(shè)計(jì)………40第十一部分:考勤匯總模塊設(shè)計(jì)……………45第十二部分:后續(xù)補(bǔ)充部分:一些過程的具體實(shí)現(xiàn)方法總結(jié)及圖片解釋:…………………51第十三部分:心得…………………..51人事考勤管理系統(tǒng)開發(fā)背景隨著公司業(yè)務(wù)不斷發(fā)展,員工數(shù)量不斷增加,人事考勤方面的管理已成為公司管理中的重要部分,但傳統(tǒng)的人事考勤制度已不能有效地管理員工的出勤狀況,急需一套人事考勤管理的有效工具——人事考勤管理系統(tǒng)。二、系統(tǒng)分析需求分析通過對(duì)人事考勤管理過程的研究和分析,要求本系統(tǒng)應(yīng)該具有以下功能。用戶登錄。部門信息錄入人員信息管理考勤信息錄入考勤信息匯總。系統(tǒng)功能描述用戶需要輸入用戶名和密碼進(jìn)入人事考勤管理系統(tǒng),對(duì)各部門、員工的基本信息進(jìn)行維護(hù)和管理。在考勤管理模塊中錄入員工當(dāng)天的考勤信息,同時(shí)可對(duì)年、月、員工進(jìn)行查詢。此外,還可以通過考勤匯總查詢模塊對(duì)員工某月的考勤記錄進(jìn)行匯總,計(jì)算出員工月工作天數(shù)、早退、遲到的天數(shù)。三、系統(tǒng)設(shè)計(jì)系統(tǒng)目標(biāo)人事考勤管理系統(tǒng)以實(shí)現(xiàn)員工日常出勤信息管理為設(shè)計(jì)目標(biāo),加以強(qiáng)大的數(shù)據(jù)庫(kù)管理功能,可以極大地提高人事部門的日常工作效率。本系統(tǒng)在設(shè)計(jì)時(shí)滿足以下幾點(diǎn):采用人機(jī)對(duì)話的操作方式,信息查詢靈活、方便、快捷、準(zhǔn)確,數(shù)據(jù)存儲(chǔ)安全可靠。對(duì)考勤信息的操作簡(jiǎn)單,可以方便地進(jìn)行添加、修改、和刪除??梢凿浫雴T工信息、部門信息。對(duì)員工的考勤信息按月匯總計(jì)算。對(duì)用戶輸入的數(shù)據(jù),系統(tǒng)進(jìn)行嚴(yán)格的數(shù)據(jù)檢驗(yàn),盡可能排除人為錯(cuò)誤。系統(tǒng)最大限度地實(shí)現(xiàn)了易維護(hù)性和易操作性。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。系統(tǒng)功能結(jié)構(gòu)人事考勤管理系統(tǒng)的功能結(jié)構(gòu)如圖所示:人事考勤管理系統(tǒng)人事考勤管理系統(tǒng)考勤數(shù)據(jù)錄入考勤信息匯總用戶管理部門信息管理員工信息管理考勤數(shù)據(jù)錄入考勤信息匯總用戶管理部門信息管理員工信息管理業(yè)務(wù)流圖人事考勤管理系統(tǒng)業(yè)務(wù)流程圖如圖:用戶退出登錄用戶退出登錄員工信息管理員工考勤管理修改密碼部門管理用戶管理員工信息管理員工考勤管理修改密碼部門管理用戶管理考勤查詢考勤查詢4)系統(tǒng)預(yù)覽:人事考勤管理系統(tǒng)由多個(gè)功能模塊組成,下面僅列出一些典型的功能模塊,其他模塊以后陸續(xù)列出:部門管理模塊如圖:主要管理各部門之間的結(jié)構(gòu)信息用戶管理模塊如圖:用于用戶的一些操作管理人員信息管理如圖:主要用于維護(hù)員工的基本信息考勤管理模塊如圖:用于記錄人事考勤的信息考勤匯總查詢?nèi)鐖D:對(duì)員工的考勤信息進(jìn)行匯總統(tǒng)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)分析人事考勤系統(tǒng)采用SQLServer2021數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱為tb_person在數(shù)據(jù)庫(kù)中建立四個(gè)表存儲(chǔ)不同的信息,如圖:數(shù)據(jù)庫(kù)概念設(shè)計(jì)根據(jù)介紹的需求分析和系統(tǒng)設(shè)計(jì),規(guī)劃處本系統(tǒng)中使用的數(shù)據(jù)庫(kù)實(shí)體對(duì)象,分別以管理員為實(shí)體,部門實(shí)體和考勤實(shí)體等。下面是實(shí)體E-R圖。管理員實(shí)體管理員包括編號(hào),用戶,密碼。管理員實(shí)體E-R圖用戶編號(hào)密碼用戶編號(hào)密碼管理員管理員b)部門實(shí)體部門實(shí)體包括編號(hào),部門名稱,備注信息和上級(jí)部門編號(hào)。部門實(shí)體E-R圖上級(jí)部門管理備注信息部門名稱部門編號(hào)部門管理上級(jí)部門管理備注信息部門名稱部門編號(hào)部門管理c)員工實(shí)體員工編號(hào)自動(dòng)編號(hào)員工實(shí)體包括自動(dòng)編號(hào),員工編號(hào),員工姓名,照片,性別和生日等信息。員工E-R圖員工編號(hào)自動(dòng)編號(hào)性別生日性別生日員工姓名照片員工員工姓名照片員工d)考勤實(shí)體上班時(shí)間考勤實(shí)體包括人員姓名,考勤信息,上班時(shí)間,下班時(shí)間上班時(shí)間下班時(shí)間下班考勤時(shí)間人員姓名上班考勤時(shí)間考勤日期下班時(shí)間下班考勤時(shí)間人員姓名上班考勤時(shí)間考勤日期C.數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)管理員信息表(tab_user),用于保存管理員的信息,如圖:部門信息表(tab_Dept)用于記錄部門的信息,如圖:C)考勤信息表(tab_check)用于記錄考勤信息員工信息表(tab_Employees)保存公司員工信息,如圖:四、公共類設(shè)計(jì)本系統(tǒng)采用ADO連接數(shù)據(jù)庫(kù)。為了能夠方便的使用ADO建立數(shù)據(jù)庫(kù)連接并進(jìn)行相應(yīng)的數(shù)據(jù)操作,在公共類中對(duì)系統(tǒng)中是使用的ADO操作進(jìn)行了封裝。在系統(tǒng)中建立了ADO的兩個(gè)公共類CADOConnection和CADODataSet,這兩個(gè)類定義在ADO.h頭文件中,實(shí)現(xiàn)在ADO.cpp文件中。A.CADOConnection類CADOConnection類是用來連接數(shù)據(jù)庫(kù)的,實(shí)現(xiàn)了對(duì)_Connection接口的封裝。CADOConnection類在頭文件中的定義如下:#import"C:\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")classCADOConnection{private: staticvoidInitADO();//初始化ADO staticvoidUnInitADO();protected: _ConnectionPtrm_Connection;//指針接口public: BOOLIsOpen();//判斷是否與數(shù)據(jù)庫(kù)連接 _ConnectionPtrGetConnection();//獲取連接接口 CStringGetSQLConStr();//獲取SQL連接字符串 BOOLOpen(CStringConStr);//建立數(shù)據(jù)庫(kù)連接 CADOConnection(); virtual~CADOConnection();};CADOConnection類的實(shí)現(xiàn)代碼如下:CADOConnection*GetConnection()//GetConnection函數(shù)是一個(gè)全局函數(shù),用于返回全局?jǐn)?shù)據(jù)庫(kù)連接對(duì)象的的指針{ return&g_Connection;}CADOConnection::CADOConnection()//CADOConnection方法是構(gòu)造方法,用于初始化OLE和創(chuàng)建_Connection接口指針{ InitADO(); m_Connection.CreateInstance("ADODB.Connection");}CADOConnection::~CADOConnection()//~CADOConnection方法是構(gòu)造方法,用于取消OLE的初始化和釋放_(tái)Connection接口指針{ if(IsOpen()) m_Connection->Close(); m_Connection=NULL; UnInitADO();}voidCADOConnection::InitADO()//InitADO是一個(gè)靜態(tài)方法,用于初始化OLE{ if(ConCount++==0) CoInitialize(NULL);};voidCADOConnection::UnInitADO()//UnInitADO是一個(gè)靜態(tài)方法,用于取消初始化OLE{ if(--ConCount==0) CoUninitialize();};BOOLCADOConnection::Open(CStringConStr)//通過指定的數(shù)據(jù)庫(kù)連接字符串于SQL數(shù)據(jù)庫(kù)建立連接{ if(IsOpen()) m_Connection->Close(); m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown); returnIsOpen();}CStringCADOConnection::GetSQLConStr()//生成數(shù)據(jù)庫(kù)連接需要的字符串{ CStringStr; Str.Format("Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=tb_person;DataSource=LONGFEI-PC\\SQLEXPRESS"); returnStr;}_ConnectionPtrCADOConnection::GetConnection()//該方法用于返回_Connection接口指針{ returnm_Connection;}BOOLCADOConnection::IsOpen()//判斷當(dāng)前數(shù)據(jù)庫(kù)連接對(duì)象與數(shù)據(jù)庫(kù)的連接狀態(tài){ longState; m_Connection->get_State(&State); if(State==adStateOpen) returntrue; returnfalse;}CADODataSet類的定義如下:classCADODataSet{protected: _RecordsetPtrm_DataSet;//數(shù)據(jù)集接口指針 CADOConnection*m_Connection;//數(shù)據(jù)庫(kù)連接對(duì)象public: BOOLOpen(CStringSQLStr,intLockType);//打開記錄集 voidDelete();//記錄刪除 intGetRecordNo();//獲取記錄集行號(hào) voidmove(intnIndex);//移動(dòng)記錄指針 voidSave();//保存對(duì)記錄集的修改 voidSetFieldValue(CStringFieldName,_variant_tValue);//設(shè)置字段的值 voidAddNew();//添加新紀(jì)錄 BOOLNext();//記錄集指針指向下一個(gè)記錄 FieldsPtrGetFields();//獲取記錄集字段集合 intGetRecordCount();//獲取記錄集中記錄數(shù)量 voidSetConnection(CADOConnection*pCon);//設(shè)置記錄集的數(shù)據(jù)庫(kù)連接對(duì)象 BOOLOpen(CStringSQLStr);//打開記錄集 CADODataSet(); virtual~CADODataSet();private: BOOLIsOpen();};CADODataSet類的實(shí)現(xiàn)如下:CADODataSet::CADODataSet()//該方法為記錄集實(shí)現(xiàn)類的構(gòu)造方法,在該方法中實(shí)現(xiàn)記錄集接口對(duì)象的創(chuàng)建{ m_DataSet.CreateInstance("ADODB.Recordset");}CADODataSet::~CADODataSet()//實(shí)現(xiàn)記錄集的關(guān)閉與接口的釋放{ if(IsOpen()) m_DataSet->Close(); m_DataSet=NULL; m_Connection=NULL;}voidCADODataSet::SetConnection(CADOConnection*pCon)//設(shè)置記錄集所連接的數(shù)據(jù)庫(kù)連接類的對(duì)象{ m_Connection=pCon;}intCADODataSet::GetRecordCount()//獲取記錄集中數(shù)據(jù)的數(shù)量{ if(IsOpen()) returnm_DataSet->GetRecordCount(); else return0;}BOOLCADODataSet::Open(CStringSQLStr)//打開數(shù)據(jù)集{ if(IsOpen()) m_DataSet->Close(); //*/ m_DataSet->Open(_bstr_t(SQLStr), _variant_t((IDispatch*)g_Connection.GetConnection(),true), adOpenKeyset,adLockOptimistic,adCmdText); returnIsOpen(); //*/}BOOLCADODataSet::IsOpen()//判斷數(shù)據(jù)集是否處于打開狀態(tài){ longState; m_DataSet->get_State(&State); if(State==adStateOpen) returntrue; returnfalse;}FieldsPtrCADODataSet::GetFields()//用來獲取記錄集中字段的集合{ returnm_DataSet->GetFields();}BOOLCADODataSet::Next()//記錄集指針下移一位{ if(m_DataSet->adoEOF) returnfalse; m_DataSet->MoveNext(); returntrue;}voidCADODataSet::AddNew(){ m_DataSet->AddNew();}voidCADODataSet::SetFieldValue(CStringFieldName,_variant_tValue)//想記錄集中指定的字段賦值{ m_DataSet->PutCollect((_bstr_t)FieldName,Value);}voidCADODataSet::Save()//保存記錄集數(shù)據(jù)所做的修改{ m_DataSet->Update();}voidCADODataSet::move(intnIndex)//將記錄集的當(dāng)前指針移動(dòng)到指定的索引位置{ m_DataSet->MoveFirst(); m_DataSet->Move(nIndex);}intCADODataSet::GetRecordNo()//獲取記錄集中的當(dāng)前行號(hào){ returnm_DataSet->AbsolutePosition;}voidCADODataSet::Delete()//刪除記錄集中的當(dāng)前行{ m_DataSet->Delete(adAffectCurrent);}BOOLCADODataSet::Open(CStringSQLStr,intLockType){ if(IsOpen()) m_DataSet->Close(); //*/ m_DataSet->Open(_bstr_t(SQLStr), _variant_t((IDispatch*)g_Connection.GetConnection(),true), adOpenKeyset,(LockTypeEnum)LockType,adCmdText); returnIsOpen();}五、主題窗設(shè)計(jì)A.主題窗由菜單和圖片組成,如圖:B.主題窗設(shè)計(jì)步驟:a.啟動(dòng)visualc++,選擇File/New命令,打開New對(duì)話框b.在左側(cè)選擇MFCAppWizard(exe)選項(xiàng),在Projectname編輯框中輸入工程名稱,在location編輯框中設(shè)置保存工程的路徑,然后單擊OK按鈕,打開MFCAppWizard對(duì)話框,選擇對(duì)話框編程,打擊fishc.像工程中導(dǎo)入位圖,菜單資源(具體操作在最后有補(bǔ)充)六、用戶登錄模塊設(shè)計(jì)概述,登錄界面是每個(gè)管理系統(tǒng)應(yīng)該具備的,本系統(tǒng)的登錄模塊如圖:B.技術(shù)分析窗體應(yīng)在主題窗創(chuàng)建之前并顯示,在登錄窗體創(chuàng)建的同時(shí)應(yīng)該建立數(shù)據(jù)庫(kù)連接,具體操作如下:BOOLbCon=、GetConnection()->Open(GetConnection()->GetSQLConStr());CLoginDialoglogindlg; if(logindlg.DoModal()!=IDOK) returnfalse; ::CoInitialize(NULL); CPersonDlgdlg;實(shí)現(xiàn)過程創(chuàng)建一個(gè)對(duì)話框向?qū)υ捒蛑刑砑觾蓚€(gè)靜態(tài)文本控件、一個(gè)編輯框控件、和兩個(gè)按鈕控件。分別設(shè)置兩個(gè)靜態(tài)文本控件的Caption屬性為“用戶名”和“密碼”設(shè)置編輯框控件類型為password;分別設(shè)置連個(gè)按鈕為“確定”和“取消”。C.在窗體初始化方法中創(chuàng)建用戶表的數(shù)據(jù),并將用戶添加到列表框控件中。代碼如下:BOOLCLoginDialog::OnInitDialog(){ CDialog::OnInitDialog(); m_DataSet.SetConnection(GetConnection()); m_DataSet.Open("Select*FromTab_User"); intcount=m_DataSet.GetRecordCount(); for(inti=0;i<count;i++) { m_UserList.AddString((_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value); m_DataSet.Next(); } m_UserList.SetCurSel(0); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}確定按鈕事件代碼如下:voidCLoginDialog::OnLogin(){ CStringsql,user,pass; m_UserList.GetWindowText(user); m_PassWord.GetWindowText(pass); sql.Format("Select*Fromtab_userWhereUserName='%s'andPassWord='%s'", user,pass); m_DataSet.Open(sql); if(m_DataSet.GetRecordCount()==1) { ::SetUserName(user); this->OnOK(); } else AfxMessageBox("用戶名或密碼不正確!"); }七、用戶管理模塊概況:能實(shí)現(xiàn)添加,修改,刪除等操作如圖:實(shí)現(xiàn)過程:創(chuàng)建一個(gè)對(duì)話框向?qū)υ捒蛑刑砑酉鄳?yīng)的控件給對(duì)話框添加對(duì)話框類給類添加函數(shù)及成員變量給控件關(guān)聯(lián)變量編寫函數(shù)C.實(shí)現(xiàn)代碼:a.定義UpdateGrid方法用來更新列表視圖中的信息代碼如下:voidCUserManage::UpdateGrid(){m_DataSet.Open("Select*Fromtab_User"); m_grid.DeleteAllItems(); for(inti=0;i<m_DataSet.GetRecordCount();i++) { m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value); intno=m_DataSet.GetRecordNo(); m_grid.SetItemData(i,no); m_DataSet.Next(); }}b.添加按鈕代碼如下:voidCUserManage::OnAppend(){ CUserEdituseredit; if(useredit.DoModal()==IDOK) { m_DataSet.AddNew(); m_DataSet.SetFieldValue("UserName",(_bstr_t)); m_DataSet.Save(); UpdateGrid(); }}刪除按鈕代碼:voidCUserManage::OnDelete(){ if(MessageBox("是否刪除此記錄!","提示", MB_YESNO|MB_ICONWARNING)==IDYES) { intno=m_grid.GetItemData(m_grid.GetSelectionMark()); m_DataSet.move(no-1); m_DataSet.Delete(); m_DataSet.Save(); UpdateGrid(); }}修改按鈕代碼:voidCUserManage::OnEdit(){ CUserEdituseredit; intno=m_grid.GetItemData(m_grid.GetSelectionMark()); m_DataSet.move(no-1); =(char*)(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value; if(useredit.DoModal()==IDOK) { m_DataSet.SetFieldValue("UserName",(_bstr_t)); m_DataSet.Save(); UpdateGrid(); }}八、部門管理模塊設(shè)計(jì)概述:該模塊記錄了部門間的的層次結(jié)構(gòu)和部門信息,一般使用樹控件實(shí)現(xiàn),如圖:實(shí)現(xiàn)過程:a.創(chuàng)建一個(gè)對(duì)話框b.向?qū)υ捒蛑刑砑酉鄳?yīng)的控件c.給對(duì)話框添加對(duì)話框類d.給類添加函數(shù)及成員變量e.給控件關(guān)聯(lián)變量編寫函數(shù)C.相關(guān)代碼如下:BOOLCDeptManage::OnInitDialog()//初始化函數(shù){ CDialog::OnInitDialog(); m_DataSet.SetConnection(::GetConnection()); UpdateDept(); returnTRUE;}將部門信息一次性讀入樹控件中。代碼如下:voidCDeptManage::GetNode(HTREEITEMpNode,intnPid){ HTREEITEMnode; CADODataSetDataSet; DataSet.SetConnection(::GetConnection()); CStringstr; str.Format("Select*Fromtab_Deptwherepid=%d",nPid); DataSet.Open(str); intcount=DataSet.GetRecordCount(); intID; _variant_tvalue; for(inti=0;i<count;i++) { node=m_tree.InsertItem((_bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode); value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value; ID=Val; m_tree.SetItemData(node,ID); GetNode(node,ID); DataSet.Next(); }}定義GetNode方法,用于按成次級(jí)關(guān)系獲取部門表中的所有數(shù)據(jù),并添加樹控件,該方法由UpdateDept方法進(jìn)行調(diào)用,代碼如下;voidCDeptManage::UpdateDept(){m_tree.DeleteAllItems(); GetNode(TVI_ROOT,0);}voidCDeptManage::OnAdd(){ CDeptEditdeptedit; if(deptedit.DoModal()==IDOK) { HTREEITEMpNode=m_tree.GetSelectedItem(); intpID; if(deptedit.isroot) pID=0; else pID=m_tree.GetItemData(pNode); CADODataSetdataset; dataset.SetConnection(::GetConnection()); dataset.Open("Selecttop1*Fromtab_Dept"); dataset.AddNew(); dataset.SetFieldValue("DeptName",(_variant_t)); dataset.SetFieldValue("memo",(_variant_t)deptedit.memo); dataset.SetFieldValue("PID",(long)pID); dataset.Save(); UpdateDept(); } }單擊“修改”按鈕時(shí)將彈出部門編輯窗體,輸入部門信息后單擊“確定”按鈕,實(shí)現(xiàn)部門信息的修改。代碼如下voidCDeptManage::OnEdit(){CDeptEditdeptedit; deptedit.visible=false; HTREEITEMpNode=m_tree.GetSelectedItem(); if(pNode==0) return; intpID=m_tree.GetItemData(pNode); CADODataSetdataset; dataset.SetConnection(::GetConnection()); CStringstr; str.Format("Select*Fromtab_Deptwhereid=%d",pID); dataset.Open(str); =(char*)(_bstr_t)dataset.GetFields()->Item[L"DeptName"]->Value; deptedit.memo=(char*)(_bstr_t)dataset.GetFields()->Item["memo"]->Value; if(deptedit.DoModal()==IDOK) { dataset.SetFieldValue("DeptName",(_variant_t)); dataset.SetFieldValue("memo",(_variant_t)deptedit.memo); dataset.Save(); UpdateDept(); } }當(dāng)單擊“刪除”按鈕時(shí),將刪除當(dāng)前選中的節(jié)點(diǎn),代碼如下:voidCDeptManage::OnDelete(){ HTREEITEMpNode=m_tree.GetSelectedItem(); if(pNode==0) return; if(MessageBox("是否刪除此記錄!","提示", MB_YESNO|MB_ICONWARNING)==IDYES) { intpID=m_tree.GetItemData(pNode); CADODataSetdataset; dataset.SetConnection(::GetConnection()); CStringstr; str.Format("Select*Fromtab_Deptwhereid=%d",pID); dataset.Open(str); dataset.Delete(); dataset.Save(); UpdateDept();}}九、人員信息管理模塊設(shè)計(jì)概述:人員信息管理模塊根據(jù)部門分類顯示人員,同時(shí)可對(duì)人員信息進(jìn)行維護(hù),界面如下:實(shí)現(xiàn)過程:創(chuàng)建對(duì)話框向?qū)υ捒蛑刑砑酉鄳?yīng)的控件給對(duì)話框添加對(duì)話框類給類添加函數(shù)及成員變量給控件關(guān)聯(lián)變量相關(guān)代碼:GetNode方法,獲取部門信息,并添加到樹控件中。該方法由UpdateDept調(diào)用,代碼如下:voidCPersonManage::GetNode(HTREEITEMpNode,intnPid){HTREEITEMnode; CADODataSetDataSet; DataSet.SetConnection(::GetConnection()); CStringstr; str.Format("Select*Fromtab_Deptwherepid=%d",nPid); DataSet.Open(str); intcount=DataSet.GetRecordCount(); intID; _variant_tvalue; for(inti=0;i<count;i++) {node=m_tree.InsertItem((_bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode); value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value; ID=Val; m_tree.SetItemData(node,ID); GetNode(node,ID); DataSet.Next(); }}UpdateDpt調(diào)用GetNode,實(shí)現(xiàn)信息更新,代碼如下:voidCPersonManage::UpdateDept(){m_tree.DeleteAllItems(); HTREEITEMnode; node=m_tree.InsertItem("全部",TVI_ROOT); m_tree.SetItemData(node,-1); GetNode(node,0);}UpdatePerson更新人員信息,并將其顯示在列表控件中。代碼如下:voidCPersonManage::UpdatePerson(){m_list.DeleteAllItems(); CADODataSetDataSet; DataSet.SetConnection(::GetConnection()); CStringstr; if(m_DeptID==-1) str.Format("Select*Fromtab_Employees"); else str.Format("Select*Fromtab_EmployeeswhereDept=%d",m_DeptID); DataSet.Open(str); intcount=DataSet.GetRecordCount(); intn=0; _variant_tvalue; for(inti=0;i<count;i++) { intindex=1; m_list.InsertItem(n,(_bstr_t)DataSet.GetFields()->Item["Emp_Id"]->Value); value=DataSet.GetFields()->Item["AutoID"]->Value; m_list.SetItemData(n,value.lVal); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Emp_NAME"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Sex"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Nationality"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Birth"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Political_Party"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Culture_Level"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Marital_Condition"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Id_Card"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Office_phone"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Mobile"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["HireDate"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Duty"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Memo"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Files_Keep_Org"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Hukou"]->Value); m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Family_Place"]->Value); n++; DataSet.Next(); }}單擊“添加”按鈕,彈出人員編輯窗體,輸入人員信息后,單擊保存按鈕,實(shí)現(xiàn)人員的添加代碼如下:voidCPersonManage::OnAdd(){CPersonEditpersonedit; personedit.m_DeptData=m_DeptID; if(personedit.DoModal()==IDOK) { CADODataSetdataset; dataset.SetConnection(::GetConnection()); CStringstr="selecttop1*fromtab_Employees"; dataset.Open(str); dataset.AddNew(); dataset.SetFieldValue("Emp_Id",(_bstr_t)personedit.m_id); dataset.SetFieldValue("Emp_NAME",(_bstr_t)personedit.m_name); dataset.SetFieldValue("Sex",(_bstr_t)personedit.m_sex); dataset.SetFieldValue("Nationality",(_bstr_t)personedit.m_nationality); dataset.SetFieldValue("Birth",(_bstr_t)personedit.m_birth.Format("%Y-%m-%d")); dataset.SetFieldValue("Political_Party",(_bstr_t)personedit.m_farty); dataset.SetFieldValue("Culture_Level",(_bstr_t)personedit.m_culture); dataset.SetFieldValue("Marital_Condition",(_bstr_t)personedit.m_marital); dataset.SetFieldValue("Id_Card",(_bstr_t)personedit.m_card); dataset.SetFieldValue("Office_phone",(_bstr_t)personedit.m_office); dataset.SetFieldValue("Mobile",(_bstr_t)personedit.m_mobile); dataset.SetFieldValue("HireDate",(_bstr_t)personedit.m_hire.Format("%Y-%m-%d")); dataset.SetFieldValue("Duty",(_bstr_t)personedit.m_duty); dataset.SetFieldValue("Memo",(_bstr_t)personedit.m_memo); dataset.SetFieldValue("Files_Keep_Org",(_bstr_t)personedit.m_files); dataset.SetFieldValue("Hukou",(_bstr_t)personedit.m_hukou); dataset.SetFieldValue("Family_Place",(_bstr_t)personedit.m_family); dataset.SetFieldValue("dept",personedit.m_DeptData); dataset.Save(); UpdatePerson(); } }單擊“修改”按鈕,彈出人員編輯窗體,輸入人員信息后,單擊“保存”實(shí)現(xiàn)人員信息的修改,代碼如下:voidCPersonManage::OnEdit(){ if(m_list.GetSelectionMark()==-1) return; intid=m_list.GetItemData(m_list.GetSelectionMark()); CPersonEditpersonedit; CADODataSetdataset; dataset.SetConnection(::GetConnection()); CStringstr; str.Format("select*fromtab_Employeeswhereautoid=%d",id); dataset.Open(str);personedit.m_id=(char*)(_bstr_t)dataset.GetFields()->Item["Emp_Id"]->Value; personedit.m_name=(char*)(_bstr_t)dataset.GetFields()->Item["Emp_NAME"]->Value; personedit.m_sex=(char*)(_bstr_t)dataset.GetFields()->Item["Sex"]->Value; personedit.m_nationality=(char*)(_bstr_t)dataset.GetFields()->Item["Nationality"]->Value; CStringbirth=(char*)(_bstr_t)dataset.GetFields()->Item["Birth"]->Value; if(!birth.IsEmpty()) { //設(shè)置日期數(shù)據(jù) intyy=atoi(birth.Left(4)); intmm=atoi(birth.Mid(6,2)); intdd=atoi(birth.Mid(9,2)); CTimetbirth(yy,mm,dd,0,0,0); personedit.m_birth=tbirth; } personedit.m_farty=(char*)(_bstr_t)dataset.GetFields()->Item["Political_Party"]->Value; personedit.m_culture=(char*)(_bstr_t)dataset.GetFields()->Item["Culture_Level"]->Value; personedit.m_marital=(char*)(_bstr_t)dataset.GetFields()->Item["Marital_Condition"]->Value; personedit.m_card=(char*)(_bstr_t)dataset.GetFields()->Item["Id_Card"]->Value; personedit.m_office=(char*)(_bstr_t)dataset.GetFields()->Item["Office_phone"]->Value; personedit.m_mobile=(char*)(_bstr_t)dataset.GetFields()->Item["Mobile"]->Value; CStringhire=(char*)(_bstr_t)dataset.GetFields()->Item["HireDate"]->Value; if(!hire.IsEmpty()) { //設(shè)置日期數(shù)據(jù) intyy=atoi(hire.Left(4)); intmm=atoi(hire.Mid(6,2)); intdd=atoi(hire.Mid(9,2)); CTimethire(yy,mm,dd,0,0,0); personedit.m_hire=thire; } personedit.m_duty=(char*)(_bstr_t)dataset.GetFields()->Item["Duty"]->Value; personedit.m_memo=(char*)(_bstr_t)dataset.GetFields()->Item["Memo"]->Value; personedit.m_files=(char*)(_bstr_t)dataset.GetFields()->Item["Files_Keep_Org"]->Value; personedit.m_hukou=(char*)(_bstr_t)dataset.GetFields()->Item["Hukou"]->Value; personedit.m_family=(char*)(_bstr_t)dataset.GetFields()->Item["Family_Place"]->Value; personedit.m_DeptData=dataset.GetFields()->Item["Dept"]->Value; if(personedit.DoModal()==IDOK) { dataset.SetFieldValue("Emp_Id",(_bstr_t)personedit.m_id); dataset.SetFieldValue("Emp_NAME",(_bstr_t)personedit.m_name); dataset.SetFieldValue("Sex",(_bstr_t)personedit.m_sex); dataset.SetFieldValue("Nationality",(_bstr_t)personedit.m_nationality); dataset.SetFieldValue("Birth",(_bstr_t)personedit.m_birth.Format("%Y-%m-%d")); dataset.SetFieldValue("Political_Party",(_bstr_t)personedit.m_farty); dataset.SetFieldValue("Culture_Level",(_bstr_t)personedit.m_culture); dataset.SetFieldValue("Marital_Condition",(_bstr_t)personedit.m_marital); dataset.SetFieldValue("Id_Card",(_bstr_t)personedit.m_card); dataset.SetFieldValue("Office_phone",(_bstr_t)personedit.m_office); dataset.SetFieldValue("Mobile",(_bstr_t)personedit.m_mobile); dataset.SetFieldValue("HireDate",(_bstr_t)personedit.m_hire.Format("%Y-%m-%d")); dataset.SetFieldValue("Duty",(_bstr_t)personedit.m_duty); dataset.SetFieldValue("Memo",(_bstr_t)personedit.m_memo); dataset.SetFieldValue("Files_Keep_Org",(_bstr_t)personedit.m_files); dataset.SetFieldValue("Hukou",(_bstr_t)personedit.m_hukou); dataset.SetFieldValue("Family_Place",(_bstr_t)personedit.m_family); dataset.SetFieldValue("dept",personedit.m_DeptData); dataset.Save(); UpdatePerson(); } }單擊“刪除”按鈕,實(shí)現(xiàn)刪除當(dāng)前選中的人員記錄。代碼如下;voidCPersonManage::OnDelete(){if(MessageBox("是否刪除此記錄!","提示", MB_YESNO|MB_ICONWARNING)==IDYES){ if(m_list.GetSelectionMark()==-1) return; intid=m_list.GetItemData(m_list.GetSelectionMark()); CADODataSetdataset; dataset.SetConnection(::GetConnection()); CStringstr; str.Format("select*fromtab_Employeeswhereautoid=%d",id); dataset.Open(str); dataset.Delete(); dataset.Save(); UpdatePerson(); } }初始化函數(shù),代碼如下;BOOLCPersonManage::OnInitDialog(){ CDialog::OnInitDialog(); m_DeptID=-1; UpdateDept(); inti=0; m_list.InsertColumn(i,"人員編號(hào)"); m_list.SetColumnWidth(i++,80); m_list.InsertColumn(i,"人員名稱"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"性別"); m_list.SetColumnWidth(i++,50); m_list.InsertColumn(i,"民族"); m_list.SetColumnWidth(i++,50); m_list.InsertColumn(i,"出生日期"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"政治面貌"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"文化程度"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"婚姻狀況"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"身份證號(hào)"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"辦公"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,""); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"到崗日期"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"職務(wù)"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"備注"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"家庭住址"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"檔案所在地"); m_list.SetColumnWidth(i++,100); m_list.InsertColumn(i,"戶口所在地"); m_list.SetColumnWidth(i++,100); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); UpdatePerson(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCPersonManage::OnSelchangedTreedept(NMHDR*pNMHDR,LRESULT*pResult){ NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;m_DeptID=m_tree.GetItemData(pNMTreeView->itemNew.hItem); UpdatePerson(); *pResult=0;}十、考勤管理模塊設(shè)計(jì)概述:將所有的人又當(dāng)天的考勤信息錄入到該模塊中,并且可以根據(jù)年、月及員工對(duì)已錄入的考勤記錄進(jìn)行查詢,界面如下:實(shí)現(xiàn)過程:創(chuàng)建對(duì)話框向?qū)υ捒蛑刑砑酉鄳?yīng)的控件給對(duì)話框添加對(duì)話框類給類添加函數(shù)及成員變量給控件關(guān)聯(lián)變量相關(guān)實(shí)現(xiàn)代碼:UpdateList方法用于更新顯示人員的考勤信息,代碼如下:voidCCheckManage::UpdateList(){this->UpdateData(); CStringstr; if(m_check) str.Format("Select*Fromtab_check"); else {CStringStarttime,EndTime; Starttime=m_yy+"-"+m_mm+"-1"; EndTime.Format("DATEADD(month,1,'%s')",Starttime); if(m_emp=="(全部)") str.Format("Select*Fromtab_checkwherecheckdatebetween'%s'and%s",Starttime,EndTime); else str.Format("Select*Fromtab_checkwherename='%s'andcheckdatebetween'%s'and%s",m_emp,Starttime,EndTime); } CADODataSetdataset; dataset.SetConnection(::GetConnection()); dataset.Open(str); m_list.DeleteAllItems(); for(inti=0;i<dataset.GetRecordCount();i++) { intn=0; longdata=dataset.GetFields()->Item["autoid"]->Value; m_list.InsertItem(i,""); m_list.SetItemData(i,data); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["name"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["ondutytime"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offdutytime"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["ontime"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offtime"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["leave"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["onleave"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offleave"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["latetime"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["leaveearly"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["memo"]->Value); m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["checkdate"]->Value); dataset.Next(); }}OnAdd方法,用于想考勤信息表中添加員工的日考勤數(shù)據(jù),代碼如下:voidCCheckManage::OnAdd(){CCheckEditcheckedit; if(checkedit.DoModal()==IDOK) { CStringtime; CStringstr="Selecttop1*Fromtab_check"; CADODataSetdataset; dataset.SetConnection(::GetConnection()); dataset.Open(str); dataset.AddNew(); dataset.SetFieldValue("name",(_bstr_t)checkedit.m_name); dataset.SetFieldValue("checkdate",(_bstr_t)checkedit.m_datecheck.Format("%Y-%m-%d")); dataset.SetFieldValue("ondutytime",(_bstr_t)checkedit.m_timeonduty.Format("%H:%M:%S")); dataset.SetFieldValue("offdutytime",(_bstr_t)checkedit.m_timeoffduty.Format("%H:%M:%S")); dataset.SetFieldValue("ontime",(_bstr_t)checkedit.m_timeon.Format("%H:%M:%S")); dataset.SetFieldValue("offtime",(_bstr_t)checkedit.m_timeoff.Format("%H:%M:%S")); dataset.SetFieldValue("leave",(_bstr_t)checkedit.m_leave); dataset.SetFieldValue("onleave",(_bstr_t)checkedit.m_timeonleave.Format("%H:%M:%S")); dataset.SetFieldValue("offleave",(_bstr_t)checkedit.m_timeoffleave.Format("%H:%M:%S")); dataset.SetFieldValue("memo",(_bstr_t)checkedit.m_memo); CTimelatetime=DecTime(checkedit.m_timeon,checkedit.m_timeonduty); time.Format("%d:%d:%d",latetime.GetHour(),latetime.GetMinute(),latetime.GetSecond()); dataset.SetFieldValue("latetime",(_bstr_t)time); CTimeleaveearly=DecTime(checkedit.m_timeoff,checkedit.m_timeoffduty); time.Format("%d:%d:%d",leaveearly.GetHour(),leaveearly.GetMinute(),leaveearly.GetSecond()); dataset.SetFieldValue("leaveearly",(_bstr_t)time); dataset.Save(); UpdateList(); } }OnEdit方法,用于編輯考勤信息表中的員工的日考勤數(shù)據(jù),代碼如下:voidCCheckManage::OnEdit(){if(m_list.GetSelectionMark()==-1) return; intid=m_list.GetItemData(m_list.GetSelectionMark()); CCheckEditcheckedit; CStringstr; str.Format("Select*Fromtab_checkwhereautoid=%d",id); CADODataSetdataset; dataset.SetConnection(::GetConnection()); dataset.Open(str); checkedit.m_name=(char*)(_bstr_t)dataset.GetFields()->Item["name"]->Value; checkedit.m_timeonduty=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["ondutytime"]->Value); checkedit.m_timeoffduty=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offdutytime"]->Value); checkedit.m_timeon=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["ontime"]->Value); checkedit.m_timeoff=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offtime"]->Value); checkedit.m_leave=(char*)(_bstr_t)dataset.GetFields()->Item["leave"]->Value; checkedit.m_timeonleave=GetTimeForStr((char*)(_bstr_t)dataset.

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論