《MFC程序设计(课程设计)考勤系统.docx》由会员分享,可在线阅读,更多相关《MFC程序设计(课程设计)考勤系统.docx(46页珍藏版)》请在三一办公上搜索。
1、第1章 系统设计11 系统功能分析考勤管理系统的主要功能如下: 1上班时间的设定。上下班时间相对固定,可以保存在客户端的设置文件中。 2员工出入单位的情况记录.出入情况主要由考勤机来记录,但是需要设置人工添加的功能,以备特殊情况的处理。3请假、加班和出差情况的记录。4每个月底进行整月的出勤情况统计。12 系统功能模块设计 根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块图如图1-1所示。考勤管理系统出差记录请假记录加班记录补记出勤上下班时间设置工作情况考勤统计图1-1人事管理功能模块图13 数据流程图 出勤的原始记录主要来源于考勤机,并且以固定格式保存在数据库中。考勤管理系
2、统的任务就是处理这些数据。经理审批记录出勤时间各种统计信息员工管理人员考勤员月度员工考勤统计表上下班时间安排请假值班、出差记录员工出勤记录第2章 数据库设计21 数据库需求分析 根据数据流程,可以列出以下管理系统所需的数据项和数据结构。(1) 出勤记录:记录号、员工、出入情况和出入时间,如图2-1。(2) 月度考勤统计:记录号、员工、年月、累计正常工作时间、累计请假时间、累计加班时间、累计出差时间、迟到次数、早退次数和矿工次数,如图2-2。(3) 请假记录:记录号、员工、假期起始时间/结束时间和请假缘由,如图2-3。(4) 加班记录:记录号、员工、加班时间长度和日期,如图2-4。(5) 出差记
3、录:记录号、员工、出差起始时间/结束时间和具体描述,如图2-5。所需的外部数据支持:(1) 人员信息:员工号、密码、权限、姓名、部门、和当前状态等。(2) 部门设置:部门编号、名称等。图2-1 出勤记录表图2-2 月度考勤统计表图2-3 请假记录表图2-4 加班记录表图2-5 出差记录表第3章 各个功能模块的创建3.1 生成程序框架本系统的应用程序使用MFC ODBC的方法开发,采用Dialog based 的应用框架,如图3-1为。由一个对话框和若干个功能对话框组成。为了使用ODBC类,需要在stdafx.h中加入#include”afxdb.h”头文件。本程序需要连接一个数据库,所以定义了
4、一个CDatabase型的全局变量db,用于打开和关闭数据库。数据库的打开在登录认证数据库中。为了访问数据库中的表格,本程序从CRecordset中派生了8个类,分别用于封装所需访问的表格,如表3-1。通过访问成员变量可以访问当前记录中字段的值。表3-1 CRecordset派生类对应的表格CRecordset派生类表格CAttendanceRSATTENDANCE出勤记录表CCounterRSCOUNTER计数器表CDepartRSDEPARTMENT部门信息表CErrandRSCRecordset派生类ERRAND出差记录表表格CLeaveRSLEAVE请假记录表COvertimeRSOV
5、ERTIME加班记录表CPersonRSPERSON员工个人信息表CStatRSATTENDANCE_ATAT月度考勤统计表32 登录认证对话框 登录窗口如图3-2所示,包括3个输入框和2个按钮。主要控件类型、ID和对应的成员变量及说明如表3-4。图3-2 登录窗口表3-4 登录认证对话框控件列表控件类型ID成员变量说明Combo BoxIDC_CMB_DSNm_strDSNODBC数据源Edit BoxIDC_EDT_USERm_strUser用户名Edit BoxIDC_EDT_PASSWDm_strPasswd密码ButtonIDOK无“登录”按钮ButtonIDCANCEL无“取消”按
6、钮对IDOK的点击加登录代码。CLoginDlg类需要用到加密类,本程序使用的是CCrypt类。在cpp文件的开头加入#include”Crypt.h”一行。另外,为了使用全局数据库变量db,需要在cpp文件开头加入以下语句:Extern CDatabase db;用户认证过程在“登录”按钮的处理函数中:代码见附录【1】为了运行登录认证对话框,还需在App类的InitInstance()函数中在显示主对话框前加入以下代码:CLoginDlg LoginDlg;If(LoginDlg.DoModal()!=IDOK)return FALSE;33主对话框窗口的设计用户登录后即显示主对话框,如图3
7、-5所示。包括5个按钮。控件列表如表3-6。图3-5 主对话框表3-6 主对话框控件列表控件类型ID成员变量说明Static TextIDC_STATIC_HEAD无“考勤管理系统”静态文本ButtonIDC_BTN_CONFIG无“设置”按钮ButtonIDC_BTN_RECORD无“出勤记录”按钮ButtonIDC_BTN_STATISTICS无“统计”按钮ButtonIDC_BTN_RELOGIN无“重新登录”按钮ButtonIDC_BTN_EXIT无“退出”按钮在CAttendanceDlg 中定义以下成员变量:Public:CBrush m_brush;CStatDlg* m_pSt
8、atDlg;CAttDlg* m_pAttDlg;CFont m_font;对话框初始化时需要改变标题字体大小,因此在OnInitDialog()中加入以下代码:/ 改变标题字体大小LOGFONT LogFont;GetFont()-GetLogFont(&LogFont);LogFont.lfHeight+=LogFont.lfHeight/2;LogFont.lfWidth+=LogFont.lfWidth/2;m_font.CreateFontIndirect(&LogFont);GetDlgItem(IDC_STATIC_HEAD)-SetFont(&m_font);为了美观起见,还插
9、入了背景图片,通过Ctrl+R引入图片后,在OnPaint()中的条件语句的else()中添加下列代码:见附录【2】对话框中5个按钮的功能主要是显示相应的功能对话框。给按钮的BN_CLICKED事件的处理和退出代码见附录【3】。34上班时间设置对话框的创建此对话框用于设置上下班时间,布局如图3-7.所示。主要控件类型、ID和对应的成员变量及说明如表3-8所示。图3-7 时间设置对话框表3-8 时间设置对话框控件列表控件类型ID成员变量说明Data Time PickerIDC_WORKSTAT_DATETIMEPICKER1m_Time1上午上班时间Data Time PickerIDC_WO
10、RKSTAT_DATETIMEPICKER2m_Time2中午下班时间Data Time PickerIDC_WORKSTAT_DATETIMEPICKER3m_Time3下午上班时间Data Time PickerIDC_WORKSTAT_DATETIMEPICKER4m_Time4下午下班时间ButtonIDC_WORKPLAN_MODIFY无“修改”按钮ButtonIDC_WORKPLAN_RESET无“恢复默认设置”按钮一般上下班时间是相对固定的,而且需要在统计是频繁使用,所以不需要保存在数据库中,因此采用标准的INI设置文件来保存这些数据。首先,在构造函数中初始化4个时间的取值:CW
11、orkplanDlg: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】35 考勤修改对话框的创建 考勤修改对话框主要用来人工输入出勤情况。在考勤机出现问题是,它可以及时弥
12、补数据。同时加班、请假、出差的记录都是需要通过这个对话框来输入。对话框布局如图3-9所示。为了区分不同的输入,在对话框中嵌入了CPropertySheet和4个CPropertyPage,这4个CPropertyPage分别放置出勤、加班、请假和出差记录的修改界面,而共用一个查询条件设置。图3-9下方空白处用于放置CPropertySheet和4个CPropertyPage。对话框中的主要控件类型、ID和对应的成员变量及说明如表3-10所示。图3-9 考勤修改对话框表3-10 考勤修改对话框控件列表控件类型ID成员变量说明Check BoxIDC_CHK_SEEKBYTIMEm_bSeekby
13、time时间范围选项Check BoxIDC_CHK_SEEKBYPERSONm_bSeekbyperson员工选项Date Time PickerIDC_DATETIMEPICKER1m_StartTime起始时间Date Time PickerIDC_DATETIMEPICKER2m_EndTime结束时间Edit BoxIDC_EDT_SEEKPERSONIDm_strPersonID员工号Edit BoxIDC_EDT_SEEKPERSONNAMEm_strName姓名为了使用CPropertySheet和CPropertyPage,需要在类定义中加入以下变量:CPage1 m_Pag
14、e1;CPage2 m_Page2;CPage3 m_Page3;CPage4 m_Page4;CPropertySheet m_Sheet;然后在OnInitDialog中添加以下代码:见附录【6】当输入员工号时,需要检索员工姓名,以确定设置的条件有效。加入IDC_EDT_SEEKPERSONID的EN_CHANGE消息,函数如下:见附录【7】36 修改出勤记录属性页的创建加入一个对话框资源,将其封装设为从CPropertyPage继承的CPage1类。对话框布局如图3-11所示。对话框中主要控件、ID和对应的成员变量及说明如表3-12所示。图3-11 修改出勤记录属性页表3-12 修改出勤
15、记录属性页控件列表控件类型ID成员变量说明Edit BoxIDC_EDIT_IOTIMEm_strIOTime出入时间Edit BoxIDC_EDIT_DEPARTIDm_strDepartID部门编号Edit BoxIDC_EDIT_DEPARTNAMEm_strDepartName部门名称Edit BoxIDC_EDIT_PERSONIDm_strPersonID员工号Edit BoxIDC_EDIT_PERSONNAMEm_strPersonName员工姓名Radio ButtonIDC_RADIO_OUT无出入选项“出”Radio ButtonIDC_RADIO_IN无出入选项“入”B
16、uttonIDC_BTN_ADDALL无“全部员工”按钮ButtonIDC_BTN_ADDDEPART无“部门员工”按钮ButtonIDC_BTN_ADDPERSON无“单个员工”按钮ButtonIDC_BTN_DELETEATTEND无“删除所选记录”按钮ButtonIDC_BTN_SEEKIO无“按条件检索”按钮List ControlIDC_LIST1m_cList“出勤记录列表”界面初始化操作如下:见附录【8】为了方便更新列表框内容,编写UpdateList()函数,调用此函数可使列表框显示给定的数据表格。见附录【9】当输入部门编号时,自动检索部门名称。见附录【10】输入员工号是,检索
17、相应信息。见附录【11】添加部门和全体员工出勤记录的过程最终可分解为添加单个员工记录的过程。设置以下子程序是为了避免程序的重复。见附录【12】添加记录的3个按钮处理程序分别调用以上的函数。见附录【13】“删除所选纪录”按钮用于删除列表中当前所选纪录。见附录【14】“按条件检索”按钮用于激活检索条件。见附录【15】37 加班记录属性页的创建加班记录属性页的创建与考勤修改属性页类似,封装类设为从CPropertyPage继承的Cpage2类。为了将它们放入同一个Property Sheet,需将二者大小设为一致。界面设计如图3-13,主要控件类型、ID和对应的成员变量及说明如表3-14所示。图3-
18、13 加班记录属性页表3-14 加班记录属性页控件列表控件类型ID成员变量说明Date Time PickerIDC_OVERTIME_DATETIMERPICKERm_Date日期Edit BoxIDC_EDIT_OVERTIME_HOURm_nHour加班时间Edit BoxIDC_EDIT_OVERTIME_PERSONIDm_strPersonID员工号Edit BoxIDC_EDIT_OVERTIME_PERSONNAMEm_strPersonName员工姓名ButtonIDC_BTN_OVERTIME_ADD无“添加”按钮ButtonIDC_BTN_OVERTIME_DELETEA
19、TTEN无“删除所选记录”按钮Button控件类型IDC_BTN_OVERTIME_SEEKIOID无成员变量“按条件检索”按钮说明List ControlIDC_LIST2m_cList加班记录列表初始化代码如下:见附录【16】UpdateList()完成列表框数据显示工作,代码如下:见附录【17】当输入员工号时,需要检索员工姓名,以确认输入是否正确。见附录【18】 “添加”按钮用于完成纪录的添加操作。见附录【19】38 请假记录属性页的创建 请假记录属性页封装类为从CPropertyPage继承的Cpage3类。界面设计如图3-15,主要控件类型、ID和对应的成员变量及说明如表3-16所示
20、。图3-15 请假记录属性页表3-16 请假记录属性页控件列表控件类型ID成员变量说明Edit BoxIDC_EDT_LEAVE_STARTTIMEm_strSTime起始时间Edit BoxIDC_EDT_LEAVE_ENDTIMEm_strETime结束时间Edit BoxIDC_EDT_LEAVE_PERSONIDm_strPersonID员工号Edit BoxIDC_EDT_LEAVE_PERSONNAMEm_strPersonName员工姓名Edit BoxIDC_EDT_LEAVE_REASONm_strReason请假原理ButtonIDC_BTN_LEAVE_ADD无“添加”按
21、钮Edit Box控件类型IDC_EDT_LEABE_DELETEATTENDID无成员变量“删除所选记录”按钮说明Edit BoxIDC_EDT_LEABE_SEEKIO无“按条件检索”按钮List ControlIDC_LIST3m_cList加班记录列表界面的初始化、列表框的更新、员工姓名的检索、删除所选记录和条件检索的功能与前面加班记录相应的功能类似,代码稍作修改即可。添加记录的代码如下:见附录【20】39 出差记录属性页的创建 请假记录属性页封装类为从CPropertyPage继承的Cpage4类。界面设计如图3-17,主要控件类型、ID和对应的成员变量及说明如表3-18所示。图3-
22、17 出差记录属性页表3-18 出差记录属性页控件列表控件类型ID成员变量说明Edit BoxIDC_EDT_LEAVE_STARTTIMEm_strSTime起始时间Edit BoxIDC_EDT_LEAVE_ENDTIMEm_strETime结束时间Edit BoxIDC_EDT_LEAVE_PERSONIDm_strPersonID员工号Edit BoxIDC_EDT_LEAVE_PERSONNAMEm_strPersonName员工姓名Edit BoxIDC_EDT_LEAVE_DESCRIBEm_strDescribe具体描述ButtonIDC_BTN_LEAVE_ADD无“添加”按
23、钮Edit Box控件类型IDC_EDT_LEABE_DELETEATTENDID无成员变量“删除所选记录”按钮说明Edit BoxIDC_EDT_LEABE_SEEKIO无“按条件检索”按钮List ControlIDC_LIST3m_cList加班记录列表出差记录与请假记录的功能基本一致。310 考勤统计对话框的创建 考勤统计对话框界面设计如图3-19所示,主要控件类型、ID和对应的成员变量及说明如表3-20所示。图3-19 考勤统计对话框表3-20 考勤统计控件列表控件类型ID成员变量说明Edit BoxIDC_STAT_TIME无统计年月Data Time PickerIDC_STAT
24、_DATETIMEPICKER_STARTTIMEm_strTime开始时间Data Time PickerIDC_STAT_DATETIMEPICKER_ENDTIMEm_STime结束时间Progress ControlIDC_STAT_ PROGRESSm_ETime进度条ButtonIDC_STAT_BTN_STATm_cProgress“统计”按钮Check BoxIDC_STAT_CHK_SEEKBYTIMEm_bSeekbytime按年月检索Check BoxIDC_STAT_CHK_SEEKBYPERSONm_bSeekbyperson按员工检索Edit BoxIDC_STAT
25、_EDT_SEEKTIMEm_strSeektime检索年月Edit Box控件类型IDC_STAT_EDT_SEEKPERSONIDIDm_strPersonID成员变量检索员工号说明Edit BoxIDC_STAT_EDT_SEEKPERSONNAMEm_strPersonName员工姓名Edit BoxIDC_EDT_LEAVE_REASONm_strReason请假原因ButtonIDC_STAT_BTN_SEEK无“检索”按钮List ControlIDC_STAT_LISTm_cList记录列表列表框的初始化和数据更新和前面类似。初始化时设置缺省时间,修改构造函数如下:见附录【21
26、】当输入员工号时,检索员工姓名,用于确认输入。见附录【22】 “检索”按钮的处理代码如下:见附录【23】统计过程主要是记录判断过程,代码如下:见附录【24】第4章 系统的实现各对话框设计完成后,运行程序,查看结果。系统启动后,首先出现的是登录对话框,如图4-1。图4-1 登录对话框在输入用户名和密码并登录后,系统会从数据库中提取相应记录,来判断用户和密码权限是否匹配,如果不匹配,会弹出对话框提示,如图4-2。图4-2 认证失败提示信息登录成功后,会出现如图4-3所示的主对话框。图4-3 主对话框单击对话框中的各个按钮即可显示相应的对话框。其中“重新登录”用于回到登录对话框,并且会隐藏主对话框;
27、“退出”按钮直接退出应用程序;“设置”按钮用来弹出上下班时间设置对话框;“出勤记录”按钮用来弹出考勤修改对话框;“统计”用来弹出统计对话框。图4-4显示的是单击“设置”按钮弹出的时间设置对话框。图4-4 时间设置对话框考勤修改窗口如图4-5所示。这个对话框包括4个记录修改功能,分别对应出勤记录、加班记录、请假记录和出差记录。检索条件包括时间范围和员工,可以根据需要任意选择。如图4-6。图4-5 考勤修改窗口 图4-6 记录检索条件其中出勤记录的添加时为了在考勤机出现故障是,可以人工添加,保证记录的完整性。设置的全体员工、部门员工和单个员工出勤情况的输入功能实现了批量输入,下面的进度条可以显示进
28、度,如图4-7所示。 图4-7 添加修改出勤记录对话框 加班记录对话框用于添加员工加班的日期和小时数,如图4-8。图4-8 加班记录对话框 请假记录和出差记录布局和功能基本相似,主要用于记录请假和出差的时间段和缘由,备注等。如图4-9和4-10,分别为请假记录和出差记录的对话框。图4-9 请假记录对话框图4-10 出差记录对话框考勤统计对话框有月度统计、检索条件和记录列表3部分。月度统计需要设定统计的时间范围。检索条件部分则用于快速地位记录,便于查询和修改,如图4-11所示。图4-11 考勤统计对话框第5章 结束语通过本次课程设计的实践,不仅熟悉了对Visual C+6.0程序设计工具的操作,
29、加深了对Access2003的认识,还学到了有关考勤管理系统开发方面的知识。体会了软件开发的基本过程,同时也学会了如何修改,调试程序,如何将各个模块的功能进行合理的整合和调整,如何充分利用各方资源,优化和完善程序。提高了综合应用计算机语言的各种编程知识和技巧进行程序设计的能力。在老师和同学的指导和帮助下,通过一个多月的设计和开发,考勤管理系统基本完成,能够实现对员工出勤情况的记录和统计,以及按时间或员工号的各类查询。但由于时间仓促和自己水平所限,本系统不可避免的还存在着一些缺陷,比如在权限的管理以及美观方面做的还不好,还要其他方面还请老师和同学提宝贵意见,不胜感激。参考文献1 李闽溟,吴继刚,
30、周学明.Visual C+6.0数据库系统开发实例导航M.北京:人民邮电出版社.2002:151-180.2 侯奇峰,李晓华,李莎.Visual C+数据库通用模块开发与系统移植M.北京:清华大学出版社.2007:207-405.3 王珊,萨师煊.数据库系统概论(第四版)M。北京:高等教育出版社.2008:263-330.4 马石安,魏文平.Visual C+程序设计与应用教程M.北京:清华大学出版社.2007. 附录(主要程序代码)【1】void CLoginDlg:OnOK() BOOL bLogin=FALSE;CString strPasswd,strCount;UpdateData(
31、); / 更新数据变量if(!db.Open(m_strDSN) return; / 连接数据库strPasswd=CCrypt:Encrypt(m_strPasswd, 123); / 加密密码CRecordset rs(&db); / 构造记录集rs.Open(CRecordset:forwardOnly,select COUNT(ID) as COUNT from PERSON where ID= + m_strUser+ and PASSWD= + strPasswd + and AUTHORITY=4); / 执行查询rs.GetFieldValue(COUNT,strCount);
32、rs.Close(); / 关闭数据集if(strCount=1) / 判断认证是否通过EndDialog(IDOK); / 结束对话框,返回IDOKelseMessageBox(请输入正确的用户名和密码,注意大小写!,认证失败);db.Close(); / 关闭数据库【2】 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP); /IDB_
33、BITMAP是图对应的ID BITMAP bitmap; 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); / 退出主对话框,关闭程序void CAttendanceD
34、lg:OnBtnRelogin() / 隐藏主对话框ShowWindow(SW_HIDE);/ 显示登录对话框CLoginDlg dlg;if(dlg.DoModal()=IDOK)ShowWindow(SW_SHOW); / 显示对话框else EndDialog(IDCANCEL); / 退出程序void CAttendanceDlg:OnBtnConfig() / 显示工作时间设置对话框CWorkplanDlg dlg;dlg.DoModal();void CAttendanceDlg:OnBtnRecord() / 非模态显示出勤记录对话框if(!m_pAttDlg) / 指针为空,创
35、建对话框m_pAttDlg=new CAttDlg();m_pAttDlg-Create(IDD_DLG_ATTENDANCE, this);m_pAttDlg-ShowWindow(SW_SHOW);else / 对话框已创建m_pAttDlg-ShowWindow(SW_SHOW); / 显示窗口void CAttendanceDlg:OnBtnStatistics() / 非模态显示考勤统计对话框if(!m_pStatDlg) / 指针为空,创建对话框m_pStatDlg=new CStatDlg();m_pStatDlg-Create(IDD_DLG_STAT, this);m_pSt
36、atDlg-ShowWindow(SW_SHOW);else / 对话框已创建m_pStatDlg-ShowWindow(SW_SHOW); / 显示窗口【4】void CWorkplanDlg:OnWorkplanModify() CString strFileName=.workplan.ini; / INI文件名UpdateData(); / 更新数据WritePrivateProfileString(WorkPlan, Time1,m_Time1.Format(%H:%M:%S), strFileName);WritePrivateProfileString(WorkPlan, Tim
37、e2,m_Time2.Format(%H:%M:%S), strFileName);WritePrivateProfileString(WorkPlan, Time3,m_Time3.Format(%H:%M:%S), strFileName);WritePrivateProfileString(WorkPlan, Time4,m_Time4.Format(%H:%M:%S), strFileName);【5】void CWorkplanDlg:OnWorkplanReset() CString cstr4;char str49;int i;int nHour,nMinute,nSecond;
38、 / 时,分,秒CString strFileName=.workplan.ini; / INI文件名/ 读取INI文件GetPrivateProfileString(WorkPlan, 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);GetPrivateProfileStri
39、ng(WorkPlan, Time4, 18:00:00, str3, 9, strFileName);for(i=0; i4; i+) cstri=stri;/ 定义四个时间变量并初始化为INI文件中的值sscanf(cstr0.Left(2), %d, &nHour);/ 得到时sscanf(cstr0.Mid(3,2), %d, &nMinute);/ 得到分sscanf(cstr0.Mid(6,2), %d, &nSecond);/ 得到秒CTime t1(2002,1,1,nHour,nMinute,nSecond);/ 初始化t1sscanf(cstr1.Left(2), %d,
40、&nHour);/ 得到时sscanf(cstr1.Mid(3,2), %d, &nMinute);/ 得到分sscanf(cstr1.Mid(6,2), %d, &nSecond);/ 得到秒CTime t2(2002,1,1,nHour,nMinute,nSecond);/ 初始化t2sscanf(cstr2.Left(2), %d, &nHour);/ 得到时sscanf(cstr2.Mid(3,2), %d, &nMinute);/ 得到分sscanf(cstr2.Mid(6,2), %d, &nSecond);/ 得到秒CTime t3(2002,1,1,nHour,nMinute,
41、nSecond);/ 初始化t3sscanf(cstr3.Left(2), %d, &nHour);/ 得到时sscanf(cstr3.Mid(3,2), %d, &nMinute);/ 得到分sscanf(cstr3.Mid(6,2), %d, &nSecond);/ 得到秒CTime t4(2002,1,1,nHour,nMinute,nSecond);/ 初始化t4/ 设置成员变量m_Time1=t1;m_Time2=t2;m_Time3=t3;m_Time4=t4;UpdateData(FALSE); / 更新界面数据【6】 m_Sheet.AddPage(&m_Page1); / 加
42、第1页m_Sheet.AddPage(&m_Page2); / 加第2页m_Sheet.AddPage(&m_Page3); / 加第3页m_Sheet.AddPage(&m_Page4); / 加第4页m_Sheet.Create(this, WS_CHILD | WS_VISIBLE, 0); / 创建窗口m_Sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT); / 修改风格m_Sheet.ModifyStyle( 0, WS_TABSTOP ); / 修改风格/ 设置窗口位置m_Sheet.SetWindowPos( NULL, 0, 100, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );【7】void C