Даны результаты переписи населения, которые хранятся в памяти ЭВМ. Напечатать фамилии, имена и подсчитать общее число жителей, родившихся после 1990 г — Pascal(Паскаль)

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.

Leave a Comment

80 + = 87