📄 u_form1.pas
字号:
unit U_Form1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ExtCtrls, ToolWin, ImgList, Buttons, Spin, StdCtrls, Menus,IniFiles;
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;
MyIniFile:TIniFile;
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);
var
Filename,Loc_Name,Loc_File:string;
begin
Filename:=ExtractFilePath(paramstr(0))+'SchoolName.ini';
MyIniFile:=TInifile.Create(Filename);
NewSchoolName:=MyIniFile.ReadString('中学','学校名称','');
FName:=MyIniFile.ReadString('中学','文件名称 ','');
if (NewSchoolName='')or(FName='')then
begin
if InputQuery('你这是第一次使用,请输入学校名称!','',Loc_Name) then
begin
if InputQuery('请输入存储文件名称!','',Loc_File) then
begin
MyIniFile.WriteString('中学','学校名称',Loc_Name);
MyIniFile.WriteString('中学','文件名称',Loc_File);
NewSchoolName:=Loc_Name;
FName:=Loc_File;
end else Close;
end else Close;
end;
if (NewSchoolName<>'')and(FName<>'')then
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;
AssignFile(AddrFile,FName);//建立文件与文件变量的关联
if FileExists(FName) then //判断文件FName是否存在
begin
Reset(AddrFile); //打开一个存在的文件
while not Eof(AddrFile) do //如果不到文件尾的话,执行以下代码
begin
Read(AddrFile,AddreData); //从文件中读数据存到记录变量AddreData中
AddToTree(AddreData); //把AddreData的内容添加到Treeview中
end;
end else
Rewrite(AddrFile); //文件FName不存在则新建这个文件
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(FName);
ReNameFile('Temp.dat',FName);
TreeView1.Selected.Delete;
UpdateTree(NewSchoolName);
end;
procedure TForm1.ExitMenuClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.SchoolMMenuClick(Sender: TObject);
var
Loc_Name:string;
begin
if InputQuery('请输入新的学校名称','',Loc_Name) then
begin
MyIniFile.WriteString('中学','学校名称',Loc_Name);
UpdateTree(NewSchoolName);
end;
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 + -