public.cpp

来自「是我编写的一个考勤机管理系统,用于计算某员工某段时间以来的迟到与早退等情况.」· C++ 代码 · 共 1,010 行 · 第 1/3 页

CPP
1,010
字号
//---------------------------------------------------------------------------
#include "Public.h"
#include <StrUtils.hpp>
#include "DM.h"

extern int WAddClassCount=0;
extern int WLateTime=0;
extern AnsiString WRptMemo="";


extern cEmployee *CEmp=NULL;
extern cClass *CC=NULL;
extern cDefClass *CDC=NULL;
extern cDefVac *CDV=NULL;

extern SClass *ClassArr=NULL;
extern SDefClass *DefClassArr=NULL;
extern SDefVac *DefVacArr=NULL;
extern SSetClass *SetClassArr=NULL;
extern SSetVac *SetVacArr=NULL;
extern SEmployee *EmployeeArr=NULL;
extern SLeave *LeaveArr=NULL;
extern SInData *InDataArr=NULL;
extern StmpClassID *tmpClassIDArr=NULL;
extern StmpClass *tmpClassArr=NULL;




extern void __fastcall OpenSQL(TADOQuery *QurFree,AnsiString Sql)
{
    QurFree->Close();
    QurFree->SQL->Clear();
    QurFree->SQL->Add(Sql);
    QurFree->Open();
}

extern void __fastcall Message(AnsiString Msg)
{
  Application->MessageBox(Msg.c_str(),"提示",MB_OK|MB_ICONASTERISK);
}

extern bool __fastcall QueryDly(AnsiString Msg)
{
    if (Application->MessageBox(Msg.c_str(),"询问",MB_YESNO|MB_ICONQUESTION)==IDYES	)
        return true;
    else
        return false;
}

extern int __fastcall CardToDefClassID(AnsiString ACard)
{
    if (EmployeeArr != NULL)
    {
        for (int i=0;i<EmployeeArr[0].Length;i++)
        {
            if (EmployeeArr[i].Card == ACard)
            {
                return  EmployeeArr[i].DefClassID;
            }
        }
    }
    return 0;
}

extern AnsiString __fastcall EmployeeIDToCard(int EmployeeID)
{
    if (EmployeeArr != NULL)
    {
        for (int i=0;i<EmployeeArr[0].Length;i++)
        {
            if (EmployeeArr[i].EmployeeID == EmployeeID)
            {
                return  EmployeeArr[i].Card;
            }
        }
    }
    return 0;
}

extern void __fastcall CreateDefTmpClassID(AnsiString ACard, TDate ADate)
{
    AnsiString sDate;
    sDate=FormatDateTime("yyyy-mm-dd",ADate);

    int iDate;
    iDate = StrToInt(MidStr(sDate, 1, 4)) * 600
        + StrToInt(MidStr(sDate, 6, 2)) * 50 + StrToInt(MidStr(sDate, 9, 2));

    int iDefClassID;
    iDefClassID = CardToDefClassID(ACard);

    if (DefClassArr != NULL)
    {

        delete tmpClassIDArr;
        tmpClassIDArr=NULL;
        tmpClassIDArr = new StmpClassID[DefClassArr[0].Length];
        tmpClassIDArr[0].Length=0;

        for(int i=0;i<DefClassArr[0].Length;i++)
        {
            if (DefClassArr[i].DefClassID == iDefClassID)
            {
                if (iDate >= DefClassArr[i].BeginDate && iDate <= DefClassArr[i].EndDate)
                {

                    if (DefClassArr[i].TimeMode == 0)
                    {

                        tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = False;
                        tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = DefClassArr[i].ClassID;

                    }
                    if (DefClassArr[i].TimeMode == 1)
                    {
                        int iWeek;
                        iWeek = DayOfWeek(ADate);

                        if (iWeek == 1)
                            iWeek = 7;
                        else
                            iWeek = iWeek - 1;

                        if (iWeek >= DefClassArr[i].BeginTime && iWeek <= DefClassArr[i].EndTime)
                        {

                            tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = False;
                            tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = DefClassArr[i].ClassID;

                        }
                    }
                    if (DefClassArr[i].TimeMode == 2)
                    {
                        int iDay;
                        iDay =StrToInt(RightStr(sDate, 2));

                        if (iDay >= DefClassArr[i].BeginTime && iDay <= DefClassArr[i].EndTime)
                        {

                            tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = False;
                            tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = DefClassArr[i].ClassID;

                        }
                    }

                    tmpClassIDArr[0].Length=tmpClassIDArr[0].Length+1;
                }
            }
        }
    }
}

extern void __fastcall CreateTmpClassID(AnsiString ACard, TDate ADate)
{
    AnsiString sDate;
    sDate=FormatDateTime("yyyy-mm-dd",ADate);

    int iDate;
    iDate = StrToInt(MidStr(sDate, 1, 4)) * 600
        + StrToInt(MidStr(sDate, 6, 2)) * 50 + StrToInt(MidStr(sDate, 9, 2));

    if (SetClassArr != NULL)
    {
        delete tmpClassIDArr;
        tmpClassIDArr=NULL;
        tmpClassIDArr = new StmpClassID[DefClassArr[0].Length];
        tmpClassIDArr[0].Length=0;
        for (int i=0;i<SetClassArr[0].Length;i++)
        {
            if (SetClassArr[i].Card == ACard)
            {
                if (i==0 && SetClassArr[i].AddClass)
                {
                    CreateDefTmpClassID(ACard, ADate);
                }

                if (iDate >= SetClassArr[i].BeginDate && iDate <= SetClassArr[i].EndDate)
                {

                    if (SetClassArr[i].TimeMode == 0)
                    {

                        tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = SetClassArr[i].AddClass;
                        tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = SetClassArr[i].ClassID;

                    }
                    if (SetClassArr[i].TimeMode == 1)
                    {
                        int iWeek;
                        iWeek = DayOfWeek(ADate);

                        if (iWeek == 1)
                            iWeek = 7;
                        else
                            iWeek = iWeek - 1;

                        if (iWeek >= SetClassArr[i].BeginTime && iWeek <= SetClassArr[i].EndTime)
                        {

                            tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = SetClassArr[i].AddClass;
                            tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = SetClassArr[i].ClassID;

                        }
                    }
                    if (SetClassArr[i].TimeMode == 2)
                    {
                        int iDay;
                        iDay = StrToInt(RightStr(sDate, 2));

                        if (iDay >= SetClassArr[i].BeginTime && iDay <= SetClassArr[i].EndTime)
                        {

                            tmpClassIDArr[tmpClassIDArr[0].Length].AddClass = SetClassArr[i].AddClass;
                            tmpClassIDArr[tmpClassIDArr[0].Length].ClassID = SetClassArr[i].ClassID;

                        }
                    }

                    tmpClassIDArr[0].Length=tmpClassIDArr[0].Length+1;
                }

            }
        }
    }

    if ((tmpClassIDArr==NULL) || (tmpClassIDArr!=NULL && tmpClassIDArr[0].Length==0))
        CreateDefTmpClassID(ACard, ADate);
}

extern int __fastcall CreateTmpClass(void)
{
    WAddClassCount = 0 ;
    WRptMemo = "" ;

    if (ClassArr==NULL)
        return 0;
    if (tmpClassIDArr==NULL)
        return 0;

    delete tmpClassArr;
    tmpClassArr=NULL;
    tmpClassArr = new StmpClass[ClassArr[0].Length];
    tmpClassArr[0].Length=0;

    for (int i=0;i<tmpClassIDArr[0].Length;i++)
    {
        for (int j=0;j<ClassArr[0].Length;j++)
        {
            if (ClassArr[j].ClassID == tmpClassIDArr[i].ClassID)
            {
                if (tmpClassIDArr[i].AddClass)
                    WAddClassCount=WAddClassCount+1;

                tmpClassArr[tmpClassArr[0].Length].AddClass = tmpClassIDArr[i].AddClass;
                tmpClassArr[tmpClassArr[0].Length].ClassID = tmpClassIDArr[i].ClassID;
                tmpClassArr[tmpClassArr[0].Length].bTime = ClassArr[j].InTime;
                tmpClassArr[tmpClassArr[0].Length].eTime = ClassArr[j].OutTime;

                tmpClassArr[0].Length = tmpClassArr[0].Length + 1;
            }
        }
    }

    if (tmpClassArr==NULL)
        return 0;

    int tmpbtime,tmpetime,tmpClassID;
    bool tmpbln;
    WRptMemo = "加班:";

    for (int i=0;i<tmpClassArr[0].Length-1;i++)
    {
        for (int j=i+1;j<tmpClassArr[0].Length;j++)
        {
            if (tmpClassArr[i].bTime > tmpClassArr[j].bTime)
            {
                tmpbln = tmpClassArr[i].AddClass;
                tmpbtime = tmpClassArr[i].bTime;
                tmpetime = tmpClassArr[i].eTime;
                tmpClassID = tmpClassArr[i].ClassID;

                tmpClassArr[i].AddClass = tmpClassArr[j].AddClass;
                tmpClassArr[i].bTime = tmpClassArr[j].bTime;
                tmpClassArr[i].eTime = tmpClassArr[j].eTime;
                tmpClassArr[i].ClassID = tmpClassArr[j].ClassID;

                tmpClassArr[j].ClassID = tmpClassID;
                tmpClassArr[j].AddClass = tmpbln;
                tmpClassArr[j].bTime = tmpbtime;
                tmpClassArr[j].eTime = tmpetime;
            }
        }
    }

    for (int i=0;i<tmpClassArr[0].Length;i++)
    {

        if (i<tmpClassArr[0].Length-1 && tmpClassArr[i + 1].bTime <= tmpClassArr[i].eTime)
        {
            WRptMemo = "时间段设置有冲突!" ;
            return -1;
        }

        if (tmpClassArr[i].AddClass)
            WRptMemo = WRptMemo + "时间段" + IntToStr(i+1) + "," ;
    }
        


    if (WRptMemo == "加班:")
        WRptMemo = "";
    else
        WRptMemo = LeftStr(WRptMemo, WRptMemo.Length() - 1);
    
//    g_GetTimeCount = tmpClassCount
//    GetClassCount = (tmpClassCount) * 2
    return tmpClassArr[0].Length * 2;
}


extern int __fastcall GetTimePosCount(void)
{
    TADOQuery *QurFree;
    QurFree = new TADOQuery(Application);
    QurFree->Connection = frmDM->Con;

    int iCount,iValue;
    AnsiString tmps,tmps1,SQL;

    SQL="select a.ClassID,a.ClassName,b.OnDutyTime,b.OffDutyTime from class a "
        "left outer join class_d b on a.ClassID=b.ClassID" ;

    OpenSQL(QurFree,SQL);

    iCount=QurFree->RecordCount;
    if (iCount>0)

⌨️ 快捷键说明

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