⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leaveedit.cpp

📁 是我编写的一个考勤机管理系统,用于计算某员工某段时间以来的迟到与早退等情况.
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <StrUtils.hpp>
#include "LeaveEdit.h"
#include "Leave.h"
#include "DM.h"
#include "Public.h"
//---------------------------------------------------------------------------

#pragma package(smart_init)
#pragma link "BaseFormEdit"
#pragma link "DBGridEh"
#pragma resource "*.dfm"
TfrmLeaveEdit *frmLeaveEdit;
//---------------------------------------------------------------------------
__fastcall TfrmLeaveEdit::TfrmLeaveEdit(TComponent* Owner)
    : TfrmBaseFormEdit(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TfrmLeaveEdit::LoadData(void)
{
    OpenSQL(QurFree,"select * from Employee");
    CmbEmployee->Items->Clear();
    if (QurFree->RecordCount>0)
    {
        QurFree->First();
        while (!QurFree->Eof)
        {
            CEmp = new cEmployee;
            CEmp->iID = QurFree->FieldByName("EmployeeID")->AsInteger ;
            CEmp->sName = QurFree->FieldByName("Name")->AsString ;

            CmbEmployee->Items->AddObject(CEmp->sName,CEmp );
            QurFree->Next();
        }
    }
    
    Grid->Columns->Items[2]->PickList->Clear();
    Grid->Columns->Items[2]->PickList->CommaText = "每天,每周,每月";

    int iTimePosCount;
    iTimePosCount = GetTimePosCount();

    Grid->Columns->Items[5]->PickList->Clear();
    for(int i=1;i<=iTimePosCount;i++)
    {
        Grid->Columns->Items[5]->PickList->Add("时间段"+IntToStr(i));
    }
    Grid->Columns->Items[5]->PickList->Add("全天");
}

void __fastcall TfrmLeaveEdit::AddBill(void)
{
    AnsiString sNo,sSQL;
    AnsiString stmp;
    int itmp;
    sNo="QJDJ" + FormatDateTime("yymmdd",Date()) ;
    sSQL="select Max(BillNo) as sNo from LeaveInfo where BillNo like '" + sNo + "%'";
    //Message(sSQL);
    OpenSQL(QurFree,sSQL);
    if ( QurFree->RecordCount==0 || QurFree->FieldByName("sNo")->IsNull )
    {
        sNo=sNo+"0001";
    }
    else
    {
        stmp=RightStr(QurFree->FieldByName("sNo")->AsString,4);
        itmp=StrToInt(stmp)+1;
        sNo= sNo + RightStr ("0000" + IntToStr(itmp),4);
    }

    EdtBillNo->Text= sNo;
    OpenSQL(QurGrid,"select * from DefVac_D where DefVacID=0");
    CmbEmployee->Text="";
    DtpDate->Date=Date();
    Memo->Clear();
    BtnState(1);
    mEdit=false;
    mChanged=true;
    mLeaveID=0;
}
void __fastcall TfrmLeaveEdit::BtnAddClick(TObject *Sender)
{
    AddBill();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::BtnState(int State)
{
    switch (State)
    {

      case 1 : //新增
        EdtBillNo->ReadOnly=true;
        CmbEmployee->Enabled =true;
        DtpDate->Enabled=true;
        Memo->Enabled =true;
        Grid->Enabled=true;
        Grid->ReadOnly =false;
        Grid->PopupMenu =MnuLeaveEdit;
        break;

      case 2 : //查看
        EdtBillNo->ReadOnly=true;
        CmbEmployee->Enabled =false;
        DtpDate->Enabled=false;
        Memo->Enabled =false;
        Grid->ReadOnly =true;
        Grid->PopupMenu =NULL;
        break;

      case 3 : //修改
        EdtBillNo->ReadOnly=true;
        CmbEmployee->Enabled =true;
        DtpDate->Enabled=true;
        Memo->Enabled =true;
        Grid->Enabled=true;
        Grid->ReadOnly =false;
        Grid->PopupMenu =MnuLeaveEdit;
        break;
    }
}

void __fastcall TfrmLeaveEdit::AddRecord(void)
{
    if (Grid->ReadOnly) return;
    if (QurGrid->RecNo == QurGrid->RecordCount)
    {
        if (!QurGrid->FieldByName("BeginDate")->IsNull && !QurGrid->FieldByName("EndDate")->IsNull
        && !QurGrid->FieldByName("TimeMode")->IsNull && !QurGrid->FieldByName("TimePos")->IsNull)
        {
            Grid->DataSource->DataSet->Append();
            Grid->DataSource->DataSet->Post();
        }
    }
}
void __fastcall TfrmLeaveEdit::FormShow(TObject *Sender)
{
    LoadData();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    frmLeaveEdit=NULL;
    Action=caFree;
}
//---------------------------------------------------------------------------


void __fastcall TfrmLeaveEdit::ViewBill(int LeaveID)
{
    OpenSQL(QurFree,"select a.LeaveID,a.BillNo,b.Name,a.LeaveDate,a.Memo1 from LeaveInfo a "
       " left outer join Employee b on a.EmployeeID=b.EmployeeID where a.LeaveID=" + IntToStr(LeaveID));
    if (QurFree->RecordCount==0)
    {
        Message("该单据已不存在!");
        return;
    }

    EdtBillNo->Text=QurFree->FieldByName("BillNo")->AsString;
    CmbEmployee->Text = QurFree->FieldByName("Name")->AsString;
    DtpDate->Date= QurFree->FieldByName("LeaveDate")->AsDateTime;
    Memo->Text = QurFree->FieldByName("Memo1")->AsString;

  /*  OpenSQL(QurGrid,"SELECT A.BEGINDATE,A.ENDDATE,A.TIMEMODE,"
        "A.BEGINTIME,A.ENDTIME,A.CLASSID,B.CLASSNAME FROM DEFCLASS_D A "
        "LEFT OUTER JOIN CLASS B ON A.CLASSID=B.CLASSID WHERE A.DefCLASSID=" + IntToStr(DefClassID)); */

    OpenSQL(QurGrid,"select * from LeaveInfo_D WHERE LeaveID= " + IntToStr(LeaveID));

    BtnState(2);
    mEdit=true;
    mChanged=false;
    mLeaveID= LeaveID;
}

bool __fastcall TfrmLeaveEdit::SaveBill(void)
{

    if (CmbEmployee->Text =="")
    {
        Message("请选择员工名称!");
        return false;
    }

    QurGrid->Edit();
    QurGrid->Post();

    QurGrid->First();
    while (!QurGrid->Eof)
    {
        if (QurGrid->FieldByName("BeginDate")->IsNull && QurGrid->FieldByName("EndDate")->IsNull
            && QurGrid->FieldByName("TimeMode")->IsNull && QurGrid->FieldByName("TimePos")->IsNull)
        {
            QurGrid->Delete();
            if (QurGrid->IsEmpty() || QurGrid->RecordCount ==0 )
            {
                Message("明细不能为空!");
                return false;
            }
            continue;
        }

        if (QurGrid->FieldByName("BeginDate")->IsNull)
        {
            Grid->SelectedIndex=0;
            Message("请选择开始日期!");
            return false;
        }
        if (QurGrid->FieldByName("EndDate")->IsNull)
        {
            Grid->SelectedIndex=1;
            Message("请选择结束日期!");
            return false;
        }
        if (QurGrid->FieldByName("TimeMode")->IsNull)
        {
            Grid->SelectedIndex=2;
            Message("请选择时间模式!");
            return false;
        }
        else
        {
            if (QurGrid->FieldByName("TimeMode")->AsString=="每周" ||
                QurGrid->FieldByName("TimeMode")->AsString=="每月" )
            {
                if (QurGrid->FieldByName("BeginTime")->IsNull)
                {
                    Grid->SelectedIndex=3;
                    Message("请选择开始时间!");
                    return false;
                }
                if (QurGrid->FieldByName("EndTime")->IsNull)
                {
                    Grid->SelectedIndex=4;
                    Message("请选择结束时间!");
                    return false;
                }
            }
        }
        if (QurGrid->FieldByName("TimePos")->IsNull)
        {
            Grid->SelectedIndex=5;
            Message("请选择时间段!");
            return false;
        }

        QurGrid->Next();
    }

    if(mChanged==false) return false;

    AnsiString SQL;

    if (!mEdit)
    {
        SQL="insert into leaveInfo(EmployeeID,LeaveDate,Memo1,BillNo) values("
           + IntToStr(((cEmployee*)(CmbEmployee->Items->Objects[CmbEmployee->Items->IndexOf(CmbEmployee->Text)]))->iID)
           + ",'" + DtpDate->Date + "','" + Memo->Text + "','" + EdtBillNo->Text + "')" ;
        //Message(SQL);
        frmDM->Con->Execute(SQL);
        OpenSQL(QurFree,"select LeaveID from LeaveInfo where BillNo ='" + Trim(EdtBillNo->Text) + "'" );
        if (QurFree->RecordCount == 0)
        {
            Message("保存失败!");
            return false;
        }
        mLeaveID=QurFree->FieldByName("LeaveID")->AsInteger;
    }
    else
    {
        OpenSQL(QurFree,"select * from leaveInfo where LeaveID= " + IntToStr(mLeaveID));
        if (QurFree->RecordCount==0 )
        {
            Message ("该单据已不存在!");
            return false;
        }
        QurFree->Edit() ;
        QurFree->FieldByName("BillNo")->AsString= Trim(EdtBillNo->Text);
        QurFree->FieldByName("EmployeeID")->AsInteger=
            ((cEmployee*)(CmbEmployee->Items->Objects[CmbEmployee->Items->IndexOf(CmbEmployee->Text)]))->iID ;
        QurFree->FieldByName("LeaveDate")->AsDateTime=DtpDate->Date;
        QurFree->FieldByName("Memo1")->AsString=Memo->Text ;
        QurFree->Post();
    }

    frmDM->Con->Execute("delete from LeaveInfo_D where LeaveID=" + IntToStr(mLeaveID));

    if (QurGrid->RecordCount>0)
    {
        QurGrid->First() ;
        for (int i=1;i<=QurGrid->RecordCount;i++)
        {
            SQL=" insert into LeaveInfo_D(LeaveID,ItemNo,BeginDate,EndDate,"
                "TimeMode,BeginTime,EndTime,TimePos) Values("
                + IntToStr(mLeaveID) + "," + IntToStr(i) + ","
                + "'" + QurGrid->FieldByName("BeginDate")->AsString + "',"
                + "'" + QurGrid->FieldByName("EndDate")->AsString + "',"
                + "'" + QurGrid->FieldByName("TimeMode")->AsString + "',"
                + "'" + QurGrid->FieldByName("BeginTime")->AsString + "',"
                + "'" + QurGrid->FieldByName("EndTime")->AsString + "',"
                + "'" + QurGrid->FieldByName("TimePos")->AsString + "')";
                
            //Message(SQL);
            frmDM->Con->Execute(SQL);

            QurGrid->Next() ;
        }
    }

    ViewBill(mLeaveID);
    if (frmLeave!=NULL)
        frmLeave->RefreshData() ;
        
    return true;
}
void __fastcall TfrmLeaveEdit::BtnPriorClick(TObject *Sender)
{
    frmDM->QurLeave->Prior() ;
    ViewBill(frmDM->QurLeave->FieldByName("LeaveID")->AsInteger);
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::BtnNextClick(TObject *Sender)
{
    frmDM->QurLeave->Next() ;
    ViewBill(frmDM->QurLeave->FieldByName("LeaveID")->AsInteger);
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::BtnEditClick(TObject *Sender)
{
    BtnState(3);    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::BtnSaveClick(TObject *Sender)
{
    SaveBill();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::BtnExitClick(TObject *Sender)
{
    Close();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::GridColumns2UpdateData(TObject *Sender,
      AnsiString &Text, Variant &Value, bool &UseText, bool &Handled)
{
    if (Text == "每天")
    {
       Grid->Columns->Items[3]->PickList->Clear();
       Grid->Columns->Items[3]->Field->AsString ="";
       Grid->Columns->Items[4]->PickList->Clear();
       Grid->Columns->Items[4]->Field->AsString ="";

    }

    if (Text == "每周")
    {
       Grid->Columns->Items[3]->PickList->Clear();
       Grid->Columns->Items[3]->Field->AsString ="1";
       Grid->Columns->Items[4]->PickList->Clear();
       Grid->Columns->Items[4]->Field->AsString ="1";
    }

    if (Text == "每月")
    {
        Grid->Columns->Items[3]->PickList->Clear();
        Grid->Columns->Items[3]->Field->AsString ="1";
        Grid->Columns->Items[4]->PickList->Clear();
        Grid->Columns->Items[4]->Field->AsString ="1";
    }
    mChanged=true; 
    AddRecord();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::GridCellClick(TColumnEh *Column)
{
    Grid->DataSource->DataSet->Edit();
    switch (Grid->SelectedIndex)
    {
      case 3:
      case 4:
        if (Grid->Columns->Items[2]->Field->AsString == "每天")
        {
            Grid->Columns->Items[3]->PickList->Clear();
            Grid->Columns->Items[3]->Field->AsString ="";
            Grid->Columns->Items[4]->PickList->Clear();
            Grid->Columns->Items[4]->Field->AsString ="";

        }

        if (Grid->Columns->Items[2]->Field->AsString == "每周")
        {
           Grid->Columns->Items[3]->PickList->Clear();
           Grid->Columns->Items[3]->PickList->CommaText ="1,2,3,4,5,6,7";
           Grid->Columns->Items[4]->PickList->Clear();
           Grid->Columns->Items[4]->PickList->CommaText ="1,2,3,4,5,6,7";
        }

        if (Grid->Columns->Items[2]->Field->AsString == "每月")
        {
            Grid->Columns->Items[3]->PickList->Clear();
            Grid->Columns->Items[4]->PickList->Clear();
            for (int i=1; i<=31 ;i++)
            {
                Grid->Columns->Items[3]->PickList->Add(IntToStr(i));
                Grid->Columns->Items[4]->PickList->Add(IntToStr(i));
            }
        }
      break;
    }
    Grid->DataSource->DataSet->Post();
    AddRecord();       
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::GridKeyPress(TObject *Sender, char &Key)
{
    Key=0;    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::GridColumns0NotInList(TObject *Sender,
      AnsiString NewText, bool &RecheckInList)
{
    Grid->Columns->Items[Grid->SelectedIndex]->Field->AsString =
        Grid->Columns->Items[Grid->SelectedIndex]->Field->AsString ;
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::GridColumns0UpdateData(TObject *Sender,
      AnsiString &Text, Variant &Value, bool &UseText, bool &Handled)
{
    AddRecord();
    mChanged=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::N1Click(TObject *Sender)
{
    Grid->DataSource->DataSet->Append();
    Grid->DataSource->DataSet->Post();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::N2Click(TObject *Sender)
{
    QurGrid->Delete() ;    
}
//---------------------------------------------------------------------------

void __fastcall TfrmLeaveEdit::CmbEmployeeChange(TObject *Sender)
{
    mChanged=true;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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