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.