public.cpp
来自「是我编写的一个考勤机管理系统,用于计算某员工某段时间以来的迟到与早退等情况.」· C++ 代码 · 共 1,010 行 · 第 1/3 页
CPP
1,010 行
{
delete ClassArr;
ClassArr = NULL;
ClassArr = new SClass[iCount];
ClassArr[0].Length=iCount;
QurFree->First();
for (int i=0;i<iCount;i++ )
{
ClassArr[i].ClassName = QurFree->FieldByName("ClassName")->AsString;
ClassArr[i].ClassID = QurFree->FieldByName("ClassID")->AsInteger;
tmps = QurFree->FieldByName("OnDutyTime")->AsString;
tmps1 = MidStr(tmps,0,AnsiPos(":",tmps)-1);
if (Trim(tmps1)=="")
iValue =0;
else
iValue = StrToInt(Trim(tmps1));
tmps1 = MidStr(tmps,AnsiPos(":",tmps)+1,tmps.Length());
if (Trim(tmps1)=="")
iValue = iValue * 60;
else
iValue=StrToInt(Trim(tmps1)) + iValue * 60;
ClassArr[i].InTime = iValue;
tmps = QurFree->FieldByName("OffDutyTime")->AsString;
tmps1 = MidStr(tmps,0,AnsiPos(":",tmps)-1);
if (Trim(tmps1)=="")
iValue =0;
else
iValue = StrToInt(Trim(tmps1));
tmps1 = MidStr(tmps,AnsiPos(":",tmps)+1,tmps.Length());
if (Trim(tmps1)=="")
iValue = iValue * 60;
else
iValue=StrToInt(Trim(tmps1)) + iValue * 60;
ClassArr[i].OutTime = iValue;
QurFree->Next();
}
}
int tmpClassID,tmpInTime,tmpOutTime ;
AnsiString tmpClassName;
if (ClassArr == NULL) return 0;
iCount = ClassArr[0].Length;
for (int i=0;i<iCount-1;i++)
{
for (int j=i+1;j<iCount;j++)
{
if (ClassArr[i].InTime > ClassArr[j].InTime)
{
tmpClassID = ClassArr[i].ClassID;
tmpClassName = ClassArr[i].ClassName;
tmpInTime = ClassArr[i].InTime;
tmpOutTime = ClassArr[i].OutTime;
ClassArr[i].ClassID = ClassArr[j].ClassID;
ClassArr[i].ClassName = ClassArr[j].ClassName;
ClassArr[i].InTime = ClassArr[j].InTime;
ClassArr[i].OutTime = ClassArr[j].OutTime;
ClassArr[j].ClassID = tmpClassID;
ClassArr[j].ClassName = tmpClassName;
ClassArr[j].InTime = tmpInTime;
ClassArr[j].OutTime = tmpOutTime;
}
}
}
int GetTimePosCount=1;
for (int i=0;i<iCount-1;i++)
{
for (int j=i+1;j<iCount;j++)
{
if (ClassArr[j].InTime > ClassArr[i].OutTime)
{
GetTimePosCount = GetTimePosCount + 1 ;
i = j - 1;
break;
}
}
}
QurFree=NULL;
delete QurFree;
return GetTimePosCount;
}
extern int __fastcall GetTimePos(AnsiString ATime)
{
int TimePos=0,Index=0;
int MidTime=0,iTime=0;
iTime = StrToInt(Trim(MidStr(ATime, 1, 2))) * 60
+ StrToInt(Trim(MidStr(ATime, 3, 4))) ;
if (tmpClassArr==NULL) return 0;
for (int i=0;i<tmpClassArr[0].Length;i++ )
{
if (i!=0 && tmpClassArr[i].bTime <= tmpClassArr[i - 1].eTime)
return -1;
if (Index != 0)
{
TimePos = TimePos + 1;
MidTime = (tmpClassArr[i].bTime - tmpClassArr[i-1].eTime) / 2 + tmpClassArr[i-1].eTime;
Index = 0;
}
if (iTime < MidTime)
return TimePos;
if (Index == 0)
{
TimePos = TimePos + 1;
MidTime = (tmpClassArr[i].eTime - tmpClassArr[i].bTime) / 2 + tmpClassArr[i].bTime;
Index = 1;
}
if (iTime < MidTime)
return TimePos;
}
return (tmpClassArr[0].Length) * 2;
}
extern int __fastcall GetTimeState(AnsiString ATime, int ATimePos, int ALate, int Absent)
{
if (tmpClassArr==NULL) return -1;
int iTime=0,iTimePos=0;
iTime = StrToInt(Trim(MidStr(ATime, 1, 2))) * 60 + StrToInt(Trim(MidStr(ATime, 3, 4)));
WLateTime = 0;
for (int i=0 ;i < tmpClassArr[0].Length; i++)
{
if (ATimePos % 2 == 1)
{
iTimePos = (ATimePos + 1) / 2;
if (i+1 == iTimePos)
{
WLateTime = iTime - tmpClassArr[i].bTime;
if (tmpClassArr[i].bTime + Absent < iTime)
return 2;
if (tmpClassArr[i].bTime + ALate < iTime)
return 1;
}
}
if (ATimePos % 2 == 0)
{
iTimePos = ATimePos / 2;
if (i+1 == iTimePos)
{
WLateTime = iTime - tmpClassArr[i].eTime;
if (tmpClassArr[i].eTime - Absent > iTime)
return 2;
if (tmpClassArr[i].eTime - ALate > iTime)
return 1;
}
}
}
return 0;
}
extern bool __fastcall GetYesNoLeave(int AEmployeeID, int ATimePos, TDate ADate)
{
if (LeaveArr==NULL) return false;
int iWeek,iDay;
AnsiString sDate ;
sDate=FormatDateTime("yyyy-mm-dd",ADate);
//TDate dDate;
// dDate=StrToDate(ADate);
for (int i=0;i<LeaveArr[0].Length;i++)
{
if (LeaveArr[i].EmployeeID == AEmployeeID)
{
if (LeaveArr[i].TimePos == 0 || LeaveArr[i].TimePos ==ATimePos)
{
if ( sDate >= FormatDateTime("yyyy-mm-dd",LeaveArr[i].BeginDate)
&& sDate <= FormatDateTime("yyyy-mm-dd",LeaveArr[i].EndDate) )
{
if (LeaveArr[i].TimeMode ==0)
return true;
else if (LeaveArr[i].TimeMode == 1)
{
iWeek = DayOfWeek(ADate) ;
if (iWeek == 1)
iWeek = 7;
else
iWeek = iWeek - 1;
if (iWeek >= LeaveArr[i].BeginTime && iWeek <= LeaveArr[i].EndTime)
return true;
}
else if (LeaveArr[i].TimeMode == 2)
{
iDay = StrToInt(RightStr(ADate, 2));
if ( iDay >= LeaveArr[i].BeginTime && iDay <= LeaveArr[i].EndTime)
return true;
}
}
}
}
}
return false;
}
extern bool __fastcall GetYesNoVac(int AEmployeeID, int ATimePos, int AVacID, TDate ADate)
{
int iWeek,iDay;
if (SetVacArr!=NULL)
{
for (int i=0;i<SetVacArr[0].Length;i++)
{
if (SetVacArr[i].EmployeeID == AEmployeeID)
{
if (SetVacArr[i].TimePos == 0 || SetVacArr[i].TimePos ==ATimePos)
{
if (ADate >= SetVacArr[i].BeginDate && ADate <=SetVacArr[i].EndDate)
{
if (SetVacArr[i].TimeMode ==0)
return true;
else if (SetVacArr[i].TimeMode == 1)
{
iWeek = DayOfWeek(ADate) ;
if (iWeek == 1)
iWeek = 7;
else
iWeek = iWeek - 1;
if (iWeek >= SetVacArr[i].BeginTime && iWeek <= SetVacArr[i].EndTime)
return true;
}
else if (SetVacArr[i].TimeMode == 2)
{
iDay = StrToInt(RightStr(ADate, 2));
if ( iDay >= SetVacArr[i].BeginTime && iDay <= SetVacArr[i].EndTime)
return true;
}
}
}
}
}
}
if (DefVacArr !=NULL)
{
for (int i=0;i<DefVacArr[0].Length;i++)
{
if (DefVacArr[i].DefVacID == AVacID)
{
if (DefVacArr[i].TimePos == 0 || DefVacArr[i].TimePos ==ATimePos)
{
if (ADate >= DefVacArr[i].BeginDate && ADate <=DefVacArr[i].EndDate)
{
if (DefVacArr[i].TimeMode ==0)
return true;
else if (DefVacArr[i].TimeMode == 1)
{
iWeek = DayOfWeek(ADate) ;
if (iWeek == 1)
iWeek = 7;
else
iWeek = iWeek - 1;
if (iWeek >= DefVacArr[i].BeginTime && iWeek <= DefVacArr[i].EndTime)
return true;
}
else if (DefVacArr[i].TimeMode == 2)
{
iDay = StrToInt(RightStr(ADate, 2));
if ( iDay >= DefVacArr[i].BeginTime && iDay <= DefVacArr[i].EndTime)
return true;
}
}
}
}
}
}
return false;
}
extern void __fastcall FillData(TDate dBeginDate, TDate dEndDate)
{
TADOQuery *QurFree;
QurFree = new TADOQuery(Application);
QurFree->Connection = frmDM->Con;
int iCount,iValue;
AnsiString tmps,tmps1,SQL;
AnsiString sBeginDate;
AnsiString sEndDate;
sBeginDate = FormatDateTime("yyyy-mm-dd",dBeginDate-1);
sEndDate = FormatDateTime("yyyy-mm-dd",dEndDate+1);
//=================ClassInfo======================================
OpenSQL(QurFree,"select a.ClassID,a.ClassName,b.OnDutyTime,b.OffDutyTime from class a "
"left outer join class_d b on a.ClassID=b.ClassID");
iCount=QurFree->RecordCount;
if (iCount>0)
{
delete ClassArr;
ClassArr = NULL;
ClassArr = new SClass[iCount];
ClassArr[0].Length=iCount;
QurFree->First();
for (int i=0;i<iCount;i++ )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?