unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
Label5: TLabel;
Edit5: TEdit;
Button2: TButton;
GroupBox3: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Button3: TButton;
Button4: TButton;
ScrollBox1: TScrollBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TPBook=^TBook;
TBook=record
code: integer;
name: String[15];
avtor: String[15];
year: String[4];
previus: TPBook;
next: TPBook;
end;
var
Form1: TForm1;
Head,Last,ListCur,P: TPBook;
ListCount,del: integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Head:=nil;
Last:=nil;
ListCount:=0;
del:=0;
Label7.Caption:=IntToStr(ListCount);
Label13.Caption:='';
Label14.Caption:='';
Label15.Caption:='';
Label16.Caption:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text<>'')and(Edit2.Text<>'')and(Edit3.Text<>'')and(Edit4.Text<>'') then
begin
P:=New(TPBook); //Добавляем новую запись и получаем на неё ссылку
P^.code:=StrToint(Edit1.Text);
P^.name:=Edit2.Text;
P^.avtor:=Edit3.Text;
P^.year:=Edit4.Text;
P^.next:=nil;
P^.previus:=nil;
if Head=nil then
begin //Если списка не существует
Head:=P;
Last:=P;
end else
begin //Добавляем запись в конец списка
P^.previus:=Last;
Last^.next:=P;
Last:=P;
end;
Inc(ListCount); //Увеличиваем счётчик записей
Label7.Caption:=IntToStr(ListCount);
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
end else begin ShowMessage('Заполните все поля.'); end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
YearDel: String[4];
begin
YearDel:=Edit5.Text;
if Head=nil then
begin
ShowMessage('Список не создан!');
Exit;
end;
P:=Head; //Начинаем перебор сначала списка
while(P<>nil) do
begin
if (P^.year=YearDel) then
begin
if (P^.previus=nil) and (P^.next=nil) then //Если в списке 1 запись
begin
Head:=nil;
Last:=nil;
Dec(ListCount);
Inc(del);
end
else if P^.previus=nil then //Если удаляемая запись первая
begin
Head:=P^.next;
P^.next^.previus:=nil;
Dec(ListCount);
Inc(del);
end else if P^.Next=nil then //Если удаляемая запись последняя
begin
Last:=P^.previus;
P^.previus.next:=nil;
Dec(ListCount);
Inc(del);
end else //Слева и справа есть записи
begin
P^.previus^.next:=P^.next;
P^.next^.previus:=P^.previus;
Dec(ListCount);
Inc(del);
end;
end;
P:=P^.next;
end;
Label7.Caption:=IntToStr(ListCount);
if(Del<>0) then
begin
ShowMessage('Успешно удалено'+' '+IntToStr(del)+' '+'записи(ей)');
Del:=0;
Edit5.Text:='';
end else
begin
ShowMessage('В списке нет книг такого года издания.');
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Label13.Caption:='';
Label14.Caption:='';
Label15.Caption:='';
Label16.Caption:='';
P:=Head;
while P<>nil do
begin
Label13.Caption:=Label13.Caption+chr(13)+FloatToStr(P^.code);
Label14.Caption:=Label14.Caption+chr(13)+P^.name;
Label15.Caption:=Label15.Caption+chr(13)+P^.avtor;
Label16.Caption:=Label16.Caption+chr(13)+P^.year;
P:=P^.next;
end;
end;
end.