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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.