Einzelnen Beitrag anzeigen

XiONLuNiX

Registriert seit: 5. Jun 2005
3 Beiträge
 
#5

Re: Probleme mit selbst erstellter Klasse

  Alt 6. Jun 2005, 20:00
Also, eigentlich kriegen wir die Deklarationen aus nem Buch und müssen die Methoden dann nur "füllen",
was manchmal ziemlich in die Hose geht, da die Methoden kaum beschrieben werden und die Namen auch nicht gerade aussagekräftig sind.
Ich hab versucht die Kassen so selbstständig wie möglich zu machen und das ist das Ergebnis:

Delphi-Quellcode:
unit mKasse;

interface
        uses Classes, StdCtrls, ExtCtrls, mKunde;
 type TSchlange = class(TObject)
        private
         fAktuell,fEnde :TKunde;
         TimKunde, TimBedienung: TTimer;
         fLstKasse: TListBox;
         function IsEmpty: boolean; virtual;
         procedure TimKundeTimer(Sender:TObject);
         procedure TimBedienungTimer(Sender:TObject);
         procedure Verwaltung(P: boolean); virtual;
        public
         constructor Create(List: TListBox); virtual;
         procedure Enqueue(Elem: TKunde); virtual;
         procedure Dequeue; virtual;
         property Element: TKunde read fAktuell;
         property Ende: TKunde read fEnde;
         property Offen: Boolean write Verwaltung;
         end;


implementation
constructor TSchlange.Create(List: TListBox);
begin
    fLstKasse := List;
    TimKunde := TTimer.Create(nil);
    With TimKunde do begin
          Interval := 1000;
          Enabled := false;
          OnTimer := TimKundeTimer;
          end;

    TimBedienung := TTimer.Create(nil);
    With TimBedienung do begin
          Interval := 250;
          Enabled := false;
          OnTimer := TimBedienungTimer;
          end;
end;

procedure TSchlange.Enqueue(Elem: TKunde);
var SAnzahl : String;
 begin
        if not self.IsEmpty then
                Ende.Nach := Elem
            else
                fAktuell := Elem;
        fEnde := Elem;

        Str(fEnde.Anzahl,SAnzahl);
        fLstKasse.AddItem(SAnzahl,self);
 end;

procedure TSchlange.Dequeue;
var temp: TKunde;
 begin
      if not self.IsEmpty then begin;
         temp := fAktuell;
         fAktuell := temp.Nach;
         temp.Destroy;
         if fAktuell = nil then fEnde := nil;
      end;
 end;

function TSchlange.IsEmpty: boolean;
 begin
      If fAktuell <> nil then IsEmpty := false
                        else IsEmpty := true;
 end;

procedure TSchlange.TimKundeTimer(Sender:TObject);
begin
   Enqueue(TKunde.Create);
end;

procedure TSchlange.TimBedienungTimer(Sender:TObject);
var num: string;
begin
        if not IsEmpty then begin
         fAktuell.Gescannt;
         fLstKasse.Items.Delete(0);
         if fAktuell.Anzahl = -1 then Dequeue
                                else begin
                                     str(fAktuell.Anzahl,num);
                                     fLstKasse.Items.Insert(0,num);
                                 end;
         end;
         if (IsEmpty and (TimKunde.Enabled = false)) then TimBedienung.Enabled := false;
end;

procedure TSchlange.Verwaltung(P: boolean);
begin
  TimKunde.Enabled := P;
  if p = true then TimBedienung.Enabled := p;
end;

end.
Delphi-Quellcode:
unit mKunde;

interface
 type
     TKunde = class(TObject)
      private
       fanzahl :integer;
       fNach : TKunde;
      public
       constructor Create; virtual;
       procedure Gescannt;
       property Anzahl: Integer read fAnzahl;
       property Nach: TKunde read fNach write fNach;
      end;


implementation
 constructor TKunde.Create;
  begin
   inherited create;
   randomize;
   fanzahl := random(9) +1
  end;


  procedure TKunde.Gescannt;
   begin
    fanzahl := fanzahl -1;
   end;


end.
Die Kasse stellt so gesehen selber Kunden an und bearbeitet diese,
so dass das Formular nur die ListBox bereitstellen muss.
Es funzt, aber ich schätze mal, dass die Lösung nicht gerade elegant ist.
  Mit Zitat antworten Zitat