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

📄 timecardlist.cpp

📁 人力资源管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// TimeCardList.cpp : implementation file
//

#include "stdafx.h"
#include "hrms.h"
#include "TimeCardList.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTimeCardList dialog


CTimeCardList::CTimeCardList(CWnd* pParent /*=NULL*/)
	: CDialog(CTimeCardList::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTimeCardList)
	//}}AFX_DATA_INIT
	m_CurSel = -1;
}


void CTimeCardList::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTimeCardList)
	DDX_Control(pDX, IDC_LIST1, m_TimeCardList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTimeCardList, CDialog)
	//{{AFX_MSG_MAP(CTimeCardList)
	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
	ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
	ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeCombo3)
	ON_BN_CLICKED(IDC_EXPORT, OnExport)
	ON_COMMAND(IDM_DELETEITEM, OnDeleteitem)
	ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1)
	ON_COMMAND(IDM_QUIT, OnQuit)
	ON_COMMAND(IDM_SEARCH_RECORD, OnSearchRecord)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTimeCardList message handlers



BOOL CTimeCardList::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CComboBox * pCom = (CComboBox*)GetDlgItem(IDC_COMBO1);
	CTimeCardDlg::InitEmployeeList(pCom);
	m_TimeCardList.SetExtendedStyle(
		LVS_EX_FULLROWSELECT
		| LVS_EX_ONECLICKACTIVATE
		| LVS_EX_GRIDLINES );
	m_TimeCardList.InsertColumn(0, "日期", LVCFMT_LEFT, 80);
	m_TimeCardList.InsertColumn(1, "姓名", LVCFMT_LEFT, 50);
	m_TimeCardList.InsertColumn(2, "迟到", LVCFMT_LEFT, 50);
	m_TimeCardList.InsertColumn(3, "早退", LVCFMT_LEFT, 50);
	m_TimeCardList.InsertColumn(4, "缺勤", LVCFMT_LEFT, 50);
	m_TimeCardList.InsertColumn(5, "缺勤类型", LVCFMT_LEFT, 80);
	m_TimeCardList.InsertColumn(6, "工作时间", LVCFMT_LEFT, 80);

	OnSelchangeCombo1();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CTimeCardList::ShowTimeCardList(CString name, int year, int month)
{
	ASSERT(!name.IsEmpty());
	ASSERT(month > 0 && month < 13);

	CADOOperation tmCard;
	CString sql, str;
	DWORD num = 0;
	int i = 0; 

	sql.Format("\
				  select timecart_date,\
				  timecart_reason,\
				  timecart_worklong, \
				  timecart_late_leave_early & 1 as late, \
				  timecart_late_leave_early & 2 as leave_early\
				  from tb_timecard, tb_employee\
				  where year(timecart_date) = %d \
				  and month(timecart_date) = %d \
				  and tb_employee.employee_name = '%s' and\
				  tb_employee.employee_id = tb_timecard.employee_id", year, month, name);
	tmCard.OpenRecordset(sql);
	m_TimeCardList.DeleteAllItems();
	if(tmCard.IsLastRow())
	{
		tmCard.CloseRecorset();
		return TRUE;
	}
	tmCard.MoveFirst();
	do
	{
		tmCard.GetItemContent("timecart_date", CADOOperation::ADO_TYPE_STRING, &str);
		m_TimeCardList.InsertItem(i, str.GetBuffer(0));
		m_TimeCardList.SetItemText(i, 1, name);
		tmCard.GetItemContent("late", CADOOperation::ADO_TYPE_INT, &num);
		if(0!=num)
			m_TimeCardList.SetItemText(i, 2, "是");
		else
			m_TimeCardList.SetItemText(i, 2, "否");

		tmCard.GetItemContent("leave_early", CADOOperation::ADO_TYPE_INT, &num);
		if(0!=num)
			m_TimeCardList.SetItemText(i, 3, "是");
		else
			m_TimeCardList.SetItemText(i, 3, "否");

		tmCard.GetItemContent("timecart_reason", CADOOperation::ADO_TYPE_INT, &num);
		switch(num)
		{
		case 0:
			m_TimeCardList.SetItemText(i, 4, "否");
			break;
		case 1:
			m_TimeCardList.SetItemText(i, 4, "是");
			m_TimeCardList.SetItemText(i, 5, "事假");
			break;
		case 2:
			m_TimeCardList.SetItemText(i, 4, "是");
			m_TimeCardList.SetItemText(i, 5, "公假");
			break;
		case 3:
			m_TimeCardList.SetItemText(i, 4, "是");
			m_TimeCardList.SetItemText(i, 5, "病假");
			break;
		default:
			tmCard.CloseRecorset();
			return FALSE;
		}
		tmCard.GetItemContent("timecart_worklong", CADOOperation::ADO_TYPE_INT, &num);
		str.Format("%d小时%d分", num/60, num%60);
		m_TimeCardList.SetItemText(i, 6, str);
		i++;
		tmCard.MoveNext();
	}while(!tmCard.IsLastRow());

	tmCard.CloseRecorset();

	return TRUE;
}

void CTimeCardList::OnSelchangeCombo1() 
{
	// TODO: Add your control notification handler code here

	CString name;
	GetDlgItemText(IDC_COMBO1, name);
	InitYearComboBox(name);

	OnSelchangeCombo2();
}

void CTimeCardList::OnSelchangeCombo2() 
{
	// TODO: Add your control notification handler code here
	CString name;
	int year;

	GetDlgItemText(IDC_COMBO1, name);
	year = GetDlgItemInt(IDC_COMBO2);
	InitMonthComboBox(name, year);

	UpdateTimeCardList();
}

void CTimeCardList::OnSelchangeCombo3() 
{
	// TODO: Add your control notification handler code here
	UpdateTimeCardList();
}

void CTimeCardList::UpdateTimeCardList()
{

	CString str;
	int year, month;

	GetDlgItemText(IDC_COMBO1, str);
	str.Replace(" ", "");
	if(str.IsEmpty())
	{
		MessageBox("请输入一个合法的名字!", "提示", MB_OK | MB_ICONWARNING);
		return ;
	}
	year = GetDlgItemInt(IDC_COMBO2);
	month = GetDlgItemInt(IDC_COMBO3);
	if(year < 0 || (month >12 && month < 0))
	{
		MessageBox("请选择合理的日期范围!", "提示", MB_OK | MB_ICONWARNING);
		return ;
	}
	if(month > 12 || month < 1)
	{
		m_TimeCardList.DeleteAllItems();
		return;
	}
	
	ShowTimeCardList(str, year, month);
	CollectTimeCard(str, year, month);

}

BOOL CTimeCardList::InitYearComboBox(CString name)
{

	CComboBox* pYear;
	CADOOperation yl;
	CString sql, con;

	pYear = (CComboBox* )GetDlgItem(IDC_COMBO2);
	pYear->ResetContent();

	sql.Format("\
				  select distinct year(timecart_date) as yea\
				  from tb_timecard, tb_employee \
				  where tb_employee.employee_name = '%s' \
				  and tb_employee.employee_id = tb_timecard.employee_id", name);
	yl.OpenRecordset(sql);
	if(yl.IsLastRow())
	{
		yl.CloseRecorset();
		return TRUE;
	}
	yl.MoveFirst();
	do
	{
		yl.GetItemContent("yea", CADOOperation::ADO_TYPE_STRING, &con);
		pYear->AddString(con);
		yl.MoveNext();
	}while(!yl.IsLastRow());
	yl.CloseRecorset();

	pYear->SetCurSel(pYear->GetCount()-1);
	return TRUE;
}

BOOL CTimeCardList::InitMonthComboBox(CString name, int year)
{

	CComboBox* pMonth;
	CADOOperation ml;
	CString sql, con;

	pMonth = (CComboBox* )GetDlgItem(IDC_COMBO3);
	sql.Format("\
				  select distinct month(timecart_date) as mon\
				  from tb_timecard, tb_employee\
				  where year(timecart_date) = %d and tb_employee.employee_name = '%s'\
				  and tb_employee.employee_id = tb_timecard.employee_id", year, name);
	pMonth->ResetContent();
	ml.OpenRecordset(sql);
	if(ml.IsLastRow())
	{
		ml.CloseRecorset();
		return TRUE;
	}
	ml.MoveFirst();
	do
	{
		ml.GetItemContent("mon", CADOOperation::ADO_TYPE_STRING, &con);
		pMonth->AddString(con);
		ml.MoveNext();
	}while(!ml.IsLastRow());
	ml.CloseRecorset();
	pMonth->SetCurSel(pMonth->GetCount()-1);

	return TRUE;
}

void CTimeCardList::OnExport() 
{
	// TODO: Add your control notification handler code here
	SYSTEMTIME sysTime;
	::GetSystemTime(&sysTime);
	CString str;
	str.Format("%d-%d-%d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
	CFileDialog file(FALSE, ".doc", str,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Word 文件(*.doc) | .doc||", NULL);
	if(IDOK != file.DoModal())
		return ;

	str = file.GetPathName();
	ExportToWord(str);
}

BOOL CTimeCardList::ExportToWord(CString &file)
{

	CADOOperation tmCard;
	CString sql, name;
	int year, month;
	GetDlgItemText(IDC_COMBO1, name);
	year = GetDlgItemInt(IDC_COMBO2);
	month = GetDlgItemInt(IDC_COMBO3);

	sql.Format("\
				  select tb_employee.employee_id as 员工编号, \
				  tb_employee.employee_name as 员工姓名, \
				  timecart_date as 考勤卡日期,\
				  timecart_reason as 缺勤原因,\
				  timecart_worklong 工作时间, \
				  timecart_late_leave_early & 1  是否迟到, \
				  timecart_late_leave_early & 2  是否早退\
				  from tb_timecard, tb_employee\
				  where year(timecart_date) = %d \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -