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