1、傅期结束醐REJSatl文本请傭喙由图2-3 请假记录表勒据空型说明曾卜 卄W 记录编号PFESOMWORK_HDWES则田寸间WCBE_DATE日期丹捐加脏日期图2-4 加班记录表享孵称埶据类型FERSOKST 危T_TIME曰期细出差幵始旳侗END_TIMB曰期间出差結棘DESCBIFTIOff具 ftfflif图2-5 出差记录表第3章各个功能模块的创建3.1生成程序框架本系统的应用程序使用MFCODB啲方法开发,采用Dialog based的应用框 架,如图3-1为。由一个对话框和若干个功能对话框组成。为了使用 ODB(类,需要在stdafx.h 中加入#include ” afxdb
2、.h ”头文件。 本程序需要连接一个数据库,所以定义了一个 CDatabase型的全局变量db,用于打开和关闭数据库。数据库的打开在登录认证数据库中。为了访问数据库中的表格,本程序从 CRecordset中派生了 8个类,分别用 于封装所需访问的表格,如表3-1。通过访问成员变量可以访问当前记录中字段 的值。表3-1 CRecordset 派生类对应的表格CRecordset 派生类表格CAtte ndan ceRSATTENDANCE勤记录表CCou nterRSCOUNTE计数器表CDepartRSDEPARTMEN部门信息表CErra ndRSERRAN出差记录表CLeaveRSLEAV
3、E青假记录表COvertimeRSOVERTIME加班记录表CPerso nRSPERSO员工个人信息表CStatRSattendance atAT度考勤统计表3.2登录认证对话框登录窗口如图3-2所示,包括3个输入框和2个按钮。主要控件类型、ID 和对应的成员变量及说明如表 3-4。图3-2 登录窗口表3-4 登录认证对话框控件列表控件类型ID成员变量Combo Boxidc_cmb_dsnm_strDSNODBC数据源Edit Boxidc_edt_userm_strUser用户名idc edt passwdm strPasswd密码Butt onIDOK无“登录”按钮IDCANCEL“取
4、消”按钮对IDOK的点击加登录代码。CLoginDlg类需要用到加密类,本程序使用的是CCrypt类。在cpp文件的开头加入 #include ” Crypt.h ” 一行。另外,为了使用全局数据库变量 db,需要在cpp文件开头加入以下语句:Exter n CDatabase db;用户认证过程在“登录”按钮的处理函数中:代码见附录【 1】为了运行登录认证对话框,还需在App类的InitInstance() 函数中在显示主对话框前加入以下代码:CLog in Dlg Log in Dlg;If(Logi nDlg.DoModal()!=IDOK)return FALSE;3. 3主对话框窗口
5、的设计用户登录后即显示主对话框,如图 3-5所示。包括5个按钮。控件列表如表 3-6。图3-5主对话框表3-6 主对话框控件列表Static TextIDC_STATIC_HEAD“考勤管理系统”静态文本IDC_BTN_CONFIG“设置”按钮IDC BTN RECORD“出勤记录”按钮IDC_BTN_STATISTICS“统计”按钮IDC BTN RELOGIN“重新登录”按钮IDC BTN EXIT“退出”按钮在CAttendanceDIg 中定义以下成员变量:Public:CBrush m_brush;CStatDIg* m_pStatDlg;CAttDlg* m_pAttDlg;CFo
6、nt m_font;对话框初始化时需要改变标题字体大小,因此在OnlnitDialog()中加入以下代码:/改变标题字体大小LOGFONT LogFo nt;GetFo nt()-GetLogFo nt(&LogFo nt);LogFo nt.lfHeight+=LogFo nt.lfHeight/2;LogFo nt.lfWidth+=LogFo nt.lfWidth/2;m_fon t.CreateF ontln direct (&LogF on t); GetDlgltem(IDC_STATIC_HEAD)-SetFo nt(&m_fon t);为了美观起见,还插入了背景图片,通过Ctr
7、l+R引入图片后,在On Pai nt() 中的条件语句的else ()中添加下列代码:见附录【2】对话框中 5个按钮的功能主要是显示相应的功能对话框。给按钮的BN_CLICKE事件的处理和退出代码见附录【3】。3. 4上班时间设置对话框的创建此对话框用于设置上下班时间,布局如图 3-7.所示。主要控件类型、ID和对应的成员变量及说明如表 3-8所示。Fu上对闫设置 S3 |修改 I帀農默认设竄1 !图3-7时间设置对话框表3-8时间设置对话框控件列表DataPickerTimeIDC_WORKSTAT_DATETIMEPICKER1m_Time1上午上班时间IDC_WORKSTAT_DATE
8、TIMEPICKER2m_Time2中午下班时间IDC_WORKSTAT_DATETIMEPICKER3m_Time3下午上班时间IDC_WORKSTAT_DATETIMEPICKER4m_Time4下午下班时间IDC WORKPLAN MODIFY“修改”按钮IDC_WORKPLAN_RESET“恢复默认设 置”按钮一般上下班时间是相对固定的,而且需要在统计是频繁使用,所以不需要保 存在数据库中,因此采用标准的INI设置文件来保存这些数据。首先,在构造函数中初始化 4 个时间的取值:CWorkplanDlg:CWorkplanDlg(CWnd* pParent /*=NULL*/) CDia
9、log(CWorkplanDlg:IDD, pParent)m_Time1 = 0;m_Time2 = 0;m_Time3 = 0;m_Time4 = 0;“修改”按钮的BN_CLICKE事件处理用于保存当前的设置:代码见附录【4】 “恢复默认设置”按钮的BN_CLICKE事件处理程序用于恢复初始设置。这 个函数同时被 OnInitDialog() 函数应用,以实现初始化操作,代码见附录【 5】 3 5 考勤修改对话框的创建考勤修改对话框主要用来人工输入出勤情况。在考勤机出现问题是,它可以 及时弥补数据。同时加班、请假、出差的记录都是需要通过这个对话框来输入。 对话框布局如图 3-9 所示。
10、为了区分不同的输入,在对话框中嵌入了 CPropertySheet 和 4个 CPropertyPage ,这 4 个 CPropertyPage 分别放置出勤、 加班、请假和出差记录的修改界面, 而共用一个查询条件设置。 图3-9 下方空白 处用于放置CPropertySheet和4个CPropertyPage。对话框中的主要控件类型、 ID和对应的成员变量及说明如表 3-10所示。考勤愣改,a |回2” .mii.A-.- Jb.ssj .it. m.n ! 一 .4 .it . . si., c.i s.-ssa. .-a: . . a. . - ss a.a : - :.siB lii
11、isa: ! iSI Si Sil: 一3: s 记昱扎事鼻件厂时间范厨 A2O1C/L2/2 至2010/12/ 厂员工良工号:编辑 姓名;隧图3-9考勤修改对话框表3-10考勤修改对话框控件列表Check BoxIDC_CHK_SEEKBYTIMEm_bSeekbytime时间围选项IDC_CHK_SEEKBYPERSON1 m bSeekbypers on员工选项Date Time PickerIDC DATETIMEPICKER1m StartTime起始时间IDC_DATETIMEPICKER2m_En dTime结束时间IDC EDT SEEKPERSONIDm strPerso
12、nIDIDC EDT SEEKPERSONNAiME strName为了使用CPropertySheet和CPropertyPage,需要在类定义中加入以下变 量:CPagel m_Page1;CPage2 m_Page2;CPage3 m_Page3;CPage4 m_Page4;CPropertySheet m_Sheet; 然后在OnlnitDialog 中添加以下代码:见附录【6】当输入员工号时,需要检索员工,以确定设置的条件有效。加入IDC_EDT_SEEKPERSO的DEN_CHANGE息,函数如下:见附录【7】3. 6修改出勤记录属性页的创建加入一个对话框资源,将其封装设为从 C
13、PropertyPage继承的CPage1类。对话框布局如图3-11所示。对话框中主要控件、ID和对应的成员变量及说明如表3-12所示。图3-11修改出勤记录属性页 表3-12修改出勤记录属性页控件列表IDC_EDIT_IOTIMEm_strIOTime出入时间IDC_EDIT_DEPARTIDm_strDepartID部门编号IDC_EDIT_DEPARTNAMEm_strDepartName部门名称IDC_EDIT_PERSONIDm_strPerso nIDIDC EDIT PERSONNAMEm strPers on Name员工Radio Butt onIDC_RADIO_OUT出入
14、选项“出”IDC RADIO IN出入选项“入”IDC BTN ADDALL“全部员工”按钮IDC BTN ADDDEPART“部门员工”按钮IDC BTN ADDPERSON“单个员工”按钮IDC BTN DELETEATTEND“删除所选记录”按钮IDC BTN SEEKIO“按条件检索”按钮List Co ntrolIDC LIST1m cList“出勤记录列表”界面初始化操作如下:见附录【8】为了方便更新列表框容,编写 UpdateList()函数,调用此函数可使列表框显示给定的数据表格。见附录【9】当输入部门编号时,自动检索部门名称。见附录【10】输入员工号是,检索相应信息。见附录【
15、11】添加部门和全体员工出勤记录的过程最终可分解为添加单个员工记录的过程。设置以下子程序是为了避免程序的重复。见附录【12】添加记录的3个按钮处理程序分别调用以上的函数。见附录【13】“删除所选纪录”按钮用于删除列表中当前所选纪录。见附录【 14】“按条件检索”按钮用于激活检索条件。见附录【15】3. 7加班记录属性页的创建加班记录属性页的创建与考勤修改属性页类似,封装类设为从 CPropertyPage继承的Cpage2类。为了将它们放入同一个 Property Sheet,需 将二者大小设为一致。界面设计如图 3-13,主要控件类型、ID和对应的成员变 量及说明如表3-14所示。图3-13
16、加班记录属性页表3-14加班记录属性页控件列表Date TimeIDC_OVERTIME_DATETIMERPICKEm_Date日期IDC EDIT OVERTIME HOURm nH our加班时间IDC EDIT OVERTIME PERSONIDIDC EDIT OVERTIME PERSONNAiME strPers onN ameIDC BTN OVERTIME ADD“添加”按钮IDC_BTN_OVERTIME_DELETEATTE无“删除所选记录”按钮IDC_BTN_OVERTIME_SEEKIO“按条件检索” 按钮IDC_LIST2m_cList加班记录列表初始化代码如下:见
17、附录【16】UpdateList()完成列表框数据显示工作,代码如下:见附录【17】 当输入员工号时,需要检索员工,以确认输入是否正确。见附录【 18】“添加”按钮用于完成纪录的添加操作。见附录【19】3. 8请假记录属性页的创建请假记录属性页封装类为从 CPropertyPage继承的Cpage3类。界面设计如图3-15,主要控件类型、ID和对应的成员变量及说明如表 3-16所示。图3-15请假记录属性页表3-16请假记录属性页控件列表:IDC EDT LEAVE STARTTIMEm strSTimeIDC EDT LEAVE ENDTIMEm strETimeIDC EDT LEAVE
18、PERSONIDIDC EDT LEAVE PERSONNAMEm strPersonN ameIDC EDT LEAVE REASONm strReas on请假原理IDC BTN LEAVE ADDIDC_EDT_LEABE_DELETEATTEN无IDC EDT LEABE SEEKIO“按条件检索”按钮IDC_LIST3界面的初始化、列表框的更新、员工的检索、删除所选记录和条件检索的功能与前面加班记录相应的功能类似,代码稍作修改即可。添加记录的代码如下:见附录【20】3. 9出差记录属性页的创建请假记录属性页圭寸装类为从 CPropertyPage继承的Cpage4类。界面设计如 图3
19、-17,主要控件类型、ID和对应的成员变量及说明如表 3-18所示。卩融亲 宁i时间范is ; |竊辑 至|骗辑 具体拯述:|员工号:|编辑员工姓名:帽辑济加1图3-17 出差记录属性页表3-18出差记录属性页控件列表IDC EDT LEAVE DESCRIBEm strDescribe具体描述IDC_EDT_LEABE_SEEKIO出差记录与请假记录的功能基本一致。3. 10考勤统计对话框的创建考勤统计对话框界面设计如图 3-19所示,主要控件类型、ID和对应的成员 变量及说明如表3-20所示。图3-19 考勤统计对话框表3-20考勤统计控件列表IDC STAT TIMEr统计年月Data
20、TimeIDC_STAT_DATETIMEPICKER_STARTTIMEm_strTime开始时间IDC_STAT_DATETIMEPICKER_ENDTIMEm_STimeProgress Co ntrolIDC_STAT_ PROGRESSm_ETime进度条IDC STAT BTN STATm cProgressIDC STAT CHK SEEKBYTIMEm bSeekbytime按年月检索IDC STAT CHK SEEKBYPERSONm bSeekbypers on按员工检索IDC STAT EDT SEEKTIMEm strSeektime检索年月IDC_STAT_EDT_S
21、EEKPERSONID检索员工号IDC STAT EDT SEEKPERSONNAMEm strPers onN ame请假原因IDC STAT BTN SEEK“检索”按钮IDC_STAT_LIST记录列表列表框的初始化和数据更新和前面类似。 初始化时设置缺省时间,修改构造 函数如下:见附录【21】当输入员工号时,检索员工,用于确认输入。见附录【22】“检索”按钮的处理代码如下:见附录【23】统计过程主要是记录判断过程,代码如下:见附录【24】第4章系统的实现各对话框设计完成后,运行程序,查看结果。系统启动后,首先出现的是登录 对话框,如图4-1。图4-1登录对话框在输入用户名和密码并登录后,系统会从数据库中提取相应记录,来判断用户和密码权限是否匹配,如果不匹配,会弹出对话框提示,如图 4-2。图4-2认证失败提示信息登录成功后,会出现如图4-3所示的主对话框图4-3主对话框到登录对话框,并且会隐藏主对话框;“退出”按钮直接退出应用程序;“设置” 按钮用来弹出上下班时间设置对话框;“出勤记录”按钮用来弹出考勤修改对话 框;“统计”用来弹出统计对话框。图4-4显示的是单击“设置”按钮弹出的时间设置对话框。图4-4时间设置对话
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1