Thema: Geldautomat

Einzelnen Beitrag anzeigen

Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#16

AW: Geldautomat

  Alt 3. Mär 2011, 13:36
War das jetzt auf mein "in eine Funktion auslagern" bezogen? Wenn ja: Nein, so hatte ICH mir das nicht vorgestellt. Eher so:
Delphi-Quellcode:
procedure TForm1.WechselgeldAusgeben(var ABetrag: Currency; AMuenzwert: Currency);
begin
  While ABetrag >= AMuenzwert do
  begin
    ABetrag := ABetrag - AMuenzwert;
    If AMuenzwert >= 1 then ListBox1.Items.Add(Format('%d-Euro-Stück', [Round(AMuenzwert)]))
      else ListBox1.Items.Add(Format('%d-Cent-Stück', [Round(AMuenzwert * 100)]));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: Integer;
  Preis, R: Currency;
begin
  Preis := StrToCurr(Edit1.Text);
  S := StrToInt(Edit2.Text);
  ListBox1.Clear;
  R := S - Preis;
  If R > 9.99 then raise Exception.Create('Der Automat gibt ausschließlich Kleingeld und nur bis 9,99€.');
  WechselgeldAusgeben(R, 2.00);
  WechselgeldAusgeben(R, 1.00);
  WechselgeldAusgeben(R, 0.50);
  WechselgeldAusgeben(R, 0.20);
  WechselgeldAusgeben(R, 0.10);
  WechselgeldAusgeben(R, 0.05);
  WechselgeldAusgeben(R, 0.02);
  WechselgeldAusgeben(R, 0.01);
end;
Ungetestet, aber so ist meine Vorstellung
So kann man einfach verfügbare Münzen hinzufügen, entfernen oder ändern, ohne die Schleife in dem der Münzwert drei mal redundant vorkommt anfassen zu müssen. Durch die Redundanz in der ursprünglichen Implementation schleichen sich sonst seeehr leicht Fehler ein.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.

Geändert von Deep-Sea ( 3. Mär 2011 um 16:30 Uhr) Grund: StrToFloat durch StrToCurr ersetzt.
  Mit Zitat antworten Zitat