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

下載本文檔

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

文檔簡(jiǎn)介

1、第1章系統(tǒng)設(shè)計(jì)1 1 系統(tǒng)功能分析考勤管理系統(tǒng)的主要功能如下:1 上班時(shí)間的設(shè)定。 上下班時(shí)間相對(duì)固定 , 可以保存在客戶端的設(shè)置文件中。2 員工出入單位的情況記錄 . 出入情況主要由考勤機(jī)來記錄 , 但是需要設(shè)置人工添加的功能 , 以備特殊情況的處理。3請(qǐng)假、加班和出差情況的記錄。4每個(gè)月底進(jìn)行整月的出勤情況統(tǒng)計(jì)。1 2 系統(tǒng)功能模塊設(shè)計(jì)根據(jù)系統(tǒng)功能的要求,可以將系統(tǒng)分解成幾個(gè)功能模塊來分別設(shè)計(jì),功能模塊圖如圖 1-1 所示??记诠芾硐到y(tǒng)上工考下作勤班情統(tǒng)時(shí)況計(jì)間補(bǔ)加請(qǐng)出記班假差出記記記勤錄錄錄圖 1-1 人事管理功能模塊圖1 3 數(shù)據(jù)流程圖出勤的原始記錄主要來源于考勤機(jī),并且以固定格式保存

2、在數(shù)據(jù)庫(kù)中??记诠芾硐到y(tǒng)的任務(wù)就是處理這些數(shù)據(jù)。員工出勤月度員工員工記錄出勤時(shí)間考勤統(tǒng)計(jì)記錄請(qǐng)假值班、出差記錄各種統(tǒng)計(jì)信息經(jīng)理審批考勤員上下班時(shí)管理間安排第 2 章 數(shù)據(jù)庫(kù)設(shè)計(jì)2 1 數(shù)據(jù)庫(kù)需求分析根據(jù)數(shù)據(jù)流程,可以列出以下管理系統(tǒng)所需的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)。(1) 出勤記錄:記錄號(hào)、員工、出入情況和出入時(shí)間,如圖2-1 。(2) 月度考勤統(tǒng)計(jì):記錄號(hào)、員工、年月、累計(jì)正常工作時(shí)間、累計(jì)請(qǐng)假時(shí)間、累計(jì)加班時(shí)間、累計(jì)出差時(shí)間、遲到次數(shù)、早退次數(shù)和礦工次數(shù),如圖 2-2 。(3) 請(qǐng)假記錄:記錄號(hào)、員工、假期起始時(shí)間 / 結(jié)束時(shí)間和請(qǐng)假緣由,如圖2-3 。(4) 加班記錄:記錄號(hào)、員工、加班時(shí)間長(zhǎng)度和

3、日期,如圖2-4 。(5) 出差記錄:記錄號(hào)、員工、出差起始時(shí)間 / 結(jié)束時(shí)間和具體描述,如圖2-5 。所需的外部數(shù)據(jù)支持:(1) 人員信息:?jiǎn)T工號(hào)、密碼、權(quán)限、 、部門、和當(dāng)前狀態(tài)等。(2) 部門設(shè)置:部門編號(hào)、名稱等。圖 2-1出勤記錄表圖 2-2月度考勤統(tǒng)計(jì)表圖 2-3請(qǐng)假記錄表圖 2-4加班記錄表圖 2-5出差記錄表第 3 章 各個(gè)功能模塊的創(chuàng)建3.1生成程序框架本系統(tǒng)的應(yīng)用程序使用 MFCODBC的方法開發(fā),采用 Dialog based 的應(yīng)用框架 , 如圖 3-1 為。由一個(gè)對(duì)話框和若干個(gè)功能對(duì)話框組成。為了使用 ODBC類,需要在 stdafx.h中加入 #include ”a

4、fxdb.h ”頭文件。本程序需要連接一個(gè)數(shù)據(jù)庫(kù),所以定義了一個(gè)CDatabase 型的全局變量db,用于打開和關(guān)閉數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)的打開在登錄認(rèn)證數(shù)據(jù)庫(kù)中。為了訪問數(shù)據(jù)庫(kù)中的表格,本程序從 CRecordset 中派生了 8 個(gè)類,分別用于封裝所需訪問的表格,如表 3-1 。通過訪問成員變量可以訪問當(dāng)前記錄中字段的值。CRecordsetCAttendanceRS表 3-1 派生類CRecordset派生類對(duì)應(yīng)的表格表格ATTENDANCE出勤記錄表CCounterRSCDepartRSCOUNTER計(jì)數(shù)器表DEPARTMENT部門信息表CErrandRSERRAND出差記錄表CRecords

5、et派生類表格CLeaveRSCOvertimeRSLEAVE請(qǐng)假記錄表OVERTIME加班記錄表CPersonRSCStatRSPERSON員工個(gè)人信息表ATTENDANCE_ATAT月度考勤統(tǒng)計(jì)表3 2 登錄認(rèn)證對(duì)話框登錄窗口如圖3-2 所示,包括3 個(gè)輸入框和2 個(gè)按鈕。主要控件類型、ID和對(duì)應(yīng)的成員變量及說明如表3-4 。圖 3-2登錄窗口表 3-4登錄認(rèn)證對(duì)話框控件列表控件類型ID成員變量說明Combo BoxIDC_CMB_DSNm_strDSNODBC數(shù)據(jù)源Edit BoxIDC_EDT_USERm_strUser用戶名Edit BoxIDC_EDT_PASSWDm_strPas

6、swd密碼ButtonIDOK無“登錄”按鈕ButtonIDCANCEL無“取消”按鈕對(duì) IDOK的點(diǎn)擊加登錄代碼。CLoginDlg 類需要用到加密類, 本程序使用的是CCrypt 類。在 cpp 文件的開頭加入 #include ”Crypt.h ”一行。另外,為了使用全局?jǐn)?shù)據(jù)庫(kù)變量db,需要在 cpp 文件開頭加入以下語(yǔ)句:Extern CDatabase db;用戶認(rèn)證過程在“登錄”按鈕的處理函數(shù)中:代碼見附錄【1】為了運(yùn)行登錄認(rèn)證對(duì)話框, 還需在 App類的 InitInstance()函數(shù)中在顯示主對(duì)話框前加入以下代碼:CLoginDlg LoginDlg;If(LoginDlg.

7、DoModal()!=IDOK)return FALSE;3 3 主對(duì)話框窗口的設(shè)計(jì)用戶登錄后即顯示主對(duì)話框,如圖3-5 所示。包括 5 個(gè)按鈕??丶斜砣绫?-6 。圖 3-5 主對(duì)話框表 3-6主對(duì)話框控件列表控件類型ID成員變量說明Static TextIDC_STATIC_HEAD無“考勤管理系統(tǒng)”靜態(tài)文本ButtonIDC_BTN_CONFIG無“設(shè)置”按鈕ButtonIDC_BTN_RECORD無“出勤記錄”按鈕ButtonIDC_BTN_STATISTICS無“統(tǒng)計(jì)”按鈕ButtonIDC_BTN_RELOGIN無“重新登錄”按鈕ButtonIDC_BTN_EXIT無“退出”按鈕

8、在 CAttendanceDlg 中定義以下成員變量:Public:CBrush m_brush;CStatDlg* m_pStatDlg;CAttDlg* m_pAttDlg;CFont m_font;對(duì)話框初始化時(shí)需要改變標(biāo)題字體大小,因此在 OnInitDialog()中加入以下代碼:/ 改變標(biāo)題字體大小LOGFONT LogFont;GetFont()->GetLogFont(&LogFont);LogFont.lfHeight+=LogFont.lfHeight/2;LogFont.lfWidth+=LogFont.lfWidth/2;m_font.CreateFont

9、Indirect(&LogFont);GetDlgItem(IDC_STATIC_HEAD)->SetFont(&m_font);為了美觀起見, 還插入了背景圖片, 通過 Ctrl+R 引入圖片后, 在 OnPaint()中的條件語(yǔ)句的else ()中添加下列代碼:見附錄【2】對(duì)話框中5 個(gè)按鈕的功能主要是顯示相應(yīng)的功能對(duì)話框。給按鈕的BN_CLICKED事件的處理和退出代碼見附錄【3】。3 4 上班時(shí)間設(shè)置對(duì)話框的創(chuàng)建此對(duì)話框用于設(shè)置上下班時(shí)間,布局如圖3-7. 所示。主要控件類型、ID和對(duì)應(yīng)的成員變量及說明如表3-8 所示。圖 3-7 時(shí)間設(shè)置對(duì)話框表 3-8 時(shí)間設(shè)

10、置對(duì)話框控件列表控件類型ID成員變量說明DataTimeIDC_WORKSTAT_DATETIMEPICKER1m_Time1上午上班時(shí)間PickerDataTimeIDC_WORKSTAT_DATETIMEPICKER2m_Time2中午下班時(shí)間PickerDataTimeIDC_WORKSTAT_DATETIMEPICKER3m_Time3下午上班時(shí)間PickerDataTimeIDC_WORKSTAT_DATETIMEPICKER4m_Time4下午下班時(shí)間PickerButtonIDC_WORKPLAN_MODIFY無“修改”按鈕ButtonIDC_WORKPLAN_RESET無“恢復(fù)

11、默認(rèn)設(shè)置”按鈕一般上下班時(shí)間是相對(duì)固定的,而且需要在統(tǒng)計(jì)是頻繁使用, 所以不需要保存在數(shù)據(jù)庫(kù)中,因此采用標(biāo)準(zhǔn)的INI 設(shè)置文件來保存這些數(shù)據(jù)。首先,在構(gòu)造函數(shù)中初始化4 個(gè)時(shí)間的取值:CWorkplanDlg:CWorkplanDlg(CWnd* pParent /*=NULL*/): CDialog(CWorkplanDlg:IDD, pParent)m_Time1 = 0;m_Time2 = 0;m_Time3 = 0;m_Time4 = 0;“修改”按鈕的 BN_CLICKED事件處理用于保存當(dāng)前的設(shè)置: 代碼見附錄【4】“恢復(fù)默認(rèn)設(shè)置”按鈕的BN_CLICKED事件處理程序用于恢復(fù)初始

12、設(shè)置。這個(gè)函數(shù)同時(shí)被 OnInitDialog()函數(shù)應(yīng)用,以實(shí)現(xiàn)初始化操作,代碼見附錄【5】3 5 考勤修改對(duì)話框的創(chuàng)建考勤修改對(duì)話框主要用來人工輸入出勤情況。在考勤機(jī)出現(xiàn)問題是,它可以及時(shí)彌補(bǔ)數(shù)據(jù)。同時(shí)加班、請(qǐng)假、出差的記錄都是需要通過這個(gè)對(duì)話框來輸入。對(duì)話框布局如圖3-9所示。為了區(qū)分不同的輸入,在對(duì)話框中嵌入了CPropertySheet 和 4 個(gè) CPropertyPage ,這 4 個(gè) CPropertyPage 分別放置出勤、加班、請(qǐng)假和出差記錄的修改界面, 而共用一個(gè)查詢條件設(shè)置。 圖 3-9 下方空白處用于放置 CPropertySheet 和 4 個(gè) CPropertyP

13、age 。對(duì)話框中的主要控件類型、 ID 和對(duì)應(yīng)的成員變量及說明如表 3-10 所示。圖 3-9 考勤修改對(duì)話框表 3-10 考勤修改對(duì)話框控件列表控件類型ID成員變量說明Check BoxIDC_CHK_SEEKBYTIMEm_bSeekbytime時(shí)間圍選項(xiàng)Check BoxIDC_CHK_SEEKBYPERSON m_bSeekbyperson員工選項(xiàng)Date Time PickerIDC_DATETIMEPICKER1m_StartTime起始時(shí)間Date Time PickerIDC_DATETIMEPICKER2m_EndTime結(jié)束時(shí)間Edit BoxIDC_EDT_SEEKPE

14、RSONIDm_strPersonID員工號(hào)Edit BoxIDC_EDT_SEEKPERSONNAMEm_strName為了使用 CPropertySheet 和 CPropertyPage ,需要在類定義中加入以下變量:CPage1 m_Page1;CPage2 m_Page2;CPage3 m_Page3;CPage4 m_Page4;CPropertySheet m_Sheet;然后在 OnInitDialog中添加以下代碼:見附錄【6】當(dāng)輸入員工號(hào)時(shí),需要檢索員工,以確定設(shè)置的條件有效。加入IDC_EDT_SEEKPERSONID的EN_CHANGE消息,函數(shù)如下:見附錄【7】3 6

15、 修改出勤記錄屬性頁(yè)的創(chuàng)建加入一個(gè)對(duì)話框資源,將其封裝設(shè)為從CPropertyPage 繼承的 CPage1類。對(duì)話框布局如圖3-11 所示。對(duì)話框中主要控件、 ID 和對(duì)應(yīng)的成員變量及說明如表 3-12 所示。圖 3-11 修改出勤記錄屬性頁(yè)表 3-12 修改出勤記錄屬性頁(yè)控件列表控件類型ID成員變量說明Edit BoxIDC_EDIT_IOTIMEm_strIOTime出入時(shí)間Edit BoxIDC_EDIT_DEPARTIDm_strDepartID部門編號(hào)Edit BoxIDC_EDIT_DEPARTNAMEm_strDepartName部門名稱Edit BoxIDC_EDIT_PER

16、SONIDm_strPersonID員工號(hào)Edit BoxIDC_EDIT_PERSONNAMEm_strPersonName員工Radio ButtonIDC_RADIO_OUT無出入選項(xiàng)“出”Radio ButtonIDC_RADIO_IN無出入選項(xiàng)“入”ButtonIDC_BTN_ADDALL無“全部員工”按鈕ButtonIDC_BTN_ADDDEPART無“部門員工”按鈕ButtonIDC_BTN_ADDPERSON無“單個(gè)員工”按鈕ButtonIDC_BTN_DELETEATTEND無“刪除所選記錄”按鈕ButtonIDC_BTN_SEEKIO無“按條件檢索”按鈕List Contr

17、olIDC_LIST1m_cList“出勤記錄列表”界面初始化操作如下:見附錄【8】為了方便更新列表框容,編寫UpdateList()函數(shù),調(diào)用此函數(shù)可使列表框顯示給定的數(shù)據(jù)表格。見附錄【9】當(dāng)輸入部門編號(hào)時(shí),自動(dòng)檢索部門名稱。見附錄【10】輸入員工號(hào)是,檢索相應(yīng)信息。見附錄【11】添加部門和全體員工出勤記錄的過程最終可分解為添加單個(gè)員工記錄的過程。設(shè)置以下子程序是為了避免程序的重復(fù)。見附錄【12】添加記錄的 3 個(gè)按鈕處理程序分別調(diào)用以上的函數(shù)。見附錄【13】“刪除所選紀(jì)錄”按鈕用于刪除列表中當(dāng)前所選紀(jì)錄。見附錄【14】“按條件檢索”按鈕用于激活檢索條件。見附錄【15】3 7 加班記錄屬性頁(yè)

18、的創(chuàng)建加班記錄屬性頁(yè)的創(chuàng)建與考勤修改屬性頁(yè)類似,封裝類設(shè)為從 CPropertyPage 繼承的 Cpage2 類。為了將它們放入同一個(gè) Property Sheet ,需將二者大小設(shè)為一致。界面設(shè)計(jì)如圖 3-13 ,主要控件類型、 ID 和對(duì)應(yīng)的成員變量及說明如表 3-14 所示。圖 3-13 加班記錄屬性頁(yè)表 3-14 加班記錄屬性頁(yè)控件列表控件類型ID成員變量說明DateTime IDC_OVERTIME_DATETIMERPICKERm_Date日期PickerEdit BoxIDC_EDIT_OVERTIME_HOURm_nHour加班時(shí)間Edit BoxIDC_EDIT_OVERT

19、IME_PERSONID m_strPersonID員工號(hào)Edit BoxIDC_EDIT_OVERTIME_PERSONNAMEm_strPersonName員工ButtonIDC_BTN_OVERTIME_ADD無“添加”按鈕ButtonIDC_BTN_OVERTIME_DELETEATTEN無“刪除所選記錄”按鈕ButtonIDC_BTN_OVERTIME_SEEKIO無“按條件檢索”按鈕控件類型ID成員變量說明List ControlIDC_LIST2m_cList加班記錄列表初始化代碼如下:見附錄【16】UpdateList()完成列表框數(shù)據(jù)顯示工作,代碼如下:見附錄【17】當(dāng)輸入員

20、工號(hào)時(shí),需要檢索員工,以確認(rèn)輸入是否正確。見附錄【18】“添加”按鈕用于完成紀(jì)錄的添加操作。見附錄【19】3 8 請(qǐng)假記錄屬性頁(yè)的創(chuàng)建請(qǐng)假記錄屬性頁(yè)封裝類為從CPropertyPage 繼承的 Cpage3類。界面設(shè)計(jì)如圖 3-15 ,主要控件類型、 ID 和對(duì)應(yīng)的成員變量及說明如表3-16 所示。圖 3-15 請(qǐng)假記錄屬性頁(yè)表 3-16 請(qǐng)假記錄屬性頁(yè)控件列表控件類型ID成員變量說明Edit BoxIDC_EDT_LEAVE_STARTTIMEm_strSTime起始時(shí)間Edit BoxIDC_EDT_LEAVE_ENDTIMEm_strETime結(jié)束時(shí)間Edit BoxIDC_EDT_LE

21、AVE_PERSONIDm_strPersonID員工號(hào)Edit BoxIDC_EDT_LEAVE_PERSONNAME m_strPersonName員工Edit BoxIDC_EDT_LEAVE_REASONm_strReason請(qǐng)假原理ButtonIDC_BTN_LEAVE_ADD無“添加”按鈕Edit BoxIDC_EDT_LEABE_DELETEATTEND無“刪除所選記錄”按鈕控件類型ID成員變量說明Edit BoxIDC_EDT_LEABE_SEEKIO無“按條件檢索”List ControlIDC_LIST3m_cList按鈕加班記錄列表界面的初始化、 列表框的更新、 員工的檢

22、索、 刪除所選記錄和條件檢索的功能與前面加班記錄相應(yīng)的功能類似,代碼稍作修改即可。添加記錄的代碼如下:見附錄【 20】3 9 出差記錄屬性頁(yè)的創(chuàng)建請(qǐng)假記錄屬性頁(yè)封裝類為從CPropertyPage 繼承的 Cpage4類。界面設(shè)計(jì)如圖 3-17 ,主要控件類型、 ID 和對(duì)應(yīng)的成員變量及說明如表3-18 所示。圖 3-17 出差記錄屬性頁(yè)表 3-18 出差記錄屬性頁(yè)控件列表控件類型ID成員變量說明Edit BoxIDC_EDT_LEAVE_STARTTIMEm_strSTime起始時(shí)間Edit BoxIDC_EDT_LEAVE_ENDTIMEm_strETime結(jié)束時(shí)間Edit BoxIDC_

23、EDT_LEAVE_PERSONIDm_strPersonID員工號(hào)Edit BoxIDC_EDT_LEAVE_PERSONNAME m_strPersonName員工Edit BoxIDC_EDT_LEAVE_DESCRIBEm_strDescribe具體描述ButtonIDC_BTN_LEAVE_ADD無“添加”按鈕Edit BoxIDC_EDT_LEABE_DELETEATTEND無“刪除所選記錄”按鈕控件類型ID成員變量說明Edit BoxIDC_EDT_LEABE_SEEKIO無“按條件檢索”按鈕List ControlIDC_LIST3m_cList加班記錄列表出差記錄與請(qǐng)假記錄的

24、功能基本一致。3 10考勤統(tǒng)計(jì)對(duì)話框的創(chuàng)建考勤統(tǒng)計(jì)對(duì)話框界面設(shè)計(jì)如圖3-19 所示,主要控件類型、 ID 和對(duì)應(yīng)的成員變量及說明如表3-20 所示。圖 3-19考勤統(tǒng)計(jì)對(duì)話框表 3-20考勤統(tǒng)計(jì)控件列表控件類型ID成員變量說明Edit BoxIDC_STAT_TIME無統(tǒng)計(jì)年月DataTimeIDC_STAT_DATETIMEPICKER_STARTTIMEm_strTime開始時(shí)間PickerDataTimeIDC_STAT_DATETIMEPICKER_ENDTIMEm_STime結(jié)束時(shí)間PickerProgressIDC_STAT_ PROGRESSm_ETime進(jìn)度條ControlBu

25、ttonIDC_STAT_BTN_STATm_cProgress“統(tǒng)計(jì)”按鈕Check BoxIDC_STAT_CHK_SEEKBYTIMEm_bSeekbytime按年月檢索Check BoxIDC_STAT_CHK_SEEKBYPERSONm_bSeekbyperson按員工檢索Edit BoxIDC_STAT_EDT_SEEKTIMEm_strSeektime檢索年月Edit BoxIDC_STAT_EDT_SEEKPERSONIDm_strPersonID檢索員工號(hào)控件類型ID成員變量說明Edit BoxIDC_STAT_EDT_SEEKPERSONNAMEm_strPersonNam

26、e員工Edit BoxIDC_EDT_LEAVE_REASONm_strReason請(qǐng)假原因ButtonIDC_STAT_BTN_SEEK無“檢索”按鈕ListIDC_STAT_LISTm_cList記錄列表Control列表框的初始化和數(shù)據(jù)更新和前面類似。初始化時(shí)設(shè)置缺省時(shí)間, 修改構(gòu)造函數(shù)如下:見附錄【 21】當(dāng)輸入員工號(hào)時(shí),檢索員工,用于確認(rèn)輸入。見附錄【22】“檢索”按鈕的處理代碼如下:見附錄【23】統(tǒng)計(jì)過程主要是記錄判斷過程,代碼如下:見附錄【24】第 4 章 系統(tǒng)的實(shí)現(xiàn)各對(duì)話框設(shè)計(jì)完成后 , 運(yùn)行程序 , 查看結(jié)果。系統(tǒng)啟動(dòng)后,首先出現(xiàn)的是登錄對(duì)話框,如圖 4-1 。圖 4-1 登

27、錄對(duì)話框在輸入用戶名和密碼并登錄后,系統(tǒng)會(huì)從數(shù)據(jù)庫(kù)中提取相應(yīng)記錄,來判斷用戶和密碼權(quán)限是否匹配,如果不匹配,會(huì)彈出對(duì)話框提示,如圖4-2 。圖 4-2認(rèn)證失敗提示信息登錄成功后,會(huì)出現(xiàn)如圖4-3 所示的主對(duì)話框。圖 4-3主對(duì)話框單擊對(duì)話框中的各個(gè)按鈕即可顯示相應(yīng)的對(duì)話框。 其中“重新登錄” 用于回到登錄對(duì)話框,并且會(huì)隱藏主對(duì)話框; “退出”按鈕直接退出應(yīng)用程序; “設(shè)置”按鈕用來彈出上下班時(shí)間設(shè)置對(duì)話框; “出勤記錄”按鈕用來彈出考勤修改對(duì)話框;“統(tǒng)計(jì)”用來彈出統(tǒng)計(jì)對(duì)話框。圖 4-4 顯示的是單擊“設(shè)置”按鈕彈出的時(shí)間設(shè)置對(duì)話框。圖 4-4 時(shí)間設(shè)置對(duì)話框考勤修改窗口如圖 4-5 所示。這個(gè)

28、對(duì)話框包括 4 個(gè)記錄修改功能, 分別對(duì)應(yīng)出勤記錄、加班記錄、請(qǐng)假記錄和出差記錄。檢索條件包括時(shí)間圍和員工,可以根據(jù)需要任意選擇。如圖 4-6 。圖 4-5考勤修改窗口圖 4-6記錄檢索條件其中出勤記錄的添加時(shí)為了在考勤機(jī)出現(xiàn)故障是,可以人工添加, 保證記錄的完整性。設(shè)置的全體員工、 部門員工和單個(gè)員工出勤情況的輸入功能實(shí)現(xiàn)了批量輸入,下面的進(jìn)度條可以顯示進(jìn)度,如圖4-7 所示。圖 4-7添加修改出勤記錄對(duì)話框加班記錄對(duì)話框用于添加員工加班的日期和小時(shí)數(shù),如圖4-8 。圖 4-8 加班記錄對(duì)話框請(qǐng)假記錄和出差記錄布局和功能基本相似,主要用于記錄請(qǐng)假和出差的時(shí)間段和緣由,備注等。如圖4-9 和

29、4-10 ,分別為請(qǐng)假記錄和出差記錄的對(duì)話框。圖 4-9 請(qǐng)假記錄對(duì)話框圖 4-10出差記錄對(duì)話框考勤統(tǒng)計(jì)對(duì)話框有月度統(tǒng)計(jì)、 檢索條件和記錄列表3 部分。月度統(tǒng)計(jì)需要設(shè)定統(tǒng)計(jì)的時(shí)間圍。檢索條件部分則用于快速地位記錄,便于查詢和修改,如圖4-11 所示。圖 4-11考勤統(tǒng)計(jì)對(duì)話框第 5章結(jié)束語(yǔ)通過本次課程設(shè)計(jì)的實(shí)踐, 不僅熟悉了對(duì) Visual C+6.0 程序設(shè)計(jì)工具的操作,加深了對(duì) Access2003 的認(rèn)識(shí),還學(xué)到了有關(guān)考勤管理系統(tǒng)開發(fā)方面的知識(shí)。體會(huì)了軟件開發(fā)的基本過程, 同時(shí)也學(xué)會(huì)了如何修改, 調(diào)試程序, 如何將各個(gè)模塊的功能進(jìn)行合理的整合和調(diào)整, 如何充分利用各方資源, 優(yōu)化和完善

30、程序。 提高了綜合應(yīng)用計(jì)算機(jī)語(yǔ)言的各種編程知識(shí)和技巧進(jìn)行程序設(shè)計(jì)的能力。在老師和同學(xué)的指導(dǎo)和幫助下, 通過一個(gè)多月的設(shè)計(jì)和開發(fā), 考勤管理系統(tǒng)基本完成,能夠?qū)崿F(xiàn)對(duì)員工出勤情況的記錄和統(tǒng)計(jì), 以及按時(shí)間或員工號(hào)的各類查詢。但由于時(shí)間倉(cāng)促和自己水平所限, 本系統(tǒng)不可避免的還存在著一些缺陷, 比如在權(quán)限的管理以及美觀方面做的還不好, 還要其他方面還請(qǐng)老師和同學(xué)提寶貴意見,不勝感激。參考文獻(xiàn)1閩溟 , 吳繼剛 , 周學(xué)明 .Visual C+6.0數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)實(shí)例導(dǎo)航M.: 人民郵電 .2002:151-180.2 侯奇峰,曉華,莎 .Visual C+數(shù)據(jù)庫(kù)通用模塊開發(fā)與系統(tǒng)移植 M. :清華大學(xué)

31、 .2007:207-405.3 王珊,薩師煊 . 數(shù)據(jù)庫(kù)系統(tǒng)概論(第四版) M 。:高等教育 .2008:263-330.4 馬石安 , 文平 .Visual C+ 程序設(shè)計(jì)與應(yīng)用教程 M.: 清華大學(xué) .2007.附錄(主要程序代碼)【 1】 void CLoginDlg:OnOK()BOOL bLogin=FALSE;CString strPasswd,strCount;UpdateData(); /更新數(shù)據(jù)變量if(!db.Open(m_strDSN) return; /連接數(shù)據(jù)庫(kù)strPasswd=CCrypt:Encrypt(m_strPasswd, 123); /加密密碼CRec

32、ordset rs(&db); /構(gòu)造記錄集rs.Open(CRecordset:forwardOnly,"select COUNT(ID) as COUNT from PERSON where ID='" + m_strUser+"' and PASSWD='" + strPasswd + "' and AUTHORITY='4'"); /執(zhí)行查詢r(jià)s.GetFieldValue("COUNT",strCount);rs.Close(); /關(guān)閉數(shù)據(jù)集if(

33、strCount="1") /判斷認(rèn)證是否通過EndDialog(IDOK); /結(jié)束對(duì)話框,返回IDOKelseMessageBox("請(qǐng)輸入正確的用戶名和密碼, 注意大小寫 !","認(rèn)證失敗 ");db.Close(); /關(guān)閉數(shù)據(jù)庫(kù)【 2】 CPaintDC dc(this); CRect rect;GetClientRect(&rect);CDCdcMem;dcMem.CreateCompatibleDC(&dc);CBitmapbmpBackground;bmpBackground.LoadBitmap(ID

34、B_BITMAP);/IDB_BITMAP是圖對(duì)應(yīng)的 IDBITMAPbitmap;bmpBackground.GetBitmap(&bitmap);CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);【 3】 void CAttendanceDlg:OnBtnExit()EndDialog(IDCANCEL); /退出主對(duì)話框,關(guān)

35、閉程序void CAttendanceDlg:OnBtnRelogin()/ 隱藏主對(duì)話框ShowWindow(SW_HIDE);/ 顯示登錄對(duì)話框CLoginDlg dlg;if(dlg.DoModal()=IDOK)ShowWindow(SW_SHOW); /顯示對(duì)話框else EndDialog(IDCANCEL); /退出程序void CAttendanceDlg:OnBtnConfig()/ 顯示工作時(shí)間設(shè)置對(duì)話框CWorkplanDlg dlg; dlg.DoModal();void CAttendanceDlg:OnBtnRecord()/ 非模態(tài)顯示出勤記錄對(duì)話框if(!m_p

36、AttDlg) /指針為空,創(chuàng)建對(duì)話框m_pAttDlg=new CAttDlg();m_pAttDlg->Create(IDD_DLG_ATTENDANCE, this); m_pAttDlg->ShowWindow(SW_SHOW);else /對(duì)話框已創(chuàng)建m_pAttDlg->ShowWindow(SW_SHOW); / 顯示窗口void CAttendanceDlg:OnBtnStatistics()/ 非模態(tài)顯示考勤統(tǒng)計(jì)對(duì)話框if(!m_pStatDlg) /指針為空,創(chuàng)建對(duì)話框m_pStatDlg=new CStatDlg();m_pStatDlg->Cre

37、ate(IDD_DLG_STAT, this);m_pStatDlg->ShowWindow(SW_SHOW);else /對(duì)話框已創(chuàng)建m_pStatDlg->ShowWindow(SW_SHOW); / 顯示窗口【 4】 void CWorkplanDlg:OnWorkplanModify()CString strFileName=".workplan.ini" / INI文件名UpdateData(); /更新數(shù)據(jù)WritePrivateProfileString("WorkPlan", "Time1",m_Time1

38、.Format("%H:%M:%S"), strFileName);WritePrivateProfileString("WorkPlan", "Time2",m_Time2.Format("%H:%M:%S"), strFileName);WritePrivateProfileString("WorkPlan", "Time3",m_Time3.Format("%H:%M:%S"), strFileName);WritePrivateProfileStr

39、ing("WorkPlan", "Time4",m_Time4.Format("%H:%M:%S"), strFileName);【 5】 void CWorkplanDlg:OnWorkplanReset()CString cstr4; char str49;int i;int nHour,nMinute,nSecond; /時(shí),分,秒CString strFileName=".workplan.ini" / INI文件名/ 讀取 INI 文件GetPrivateProfileString("WorkP

40、lan","Time1","08:00:00",str0,9,strFileName);GetPrivateProfileString("WorkPlan","Time2","12:00:00",str1,9,strFileName);GetPrivateProfileString("WorkPlan","Time3","14:00:00",str2,9,strFileName);GetPrivateProfileString

41、("WorkPlan","Time4","18:00:00",str3,9,strFileName);for(i=0; i<4; i+) cstri=stri;/ 定義四個(gè)時(shí)間變量并初始化為 INI 文件中的值sscanf(cstr0.Left(2), "%d", &nHour);/ 得到時(shí)sscanf(cstr0.Mid(3,2), "%d", &nMinute); /得到分sscanf(cstr0.Mid(6,2), "%d", &nSeco

42、nd); /得到秒CTime t1(2002,1,1,nHour,nMinute,nSecond); /sscanf(cstr1.Left(2), "%d", &nHour); sscanf(cstr1.Mid(3,2), "%d", &nMinute); / sscanf(cstr1.Mid(6,2), "%d", &nSecond); / CTime t2(2002,1,1,nHour,nMinute,nSecond); /sscanf(cstr2.Left(2), "%d", &

43、;nHour); sscanf(cstr2.Mid(3,2), "%d", &nMinute); / sscanf(cstr2.Mid(6,2), "%d", &nSecond); / CTime t3(2002,1,1,nHour,nMinute,nSecond); /sscanf(cstr3.Left(2), "%d", &nHour); sscanf(cstr3.Mid(3,2), "%d", &nMinute); / sscanf(cstr3.Mid(6,2), "

44、%d", &nSecond); / CTime t4(2002,1,1,nHour,nMinute,nSecond); /初始化 t1/ 得到時(shí)得到分得到秒初始化 t2/ 得到時(shí)得到分得到秒初始化 t3/ 得到時(shí)得到分得到秒初始化 t4/ 設(shè)置成員變量 m_Time1=t1; m_Time2=t2; m_Time3=t3; m_Time4=t4;UpdateData(FALSE); /更新界面數(shù)據(jù)【 6】 m_Sheet.AddPage(&m_Page1); /加第 1頁(yè)m_Sheet.AddPage(&m_Page2); /加第 2頁(yè)m_Sheet.AddPage(&m_Page3); /加第 3頁(yè)m_Sheet.AddPage(&m_Page4); /加第 4頁(yè)m_Sheet.Create(this, WS_CHILD | WS_VISIBLE, 0); / 創(chuàng)建窗口 m_Sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT); / 修改風(fēng)格m_Sheet.ModifyStyle( 0, WS_TABSTOP ); /修改風(fēng)格/ 設(shè)置窗口位置m_Sheet.SetWindowPos( NULL, 0, 100,

溫馨提示

  • 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)論