📄 terminaldata.cpp
字号:
// TerminalData.cpp : implementation file
//
#include "stdafx.h"
#include "FPSys.h"
#include "TerminalData.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTerminalData dialog
extern CDatabase m_db;
extern CString strVerifyMode[3]={"指纹","密码","ID号+密码+指纹"};
CTerminalData::CTerminalData(CWnd* pParent /*=NULL*/)
: CDialog(CTerminalData::IDD, pParent)
{
//{{AFX_DATA_INIT(CTerminalData)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CTerminalData::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTerminalData)
DDX_Control(pDX, IDC_CHECK_READNEW, m_checkReadnew);
DDX_Control(pDX, IDC_CHECK_TIME, m_checkTime);
DDX_Control(pDX, IDC_DTP_BEGIN, m_dtpBegin);
DDX_Control(pDX, IDC_DTP_FINISH, m_dtpFinish);
DDX_Control(pDX, IDC_LIST_TEMINALDATA, m_cTerminalData);
DDX_Control(pDX, IDC_FK528KMCTRL1, m_cfkData);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTerminalData, CDialog)
//{{AFX_MSG_MAP(CTerminalData)
ON_BN_CLICKED(IDC_BTN_ALLGLOGDATA, OnBtnAllglogdata)
ON_BN_CLICKED(IDC_BTN_CTRLTEMINAL, OnBtnCtrlteminal)
ON_BN_CLICKED(IDC_BTN_GETATTENDDATA, OnBtnGetattenddata)
ON_BN_CLICKED(IDC_BTN_REMOVEDATA, OnBtnRemovedata)
ON_BN_CLICKED(IDC_BTN_REMOVETEMINAL, OnBtnRemoveteminal)
ON_BN_CLICKED(IDC_BTN_SAVETODB, OnBtnSavetodb)
ON_BN_CLICKED(IDC_CHECK_READNEW, OnCheckReadnew)
ON_BN_CLICKED(IDC_CHECK_TIME, OnCheckTime)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTerminalData message handlers
void CTerminalData::OnBtnAllglogdata()
{
// TODO: Add your control notification handler code here
long dwTMachineNumber;
long dwEnrollNumber;
long dwEMachineNumber;
long dwVerifyMode;
long dwYear,dwMonth;
long dwDay, dwHour,dwMinute;
m_cTerminalData.DeleteAllItems();
if(!m_cfkData.ReadAllGLogData(dwMachineNumber))
{
MessageBox("读取信息失败!");
return;
}
while(m_cfkData.GetAllGLogData(dwMachineNumber,&dwTMachineNumber,&dwEnrollNumber,
&dwEMachineNumber,&dwVerifyMode,&dwYear,&dwMonth,&dwDay,&dwHour,&dwMinute))
{
if(1==m_checkTime.GetCheck())
{
BOOL IsIn;
IsIn=ComparTime(dwYear,dwMonth,dwDay);
if(!IsIn)
continue;
}
if(1==m_checkReadnew.GetCheck())
{
BOOL IsIn;
IsIn=IsInData(dwEnrollNumber,dwYear,dwMonth,dwDay,dwHour,dwMinute);
if(IsIn) //表示数据库已有该记录,则不显示出来
continue;
}
InsertIntoItem(dwTMachineNumber,dwEnrollNumber,dwEMachineNumber,dwVerifyMode,
dwYear,dwMonth,dwDay,dwHour,dwMinute);
}
m_cfkData.SetReadMark(false);
}
void CTerminalData::OnBtnCtrlteminal()
{
// TODO: Add your control notification handler code here
CTerminalCtrl dlg;
dlg.DoModal();
}
void CTerminalData::OnBtnGetattenddata()
{
// TODO: Add your control notification handler code here
long dwTMachineNumber;
long dwEnrollNumber;
long dwEMachineNumber;
long dwVerifyMode;
long dwYear,dwMonth;
long dwDay, dwHour,dwMinute;
if(m_cTerminalData.GetItemCount()!=-1)
m_cTerminalData.DeleteAllItems();
if(!m_cfkData.ReadGeneralLogData(dwMachineNumber))
{
MessageBox("读取信息失败!");
return;
}
while(m_cfkData.GetGeneralLogData(dwMachineNumber,&dwTMachineNumber,&dwEnrollNumber,
&dwEMachineNumber,&dwVerifyMode,&dwYear,&dwMonth,&dwDay,&dwHour,&dwMinute))
{
if(1==m_checkTime.GetCheck())
{
BOOL IsIn;
IsIn=ComparTime(dwYear,dwMonth,dwDay);
if(!IsIn)
continue;
}
if(1==m_checkReadnew.GetCheck())
{
BOOL IsIn;
IsIn=IsInData(dwEnrollNumber,dwYear,dwMonth,dwDay,dwHour,dwMinute);
if(IsIn) //表示数据库已有该记录,则不显示出来
continue;
}
InsertIntoItem(dwTMachineNumber,dwEnrollNumber,dwEMachineNumber,dwVerifyMode,
dwYear,dwMonth,dwDay,dwHour,dwMinute);
}
m_cfkData.SetReadMark(false);
}
void CTerminalData::OnBtnRemovedata()
{
// TODO: Add your control notification handler code here
m_cTerminalData.DeleteAllItems();
}
void CTerminalData::OnBtnRemoveteminal()
{
// TODO: Add your control notification handler code here
}
void CTerminalData::OnBtnSavetodb()
{
// TODO: Add your control notification handler code here
/****************************************************************************************
需要保存的数据包括: 考勤号,考勤时间(具体日期,包括时间),考勤机号,
考勤类型(此值可由考勤时间与制度时间比较得出),考勤类型(指纹或密码)
*****************************************************************************************/
long iAttID,iMachineNum,iVerifyMod,iAttTypeID;
CString strTime;
int nIndex=m_cTerminalData.GetItemCount();
for(int i=0;i<nIndex;i++)
{
CString tmp;
tmp=m_cTerminalData.GetItemText(i,1); //考勤号
iAttID=atoi(tmp);
strTime=m_cTerminalData.GetItemText(i,2); //时间
tmp=m_cTerminalData.GetItemText(i,3); //考勤方式
iVerifyMod=atoi(tmp);
tmp=m_cTerminalData.GetItemText(i,4);
iMachineNum=atoi(tmp); //考勤机号
//下面处理出考勤类型
/*******************取得考勤时间***********************************/
int iHour;
iHour=atoi(strTime.Mid(11,2));
int iMinute;
iMinute=atoi(strTime.Mid(14,2));
int t=iHour*60+iMinute;
/*******************取得考勤时间差*********************************/
LPCTSTR FILE_NAME=".\\time.ini";
int late=GetPrivateProfileInt("Time","Late",0,FILE_NAME);
int lateID=GetPrivateProfileInt("Time","AttendID1",0,FILE_NAME);
int absent=GetPrivateProfileInt("Time","Absent",0,FILE_NAME);
int absentID=GetPrivateProfileInt("Time","AttendID2",0,FILE_NAME);
int leave=GetPrivateProfileInt("Time","Leave",0,FILE_NAME);
int leaveID=GetPrivateProfileInt("Time","AttendID3",0,FILE_NAME);
/*******************取得上课时间段*********************************/
/**************需要要时间段,上课时间,下课时间**********************/
//CString ScheduleID,Uptime,Downtime;
int iCount;
TRY{
BOOL IsSchedule=FALSE;
int t1,t2;
int iScheduleId;
CRecordset rs(&m_db);
rs.Open(CRecordset::dynaset,"select *from tab_CourseTime");
while(!rs.IsEOF())
rs.MoveNext();
iCount=rs.GetRecordCount(); //获得记录条数
rs.MoveFirst();
while(!rs.IsEOF())
{
//下面取得每个每一行的数据并进行比较
CString sUptime,sDowntime;
CDBVariant var;
rs.GetFieldValue((short)0,var,SQL_C_SLONG);
if(var.m_dwType!=DBVT_NULL)
iScheduleId=var.m_iVal;
var.Clear();
rs.GetFieldValue(1,sUptime);
rs.GetFieldValue(2,sDowntime);
t1=atoi(sUptime.Mid(11,2))*60+atoi(sUptime.Mid(14,2));
t2=atoi(sDowntime.Mid(11,2))*60+atoi(sDowntime.Mid(14,2));
if(CompareTime(t,t1,t2))
{ IsSchedule=TRUE;break;}
iCount--;
rs.MoveNext();
}
if(iCount==0 && !IsSchedule)
{
CString str;
str.Format("%d",i+1);
m_DisableData+=str+" ";
// MessageBox(str);
continue;
}
CString tmp;
tmp.Format("%d",i+1);
//由上面 while 循环知道了是在哪个时段的考勤,下面处理出考勤类型
iAttTypeID=DealAttendIDOut(t,t1,t2); /*返回0(正常),1(迟到),2(旷课),3(早退)*/
if(!InsertToDB(iAttID,strTime,iAttTypeID,iMachineNum,iVerifyMod))
m_IsInDB+=tmp+" ";
}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH
}
CString msg;
msg.Format("第"+m_DisableData+"为无效数据,"+"第"+m_IsInDB+"为重复数据");//+"第"+m_IsStore+"保存成功");
GetDlgItem(IDC_STATIC_MSG)->SetWindowText(msg);
MessageBox("所有有效数据已保存至数据库中!");
}
void CTerminalData::OnCheckReadnew()
{
// TODO: Add your control notification handler code here
}
void CTerminalData::OnCheckTime()
{
// TODO: Add your control notification handler code here
if(1==m_checkTime.GetCheck())
{
GetDlgItem(IDC_DTP_BEGIN)->EnableWindow(TRUE);
GetDlgItem(IDC_DTP_FINISH)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_DTP_BEGIN)->EnableWindow(FALSE);
GetDlgItem(IDC_DTP_FINISH)->EnableWindow(FALSE);
}
}
BOOL CTerminalData::ComparTime(long dwYear, long dwMonth, long dwDay)
{
long lBegin,lFinish;
CString sYear,sMonth,sDay;
CTime ctime;
m_dtpBegin.GetTime(ctime);
sYear.Format("%d",ctime.GetYear());
sMonth.Format("%d",ctime.GetMonth());
sDay.Format("%d",ctime.GetDay());
//0000 00 00
lBegin=atoi(sYear)*10000+atoi(sMonth)*100+atoi(sDay);
m_dtpFinish.GetTime(ctime);
sYear.Format("%d",ctime.GetYear());
sMonth.Format("%d",ctime.GetMonth());
sDay.Format("%d",ctime.GetDay());
lFinish=atoi(sYear)*10000+atoi(sMonth)*100+atoi(sDay);
long temp;
temp=dwYear*10000+dwMonth*100+dwDay;
if(temp>=lBegin && temp<=lFinish)
return TRUE;
else
return FALSE;
}
BOOL CTerminalData::IsInData(long dwEnrollNumber, long dwYear, long dwMonth, long dwDay, long dwHour, long dwMinute)
{
CString t;
CString sMo,sD,sH,sMi;
if(dwMonth>10)
sMo.Format("%d",dwMonth);
else
sMo.Format("0%d",dwMonth);
if(dwDay>10)
sD.Format("%d",dwDay);
else
sD.Format("0%d",dwDay);
if(dwHour>10)
sH.Format("%d",dwHour);
else
sH.Format("0%d",dwHour);
if(dwMinute>10)
sMi.Format("%d",dwMinute);
else
sMi.Format("0%d",dwMinute);
t.Format("%d-%s-%s %s:%s:00",dwYear,sMo,sD,sH,sMi);
// MessageBox(t);
CString sql;
sql.Format("select *from tab_AttendInfomation where AttendID=%d and TheDay>=%d",dwEnrollNumber,atoi(t));
TRY{
CRecordset rs(&m_db);
rs.Open(CRecordset::dynaset,sql);
if(!rs.IsEOF())
return TRUE;
return FALSE;
}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH
}
void CTerminalData::InsertIntoItem(long dwTMachineNumber, long dwEnrollNumber, long dwEMachineNumber, long dwVerifyMode, long dwYear, long dwMonth, long dwDay, long dwHour, long dwMinute)
{
int nIndex=m_cTerminalData.GetItemCount();
int id=nIndex+1;
LV_ITEM lvItem;
lvItem.mask=LVIF_TEXT;
lvItem.iItem=nIndex;
lvItem.iSubItem=0;
CString strEnrollNumber,strTime,strMachineNumber;
CString temp;
temp.Format("%d",id);
strEnrollNumber.Format("%d",dwEnrollNumber);
// m_cTime(dwYear,dwMonth,dwDay,dwHour,dwMinute,0);
CString strMonth,strDay,strHour,strMinute;
if(dwMonth<10)
strMonth.Format("0%d",dwMonth);
else
strMonth.Format("%d",dwMonth);
if(dwDay<10)
strDay.Format("0%d",dwDay);
else
strDay.Format("%d",dwDay);
if(dwHour<10)
strHour.Format("0%d",dwHour);
else
strHour.Format("%d",dwHour);
if(dwMinute<10)
strMinute.Format("0%d",dwMinute);
else
strMinute.Format("%d",dwMinute);
strTime.Format("%d-%s-%s %s:%s",dwYear,strMonth,strDay,strHour,strMinute);
strMachineNumber.Format("%d",dwMachineNumber);
lvItem.pszText=(char*)(LPCTSTR)temp; //编号
m_cTerminalData.InsertItem(&lvItem);
m_cTerminalData.SetItemText(nIndex,1,strEnrollNumber); //考勤号
m_cTerminalData.SetItemText(nIndex,3,strVerifyMode[dwVerifyMode-1]);
m_cTerminalData.SetItemText(nIndex,2,strTime);
m_cTerminalData.SetItemText(nIndex,4,strMachineNumber);
id++;
}
int CTerminalData::DealAttendIDOut(int t, int t1, int t2)
{
LPCTSTR FILE_NAME=".\\time.ini";
CString strCaption;
GetPrivateProfileString("Time","Caption","Default Caption",
strCaption.GetBuffer(MAX_PATH),MAX_PATH,FILE_NAME);
int late=GetPrivateProfileInt("Time","Late",0,FILE_NAME);
int absent=GetPrivateProfileInt("Time","Absent",0,FILE_NAME);
int leave=GetPrivateProfileInt("Time","Leave",0,FILE_NAME);
int id1=GetPrivateProfileInt("Time","AttendID1",0,FILE_NAME);
int id2=GetPrivateProfileInt("Time","AttendID2",0,FILE_NAME);
int id3=GetPrivateProfileInt("Time","AttendID3",0,FILE_NAME);
if(t<=t1 || t>=t2) // 正常考勤
return 0;
if(t-t1<late) //迟到情况
return id1;
if(t-t1>late) //旷课或早退情况
{
if((t2-t)>=leave) //早退
return id2;
else
return id3; //旷课
}
}
BOOL CTerminalData::InsertToDB(long iAttID, CString strTime, long iAttTypeID, long iMachineNum, long iVerifyMod)
{
CString sql;
TRY{
sql.Format("select *from tab_AttendInfomation where AttendID=%d and TheDay='%s' ",
iAttID,strTime);
CRecordset rs(&m_db);
rs.Open(CRecordset::dynaset,sql);
if(!rs.IsEOF())
return FALSE;
sql.Format("Insert into tab_AttendInfomation(AttendID,TheDay,AttendTypeID,VerifyMode,"
"MachineNum) values(%ld,'%s',%ld,%ld,%ld)",
iAttID,strTime,iAttTypeID,iVerifyMod,iMachineNum);
TRACE(sql);
m_db.ExecuteSQL(sql);
return TRUE;
}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH
}
BOOL CTerminalData::CompareTime(int t, int t1, int t2)
{
if(t>t1-5 && t<t2+5) //属于该时段内的考勤
return true;
else
return false;
}
BOOL CTerminalData::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|
LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;
m_cTerminalData.SetExtendedStyle(dwExStyle);
m_cTerminalData.InsertColumn(0,"编号",LVCFMT_CENTER,80);
m_cTerminalData.InsertColumn(1,"考勤号",LVCFMT_CENTER,80);
m_cTerminalData.InsertColumn(3,"考勤方式",LVCFMT_CENTER,120);
m_cTerminalData.InsertColumn(2,"考勤时间",LVCFMT_CENTER,140);
m_cTerminalData.InsertColumn(4,"考勤机号",LVCFMT_CENTER,100);
GetDlgItem(IDC_DTP_BEGIN)->EnableWindow(FALSE);
GetDlgItem(IDC_DTP_FINISH)->EnableWindow(FALSE);
m_cfkData.SetReadMark(false);
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 + -