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

📄 dlgquerycheck.cpp

📁 考勤管理系统 使用VC++开发环境 ODBC数据库访问技术
💻 CPP
字号:
// dlgQueryCheck.cpp : implementation file
//

#include "stdafx.h"
#include "CheckIn.h"
#include "dlgQueryCheck.h"

#include "CheckRecordset.h"
#include "EmployeeRecordset.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CdlgQueryCheck dialog


CdlgQueryCheck::CdlgQueryCheck(CWnd* pParent /*=NULL*/)
	: CDialog(CdlgQueryCheck::IDD, pParent)
{
	//{{AFX_DATA_INIT(CdlgQueryCheck)
	m_strEmpId = _T("");
	m_iBeginDay = 0;
	m_iBeginMonth = 0;
	m_iBeginYear = 0;
	m_iEndDay = 0;
	m_iEndMonth = 0;
	m_iEndYear = 0;
	//}}AFX_DATA_INIT
}


void CdlgQueryCheck::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CdlgQueryCheck)
	DDX_Control(pDX, IDC_LIST_CHECK, m_ListBox);
	DDX_Text(pDX, IDC_EDIT_EMPID, m_strEmpId);
	DDX_Text(pDX, IDC_EDIT_BEGIN_DAY, m_iBeginDay);
	DDX_Text(pDX, IDC_EDIT_BEGIN_MONTH, m_iBeginMonth);
	DDX_Text(pDX, IDC_EDIT_BEGIN_YEAR, m_iBeginYear);
	DDX_Text(pDX, IDC_EDIT_END_DAY, m_iEndDay);
	DDX_Text(pDX, IDC_EDIT_END_MONTH, m_iEndMonth);
	DDX_Text(pDX, IDC_EDIT_END_YEAR, m_iEndYear);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CdlgQueryCheck, CDialog)
	//{{AFX_MSG_MAP(CdlgQueryCheck)
	ON_BN_CLICKED(IDC_OK, OnMyClose)
	ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CdlgQueryCheck message handlers

void CdlgQueryCheck::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();
}

void CdlgQueryCheck::OnMyClose() 
{
	// TODO: Add your control notification handler code here
	EndDialog(10);
	//CDialog::OnOK();
}

void CdlgQueryCheck::OnButtonQuery() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	/*首先判断输入的条件是否合法*/
	/*我们这里要求员工号必须输入*/
	/*起始时间和结束时间全部输入*/
	if (this->m_strEmpId == "")
	{
		MessageBox("必须输入员工号!","提示",MB_ICONINFORMATION|MB_OK);
		return;
	}
	/*应该判断输入的是否为空,是否为数字*/
	CEdit *pBeginYear = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_YEAR);
	CEdit *pBeginMonth = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_MONTH);
	CEdit *pBeginDay = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_DAY);

	CEdit *pEndYear = (CEdit*)this->GetDlgItem(IDC_EDIT_END_YEAR);
	CEdit *pEndMonth = (CEdit*)this->GetDlgItem(IDC_EDIT_END_MONTH);
	CEdit *pEndDay = (CEdit*)this->GetDlgItem(IDC_EDIT_END_DAY);

	char strBeginYear[10];
	char strBeginMonth[10];
	char strBeginDay[10];
	char strEndYear[10];
	char strEndMonth[10];
	char strEndDay[10];
	CString BeginY,BeginM,BeginD,EndY,EndM,EndD;
	pBeginYear->GetWindowText(BeginY);
	pBeginMonth->GetWindowText(BeginM);
	pBeginDay->GetWindowText(BeginD);
	pEndYear->GetWindowText(EndY);
	pEndMonth->GetWindowText(EndM);
	pEndDay->GetWindowText(EndD);

	if ((BeginY == "")||(BeginM == "")||(BeginD=="")||
		(EndY == "") || (EndM=="")||(EndD == ""))
	{
		MessageBox("起始时间和结束时间必须输入!","提示",MB_ICONINFORMATION|MB_OK);
		return;
	}
	
	/*这里还应该判断是否为数字*/
	/*留作读者自己完成*/
	sprintf(strBeginYear,"%d",m_iBeginYear);
	sprintf(strBeginMonth,"%d",m_iBeginMonth);
	sprintf(strBeginDay,"%d",m_iBeginDay);

	sprintf(strEndYear,"%d",m_iEndYear);
	sprintf(strEndMonth,"%d",m_iEndMonth);
	sprintf(strEndDay,"%d",m_iEndDay);

	
	CTime BeginTime = CTime(m_iBeginYear,m_iBeginMonth,m_iBeginDay,0,0,0);
	CTime EndTime = CTime(m_iEndYear,m_iEndMonth,m_iEndDay,24,59,59);
	CTimeSpan span = EndTime - BeginTime;
	/*应该判断输入的起始时间是否早于结束时间*/
	if (span<0)
	{
		MessageBox("起始时间应早于结束时间!","提示",MB_ICONINFORMATION|MB_OK);
		return;
	}
	CString strSql;	
	//strSql = _T("select * from tbCheckIn where EmployeeID = '"+this->m_strEmpId+"' and CheckInTime >= '"+BeginTime+"' and CheckInTime <= '"+EndTime+"'");
	strSql = _T("select * from tbCheckIn where EmployeeID = '"+this->m_strEmpId+"'");

	CCheckRecordset rsCheck;
	CEmployeeRecordset rsEmployee;
	try
	{
		if(rsCheck.IsOpen())
		{
			rsCheck.Close();
		}
		//首先得到这个员工的所有出勤记录,由于时间字段的复杂性
		rsCheck.Open(CRecordset::dynaset,strSql);
		//从这个员工的出勤记录中取得符合这个时间段的记录
		if (rsCheck.IsBOF())
		{
			MessageBox("没有符合条件的出勤信息!","提示",MB_ICONINFORMATION|MB_OK);
			return;
		}
		else
		{
			rsCheck.MoveFirst();
			while(!rsCheck.IsEOF())
			{			
				if ((rsCheck.m_CheckInTime >= BeginTime) && (rsCheck.m_CheckInTime <= EndTime))
				{
					//出勤时间在查询的时间段内,将信息显示在ListBox中
					//员工号    员工姓名    签到时间     结果
					char strYear[10],strMonth[10],strDay[10],strHour[10],strMinute[10];
					sprintf(strYear,"%d",rsCheck.m_CheckInTime.GetYear());
					sprintf(strMonth,"%d",rsCheck.m_CheckInTime.GetMonth());
					sprintf(strDay,"%d",rsCheck.m_CheckInTime.GetDay());
					sprintf(strHour,"%d",rsCheck.m_CheckInTime.GetHour());
					sprintf(strMinute,"%d",rsCheck.m_CheckInTime.GetMinute());
					switch(rsCheck.m_State)
					{
					case 1:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    正常");
						break;
					case 2:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    迟到");
						break;
					case 3:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    出差");
						break;
					case 4:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    事假");
						break;
					case 5:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    病假");
						break;
					case 6:
						this->m_ListBox.AddString(rsCheck.m_EmployeeID+"      "+rsEmployee.GetEmployeeName(rsCheck.m_EmployeeID)+"     "
							+strYear+"年"+strMonth+"月"+strDay+"日"+strHour+"时"+strMinute+"分"+"    调休");
						break;
					}					
				}
				rsCheck.MoveNext();
			}
		}
	}
	catch(CDBException &e)
	{
		//MessageBox("可能输入的数据不合理,起始时间和结束时间必须为数字!","提示",MB_ICONINFORMATION|MB_OK);
		MessageBox(e.m_strError,"提示",MB_ICONINFORMATION|MB_OK);
	}

}

BOOL CdlgQueryCheck::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	this->m_ListBox.AddString("员工号     员工姓名     签到时间          结果");
	CEdit *pBeginYear = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_YEAR);
	CEdit *pBeginMonth = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_MONTH);
	CEdit *pBeginDay = (CEdit*)this->GetDlgItem(IDC_EDIT_BEGIN_DAY);

	CEdit *pEndYear = (CEdit*)this->GetDlgItem(IDC_EDIT_END_YEAR);
	CEdit *pEndMonth = (CEdit*)this->GetDlgItem(IDC_EDIT_END_MONTH);
	CEdit *pEndDay = (CEdit*)this->GetDlgItem(IDC_EDIT_END_DAY);
	pBeginYear->SetWindowText("");
	pBeginMonth->SetWindowText("");
	pBeginDay->SetWindowText("");

	pEndYear->SetWindowText("");
	pEndMonth->SetWindowText("");
	pEndDay->SetWindowText("");
	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 + -