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

📄 u_form1.~pas

📁 很好地delphi书籍源码
💻 ~PAS
字号:
unit U_Form1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls, ToolWin, ImgList, Buttons, Spin, StdCtrls, Menus;

type
  Address=record
  Name:string[10]; //姓名
  Sex: String[4];  //性别
  Duty:string[10]; //类别 包括('行政人员','教师','初一','初二','初三')等
  Age: Word;       //年龄
  State:String[16]; //状态 包括('毕业','在校','专职','兼职',‘职务’)等
  end;

  TForm1 = class(TForm)
    ListView1: TListView;
    TreeView1: TTreeView;
    Splitter1: TSplitter;
    ImageList1: TImageList;
    AddPanel: TPanel;
    Label1: TLabel;
    NameEdit: TEdit;
    Label2: TLabel;
    SexRG: TRadioGroup;
    Label3: TLabel;
    DutyCB: TComboBox;
    Label4: TLabel;
    AgeSE: TSpinEdit;
    AddOk: TSpeedButton;
    Cancel: TSpeedButton;
    Label9: TLabel;
    StateCB: TComboBox;
    PopupMenu1: TPopupMenu;
    AddMenu: TMenuItem;
    ModMenu: TMenuItem;
    DelMenu: TMenuItem;
    ExitMenu: TMenuItem;
    ModOk: TSpeedButton;
    ToolBar1: TToolBar;
    DelTButton: TToolButton;
    AddTButton: TToolButton;
    ModTButton: TToolButton;
    MainMenu1: TMainMenu;
    EditMMenu: TMenuItem;
    AddMMenu: TMenuItem;
    ModMMenu: TMenuItem;
    DelMMenu: TMenuItem;
    SysMMenu: TMenuItem;
    SaveMMenu: TMenuItem;
    ExitMMenu: TMenuItem;
    ExitTButton: TToolButton;
    SchoolMMenu: TMenuItem;
    N2: TMenuItem;
    SaveDialog1: TSaveDialog;
    StatusBar1: TStatusBar;
    procedure FormCreate(Sender: TObject);
    procedure AddOkClick(Sender: TObject);
    procedure CancelClick(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
    procedure ModOkClick(Sender: TObject);
    procedure AddMenuClick(Sender: TObject);
    procedure ModMenuClick(Sender: TObject);
    procedure DelMenuClick(Sender: TObject);
    procedure ExitMenuClick(Sender: TObject);
    procedure SchoolMMenuClick(Sender: TObject);
    procedure SaveMMenuClick(Sender: TObject);
  private
    { Private declarations }
   AddrFile: File of Address;
   AddreData,AddreData0:Address;
   FName:string;
   CurRec:Longint;
   NewSchoolName:string;
   procedure LoadRecord;//把文件中的信息装载到Treeview中
   procedure ListViewAll;//把文件中的信息装载到Treeview中
   procedure AddToTree(a:Address);//把记录变量Address内容添加到TTreeview中
   procedure ListViewPart(S:string);//显示部分信息到Listview中
   procedure UpdateTree(SchoolName:string); //更新Treeview信息的内容
   procedure MenuChoice(AddM,ModM,DelM:boolean); //控制添加修改删除菜单的开和关

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}
var
 Node:array[0..7] of TTreeNode;
Const
  Per:array[0..7] of string=
  ('行政人员','教师','初一','初二','初三','高一','高二','高三');
procedure TForm1.FormCreate(Sender: TObject);
begin
  NewSchoolName:='中学人员信息库';
  UpdateTree(NewSchoolName);
end;

procedure TForm1.TreeView1Click(Sender: TObject);
var
  mNode:TTreeNode;
begin
  if TreeView1.Selected<>nil then mNode:=TreeView1.Selected
  else exit;
  //如果敲击的是第一个节点,则把所有信息显示到ListView中,同时关闭添加修改删除功能
  if mNode.ImageIndex=0 then
  begin
    ListViewAll;
    MenuChoice(false,false,false);
  //如果敲击的是第二层节点,则把所敲击类别的人员信息显示到Listview中,打开添加功能
  end else if mNode.ImageIndex=1  then
  begin
    ListViewPart(mNode.Text);
    MenuChoice(true,false,false);
  //如果敲击的是第三层节点,则关闭添加功能,打开修改和删除功能
  end else if mNode.ImageIndex=2 then
    MenuChoice(false,true,true);
end;

procedure TForm1.UpdateTree(SchoolName:string);
var
  i:byte;
  Node0,Node1:TTreeNode;
begin
  TreeView1.Items.Clear;
  Node0:=TreeView1.Items.AddFirst(nil,SchoolName);
  Node0.ImageIndex:=0;
  Node0.SelectedIndex:=0;
  for i:=0 to 7 do
  begin
    Node[i]:=TreeView1.Items.AddChild(Node0,Per[i]);
    Node[i].ImageIndex:=1;
    Node[i].SelectedIndex:=1;
  end;
  LoadRecord;
end;

procedure TForm1.LoadRecord;
begin
 CurRec:=0;
 FName:='AddRess.dat';      //定义一个文件名
 AssignFile(AddrFile,FName);//建立文件与文件变量的关联
 if FileExists(FName) then  //判断文件'AddRess.dat'是否存在
 begin
   Reset(AddrFile);         //打开一个存在的文件
   while not Eof(AddrFile) do //如果不到文件尾的话,执行以下代码
   begin
   Read(AddrFile,AddreData);  //从文件中读数据存到记录变量AddreData中
   AddToTree(AddreData);    //把AddreData的内容添加到Treeview中
   end;
  end  else
  Rewrite(AddrFile);  //文件'AddRess.dat'不存在则新建这个文件
  CloseFile(AddrFile); //关闭文件
end;

procedure TForm1.AddToTree(a:Address);
var
  mNode:TTreeNode;
  i:byte;
begin
 for i:=0 to 7 do
   if a.Duty=Node[i].Text then
   begin
     mNode:=TreeView1.Items.AddChild(Node[i],a.Name);
     mNode.ImageIndex:=2;
     mNode.SelectedIndex:=2;
     break;
   end;
end;

procedure TForm1.ListViewPart(S:string);
var
  mItem:TListItem;
begin
  Reset(AddrFile);
  ListView1.Items.Clear;
  Seek(AddrFile,0);
  while not Eof(AddrFile) do
  begin
    Read(AddrFile,AddreData);
    if AddreData.Duty=S then
    begin
      mItem:=ListView1.Items.Add();
      mItem.Caption:=AddreData.Name;
      mItem.SubItems.Add(AddreData.Sex);
      mItem.SubItems.Add(AddreData.Duty);
      mItem.SubItems.Add(IntToStr(AddreData.Age));
      mItem.SubItems.Add(AddreData.State);
    end;
  end;
  CloseFile(AddrFile);
end;

procedure TForm1.ListViewAll;
var
  mItem:TListItem;
begin
  Reset(AddrFile);
  ListView1.Items.Clear;
  Seek(AddrFile,1);  //定位到第一条
  while not Eof(AddrFile) do  //从文件中读数据添加到Listview中
  begin
    Read(AddrFile,AddreData);
    mItem:=ListView1.Items.Add();
    mItem.Caption:=AddreData.Name;
    mItem.SubItems.Add(AddreData.Sex);
    mItem.SubItems.Add(AddreData.Duty);
    mItem.SubItems.Add(IntToStr(AddreData.Age));
    mItem.SubItems.Add(AddreData.State);
  end;
  CloseFile(AddrFile);
end;

procedure TForm1.AddOkClick(Sender: TObject);
begin
  Reset(AddrFile); //打开文件后CurRec=0
  repeat           //将文件指针移到文件尾
    CurRec:=CurRec+1;
    Seek(AddrFile,CurRec);
  until Eof(AddrFile);
  with AddreData do  //把AddPanel中的信息写到记录AddreData中
  begin
    Name:=NameEdit.Text;
    Duty:=DutyCB.Text;
    if SexRG.ItemIndex=0 then  Sex:='男' else  Sex:='女';
    Age:=AgeSE.Value;
    State:=StateCB.Text;
  end;
  Write(AddrFile,AddreData);//把AddreData中的内容写到文件里
  AddToTree(AddreData);
  CloseFile(AddrFile);
  AddPanel.Visible:=false;
end;

procedure TForm1.CancelClick(Sender: TObject);
begin
  AddPanel.Visible:=false;
end;

procedure TForm1.ModMenuClick(Sender: TObject);
begin
  if TreeView1.Selected=nil then exit;
  AddPanel.Visible:=true;
  Reset(AddrFile);
  CurRec:=0;
  //定位到需要修改的记录
  repeat
    Read(AddrFile,AddreData);
    CurRec:=CurRec+1;
    if AddreData.Name=TreeView1.Selected.Text then
      break;
  until Eof(AddrFile);
  NameEdit.Text:=AddreData.Name;
  DutyCB.text:=AddreData.Duty;
  if AddreData.Sex='男' then SexRG.ItemIndex:=0
  else SexRG.ItemIndex:=1;
  AgeSE.Value:=AddreData.Age;
  StateCB.Text:=AddreData.State;
  AddOk.Enabled:=false;
  ModOk.Enabled:=true;
  MenuChoice(false,false,false);
end;

procedure TForm1.MenuChoice(AddM,ModM,DelM:boolean);
begin
  AddMenu.Enabled:=AddM;
  ModMenu.Enabled:=ModM;
  DelMenu.Enabled:=DelM;
  AddMMenu.Enabled:=AddM;
  ModMMenu.Enabled:=ModM;
  DelMMenu.Enabled:=DelM;
  AddTButton.Enabled:=AddM;
  ModTButton.Enabled:=ModM;
  DelTButton.Enabled:=DelM;
end;

procedure TForm1.AddMenuClick(Sender: TObject);
begin
  AddPanel.Visible:=true;
  NameEdit.Text:='';
  DutyCB.Text:=TreeView1.Selected.Text ;
  SexRG.ItemIndex:=0;
  AgeSE.Value:=20;
  StateCB.Text:='';
  AddOk.Enabled:=true;
  ModOk.Enabled:=false;
  MenuChoice(false,false,false);
end;

procedure TForm1.ModOkClick(Sender: TObject);
begin
  with AddreData do
  begin
    Name:=NameEdit.Text;
    Duty:=DutyCB.text;
    if SexRG.ItemIndex=0 then  Sex:='男'
    else  Sex:='女';
    Age:=AgeSE.Value;
    State:=StateCB.Text;
  end;
  Seek(AddrFile,CurRec-1);
  Write(AddrFile,AddreData);
  CloseFile(AddrFile);
  UpdateTree(NewSchoolName);
  AddPanel.Visible:=false;
end;

procedure TForm1.DelMenuClick(Sender: TObject);
var
  TempFile:File of Address;
begin
  if TreeView1.Selected=nil then  exit;
  AssignFile(TempFile,'Temp.dat');
  Rewrite(TempFile);
  Reset(AddrFile);
  while not Eof(AddrFile) do
  begin
    Read(AddrFile,AddreData);
    if AddreData.Name<>TreeView1.Selected.Text then
    Write(TempFile,AddreData);
  end;
  CloseFile(AddrFile);
  CloseFile(TempFile);
  DeleteFile('AddRess.dat');
  ReNameFile('Temp.dat','AddRess.dat');
  TreeView1.Selected.Delete;
  UpdateTree(NewSchoolName);
end;

procedure TForm1.ExitMenuClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.SchoolMMenuClick(Sender: TObject);
begin
  if InputQuery('请输入新的学校名称','',NewSchoolName) then
   UpdateTree(NewSchoolName);
end;

procedure TForm1.SaveMMenuClick(Sender: TObject);
begin
  SaveDialog1.InitialDir:=GetCurrentDir;
  if SaveDialog1.Execute then
    TreeView1.SaveToFile(SaveDialog1.FileName);
end;

end.

⌨️ 快捷键说明

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