⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgcheckin.cpp

📁 考勤管理系统 使用VC++开发环境 ODBC数据库访问技术
💻 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 + -