Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.298 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Übungsprogramm "Kinokarten"

  Alt 8. Dez 2016, 19:35
Na gut...dann Start ich mal die Meckerrunde


Zuerstmal UI (Oberfläche):

- Edit-Felder sollten für die Eingabe verwendet werden..nicht für reine Ausgaben (dafür gibts StaticText/Label...)

- Die Checkboxen für die einzelnen Ränge sind an und für sich Überflüssig. Wenn der User für
eine Preiskategorie eine Anzahl erfasst, will er sie auch berechet haben


Zur Umsetzung:

- Das Abfangen der Tasten in den Edit-Feldern ist löblich. Aber a) fehlen einige Tasten (10'er-Tastatur usw.). b) gehts einfacher mit MaskEdit

- Statt Anz1, Anz2, Anz3 : integer und R1,R2,R3 : real würd ich Array's verwenden. Damit lässt sich das ganze einfacher erweitern (Das nächste Kino hat 5 Preiskategorien, ein anderes 2...)


- Fixe Werte im Quelltext sollte man vermeiden. Entweder über Konstanten oder, wenn eventuell später Erweiterungen geplant sind, über Config-/Inidateien.

Anmerkung zur Code-Lesbarkeit:


Schwer Lesbar:

Delphi-Quellcode:
   try
  Anz1:=strtoint(Edit2.Text);
  if checkbox1.Checked then R1:=Anz1*15.00
    else R1:=0.0;
  if not checkbox1.Checked then
    Anz1:=(0);

  Anz2:=strtoint(Edit3.Text);
  if checkbox2.Checked then R2:=Anz2*13.00
    else R2:=0.0;
  if not checkbox2.Checked then
    Anz2:=0;

  Anz3:=strtoint(Edit4.Text);
  if checkbox3.Checked then R3:=Anz3*10.00
    else R3:=0.0;
  if not checkbox3.Checked then
    Anz3:=0;

      ZwSu:=ZwSu+R1+R2+R3;
      Steuer:=ZwSu*0.19;
      Endpreis:=ZwSu+Steuer;
      Edit5.Text:=floattostrF(Endpreis, ffCurrency, 8,2);

    showMessage('Der Preis '+floattostrF(Endpreis,ffCurrency, 8,2)+' setzt sich zusammen aus '+floattostrF(zwSu,ffCurrency, 8,2)+' Netto plus '#10#13+floattostrF(Steuer, ffCurrency, 8,2)+' MWSt');
      Gesamt:= Anz1+Anz2+Anz3;
      Kinopl:=Kinopl-Gesamt;
        Edit1.Text:=inttostr(Gesamt);
        edit6.Text:=inttostr(Kinopl);
        zwSu:=0.0;
        Steuer:=0.0;
        Endpreis:=0.0;
  except
    on EConvertError do showMessage(Fehler);
  end;

Besser:

Delphi-Quellcode:
  try
   Anz1:=strtoint(Edit2.Text);
   if checkbox1.Checked then
     R1:=Anz1*15.00
   else
     R1:=0.0;
   if not checkbox1.Checked then
     Anz1:=(0);

   Anz2:=strtoint(Edit3.Text);
   if checkbox2.Checked then
     R2:=Anz2*13.00
   else
     R2:=0.0;
   if not checkbox2.Checked then
      Anz2:=0;

   Anz3:=strtoint(Edit4.Text);
   if checkbox3.Checked then
     R3:=Anz3*10.00
   else
     R3:=0.0;
   if not checkbox3.Checked then
     Anz3:=0;

   ZwSu:=ZwSu+R1+R2+R3;
   Steuer:=ZwSu*0.19;
   Endpreis:=ZwSu+Steuer;
   Edit5.Text:=floattostrF(Endpreis, ffCurrency, 8,2);

   showMessage('Der Preis '+floattostrF(Endpreis,ffCurrency, 8,2)+' setzt sich zusammen aus '+floattostrF(zwSu,ffCurrency, 8,2)+' Netto plus '#10#13+floattostrF(Steuer, ffCurrency, 8,2)+' MWSt');
   Gesamt:= Anz1+Anz2+Anz3;
   Kinopl:=Kinopl-Gesamt;
   Edit1.Text:=inttostr(Gesamt);
   edit6.Text:=inttostr(Kinopl);
   zwSu:=0.0;
   Steuer:=0.0;
   Endpreis:=0.0;
  except
    on EConvertError do showMessage(Fehler);
  end;
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat