OSZ Handel I
Informatik

PAT 01 -  V. 3.0
-   Aufgabe und Hinweise -

S. Spolwig


[Home | Wirtschaftsgymnasium | Informatik | Unterrichtsmaterialien]
[Startseite]

Page down

Patienten in der Liste suchen und anzeigen

Das Bild zeigt die Botschaften und den Datenfluss beim Suchen  

In der Anforderungsdefinition steht lediglich "Patient nach Name suchen und einzeln anzeigen" Es gibt sehr unterschiedliche Suchverfahren, die wir später genauer untersuchen werden.

Zum Anfang werden wir ein einfaches wählen: Man holt nacheinander vom ersten bis zum letzten ein Element aus der Liste und vergleicht es mit dem Suchelement. Wenn die Namen übereinstimmen, hat man es gefunden und es wird in der Maske angezeigt.

? ? ? ? ? ? ? ? ? ? ? ? ? ? NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL

pfeil.gif (890 Byte)



Dazu sind folgende Schritte in dieser Reihenfolge erforderlich:
  1. Ergänzen Sie die Liste um die Suchmethode 'SearchElement (...)'

function TListe.SearchElement (suchElem : TElement) : TElement; 
(*--------------------------------------------------------------- *)
var gefunden : boolean;
Elem : TElement;

begin
  Result := NIL;
  gefunden := false;

  First;
  while NOT (gefunden or Eolist) do
  begin
    Elem := GetElement;
    if Elem.IstGleich(suchElem)
    then
      begin
        gefunden := true;
        Result := Elem;
      end
    else inc(AktuellePos) // Next;
  end;
end;

  1. Ergänzen Sie die Klasse TPatient um die Methode 'IstGleich (...)' .

function TPatient.IstGleich(pat : TPatient) : boolean;
(* -------------------------------------------------------------------- *)
begin
  result := false;
  if ((Vorname = pat.Vorname) and (Name = pat.Name))
  then result := true;
end;

Da es in der Oberklasse TPerson schon eine Methode IstGleich mit anderen Parametern gibt, müssen wir diese überschreiben mit der Compiler-Direktive reintroduce im Interface-Teil.

  1. Wie immer werden die Suchaktionen im Fensterformular aufgerufen. Implementieren Sie in uFensterFrm die Ablaufsteuerung für den Suchen/Anzeige-Button! Beachten Sie dabei, dass Sie dazu einen SuchPatient kreieren müssen, den Sie der Listenmethode 'SearchFor ..' zum Vergleichen mitgeben müssen. In Rohform etwa so:

procedure TFensterFrm.AnzeigeBtnClick(Sender: TObject);
(* ------------------------------------------------------------- *)
var GesuchterPatient : TPatient;
begin
  GesuchterPatient := TPatient.Create;
  DatenAktualisieren(GesuchterPatient);
  AktuellerPatient:= PatientenListe.SearchElement(GesuchterPatient);
  MaskeAktualisieren (AktuellerPatient);
  GesuchterPatient.Free;         // wird nicht mehr gebraucht
end;

Ein wenig müssen noch daran absichern: Was passiert, wenn die Liste leer ist oder der gesuchte Eintrag wird nicht gefunden?  

Hinweis:
Kopieren Sie den Quelltext direkt aus diesem Dokument und fügen Sie ihn in der Klasse ein!



©    05. April 2006    Siegfried Spolwig

page_top