MFC程序设计考勤系统Word文档下载推荐.docx
《MFC程序设计考勤系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MFC程序设计考勤系统Word文档下载推荐.docx(53页珍藏版)》请在冰点文库上搜索。
部门编号、名称等。
图2-1出勤记录表
图2-2月度考勤统计表
图2-3请假记录表
图2-4加班记录表
图2-5出差记录表
第3章各个功能模块的创建
3.1生成程序框架
本系统的应用程序使用MFCODBC的方法开发,采用Dialogbased的应用框架,如图3-1为。
由一个对话框和若干个功能对话框组成。
为了使用ODBC类,需要在stdafx.h中加入#include”afxdb.h”头文件。
本程序需要连接一个数据库,所以定义了一个CDatabase型的全局变量db,用于打开和关闭数据库。
数据库的打开在登录认证数据库中。
为了访问数据库中的表格,本程序从CRecordset中派生了8个类,分别用于封装所需访问的表格,如表3-1。
通过访问成员变量可以访问当前记录中字段的值。
表3-1CRecordset派生类对应的表格
CRecordset派生类
表格
CAttendanceRS
ATTENDANCE出勤记录表
CCounterRS
COUNTER计数器表
CDepartRS
DEPARTMENT部门信息表
CErrandRS
ERRAND出差记录表
CLeaveRS
LEAVE请假记录表
COvertimeRS
OVERTIME加班记录表
CPersonRS
PERSON员工个人信息表
CStatRS
ATTENDANCE_ATAT月度考勤统计表
3.2登录认证对话框
登录窗口如图3-2所示,包括3个输入框和2个按钮。
主要控件类型、ID和对应的成员变量及说明如表3-4。
图3-2登录窗口
表3-4登录认证对话框控件列表
控件类型
ID
成员变量
说明
ComboBox
IDC_CMB_DSN
m_strDSN
ODBC数据源
EditBox
IDC_EDT_USER
m_strUser
用户名
IDC_EDT_PASSWD
m_strPasswd
密码
Button
IDOK
无
“登录”按钮
IDCANCEL
“取消”按钮
对IDOK的点击加登录代码。
CLoginDlg类需要用到加密类,本程序使用的是CCrypt类。
在cpp文件的开头加入#include”Crypt.h”一行。
另外,为了使用全局数据库变量db,需要在cpp文件开头加入以下语句:
ExternCDatabasedb;
用户认证过程在“登录”按钮的处理函数中:
代码见附录【1】
为了运行登录认证对话框,还需在App类的InitInstance()函数中在显示主对话框前加入以下代码:
CLoginDlgLoginDlg;
If(LoginDlg.DoModal()!
=IDOK)returnFALSE;
3.3主对话框窗口的设计
用户登录后即显示主对话框,如图3-5所示。
包括5个按钮。
控件列表如表3-6。
图3-5主对话框
表3-6主对话框控件列表
StaticText
IDC_STATIC_HEAD
“考勤管理系统”静态文本
IDC_BTN_CONFIG
“设置”按钮
IDC_BTN_RECORD
“出勤记录”按钮
IDC_BTN_STATISTICS
“统计”按钮
IDC_BTN_RELOGIN
“重新登录”按钮
IDC_BTN_EXIT
“退出”按钮
在CAttendanceDlg中定义以下成员变量:
Public:
CBrushm_brush;
CStatDlg*m_pStatDlg;
CAttDlg*m_pAttDlg;
CFontm_font;
对话框初始化时需要改变标题字体大小,因此在OnInitDialog()中加入以下代码:
//改变标题字体大小
LOGFONTLogFont;
GetFont()->
GetLogFont(&
LogFont);
LogFont.lfHeight+=LogFont.lfHeight/2;
LogFont.lfWidth+=LogFont.lfWidth/2;
m_font.CreateFontIndirect(&
GetDlgItem(IDC_STATIC_HEAD)->
SetFont(&
m_font);
为了美观起见,还插入了背景图片,通过Ctrl+R引入图片后,在OnPaint()中的条件语句的else()中添加下列代码:
见附录【2】
对话框中5个按钮的功能主要是显示相应的功能对话框。
给按钮的BN_CLICKED事件的处理和退出代码见附录【3】。
3.4上班时间设置对话框的创建
此对话框用于设置上下班时间,布局如图3-7.所示。
主要控件类型、ID和对应的成员变量及说明如表3-8所示。
图3-7时间设置对话框
表3-8时间设置对话框控件列表
DataTimePicker
IDC_WORKSTAT_DATETIMEPICKER1
m_Time1
上午上班时间
IDC_WORKSTAT_DATETIMEPICKER2
m_Time2
中午下班时间
IDC_WORKSTAT_DATETIMEPICKER3
m_Time3
下午上班时间
IDC_WORKSTAT_DATETIMEPICKER4
m_Time4
下午下班时间
IDC_WORKPLAN_MODIFY
“修改”按钮
IDC_WORKPLAN_RESET
“恢复默认设置”按钮
一般上下班时间是相对固定的,而且需要在统计是频繁使用,所以不需要保存在数据库中,因此采用标准的INI设置文件来保存这些数据。
首先,在构造函数中初始化4个时间的取值:
CWorkplanDlg:
:
CWorkplanDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CWorkplanDlg:
IDD,pParent)
{
m_Time1=0;
m_Time2=0;
m_Time3=0;
m_Time4=0;
}
“修改”按钮的BN_CLICKED事件处理用于保存当前的设置:
代码见附录【4】
“恢复默认设置”按钮的BN_CLICKED事件处理程序用于恢复初始设置。
这个函数同时被OnInitDialog()函数应用,以实现初始化操作,代码见附录【5】
3.5考勤修改对话框的创建
考勤修改对话框主要用来人工输入出勤情况。
在考勤机出现问题是,它可以及时弥补数据。
同时加班、请假、出差的记录都是需要通过这个对话框来输入。
对话框布局如图3-9所示。
为了区分不同的输入,在对话框中嵌入了CPropertySheet和4个CPropertyPage,这4个CPropertyPage分别放置出勤、加班、请假和出差记录的修改界面,而共用一个查询条件设置。
图3-9下方空白处用于放置CPropertySheet和4个CPropertyPage。
对话框中的主要控件类型、ID和对应的成员变量及说明如表3-10所示。
图3-9考勤修改对话框
表3-10考勤修改对话框控件列表
CheckBox
IDC_CHK_SEEKBYTIME
m_bSeekbytime
时间围选项
IDC_CHK_SEEKBYPERSON
m_bSeekbyperson
员工选项
DateTimePicker
IDC_DATETIMEPICKER1
m_StartTime
起始时间
IDC_DATETIMEPICKER2
m_EndTime
结束时间
IDC_EDT_SEEKPERSONID
m_strPersonID
员工号
IDC_EDT_SEEKPERSONNAME
m_strName
为了使用CPropertySheet和CPropertyPage,需要在类定义中加入以下变量:
CPage1m_Page1;
CPage2m_Page2;
CPage3m_Page3;
CPage4m_Page4;
CPropertySheetm_Sheet;
然后在OnInitDialog中添加以下代码:
见附录【6】
当输入员工号时,需要检索员工,以确定设置的条件有效。
加入IDC_EDT_SEEKPERSONID的EN_CHANGE消息,函数如下:
见附录【7】
3.6修改出勤记录属性页的创建
加入一个对话框资源,将其封装设为从CPropertyPage继承的CPage1类。
对话框布局如图3-11所示。
对话框中主要控件、ID和对应的成员变量及说明如表3-12所示。
图3-11修改出勤记录属性页
表3-12修改出勤记录属性页控件列表
IDC_EDIT_IOTIME
m_strIOTime
出入时间
IDC_EDIT_DEPARTID
m_strDepartID
部门编号
IDC_EDIT_DEPARTNAME
m_strDepartName
部门名称
IDC_EDIT_PERSONID
IDC_EDIT_PERSONNAME
m_strPersonName
RadioButton
IDC_RADIO_OUT
出入选项“出”
IDC_RADIO_IN
出入选项“入”
IDC_BTN_ADDALL
“全部员工”按钮
IDC_BTN_ADDDEPART
“部门员工”按钮
IDC_BTN_ADDPERSON
“单个员工”按钮
IDC_BTN_DELETEATTEND
“删除所选记录”按钮
IDC_BTN_SEEKIO
“按条件检索”按钮
ListControl
IDC_LIST1
m_cList
“出勤记录列表”
界面初始化操作如下:
见附录【8】
为了方便更新列表框容,编写UpdateList()函数,调用此函数可使列表框显示给定的数据表格。
见附录【9】
当输入部门编号时,自动检索部门名称。
见附录【10】
输入员工号是,检索相应信息。
见附录【11】
添加部门和全体员工出勤记录的过程最终可分解为添加单个员工记录的过程。
设置以下子程序是为了避免程序的重复。
见附录【12】
添加记录的3个按钮处理程序分别调用以上的函数。
见附录【13】
“删除所选纪录”按钮用于删除列表中当前所选纪录。
见附录【14】
“按条件检索”按钮用于激活检索条件。
见附录【15】
3.7加班记录属性页的创建
加班记录属性页的创建与考勤修改属性页类似,封装类设为从CPropertyPage继承的Cpage2类。
为了将它们放入同一个PropertySheet,需将二者大小设为一致。
界面设计如图3-13,主要控件类型、ID和对应的成员变量及说明如表3-14所示。
图3-13加班记录属性页
表3-14加班记录属性页控件列表
IDC_OVERTIME_DATETIMERPICKER
m_Date
日期
IDC_EDIT_OVERTIME_HOUR
m_nHour
加班时间
IDC_EDIT_OVERTIME_PERSONID
IDC_EDIT_OVERTIME_PERSONNAME
IDC_BTN_OVERTIME_ADD
“添加”按钮
IDC_BTN_OVERTIME_DELETEATTEN
IDC_BTN_OVERTIME_SEEKIO
IDC_LIST2
加班记录列表
初始化代码如下:
见附录【16】
UpdateList()完成列表框数据显示工作,代码如下:
见附录【17】
当输入员工号时,需要检索员工,以确认输入是否正确。
见附录【18】
“添加”按钮用于完成纪录的添加操作。
见附录【19】
3.8请假记录属性页的创建
请假记录属性页封装类为从CPropertyPage继承的Cpage3类。
界面设计如图3-15,主要控件类型、ID和对应的成员变量及说明如表3-16所示。
图3-15请假记录属性页
表3-16请假记录属性页控件列表
IDC_EDT_LEAVE_STARTTIME
m_strSTime
IDC_EDT_LEAVE_ENDTIME
m_strETime
IDC_EDT_LEAVE_PERSONID
IDC_EDT_LEAVE_PERSONNAME
IDC_EDT_LEAVE_REASON
m_strReason
请假原理
IDC_BTN_LEAVE_ADD
IDC_EDT_LEABE_DELETEATTEND
IDC_EDT_LEABE_SEEKIO
IDC_LIST3
界面的初始化、列表框的更新、员工的检索、删除所选记录和条件检索的功能与前面加班记录相应的功能类似,代码稍作修改即可。
添加记录的代码如下:
见附录【20】
3.9出差记录属性页的创建
请假记录属性页封装类为从CPropertyPage继承的Cpage4类。
界面设计如图3-17,主要控件类型、ID和对应的成员变量及说明如表3-18所示。
图3-17出差记录属性页
表3-18出差记录属性页控件列表
IDC_EDT_LEAVE_DESCRIBE
m_strDescribe
具体描述
出差记录与请假记录的功能基本一致。
3.10考勤统计对话框的创建
考勤统计对话框界面设计如图3-19所示,主要控件类型、ID和对应的成员变量及说明如表3-20所示。
图3-19考勤统计对话框
表3-20考勤统计控件列表
IDC_STAT_TIME
统计年月
IDC_STAT_DATETIMEPICKER_STARTTIME
m_strTime
开始时间
IDC_STAT_DATETIMEPICKER_ENDTIME
m_STime
ProgressControl
IDC_STAT_PROGRESS
m_ETime
进度条
IDC_STAT_BTN_STAT
m_cProgress
IDC_STAT_CHK_SEEKBYTIME
按年月检索
IDC_STAT_CHK_SEEKBYPERSON
按员工检索
IDC_STAT_EDT_SEEKTIME
m_strSeektime
检索年月
IDC_STAT_EDT_SEEKPERSONID
检索员工号
IDC_STAT_EDT_SEEKPERSONNAME
请假原因
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时间设置对话框
考勤修改窗口如图4-5所示。
这个对话框包括4个记录修改功能,分别对应出勤记录、加班记录、请假记录和出差记录。
检索条件包括时间围和员工,可以根据需要任意选择。
如图4-6。
图4-5考勤修改窗口
图4-6记录检索条件
其中出勤记录的添加时为了在考勤机出现故障是,可以人工添加,保证记录的完整性。
设置的全体员工、部门员工和单个员工出勤情况的输入功能实现了批量输入,下面的进度条可以显示进度,如图4-7所示。
图4-7添加修改出勤记录对话框
加班记录对话框用于添加员工加班的日期和小时数,如图4-8。
图4-8加班记录对话框
请假记录和出差记录布局和功能基本相似,主要用于记录请假和出差的时间段和缘由,备注等。
如图4-9和4-10,分别为请假记录和出差记录的对话框。
图4-9请假记录对话框
图4-10出差记录对话框
考勤统计对话框有月度统计、检索条件和记录列表3部分。
月度统计需要设定统计的时间围。
检索条件部分则用于快速地位记录,便于查询和修改,如图4-11所示。
图4-11考勤统计对话框
第5章结束语
通过本次课程设计的实践,不仅熟悉了对VisualC++6.0程序设计工具的操作,加深了对Access2003的认识,还学到了有关考勤管理系统开发方面的知识。
体会了软件开发的基本过程,同时也学会了如何修改,调试程序,如何将各个模块的功能进行合理的整合和调整,如何充分利用各方资源,优化和完善程序。
提高了综合应用计算机语言的各种编程知识和技巧进行程序设计的能力。
在老师和同学的指导和帮助下,通过一个多月的设计和开发,考勤管理系统基本完成,能够实现对员工出勤情况的记录和统计,以及按时间或员工号的各类查询。
但由于时间仓促和自己水平所限,本系统不可避免的还存在着一些缺陷,比如在权限的管理以及美观方面做的还不好,还要其他方面还请老师和同学提宝贵意见,不胜感激。
参考文献
[1]闽溟,吴继刚,周学明.VisualC++6.0数据库系统开发实例导航[M].:
人民邮电.2002:
151-180.
[2]侯奇峰,晓华,莎.VisualC+