Hallo,
ja, so funktioniert das Einfügen, d.h. du schreibst angegebene Namen immer auf den nächst niedrigeren Platz.
Das ist aber erst die halbe Miete.
Wie fügst du ein, wenn next = 0 ist, d.h. die Schlange voll ist? Dann musst du anfangen, die Elemente zu verschieben, und zwar erst verschieben und danach einfügen.
Es sollte also irgendwie so weitergehen:
Code:
function tschlange.einfuegen(x: person):boolean;
begin
//hinter dem Array kann man nichts mehr einfügen
Result := Next >0;
if Result then
begin
//Daten an aktuelle Array-Position schreiben
schlange[Next].Name := x.Name;
schlange[Next].Id := x.id;
//Position abziehen
dec(Next);
end
else begin // next =0
// 9 auf 10 schieben, 8 auf 9 schieben usw. - For-Schleife dafür verwenden
// an Stelle 1 das Neue einfügen
end;
end;
Wie du die For-Schleife zum Verschieben programmierst, das wurde ja oben schon erwähnt (for i:=9 downto 1 do ... schlange[i+1]:=schlange[i]).
Außerdem solltest du x.id eindeutig machen, z.B. erst im Constructor mit id:=1 initialisieren, dann beim Einfügen schlange[next].id:=id und danach mit inc(id) immer um eins erhöhen, sobald du eine Person eingefügt hast. Die Id wird also vom Programm vergeben, zum Einfügen gibt man nur den Namen ein.
Ich würde daher der Einfüge-Funktion nur den Namen und nicht den ganzen Record übergeben, wie du es früher schon mal hattest, denn den kannst du aus dem Edit-Feld einfach übernehmen. Somit hast du im id der zuletzt eingefügten Person auch gleich die Anzahl der Leute, die insgesamt an der Kasse waren, um bei dem Beispiel zu bleiben.