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

📄 chuqin.cpp

📁 这是采用mfc编写的工资管理系统
💻 CPP
字号:
// 
//
/***************************
文件名:Chuqin.cpp 
文件类型:implementation file
功能描述:对出勤信息进行记录
创建人:张国
版本号:1.0
***************************/

#include "stdafx.h"
#include "salarymanagement.h"
#include "Chuqin.h"
#include "KaoqinDlg.h"

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

#define ABSENT_VALUE "1"
/////////////////////////////////////////////////////////////////////////////
// CChuqin dialog


CChuqin::CChuqin(CWnd* pParent /*=NULL*/)
: CDialog(CChuqin::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChuqin)
	m_radio = 0;
	m_remark = _T("");
	m_check1 = FALSE;
	m_check2 = FALSE;
	m_date = COleDateTime::GetCurrentTime();
	m_timeBegin = COleDateTime::GetCurrentTime();
	m_timeEnd = COleDateTime::GetCurrentTime();
	m_check3 = FALSE;
	//}}AFX_DATA_INIT

}

CChuqin::~CChuqin()
{
}

void CChuqin::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChuqin)
	DDX_Control(pDX, IDC_DATETIMEPICKER3, m_dateCtrl);
	DDX_Radio(pDX, IDC_RADIO1, m_radio);
	DDX_Text(pDX, IDC_REMARK, m_remark);
	DDX_Check(pDX, IDC_CHECK1, m_check1);
	DDX_Check(pDX, IDC_CHECK2, m_check2);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER3, m_date);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_timeBegin);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER2, m_timeEnd);
	DDX_Check(pDX, IDC_CHECK3, m_check3);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChuqin, CDialog)
//{{AFX_MSG_MAP(CChuqin)
ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChuqin message handlers

/*********************
函数类型:按钮响应函数
功能描述:保存出差记录
*********************/
void CChuqin::OnSave() 
{
	UpdateData();

	CString nID;
	nID=CKaoqinDlg::m_nIDSelect;//获取员工ID

	if(nID=="")
	{
		MessageBox("请在左边列表框中选择要修改的用户");
		return;
	}

	Prop *mainKey=new Prop[2];//主键初始化,Prop[0]已在CPublic中初始化
	mainKey[0].name="员工ID";
	mainKey[0].value=nID;
	mainKey[1].name="记录日期";
	mainKey[1].value=m_date.Format("%Y-%m-%d");
	
	Prop *simple;
	DataRecord record1;
	record1.mainProp=mainKey;
	record1.nCount=2;
	
	//如果用户选择了“旷工”:
	if(m_radio)
	{
		simple=new Prop[2];
		simple[0].name="旷工原因";
		simple[1].name="旷工";
		simple[0].value=m_remark;
		simple[1].value=ABSENT_VALUE;
		
		record1.smpCount=2;
	}
	else
	{
		if(m_check1&&m_check2)
		{
			record1.smpCount=2;
			simple=new Prop[2];
			simple[0].name="上班时间";
			simple[0].value=m_timeBegin.Format("%H:%M:%S");
			simple[1].name="下班时间";
			simple[1].value=m_timeEnd.Format("%H:%M:%S");
		}
		else if(m_check1)
		{
			record1.smpCount=1;
			simple=new Prop[1];
			simple[0].name="上班时间";
			simple[0].value=m_timeBegin.Format("%H:%M:%S");
		}
		else
		{
			record1.smpCount=1;
			simple=new Prop[1];
			simple[0].name="下班时间";
			simple[0].value=m_timeEnd.Format("%H:%M:%S");
		}
	}
	
	record1.smpProp=simple;
	
	mainKey=new Prop[2];
	simple=new Prop[2];
	
	//各主键名称、值初始化
	mainKey[0].name="员工ID";
	mainKey[0].value=nID;
	mainKey[1].name="记录日期";
	mainKey[1].value=m_date.Format("%Y-%#m-%#d");
	
	//各非主键名称、值初始化
	simple[0].name="记录月份";
	simple[0].value=m_date.Format("%Y-%m");
	
	if(m_radio) 
	{
		//非主键初始化
		simple[1].name="旷工";
		simple[1].value=ABSENT_VALUE;
	}
	else
	{
		if(!m_check1&&!m_check2)
		{
			AfxMessageBox("请选择一个记录选项:迟到或早退");
			return;
		}

		CString temp;
		//获取配置文件的路径
		char profileName[256];
		GetModuleFileName(NULL,profileName,256);
		profileName[strlen(profileName)-3]='\0';
		strcat(profileName,"ini");
		
		int hourB,minuteB,secondB,hourE,minuteE,secondE;
		if(m_check1)
		{
			//从配置文件中读取设置的正常上班的时间
			hourB=GetPrivateProfileInt("Time","hourAm",0,profileName);
			minuteB=GetPrivateProfileInt("Time","minuteAm",0,profileName);
			secondB=GetPrivateProfileInt("Time","secondAm",0,profileName);
			
			//用得到的时间构造CTime对象
			COleDateTime tA(m_timeBegin.GetYear(),m_timeBegin.GetMonth(),m_timeBegin.GetDay(),
				hourB,minuteB,secondB);
			
			COleDateTimeSpan ts=m_timeBegin-tA;//计算时间差,仅保留小时
			int nHour=ts.GetHours();
			temp.Format("%d",nHour);
			
			//非主键初始化
			simple[1].name="迟到时间";
			simple[1].value=temp;
		}
		
		if(m_check2)
		{
			//从配置文件中读取设置的正常下班的时间
			hourE=GetPrivateProfileInt("Time","hourPm",0,profileName);
			minuteE=GetPrivateProfileInt("Time","minutePm",0,profileName);
			secondE=GetPrivateProfileInt("Time","secondPm",0,profileName);
			
			//用得到的时间构造CTime对象
			COleDateTime tB(m_timeBegin.GetYear(),m_timeBegin.GetMonth(),m_timeBegin.GetDay(),
				hourE,minuteE,secondE);
			COleDateTimeSpan ts=m_timeEnd-tB;
			int nHour=ts.GetHours();
			temp.Format("%d",nHour);
			
			//非主键初始化
			simple[1].name="早退时间";
			simple[1].value=temp;
		}
	}
	//获取写入考勤统计表的属性和对应的值
	DataRecord record2;
	record2.mainProp=mainKey;
	record2.nCount=2;
	record2.smpProp=simple;
	record2.smpCount=2;
	
	//更新数据库表(KBeOnDuty表和KaoQin表)
	m_kaoqinPub.SaveKaoqinData(record1,"KBeOnDuty",record2,"KaoQin");
}

/************************************
函数类型:消息响应函数
功能描述:当日期选择的多选框被选择时,
		  使日期控件可编辑
************************************/
void CChuqin::OnCheck3() 
{
	m_check3=!m_check3;
	if(m_check3)
		m_dateCtrl.EnableWindow(TRUE);
	else
		m_dateCtrl.EnableWindow(FALSE);
}

/************************************************
函数类型:消息相应函数
功能描述:当选择了“迟到/早退”时,对应的时间控件
		  可编辑,旷工对应的编辑框不可编辑
************************************************/
void CChuqin::OnRadio1() 
{
	m_radio=0;
	GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(TRUE);
	GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(TRUE);

	GetDlgItem(IDC_CHECK1)->EnableWindow(TRUE);
	GetDlgItem(IDC_CHECK2)->EnableWindow(TRUE);

	GetDlgItem(IDC_REMARK)->EnableWindow(FALSE);
}

/************************************
函数类型:消息响应函数
功能描述:和上一功能相反
************************************/
void CChuqin::OnRadio2() 
{
	m_radio=1;
	GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(FALSE);
	GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(FALSE);

	GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE);
	GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE);

	GetDlgItem(IDC_REMARK)->EnableWindow(TRUE);	
}

⌨️ 快捷键说明

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