![]() |
Übungsprogramm "Kinokarten"
Liste der Anhänge anzeigen (Anzahl: 1)
Ein kleines Beispielprogramm "Kinokarten". Der Nutzen sei mal dahingestellt, doch wären einige Tips füe die Dateneingabe und Verarbeitung für Anfänger vermutlich nicht verkehrt.
|
AW: Übungsprogramm "Kinokarten"
Wäre schön, wenn du noch schreiben würdest, welche Techniken im Einzel demonstriert werden.
|
AW: Übungsprogramm "Kinokarten"
Es handelt sich um ein bescheidenes Beispielprogramm für eine Kinokasse. Es können Kartenbestellungen
für 3 Preisklassen aufgegeben werden, für die das Programm dann den Brutto- und Nettopreis sowie die Mehrwertsteuer ausgibt. Zugleich wird die Zahl der verkauften Karten und die Zahl der noch freien Plätze angezeigt. Also einfache Berechnungen, bedingte Eingaben, Fehlerbehandlung, Exceptions im bescheidenen Umfang sind das Thema. Es ist meine erste Veröffentlichung hier. |
AW: Übungsprogramm "Kinokarten"
Na gut...dann Start ich mal die Meckerrunde :twisted:
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; |
AW: Übungsprogramm "Kinokarten"
Zitat:
|
AW: Übungsprogramm "Kinokarten"
Also konstruktive Kritik ist nützlich.
Es ist mein erstes Programm, dass ich je hochgeladen habe, obwohl ich so ganz jung nicht mehr bin. Es war von Anfang an als Beispielprogramm geplant, um einiges auszuprobieren, aus Spaß an der Freude aber nie für einen realen Zweck. Sicher sind die Checkboxen nicht wirklich nötig, doch die Spielerei mit den Bedingungen fand ich nicht schlecht. Ja eine Eingabe über Maskedit wäre besser, doch so hätte ich auf die Eingabenbehandlung verzichten müssen und das wollte ich eigentlich nicht. Was mit der 10-er Tastatur gemeintist, habe ich nicht verstanden. Ich dachte alles erfaßt zu haben. Die Anregung arrays zu verwenden ist ok. So wäre das Ganze besser ausbaufähig, werde ich mir merken. Die Lesbarkeit des Quelltextes ist immer verbesserungsmöglich. Auch meine Ausgabe über ShowMessage ist nicht wirklich der Hit, dass muss ich gegen mich hier mal feststellen. Ich hätte gar nicht gedacht, dass so ein kleines "Programmchen" so viel Beachtung findet. Es hilft mir als reiner Hobby-Programmierer wirklich weiter. Vielen Dank |
AW: Übungsprogramm "Kinokarten"
Zitat:
|
AW: Übungsprogramm "Kinokarten"
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Zitat:
Ganz schlimm daran ist vorallem, dass viele dieser Variablen auch nur für lokale Zwischenergebnisse verschwendet verwendet werden. Zitat:
Warum manuell anzeigen, wenn Exceptions sowieso automatisch angezeigt werden? Vorallem wenn man dann die eigentliche aussagefähige Fehlermeldung "vernichtet", in welcher sogar der fehlerhafte Wert genannt wurde, der in irgendeinem der vielen Edits steht. Und dann noch die total aussagefähigen Bezeichner. Edit1, CheckBox1, ... Gut, der fehlende Ziffernblock wurde schon genannt, aber da gibt es noch einen anderen Bug. :twisted: ![]() |
AW: Übungsprogramm "Kinokarten"
vielen Dank für die Anregungen.
"Der eine meint, er wäre fertig, doch die anderen sehen, er beginnt erst..." NumbersOnly in den EditFeldern habe ich auf true gesetzt und hoffe damit, dass das "ich bin böse"-Phänomen damit nicht mehr auftreten kann. Es lassen sich nun tatsächlich nur Zahlen eingeben. (Tastatur und Nummernblock). Ich habe noch immer nicht verstanden was ich ändern sollte hinsichtlich des Nummernblocks, 10-er Tastatur??? Welche falschen Eingaben müssen also noch abgefangen werden? Was ist damit gemeint? Natürlich muss eine Überwachung der verkauften Karten in Bezug auf die Gesamtzahl der Plätze erfolgen. Mehr noch es muss unterteilt werden, wieviel Karten im 1.,2. und 3. Rang vorhanden bzw. schon verkauft wurden. Das wird recht unübersichtlich, doch ich arbeite daran. Die globalen Variablen wurden bereits in lokale umgewandelt und auch haben die Bezeichner aussagekräftigere Namen erhalten. Auf die CheckBoxen habe ich verzichtet. Noch läuft es nicht ganz rund. |
AW: Übungsprogramm "Kinokarten"
Zitat:
Aber es steht zumindestens in der Hilfe, dass Delphi Windows das Problem nicht gelöst, aber zumindestens dokumentiert hat. Zumindestens macht das den eigenen Code "einfacher" und der Nummernblock wurde beachtet. Im Prinzip müsste man "alle" möglichen Quellen für Text prüfen/behandeln. Du kannst Text zuweisen (
Delphi-Quellcode:
), man kann einfügen (Copy&Paste) und das per mehreren ShortCuts (Strg+V, Shift+Einfg, ...), über das Kontextmenü und mehrere andere WindowsMessages.
Edit.Text := 'abc'
Aber der sicherste Weg ist, wenn man auch noch im OnChange den Text auf ungültige Zeichen prüft. Problem hierbei ist aber, dass "kurzzeitig" auch mal "ungültige" Werte erlaubt sein sollte, drum da nur optische/farbige Meldungen und erst im OnExit und beim Auslesen schärfer prüfen. Das gilt vorallem dann, wenn z.B. auch das Vorzeichen und Tausender- oder Dezimaltrennzeichen drin vorkommen dürfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz