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

         Memo1.Lines.Add('Open to file>> Данные загружены из файла: '+nameFile);

         // чтение из файла

         while not EOF(f) do

         begin  // прочитать строку из файла

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

             // Чтение из файла выполняется при помощи инструкций readin

             readln(f, car^.markaCar_);

             readln(f, car^.modelCar_);

             readln(f, car^.typBasketCar_);

             readln(f, car^.volumeEngineCar_);

             readln(f, car^.maxPowerCar_);

             readln(f, car^.consuptionFuelCar_);

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

             s:='Add  >> '+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);

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

             AddEndList();

         end;

         CloseFile(f); // закрыть файл

      end;

   end;

end;

procedure TForm1.N4Click(Sender: TObject);//записать содержимое списка в файл

var

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

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

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

begin

   if SaveDialog1.Execute then //диалог сохранения файла

   begin

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

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

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

      Rewrite(f); // открыть для перезаписи

      // запись в файл

      while car<>nil do

      begin // записать содержимое списка в файл

          writeln(f, car^.markaCar_);

          writeln(f, car^.modelCar_);

          writeln(f, car^.typBasketCar_);

          writeln(f, car^.volumeEngineCar_);

          writeln(f, car^.maxPowerCar_);

          writeln(f, car^.consuptionFuelCar_);

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

      end;

      CloseFile(f); // закрыть файл

      MessageDlg('Данные записаны в файл '+ nameFile,mtInformation,[mbOk],0);

      Memo1.Lines.Add('Save to file>> Данные записаны в файл: '+nameFile);

   end;

end;

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

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

      AddBeginList();

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

      s:='Add begin 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.ActionSortExecute(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 указатели в списке.