人事考勤管理系統c++課程設計文檔_第1頁
人事考勤管理系統c++課程設計文檔_第2頁
人事考勤管理系統c++課程設計文檔_第3頁
人事考勤管理系統c++課程設計文檔_第4頁
人事考勤管理系統c++課程設計文檔_第5頁
已閱讀5頁,還剩82頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

年4月19日人事考勤管理系統c++課程設計文檔資料內容僅供參考,如有不當或者侵權,請聯系本人改正或者刪除。課程設計人事考勤管理系統目錄第一部分:開發背景……………..3第二部分:系統分析………………3第三部分:系統設計……………..9第四部分:公共類設計………….15第五部分:主題窗設計………….16第六部分:用戶登錄模塊設計……………...17第七部分:用戶管理模塊設計………………20第八部分:部門管理模塊設計………………23第九部分:人員信息管理模塊設計……...32第十部分:考勤模塊設計………40第十一部分:考勤匯總模塊設計……………45第十二部分:后續補充部分:一些過程的具體實現方法總結及圖片解釋:…………………51第十三部分:心得…………………..51人事考勤管理系統開發背景某公司業務不斷發展,員工數量不斷增加,人事考勤方面的管理已成為公司管理中的重要部分,但傳統的人事考勤制度已不能有效地管理員工的出勤狀況,急需一套人事考勤管理的有效工具——人事考勤管理系統。二、系統分析需求分析經過對人事考勤管理過程的研究和分析,要求本系統應該具有以下功能。用戶登錄。部門信息錄入人員信息管理考勤信息錄入考勤信息匯總。系統功能描述用戶需要輸入用戶名和密碼進入人事考勤管理系統,對各部門、員工的基本信息進行維護和管理。在考勤管理模塊中錄入員工當天的考勤信息,同時可對年、月、員工進行查詢。另外,還能夠經過考勤匯總查詢模塊對員工某月的考勤記錄進行匯總,計算出員工月工作天數、早退、遲到的天數。三、系統設計系統目標人事考勤管理系統以實現員工日常出勤信息管理為設計目標,加以強大的數據庫管理功能,能夠極大地提高人事部門的日常工作效率。本系統在設計時滿足以下幾點:采用人機對話的操作方式,信息查詢靈活、方便、快捷、準確,數據存儲安全可靠。對考勤信息的操作簡單,能夠方便地進行添加、修改、和刪除。能夠錄入員工信息、部門信息。對員工的考勤信息按月匯總計算。對用戶輸入的數據,系統進行嚴格的數據檢驗,盡可能排除人為錯誤。系統最大限度地實現了易維護性和易操作性。系統運行穩定、安全可靠。系統功能結構人事考勤管理系統的功能結構如圖所示:人事考勤管理系統人事考勤管理系統考勤數據錄入考勤信息匯總用戶管理部門信息管理員工信息管理考勤數據錄入考勤信息匯總用戶管理部門信息管理員工信息管理業務流圖人事考勤管理系統業務流程圖如圖:用戶登錄用戶登錄部門、員工信息部門、員工信息維護考勤考勤信息匯總查詢考勤信息錄入系統預覽:人事考勤管理系統由多個功能模塊組成,下面僅列出一些典型的功能模塊,其它模塊以后陸續列出:部門管理模塊如圖:主要管理各部門之間的結構信息用戶管理模塊如圖:用于用戶的一些操作管理人員信息管理如圖:主要用于維護員工的基本信息考勤管理模塊如圖:用于記錄人事考勤的信息考勤匯總查詢如圖:對員工的考勤信息進行匯總統計數據庫設計數據庫分析人事考勤系統采用SQLServer數據庫,數據庫名稱為tb_person在數據庫中建立四個表存儲不同的信息,如圖:數據庫邏輯設計管理員信息表(tab_user),用于保存管理員的信息,如圖:部門信息表(tab_Dept)用于記錄部門的信息,如圖:C)考勤信息表(tab_check)用于記錄考勤信息員工信息表(tab_Employees)保存公司員工信息,如圖:四、公共類設計本系統采用ADO連接數據庫。為了能夠方便的使用ADO建立數據庫連接并進行相應的數據操作,在公共類中對系統中是使用的ADO操作進行了封裝。在系統中建立了ADO的兩個公共類CADOConnection和CADODataSet,這兩個類定義在ADO.h頭文件中,實現在ADO.cpp文件中。A.CADOConnection類CADOConnection類是用來連接數據庫的,實現了對_Connection接口的封裝。CADOConnection類在頭文件中的定義如下:#import"C:\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")classCADOConnection{private: staticvoidInitADO();//初始化ADO staticvoidUnInitADO();protected: _ConnectionPtrm_Connection;//指針接口public: BOOLIsOpen();//判斷是否與數據庫連接 _ConnectionPtrGetConnection();//獲取連接接口 CStringGetSQLConStr();//獲取SQL連接字符串 BOOLOpen(CStringConStr);//建立數據庫連接 CADOConnection(); virtual~CADOConnection();};CADOConnection類的實現代碼如下:CADOConnection*GetConnection()//GetConnection函數是一個全局函數,用于返回全局數據庫連接對象的的指針{ return&g_Connection;}CADOConnection::CADOConnection()//CADOConnection方法是構造方法,用于初始化OLE和創立_Connection接口指針{ InitADO(); m_Connection.CreateInstance("ADODB.Connection");}CADOConnection::~CADOConnection()//~CADOConnection方法是構造方法,用于取消OLE的初始化和釋放_Connection接口指針{ if(IsOpen()) m_Connection->Close(); m_Connection=NULL; UnInitADO();}voidCADOConnection::InitADO()//InitADO是一個靜態方法,用于初始化OLE{ if(ConCount++==0) CoInitialize(NULL);};voidCADOConnection::UnInitADO()//UnInitADO是一個靜態方法,用于取消初始化OLE{ if(--ConCount==0) CoUninitialize();};BOOLCADOConnection::Open(CStringConStr)//經過指定的數據庫連接字符串于SQL數據庫建立連接{ if(IsOpen()) m_Connection->Close(); m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown); returnIsOpen();}CStringCADOConnection::GetSQLConStr()//生成數據庫連接需要的字符串{ 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()//判斷當前數據庫連接對象與數據庫的連接狀態{ longState; m_Connection->get_State(&State); if(State==adStateOpen) returntrue; returnfalse;}CADODataSet類的定義如下:classCADODataSet{protected: _RecordsetPtrm_DataSet;//數據集接口指針 CADOConnection*m_Connection;//數據庫連接對象public: BOOLOpen(CStringSQLStr,intLockType);//打開記錄集 voidDelete();//記錄刪除 intGetRecordNo();//獲取記錄集行號 voidmove(intnIndex);//移動記錄指針 voidSave();//保存對記錄集的修改 voidSetFieldValue(CStringFieldName,_variant_tValue);//設置字段的值 voidAddNew();//添加新紀錄 BOOLNext();//記錄集指針指向下一個記錄 FieldsPtrGetFields();//獲取記錄集字段集合 intGetRecordCount();//獲取記錄集中記錄數量 voidSetConnection(CADOConnection*pCon);//設置記錄集的數據庫連接對象 BOOLOpen(CStringSQLStr);//打開記錄集 CADODataSet(); virtual~CADODataSet();private: BOOLIsOpen();};CADODataSet類的實現如下:CADODataSet::CADODataSet()//該方法為記錄集實現類的構造方法,在該方法中實現記錄集接口對象的創立{ m_DataSet.CreateInstance("ADODB.Recordset");}CADODataSet::~CADODataSet()//實現記錄集的關閉與接口的釋放{ if(IsOpen()) m_DataSet->Close(); m_DataSet=NULL; m_Connection=NULL;}voidCADODataSet::SetConnection(CADOConnection*pCon)//設置記錄集所連接的數據庫連接類的對象{ m_Connection=pCon;}intCADODataSet::GetRecordCount()//獲取記錄集中數據的數量{ if(IsOpen()) returnm_DataSet->GetRecordCount(); else return0;}BOOLCADODataSet::Open(CStringSQLStr)//打開數據集{ if(IsOpen()) m_DataSet->Close(); //*/ m_DataSet->Open(_bstr_t(SQLStr), _variant_t((IDispatch*)g_Connection.GetConnection(),true), adOpenKeyset,adLockOptimistic,adCmdText); returnIsOpen(); //*/}BOOLCADODataSet::IsOpen()//判斷數據集是否處于打開狀態{ 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()//保存記錄集數據所做的修改{ m_DataSet->Update();}voidCADODataSet::move(intnIndex)//將記錄集的當前指針移動到指定的索引位置{ m_DataSet->MoveFirst(); m_DataSet->Move(nIndex);}intCADODataSet::GetRecordNo()//獲取記錄集中的當前行號{ returnm_DataSet->AbsolutePosition;}voidCADODataSet::Delete()//刪除記錄集中的當前行{ 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();}五、主題窗設計A.主題窗由菜單和圖片組成,如圖:B.主題窗設計步驟:a.啟動visualc++,選擇File/New命令,打開New對話框b.在左側選擇MFCAppWizard(exe)選項,在Projectname編輯框中輸入工程名稱,在location編輯框中設置保存工程的路徑,然后單擊OK按鈕,打開MFCAppWizard對話框,選擇對話框編程,打擊fishc.像工程中導入位圖,菜單資源(具體操作在最后有補充)六、用戶登錄模塊設計概述,登錄界面是每個管理系統應該具備的,本系統的登錄模塊如圖:B.技術分析窗體應在主題窗創立之前并顯示,在登錄窗體創立的同時應該建立數據庫連接,具體操作如下:BOOLbCon=、GetConnection()->Open(GetConnection()->GetSQLConStr());CLoginDialoglogindlg; if(logindlg.DoModal()!=IDOK) returnfalse; ::CoInitialize(NULL); CPersonDlgdlg;實現過程創立一個對話框向對話框中添加兩個靜態文本控件、一個編輯框控件、和兩個按鈕控件。分別設置兩個靜態文本控件的Caption屬性為”用戶名”和”密碼”設置編輯框控件類型為password;分別設置連個按鈕為”確定”和”取消”。C.在窗體初始化方法中創立用戶表的數據,并將用戶添加到列表框控件中。代碼如下: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("用戶名或密碼不正確!"); }七、用戶管理模塊概況:能實現添加,修改,刪除等操作如圖:實現過程:創立一個對話框向對話框中添加相應的控件給對話框添加對話框類給類添加函數及成員變量給控件關聯變量編寫函數C.實現代碼: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(); }}八、部門管理模塊設計概述:該模塊記錄了部門間的的層次結構和部門信息,一般使用樹控件實現,如圖:實現過程:a.創立一個對話框b.向對話框中添加相應的控件c.給對話框添加對話框類d.給類添加函數及成員變量e.給控件關聯變量編寫函數C.相關代碼如下:BOOLCDeptManage::OnInitDialog()//初始化函數{ 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方法,用于按成次級關系獲取部門表中的所有數據,并添加樹控件,該方法由UpdateDept方法進行調用,代碼如下;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(); } }單擊”修改”按鈕時將彈出部門編輯窗體,輸入部門信息后單擊”確定”按鈕,實現部門信息的修改。代碼如下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(); } }當單擊”刪除”按鈕時,將刪除當前選中的節點,代碼如下: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();}}九、人員信息管理模塊設計概述:人員信息管理模塊根據部門分類顯示人員,同時可對人員信息進行維護,界面如下:實現過程:創立對話框向對話框中添加相應的控件給對話框添加對話框類給類添加函數及成員變量給控件關聯變量相關代碼:GetNode方法,獲取部門信息,并添加到樹控件中。該方法由UpdateDept調用,代碼如下: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調用GetNode,實現信息更新,代碼如下: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(); }}單擊”添加”按鈕,彈出人員編輯窗體,輸入人員信息后,單擊保存按鈕,實現人員的添加代碼如下: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(); } }單擊”修改”按鈕,彈出人員編輯窗體,輸入人員信息后,單擊”保存”實現人員信息的修改,代碼如下: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()) { //設置日期數據 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()) { //設置日期數據 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(); } }單擊”刪除”按鈕,實現刪除當前選中的人員記錄。代碼如下;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(); } }初始化函數,代碼如下;BOOLCPersonManage::OnInitDialog(){ CDialog::OnInitDialog(); m_DeptID=-1; UpdateDept(); inti=0; m_list.InsertColumn(i,"人員編號"); 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,"身份證號"); 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.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;}十、考勤管理模塊設計概述:將所有的人又當天的考勤信息錄入到該模塊中,而且能夠根據年、月及員工對已錄入的考勤記錄進行查詢,界面如下:實現過程:創立對話框向對話框中添加相應的控件給對話框添加對話框類給類添加函數及成員變量給控件關聯變量相關實現代碼: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方法,用于想考勤信息表中添加員工的日考勤數據,代碼如下: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方法,用于編輯考勤信息表中的員工的日考勤數據,代碼如下: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.GetFields()->Item["onleave"]->Value); checkedit.m_timeoffleave=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offleave"]->Value); checkedit.m_memo=(char*)(_bstr_t)dataset.GetFields()->Item["memo"]->Value; checkedit.m_date

溫馨提示

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

評論

0/150

提交評論