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

📄 depmanage.~cpp

📁 全面剖析人力资源管理的内容
💻 ~CPP
字号:
//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "DepManage.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmDepManage *fmDepManage;
//-------------------------------------------------------------------
__fastcall TfmDepManage::TfmDepManage(TComponent* Owner)
    : TForm(Owner)
{
    szCodeTable="组织机构编码表";
    szFieldName="单位编号";
    nBits=12;  // 采用12为编码
    for(int i=0;i<TreeView1->Items->Count;i++)
    {
        if(TreeView1->Items->Item[i]->Data)
            delete (TList*)(TreeView1->Items->Item[i]->Data);
    }
    // 初始化机构树
    while(TreeView1->Items->Count>0)
    {
        TreeView1->Items->Item[0]->DeleteChildren();
        TreeView1->Items->Item[0]->Delete();
    }
    // 从数据库中读取机构层级关系并显示在树控件中
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from 组织机构编码表 order by absIndex");
    Query1->Open();
    Query1->First();
    while(!Query1->Eof)
    {
        AnsiString szCode = Query1->FieldByName("类别号")->AsString;
        AnsiString szCode1 = Query1->FieldByName("单位编号")->AsString;
        AnsiString szName = Query1->FieldByName("类别")->AsString;
        int ItemLevel = Query1->FieldByName("ItemLevel")->AsInteger;
        int ParentIndex = Query1->FieldByName("ParentIndex")->AsInteger;
        // 父结点
        if(ItemLevel==0)
        {
            TEdit* edCode=new TEdit(this);
            TEdit* edCode1=new TEdit(this);
            edCode->Text=szCode;
            edCode1->Text=szCode1;
            TList* MyList ;
            MyList = new TList ;
            MyList->Add(edCode) ;
            MyList->Add(edCode1) ;
            TreeView1->Items->AddObject(NULL,szName,MyList);
        }
        // 子结点
        else
        {
            TTreeNode* pNode = TreeView1->Items->Item[ParentIndex];
            TEdit* edCode=new TEdit(this);
            TEdit* edCode1=new TEdit(this);
            edCode->Text=szCode;
            edCode1->Text=szCode1;
            TList* MyList ;
            MyList = new TList ;
            MyList->Add(edCode) ;
            MyList->Add(edCode1) ;
            TreeView1->Items->AddChildObject(pNode,szName,MyList);
        }
        Query1->Next();
    }
}
//-------------------------------------------------------------------
// 保存机构信息
void __fastcall TfmDepManage::btSaveClick(TObject *Sender)
{
    AnsiString sql;
    // 开始事务
    Query1->SQL->Clear();
    Query1->SQL->Add("begin tran");
    Query1->ExecSQL();
    try
    {
        // 保存原有的信息到临时表,然后先删除原有信息,重新生成
        Query1->SQL->Clear();
        Query1->SQL->Add("select * into zzjgtemp from 组织机构编码表");
        Query1->SQL->Add("go");
        Query1->SQL->Add("delete from 组织机构编码表");
        Query1->ExecSQL();
        // 重新生成机构编码
        for(int i=0;i<TreeView1->Items->Count;i++)
        {
            sql="insert into 组织机构编码表(类别,单位名称,";
            sql += " AbsIndex, ItemIndex, ItemLevel, ParentIndex, 类别号,";
            sql += " 单位编号) values('";
            sql += TreeView1->Items->Item[i]->Text;
            sql += "','";
            sql += TreeView1->Items->Item[i]->Text;
            sql += "',";
            sql += IntToStr(i);
            sql += ",";
            sql += IntToStr(TreeView1->Items->Item[i]->Index);
            sql += ",";
            sql += IntToStr(TreeView1->Items->Item[i]->Level);
            sql += ",";
            if(TreeView1->Items->Item[i]->Level>0)
                sql += IntToStr(TreeView1->Items->
                    Item[i]->Parent->AbsoluteIndex);
            else
                sql +="-1";
            sql += ",'";
            sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data)
                )->Items[0])->Text.Trim() + "','";
            sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data)
                )->Items[1])->Text.Trim()  ;
            sql += "')";
            Query1->SQL->Clear();
            Query1->SQL->Add(sql);
            Query1->ExecSQL();
        }
        // 保存成功,从临时表中恢复机构的其他相关信息,如地址/电话等
        Query1->SQL->Clear();
        sql = "update 组织机构编码表 set 拼音编码=b.拼音编码, 单位地址=b.单位地址,";
        sql += " 单位电话号码=b.单位电话号码, 开户银行=b.开户银行, 帐号=b.帐号,";
        sql += " 开户全称=b.开户全称 from 组织机构编码表 as a, zzjgtemp as b";
        sql += " where a.单位编号=b.单位编号";
        Query1->SQL->Add(sql);
        Query1->ExecSQL();
        // 删除临时表
        Query1->SQL->Clear();
        Query1->SQL->Add("drop table zzjgtemp");
        Query1->ExecSQL();
        // 提交事务
        Query1->SQL->Clear();
        Query1->SQL->Add("commit");
        Query1->ExecSQL();
    }
    catch(...)
    {
        Application->MessageBox("保存失败,编码重复或位数超长。","提示",MB_OK) ;
        Query1->SQL->Clear();
        Query1->SQL->Add("rollback");
        Query1->ExecSQL();
    }
}
//-------------------------------------------------------------------
void __fastcall TfmDepManage::TreeView1GetSelectedIndex(TObject *Sender,
      TTreeNode *Node)
{
    try
    {
        TTreeNode* pNode = TreeView1->Selected;
        if(!pNode)
            return;
        TEdit* edCode;
        edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
        edLevelCode->Text=edCode->Text;
        edName->Text=pNode->Text;

        AnsiString szbh = edCode->Text.Trim();
        while(pNode->Parent)
        {
            pNode=pNode->Parent;
            edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
            szbh=edCode->Text.Trim()+szbh;
        }
        edLastCode->Text=szbh;
    }
    catch(...)
    {}
}
//-------------------------------------------------------------------
void __fastcall TfmDepManage::btModClick(TObject *Sender)
{
    // 修改现有机构信息
    if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()==0)
        return;
    TTreeNode* pNode = TreeView1->Selected;
    pNode->Text=edName->Text;
    TEdit* edOldCode;
    TEdit* edNewCode = new TEdit(this);
    TEdit* edNewCode1 = new TEdit(this);
    edNewCode->Text = edLevelCode->Text;
    edNewCode1->Text = edLastCode->Text;
    TList* MyList ;
    MyList = (TList*)(pNode->Data);
    delete MyList;
    MyList = new TList ;
    MyList->Add(edNewCode) ;
    MyList->Add(edNewCode1) ;
    pNode->Data = MyList ;
    TTreeNode* pTempNode = pNode;
AnsiString szbh=((TEdit*)((TList*)(pTempNode->Data))
    ->Items[0])->Text.Trim();
    // 重新编号
    while(pTempNode->Parent)
    {
        pTempNode=pTempNode->Parent;
        szbh=((TEdit*)((TList*)(pTempNode->Data))
            ->Items[0])->Text.Trim()+szbh;
    }
    edNewCode1->Text = szbh ;
    if( szbh.Length()>nBits )
    {
        pNode->Delete();
        ShowMessage("编码超长,已被删除!");
    }
}
//-------------------------------------------------------------------
// 增加一个平级类机构
void __fastcall TfmDepManage::btAddEqlClick(TObject *Sender)
{
    if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()
        ==0)
            return;
    TTreeNode* pNode = TreeView1->Selected;
    TEdit* edCode=new TEdit(this);
    edCode->Text=edLevelCode->Text;
    TEdit* edCode1=new TEdit(this);
    edCode1->Text=edLastCode->Text;
    TList* MyList ;
    MyList = new TList ;
    MyList->Add(edCode) ;
    MyList->Add(edCode1) ;
    pNode=TreeView1->Items->AddObject(pNode,edName->Text,MyList);
    TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))
    ->Items[0])->Text.Trim();
    while(pTempNode->Parent)
    {
        pTempNode=pTempNode->Parent;
        szbh=((TEdit*)((TList*)(pTempNode->Data))->Items[0])
            ->Text.Trim()+szbh;
    }
    edCode1->Text= szbh ;
    if( szbh.Length()>nBits )
    {
        pNode->Delete();
        ShowMessage("编码超长,已被删除!");
    }
}
//-------------------------------------------------------------------
// 增加子类机构
void __fastcall TfmDepManage::btAddSubClick(TObject *Sender)
{
    if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()
        ==0)
            return;
    TTreeNode* pNode = TreeView1->Selected;
    TEdit* edCode=new TEdit(this);
    edCode->Text=edLevelCode->Text;
    TEdit* edCode1=new TEdit(this);
    edCode1->Text=edLastCode->Text;
    TList* MyList ;
    MyList = new TList ;
    MyList->Add(edCode) ;
    MyList->Add(edCode1) ;
    pNode = TreeView1->Items->AddChildObject(pNode,edName->Text,MyList);
    TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))->Items[0])
    ->Text.Trim();
    while(pTempNode->Parent)
    {
        pTempNode=pTempNode->Parent;
        szbh=((TEdit*)((TList*)(pTempNode->Data))->Items[0])
            ->Text.Trim()+szbh;
    }
    edCode1->Text=szbh ;
    if( szbh.Length()>nBits )
    {
        pNode->Delete();
        ShowMessage("编码超长,已被删除!");
    }
}
//-------------------------------------------------------------------
// 增加基础类机构
void __fastcall TfmDepManage::btAddBasClick(TObject *Sender)
{
    if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()==0)
        return;
    TEdit* edCode=new TEdit(this);
    edCode->Text=edLevelCode->Text;
    TEdit* edCode1=new TEdit(this);
    edCode1->Text=edLastCode->Text;
    TList* MyList = new TList ;
    MyList->Add(edCode);
    MyList->Add(edCode1);
TTreeNode* pNode = TreeView1->Items->
    AddObject(NULL,edName->Text,MyList);
    TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))
    ->Items[0])->Text.Trim() ;
    while(pTempNode->Parent)
    {
        pTempNode=pTempNode->Parent;
        szbh = ((TEdit*)((TList*)(pTempNode->Data))->Items[0])
            ->Text.Trim() ;
    }
    edCode1->Text=szbh ;
    if( szbh.Length()>nBits )
    {
        pNode->Delete();
        ShowMessage("编码超长,已被删除!");
    }
}
//-------------------------------------------------------------------
// 删除结点(机构)
void __fastcall TfmDepManage::btDelClick(TObject *Sender)
{
    TTreeNode* pNode = TreeView1->Selected ;
    TList* MyList ;
    MyList = (TList*)(pNode->Data) ;
    delete MyList ;
    pNode->DeleteChildren() ;
    pNode->Delete() ;
}
//--------------------------------------------------------------------
void __fastcall TfmDepManage::FormClose(TObject *Sender, TCloseAction &Action)
{
    for(int i=0;i<TreeView1->Items->Count;i++)
    {
        if(TreeView1->Items->Item[i]->Data)
            delete (TList*)(TreeView1->Items->Item[i]->Data);
    }
    // 删除窗体并回收空间
    Action = caFree;
}
//--------------------------------------------------------------------

⌨️ 快捷键说明

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