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

📄 hm_dp.pas

📁 本课题是为企业人事管理提供现代化技术支持的管理信息系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit hm_dp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ImgList, ComCtrls, DB, ADODB, Mask, DBCtrls, ExtCtrls,Math;

type
  Thm_dpForm = class(TForm)
    TreeView1: TTreeView;
    ImageList1: TImageList;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    ADOQuery1: TADOQuery;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Image1: TImage;
    Label6: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit4: TDBEdit;
    DBMemo1: TDBMemo;
    DBMemo2: TDBMemo;
    ADOQuery2: TADOQuery;
    DataSource1: TDataSource;
    ADOQuery3: TADOQuery;
    Label7: TLabel;
    Image2: TImage;
    StatusBar1: TStatusBar;
    ADOQuery4: TADOQuery;
    ComboBox1: TComboBox;
    ADOQuery1DSDesigner: TIntegerField;
    ADOQuery1DSDesigner2: TIntegerField;
    ADOQuery1DSDesigner3: TIntegerField;
    ADOQuery1DSDesigner4: TIntegerField;
    ADOQuery1DSDesigner5: TStringField;
    ADOQuery1DSDesigner6: TStringField;
    ADOQuery1DSDesigner7: TStringField;
    ADOQuery1DSDesigner8: TStringField;
    ADOQuery1DSDesigner9: TStringField;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TreeView1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure ADOQuery2AfterOpen(DataSet: TDataSet);
    procedure ComboBox1Select(Sender: TObject);

  private
    Name: string;
    procedure CreateTreeNodes(Sender: TObject; Node: TTreeNode);
    procedure SetMen(const AName,ADP: string);//载入每个部门所有的姓名
    procedure ValidMen(const AExceptMen: string);//过滤出无职务的每个部门所有的姓名
    procedure ValidButton;
  public
    { Public declarations }
  end;
type
    TTable=array[1..2000,1..2] of string;
    TIndexTable=array[1..2000,1..1] of integer;
var
    hm_dpForm: Thm_dpForm;
    pnode:TTreeNode;//pnode为树节点类型的变量

    //--------------用于记录部门的部分信息 ---------------
    temptable:TTable;//记录部门的在树中节点的绝对编号,以及每个部门的最大子部门编号
    indextable:TIndexTable;//与temptable相反,记录树中节点对应的部门号
    pnum,snum:integer;
    sname:string;
    ItemLevel:integer;

implementation

uses hm_main, hm_login;

{$R *.dfm}

//--------------窗口生成时,对普通用户封锁编辑类选项-------------
procedure Thm_dpForm.FormCreate(Sender: TObject);
begin
  if hm_loginForm.idright < 2 then
  begin
     Button1.Enabled:=false;
     Button2.Enabled:=false;
     Button3.Enabled:=false;
     Button4.Enabled:=false;
  end;
end;

//--------部门管理窗口关闭时,显示主窗口--------------
procedure Thm_dpForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    hm_mainForm.Visible:=true;
end;

//--------部门组织图TreeView1节点被点击时,更新右侧部门详细信息------
procedure Thm_dpForm.TreeView1Click(Sender: TObject);
begin
    if not Assigned(treeview1.Selected) then Exit;
    ADOQuery2.close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Text := 'select * from 部门信息 where 编号 ='+inttostr(indextable[treeview1.Selected.AbsoluteIndex+1,1]);
    ADOQuery2.Open;
    SetMen(Trim(adoquery2.FieldByName('负责人').AsString),Trim(treeview1.Selected.Text));
    ValidButton;
end;

//----------部门管理窗口显示时,更新部门组织图TreeView1----------
procedure Thm_dpForm.FormShow(Sender: TObject);
begin
  //DBEdit4.Enabled := False;
  //DBEdit2.Enabled := False;
  //
  CreateTreeNodes(nil,nil);
  if Treeview1.ITems.Count > 0 then
  treeview1.Items[0].Selected := True;
  TreeView1Click(nil);
  Button6Click(nil);//显示时,界面还原
end;

//----------自定义过程,生成部门组织图TreeView1
procedure Thm_dpForm.CreateTreeNodes(Sender: TObject; Node: TTreeNode);
var
  temptableIndex: Integer;
begin

    //如果组织图已存在,则清除
    if treeview1.Items.Count > 0 then
    begin
      treeview1.Items.Clear;//treeview1.Items.Item[0].Delete;
    end;
    //重新读入部门信息
    adoquery1.Close;
    adoquery1.Open;
    while not adoquery1.Eof  do //表不空
    begin
        try
          pnum:=adoquery1.FieldByName('父编号').AsInteger;
          snum:=adoquery1.FieldByName('编号').AsInteger;
          sname:=adoquery1.FieldByName('名称').AsString;
          ItemLevel:=adoquery1.FieldByName('层次').AsInteger;
          temptable[snum,2]:= adoquery1.FieldByName('最大子号').AsString;
          if (ItemLevel=0) then//如果是第一个节点,那么它没有父节点,其父节点是nil(空),创建第一个节点的数据
          begin
              //父编号=编号....层次最高
              pnode := treeview1.Items.Add(nil,sname);//pnode:=treeview1.Items.AddFirst(nil,sname);
          end
          else
          begin //根据记录的父节点在树中的编号,依次将记录插入图中
              temptableIndex := strtoint(temptable[pnum,1]);
              pnode:=treeview1.Items.Item[temptableIndex];
              pnode:=treeview1.Items.AddChild(pnode,sname);
          end;
          try
            indextable[pnode.AbsoluteIndex+1,1]:=snum;
            temptable[snum,1]:=inttostr(pnode.AbsoluteIndex);
          except
          end;
        finally
          adoquery1.Next;
        end;
    end;
end;

//---------选择增加子部门 ---------------
procedure Thm_dpForm.Button1Click(Sender: TObject);
var
  S: string;
begin
    S := Trim(DBEdit4.Text);
    Button5.Visible:=true;
    Button6.Visible:=true;
    Button1.Enabled:=false;
    Button2.Visible:=false;
    Button3.Visible:=false;
    Button4.Visible:=false;
    //记录当前的部门编号,也就是新增子部门的上级编号
    pnum:=adoquery2.FieldByName('编号').AsInteger;
    //由当前部门的最大子号 以及层次信息,生成新增子部门的编号
    snum:=adoquery2.FieldByName('最大子号').AsInteger;
    ItemLevel:=adoquery2.FieldByName('层次').AsInteger+1;
    snum:=snum+strtoint(floattostr(intpower(10,3-ItemLevel)));
    //设置为插入状态
    adoquery2.Append;
    //显示新增子部门的编号,并不允许编辑
    DBEdit2.EditText:=inttostr(snum);
    DBEdit2.Enabled:=false;
    DBEdit4.Text := S;
    SetMen(ComboBox1.Text,'');
    ValidMen('');
end;

//---------选择增加同级部门 ---------------
procedure Thm_dpForm.Button2Click(Sender: TObject);
var
  sLevel, sParent,S: string;
begin
    S := Trim(DBEdit4.Text);
    Button5.Visible:=true;
    Button6.Visible:=true;
    Button2.Enabled:=false;
    Button1.Visible:=false;
    Button3.Visible:=false;
    Button4.Visible:=false;
    sLevel := '0';
    sParent := '1000';
    pnum := 1000;
    snum := 1000;
    if ADOQuery2.Active then
    begin
      if ADOQuery2.RecordCount > 0 then
      begin
        sLevel := Trim(adoquery2.FieldByName('层次').AsString);
        sParent := Trim(adoquery2.FieldByName('父编号').AsString);
        ADOQuery3.Close;
        if StrtoInt(sLevel) = 0 then
          ADOQuery3.Sql.Text := 'Select Max(编号) as 编号 From 部门信息 Where 层次 =' + QuotedStr(sLevel)
        else
          ADOQuery3.Sql.Text := 'Select Max(编号) as 编号 From 部门信息 Where 层次 =' + QuotedStr(sLevel) + ' and 父编号 = ' + QuotedStr(sParent);
        ADOQuery3.Open;

        //记录当前的部门的父编号,也就是新增子部门的上级编号
        pnum:= ADOQuery3.FieldByName('编号').AsInteger;
        //由父部门的最大子号 以及层次信息,生成新增子部门的编号
        snum:=strtoint(temptable[pnum,2]);
        ItemLevel:=adoquery2.FieldByName('层次').AsInteger;
        snum:=snum+strtoint(floattostr(intpower(10,3-ItemLevel)));
        if StrtoInt(sLevel) = 0 then
          pnum := snum;
      end
    end
    else
    begin
      ADOQUery2.Close;
      ADOQUery2.SQL.Clear;
      ADOQUery2.SQL.Text := 'Select * From 部门信息 Where 编号 like ''XXX''';
      ADOQUery2.Open;
    end;
    ADOQuery2.Append;

    //显示新增子部门的编号,并不允许编辑
    DBEdit2.EditText:=inttostr(snum);
    DBEdit2.Enabled:=false;
    DBEdit4.Text := S;
    SetMen(ComboBox1.Text,'');
    ValidMen('');
end;

//------------选择修改部门信息---------------
procedure Thm_dpForm.Button3Click(Sender: TObject);
begin
    Button5.Visible:=true;
    Button6.Visible:=true;
    Button3.Enabled:=false;
    Button1.Visible:=false;
    Button2.Visible:=false;
    Button4.Visible:=false;
    dbedit2.Enabled:=false;
    //设置为编辑状态
    adoquery2.Edit;
    SetMen(ComboBox1.Text,'');
    ValidMen(ComboBox1.Text);
end;

//------------------撤销部门--------------------------
procedure Thm_dpForm.Button4Click(Sender: TObject);

⌨️ 快捷键说明

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