Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2016, 13:12
Smile188 Smile188 вне форума
Прохожий
 
Регистрация: 02.10.2016
Сообщения: 18
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Упорядочить по водителю

hdC0e5cSZvk.jpg

Упорядочить по водителю. Вывести информацию об автомобилях с заданным типом кузова и цветом.
Помогите написать ф-цию в главной программе

Код:
unit Un_Avtopark;
 
interface
 uses Classes, Un_Avto;
 Type TAvtopark=class
              private
               name:string;
               FList:TList;
              public
               Constructor Create(file_name:string);
               Procedure Print();
               Procedure Sort();
               Destructor Destroy; override;
               property List:TList
                       read FList;
              end;
implementation
  Constructor TAvtopark.Create(file_name:string);
   var t:TextFile;
       who_is:char;
       p:TAvto;
   begin
    inherited Create;
    AssignFile(t,file_name);
    Reset(t);
    readln(t,name);
    FList:=TList.Create;
    while not eof(t) do
     begin
      readln(t,who_is);
      case who_is of
       'L':begin
            p:=TLegkov.Create(t);
            FList.Add(p);
           end;
       'G':begin
            p:=TGruzov.Create(t);
            FList.Add(p)
           end;
      end; //case
     end; //while
    CloseFile(t)
   end;
 
  Procedure TAvtopark.Print();
   var i:integer;
       p:TAvto;
   begin
    writeln(name);
    writeln('===================');
    for i:=0 to FList.Count-1 do
     begin
      p:=FList[i];
      p.Print()
     end
   end;
 
  Destructor TAvtopark.Destroy;
   var p:TAvto;
   begin
    while FList.Count<>0 do
     begin
      p:=FList.First;
      p.Destroy;
      FList.Delete(0)
     end;
    FList.Destroy;
    inherited Destroy;
   end;
 
  Function CompareByDriver(Item1:Pointer; Item2:Pointer):integer;
   var drv1,drv2:TAvto;
    begin
     drv1:=TAvto(Item1);
     drv2:=TAvto(Item2);
     result:=drv1.Compare(drv2)
    end;
 
  Procedure TAvtopark.Sort();
   begin
    FList.Sort(CompareByDriver)
   end;
end.


Код:
unit Un_Avto;
 
interface
 
Type TAvto=class
              private
               FDriver:string;
              public
               Model:string;
               Gos_number:string;
               Constructor Create(var t:TextFile);
               Procedure Print (); virtual;
               Function Compare (AAvto:TAvto):integer;
               Function GetName():string;
               property Name:string
                  read GetName;
              end;
     TLegkov=class(TAvto)
           private
            Tip:string;
            Color:string;
           public
            Constructor Create (var t:TextFile);
            Procedure Print(); override;
         //  Function Kind():integer;
           end;
     TGruzov=class(TAvto)
               private
                Tonnag:integer;
 
                
               public
               Vid:integer;
                Constructor Create (var t:TextFile);
                Procedure Print(); override;
               end;
 
implementation
  // --TAvto--
  Constructor TAvto.Create(var t:TextFile);
   begin
    inherited Create;
     readln(t,FDriver);
     readln(t,Model);
     readln(t,Gos_number);
   end;
 
  Procedure TAvto.Print();
   begin
    writeln('Водитель: ', FDriver);
    writeln('Марка: ', Model);
    writeln('Государственный номер: ',Gos_number);
   end;
 
  Function TAvto.Compare (AAvto:TAvto):integer;
   begin
    if FDriver<AAvto.FDriver
    then result:=-1
    else
    if FDriver>AAvto.FDriver then
                                result:=1
                            else
                                result:=0;
   end;
 
  Function TAvto.GetName():string;
   begin
    result:=FDriver;
   end;
 
// --TLegkov--
  Constructor TLegkov.Create (var t:TextFile);
   begin
    inherited Create(t);
    readln(t,Tip);
    readln(t,Color);
    if not eof(t) then readln(t)
   end;
 
  Procedure TLegkov.Print();
   begin
    inherited Print();
    writeln('Тип кузова: ',Tip);
    writeln('Цвет: ',Color);
    writeln;
    writeln('------------------------');
   end;
 
// --TGruzov--
  Constructor TGruzov.Create (var t:TextFile);
   begin
    inherited Create(t);
    readln(t,Tonnag);
    readln(t,Vid);
    if not eof(t) then readln(t)
   end;
 
  Procedure TGruzov.Print();
   begin
    inherited Print();
    writeln ('Тоннаж: ',Tonnag);
    writeln ('Вид: ',Vid);
    writeln('---------------');
   end;
end.

Главная
Код:
program Project_main;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows,
  Un_Avtopark in 'Un_Avtopark.pas',
  Un_Avto in 'Un_Avto.pas';
 
Function ????(var L:TAvtopark; k,n:string):boolean;
  var p:TAvto;
      i:integer;
  begin
    result:=false;
 
   (       
 
                                )
  end;
 
  var L:TAvtopark; n,k:string;
 
begin
  SetConsoleOutputCP(1251);
  SetConsoleCP(1251);
  writeln('*', GetHeapStatus.TotalFree, '*', #10);
  L:=TAvtopark.Create('Data.txt');
  L.Sort();
  L.Print();
  writeln('Введите тип кузова: ');
  readln(n);
  writeln('Введите цвет: ');
  readln(k);
  If (функция)then
                            writeln('Таких автомобилей нет')
                              else
                               begin
                                writeln(#10, '*******************');
                                L.Print()
                               end;
  L.Destroy;
  writeln('*', GetHeapStatus.TotalFree, '*', #10);
  readln;
end.


Ответить с цитированием
  #2  
Старый 27.11.2016, 19:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если я правильно понимаю, то тип кузова - это легковой (L) или грузовой (G). Тогда как-то так:
Код:
function FindAutoByParams(AData : TAvtopark; AType, AColor : String) : Boolean;
var
  I : Integer;
  Auto : TAvto;
begin
  Result := False;
  For I := 0 To AData.List.Count-1 Do
    Begin
       Auto := TAvto(AData.List.Items[i]);
       If ((AType = 'L') And (Auto Is TLegkov) And (AColor = (Auto As TLegkov).Color)) Or 
           ((AType = 'G') And (Auto Is TGruzov)) // У грузовых нет цвета
        Then 
          Begin 
            Auto.Print;
            Result := True;
          End;
    End;
end;

Вызов:
Код:
...
If Not FindAutoByParams(L,n,k) then writeln('Таких автомобилей нет');
// else - сама функция распечатает
...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter