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 + -
显示快捷键?