📄 dlgcheckin.cpp
字号:
// dlgCheckin.cpp : implementation file
//
#include "stdafx.h"
#include "CheckIn.h"
#include "dlgCheckin.h"
#include "CheckRecordset.h"
#include "EmployeeRecordset.h"
#include "ConfigRecordset.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CdlgCheckin dialog
CdlgCheckin::CdlgCheckin(CWnd* pParent /*=NULL*/)
: CDialog(CdlgCheckin::IDD, pParent)
{
//{{AFX_DATA_INIT(CdlgCheckin)
m_strEmployID = _T("");
m_strSecond = _T("");
//}}AFX_DATA_INIT
}
void CdlgCheckin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CdlgCheckin)
DDX_Text(pDX, IDC_EDIT_EMPLOYID, m_strEmployID);
DDX_Text(pDX, IDC_EDIT_SECONDID, m_strSecond);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CdlgCheckin, CDialog)
//{{AFX_MSG_MAP(CdlgCheckin)
ON_BN_CLICKED(IDC_OK, OnConfirm)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CdlgCheckin message handlers
void CdlgCheckin::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
}
void CdlgCheckin::OnConfirm()
{
// TODO: Add your control notification handler code here
CEdit *pEditFirst = (CEdit*)this->GetDlgItem(IDC_EDIT_EMPLOYID);
CEdit *pEditSecond = (CEdit*)this->GetDlgItem(IDC_EDIT_SECONDID);
this->UpdateData(true);
CCheckRecordset rsCheck;
CEmployeeRecordset rsEmployee;
CConfigRecordset rsConfig;
CTime checkinTime = CTime::GetCurrentTime();
CTime TodayTime = CTime::GetCurrentTime();
if (m_strEmployID == m_strSecond)//第一次和第二次输入相同
{
/*检查输入是否合法,就是检查输入的员工号是否在表tbEmployee中*/
if (rsEmployee.IsValidEmployee(m_strSecond))//输入员工号完全正确
{
/*首先判断此员工当天是否已经签到*/
if (rsCheck.IsTodayChecked(TodayTime,m_strEmployID))
{
//此员工当天已经签到
MessageBox("今天这个员工已经签到!","提示",MB_ICONINFORMATION);
}
else//此员工当天没有签过
{
/*从系统配置表中取出公司规定的上班时间*/
CTime RegularTime;
if (!(rsConfig.GetRegularTime(RegularTime)))
MessageBox("签到失败!","提示",MB_ICONINFORMATION);
/*计算签到结果,“正常”“迟到”等*/
int state = GetCheckState(checkinTime,RegularTime);
/*将员工签到记录增加到tbCheckIn表中*/
if (rsCheck.AddCheckRecord(m_strSecond,checkinTime,state))
MessageBox("签到成功!","提示",MB_ICONINFORMATION);
else
MessageBox("签到失败!","提示",MB_ICONINFORMATION);
}
}
else//输入员工号不合法
{
::MessageBox(NULL,"输入的员工号不正确,请重新输入!","提示",MB_ICONINFORMATION);
}
}
else//第一次和第二次输入不同
{
::MessageBox(NULL,"两次输入的员工号不同,请重新输入!","输入错误",MB_ICONINFORMATION);
}
pEditFirst->SetWindowText("");
pEditSecond->SetWindowText("");
pEditFirst->SetFocus();
}
int CdlgCheckin::GetCheckState(CTime CheckTime, CTime RegularTime)
/*根据签到时间和系统设定的tbConfig表中的上班时间+上浮时间*/
/*来计算出勤的结果*/
/*1:正常*/
/*2:迟到*/
/*3:出差*/
/*4:事假*/
/*5:病假*/
/*6:调休*/
/*这里仅能计算出两个结果,一个是正常,一个是迟到,*/
/*其它值可以日后通过系统的修改功能修改得到*/
{
CTimeSpan span;
span = CheckTime - RegularTime;
if (span <=0)
return 1;
else
return 2;
}
BOOL CdlgCheckin::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
/*改变对话框中两个编辑框的字体*/
CFont font;
LOGFONT lgFont;
CEdit *pEmpIdEdit,*pSecond;
CDC *pDC = this->GetDC();
pDC->GetCurrentFont()->GetLogFont(&lgFont);
lgFont.lfItalic = TRUE;
strcpy(lgFont.lfFaceName, "宋体");
lgFont.lfCharSet = GB2312_CHARSET;
lgFont.lfHeight = -20;
font.CreateFontIndirect(&lgFont);
pEmpIdEdit = (CEdit*)this->GetDlgItem(IDC_EDIT_EMPLOYID);
pSecond = (CEdit*)this->GetDlgItem(IDC_EDIT_SECONDID);
pEmpIdEdit->SetFont(&font,true);
pSecond->SetFont(&font,true);
font.Detach();
/*将CFont类对象和字体句柄m_hObject分离,保证CFont类对象出了作用域而被销毁时,*/
/*不致于把字体句柄也销毁,因为这个句柄还用于设置CEdit对应的窗体字体*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -