📄 chuqin.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 + -