unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ListBox1: TListBox;
ListBox2: TListBox;
ListBox3: TListBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
Plink = ^student; //记录指针类型的定义
student = record
xm: string[8]; //姓名
xb: string[2]; //性别
bj: string[16]; //班级
next: plink; //指向下一个节点
end;
var
Dtrec: plink; //定义全局记录指针
procedure TForm1.Button1Click(Sender: TObject); //添加按钮
var
tempp,p: plink; //定义局部记录指针
begin
new(tempp); //动态分配
tempp^.xm := edit1.Text; //添加的姓名
tempp^.xb := edit2.Text; //添加的性别
tempp^.bj := edit3.Text; //添加的班级
tempp^.next := nil; //默认指向空,防止错误
if dtrec = nil then //全局指针为空,即没有任何数据
begin
dtrec := tempp;
end
else
begin
p := dtrec; //p指针进行搜索
while p^.next <> nil do //搜索到最后一个节点
p := p^.next;
p^.next := tempp; //在最后一个节点插入数据
end;
edit1.Clear; //清空
edit2.Clear;
edit3.Clear;
edit1.SetFocus; //编辑框1获得焦点
end;
procedure TForm1.Button2Click(Sender: TObject); //显示按钮
var
p: plink;
begin
listbox1.Clear; //初始化列表框
listbox2.Clear;
listbox3.Clear;
p := dtrec;
if dtrec = nil then //没有数据就退出
exit
else
repeat //列表框添加数据
listbox1.Items.Add(p^.xm);
listbox2.Items.Add(p^.xb);
listbox3.Items.Add(p^.bj);
p := p^.next;
until p = nil; //直到没有数据停止
end;
procedure TForm1.Button3Click(Sender: TObject); //删除按钮
var
p,p1: plink;
i: integer;
begin
if edit1.Text = '' then //防止异常
begin
showmessage('请输入姓名,姓名不能为空!');
exit;
end;
i := 0;
p := dtrec; //p指向链表头
if p = nil then //链表无数据
showmessage('链表为空!')
else //根据姓名搜索
if p^.xm = edit1.Text then //如果在表头
begin
dtrec := p^.next; //dtrec指向第二个数据
dispose(p); //释放p相应的内存单元
end
else
begin
p1 := p^.next;
if p1 <> nil then
repeat
if p1.xm = edit1.Text then //找到要删除的数据
begin
p^.next := p1^.next; //断开要删除的数据连接
dispose(p1); //释放删除的数据
i := i + 1; //找到数据的标志
end
else //寻找数据
begin
p := p1;
p1 := p1^.next;
end;
until p1 = nil;
if i = 0 then
showmessage('无匹配数据!');
end;
end;
procedure TForm1.FormCreate(Sender: TObject); //窗口创建
begin
dtrec := nil; //全局指针为空
end;
end.
