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

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);// выделить память для элемента списка

      // усли текущий элемент не выбран, то текщим элементом

      //будет последний элемент списка

      if carCurrent=nil then carCurrent:=carEnd;

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

      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 км (на новой машине!)

      //Вызываем процидуру Добавить после текущего элемента

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

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

      s:='Add after>> '+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.ActionAddAllelementExecute(Sender: TObject);// Посмотреть все записи об автомобилях в StringGrid

var

   i: integer;// переменная

begin

   //устанавливаем указатели на начало списка

   car:=carBegin;

   i:=1;//начальное значение

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

   if carBegin = nil then

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

   else

   begin

       StringGrid1.RowCount:=2;

       While car<>nil do // цикл While по всем автомобилям

       begin

          StringGrid1.RowCount:=i+1;//увеличиваем число строк

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

          StringGrid1.Cells[0, i]:=car^.markaCar_;

          StringGrid1.Cells[1, i]:=car^.modelCar_;

          StringGrid1.Cells[2, i]:=car^.typBasketCar_;

          StringGrid1.Cells[3, i]:=FloatToStr(car^.volumeEngineCar_);

          StringGrid1.Cells[4, i]:=IntToStr(car^.maxPowerCar_);

          StringGrid1.Cells[5, i]:=IntToStr(car^.consuptionFuelCar_);

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

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

       end;

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

   end;

end;

procedure TForm1.Button10Click(Sender: TObject);

 var

  car2,car1: PCar;// указатели используемые при сортировке

  bool: Boolean; // переменная которая принимает значение True, если выражение в IF истинно.

begin

   bool:=false;// первоначальное состаяние

   //устанавливаем указатели на начало списка

   car1:=carBegin;

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

   if carBegin = nil then

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

   else

   begin

       While car1<>nil do // цикл While по всем автомобилям

       begin

          car2:=car1;

          While car2<>nil do

          begin

             case RadioGroup1.ItemIndex of // инструкция case,  позволяет эффективно реализовать множественный выбор.

                 // сортировка по марке автомобиля

                 0: if car1^.markaCar_<car2^.markaCar_ then bool:=true;

                 // сортировка по моделе автомобиля

                 1: if car1^.modelCar_<car2^.modelCar_ then bool:=true;

                 // сортировка по типу кузова автомобиля

                 2: if car1^.typBasketCar_<car2^.typBasketCar_ then bool:=true;

                 // сортировка по объему двигателя автомобиля

                 3: if car1^.volumeEngineCar_<car2^.volumeEngineCar_ then bool:=true;

                 // сортировка по максимальной мощности автомобиля

                 4: if car1^.maxPowerCar_<car2^.maxPowerCar_ then bool:=true;

                 // сортировка по расходу топлива автомобиля

                 5: if car1^.consuptionFuelCar_<car2^.consuptionFuelCar_ then bool:=true;

             end;

             if bool=true then

             begin

                //меняем местами car1,car2 указатели в списке.

                car:=car1^.next_;

                car^.prev_:=car2;

                car1^.next_:=car2^.next_;

                car2^.next_:=car;

                if car1^.next_<>nil then car1^.next_^.prev_:=car1

                else carEnd:=car1;

                car:=car1^.prev_;

                if car<>nil then car^.next_:=car2

                else carBegin:=car2;

                car1^.prev_:=car2^.prev_;

                car2^.prev_:=car;

                car1^.prev_^.next_:=car1;

                car:=car1;

                car1:=car2;

                car2:=car;

                //переменной bool присваиваем false,

                //замена выполнена и поэтому ее надо установить в первоначальное состояние.

                bool:=false;

             end;

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

          end;

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

       end;

       Memo1.Lines.Add('Sort>>База отсортирована.');

       ActionAddAllelementExecute(Sender);// Посмотреть все записи об автомобилях в StringGrid

   end;

end;

end.