Программа электронного каталога автомобилей, страница 2

      if carCurrent^.prev_<> nil then

      begin

        carCurrent^.prev_^.next_:=car;

        car^.prev_:=carCurrent^.prev_;

      end;

    end;

    if carCurrent = carBegin then

    begin  //если это первый элемент

      carBegin:=car;

      car^.prev_:=nil;//указатель на предыдущий  элемент не куда не указывают

    end;

    carCurrent^.prev_:=car;

    car^.next_:=carCurrent;

  end;

end;

procedure TForm1.AddAfter();//Добавить после текущего элемента

begin

   //Добавить перед текущим элементом

  if carBegin = nil then //если условие выполняется то это первый и единственный элемент в списке

  begin

    // указатель на следующий и предыдущий элемент не куда не указывают

    car^.next_:=nil;

    car^.prev_:=nil;

    //т.к это первый элемент, то указатель на первый элемент

    // и указатель на последний указывают на одно и тоже

    carBegin:=car;

    carEnd:=car;

  end

  else //если это не первый

  begin

    if (carCurrent<>carEnd)or(carCurrent=carBegin)then

    begin //если не первый и ни последний

      if carCurrent^.next_<>nil then

      begin

        carCurrent^.next_^.prev_:=car;

        car^.next_:=carCurrent^.next_;

      end;

    end;

    if carCurrent = carEnd then

    begin  //если это последний элемент

      carEnd:=car;

      car^.next_:=nil;//указатель на следующий  элемент не куда не указывают

    end;

    carCurrent^.next_:=car;

    car^.prev_:=carCurrent;

  end;

end;

procedure TForm1.Delete();//Удалить текущую запись

begin

    if (car<>carBegin)and(car<>carEnd)then

    begin //если не первый и ни последний

      //перенаправляем указатели

      car^.prev_^.next_:=car^.next_;

      car^.next_^.prev_:=car^.prev_;

    end;

    if car = carBegin then

    begin  //если это первый элемент

      carBegin:=car^.next_;

      if carBegin<>nil then carBegin^.prev_:=nil;//если это был не последний

    end;

    if car = carEnd then

    begin//если это последний элемент

      carEnd:=car^.prev_;

      if carEnd<>nil then carEnd.next_:=nil;//если это был не последний

    end;

    Dispose(car);// (освободим память, занимаемую динамическими переменными)

end;

procedure TForm1.ActionAddEndListExecute(Sender: TObject);//Добавить в конец списка

var

   s: string;// строка для получения записи об автомобиле

begin  // проверка на заполнение полей

   if (Length(EditMarkaCar.Text)=0)or (Length(EditModelCar.Text)=0)or

      (Length(EditTypBasketCar.Text)=0)or (Length(EditVolumeEngineCar.Text)=0)or

      (Length(EditMaxPowerCar.Text)=0)or (Length(EditConsuptionFuelCar.Text)=0)then

       ShowMessage('Все поля должны быть заполнены!!!')

   else

   begin

      new(car);// выделить память для элемента списка

      // получаем от пользователя:

      car^.markaCar_ :=EditMarkaCar.Text;  // Марка

      car^.modelCar_ :=EditModelCar.Text;  // Модель

      car^.typBasketCar_ :=EditTypBasketCar.Text;  // Тип кузова

      car^.volumeEngineCar_ :=StrToFloat(EditVolumeEngineCar.Text); //Oбъем двигателя

      car^.maxPowerCar_ :=StrToInt(EditMaxPowerCar.Text); // Максимальная мощность

      car^.consuptionFuelCar_ :=StrToInt(EditConsuptionFuelCar.Text); // Расход топлива в городе,л/100 км (на новой машине!)

      //Вызываем процидуру добавления в конец списка

      AddEndList();

      //  формируем строку содержащую все сведения об автомобиле

      s:='Add end list>> '+car^.markaCar_+' '+car^.modelCar_+' /'+car^.typBasketCar_+' /';

      s:=s+FloatToStr(car^.volumeEngineCar_)+'л /'+IntToStr(car^.maxPowerCar_)+'лс /';

      s:=s+IntToStr(car^.consuptionFuelCar_)+'л/100';

      // добавляем ее в Memo

      Memo1.Lines.Add(s);

   end;

end;

procedure TForm1.ActionLookExecute(Sender: TObject); //Посмотреть все записи об автомобилях в Memo

var

  s: string;// строка для получения записи об автомобиле

  i: integer;// переменная используемая как счетчик

begin

   i:=0; // устанавливаем начальнoе значения

   car:=carBegin;//устанавливаем указатель на начало списка

   // проверка на наличие в списке хотя бы одного автомобиля

   if carBegin = nil then

       ShowMessage('В базе нет не одной записи!!!')

   else

   begin

       Memo1.Lines.Add('Look>> Следующие записи имеются в базе:');

       //выводим сведения об всех автомобилях в цикле While

       while car<>nil do

       begin

          //  формируем строку содержащую все сведения об автомобиле

          s:='Look '+ IntToStr(i+1) + ' >> '+car^.markaCar_+' '+car^.modelCar_+' /'+car^.typBasketCar_+' /';

          s:=s+FloatToStr(car^.volumeEngineCar_)+'л /'+IntToStr(car^.maxPowerCar_)+'лс /';

          s:=s+IntToStr(car^.consuptionFuelCar_)+'л/100';

          // добавляем ее в Memo

          Memo1.Lines.Add(s);

          car:=car^.next_;// переходим к следующему элементу списка

          i:=i+1;//увеличиваем счетчик на 1

       end;

       Memo1.Lines.Add('----------------------------------------');

   end;

end;

procedure TForm1.N3Click(Sender: TObject);//загрузка из файла

var

   nameFile: string; //переменная для хранения имени файла

   s: string;// строка для получения записи об автомобиле

   f: TextFile; // файл записей — база данных

begin

   if OpenDialog1.Execute then // диалог открытия файла

   begin

      nameFile:=OpenDialog1.FileName;  //получить имя файла

      AssignFile(f, nameFile); //связать файловую переменную с конкретным файлом

      Reset(f); // открыть для чтения {$I+}

      if IOResult <> 0 then //IOResult переменная в которой хранится результат операции открытия файла

         MessageDlg('Ошибка доступа к файлу ' + nameFile,mtError,[mbOk],0)

      else

      begin