AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Übungsprogramm "Kinokarten"

Übungsprogramm "Kinokarten"

Ein Thema von EdAdvokat · begonnen am 8. Dez 2016 · letzter Beitrag vom 16. Jan 2017
Antwort Antwort
Seite 5 von 6   « Erste     345 6   
EdAdvokat
Registriert seit: 1. Mai 2016
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.
Angehängte Dateien
Dateityp: zip kinoKarten1.zip (86,1 KB, 31x aufgerufen)
 
Jumpy

 
Delphi 6 Enterprise
 
#41
  Alt 20. Dez 2016, 09:26
Man muss bei den Enums dieser Art nur aufpassen, dass nicht irgendwann mal der Preis der ermässigten Kategorie 1 der selbe ist wie die normale Kategorie 2. Da könnte man eher sowas machen:

Delphi-Quellcode:
TRang = (Rang1,Rang1erm,Rang2,Rang2erm,Rang3,Rang3erm);

const Preisliste : array[0..6] of Double = (15,14,13,12,10,9)

//führt dann zu
PreisR[aRang] := Karten[aRang] * Preisliste[aRang]
Ralph
  Mit Zitat antworten Zitat
SProske

 
Delphi 10.2 Tokyo Enterprise
 
#42
  Alt 20. Dez 2016, 09:40
Man könnte auch das enum als Array-Enumerator verwenden

const Preisliste : array[Low(TRang)..High(TRang)] of Double = (15,14,13,12,10,9)
Sebastian
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#43
  Alt 20. Dez 2016, 18:38
Hallo zusammen, Dank Eurer Unterstützung und mit einiger Anstrengung habe ich das Programm in eine "vorsichtige Angebotsphase" versetzt und hoffe auf wohlwollende Kritik an meinen bescheidenen Künsten. Ich danke nochmals all jenen Usern, die mir weiter geholfen haben. Es gibt auch noch eine Variante, in der ich das Prog. in 2 units geteilt habe (Hauptformular und Kartenberechnung). Ich hoffe alle Fehleingabemöglichkeiten verhindert zu haben.
Angehängte Dateien
Dateityp: zip Kinokarten_oop51.zip (861,3 KB, 2x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#44
  Alt 21. Dez 2016, 18:32
Hallo zusammen, es kann doch nicht sein, dass die jetzige Fassung wirklich schon annähernd perfekt ist - oder? Ich reiche nunmehr die geteilte Variante zur Kritik, denn die ist sicher nicht perfekt, denn mit der vorgenommenen Teilung bin ich selbst nicht so ganz glücklich, kann aber nicht feststellen was und wo ich etwas anders machen müßte. Es funktioniert jedoch so wie die vorhierige Variante. Für Tipps wäre ich dankbar.
Angehängte Dateien
Dateityp: zip Kinokarten5geteilt.zip (863,7 KB, 4x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
nahpets
 
#45
  Alt 21. Dez 2016, 19:11
Dashier gibt es zwei mal:
Delphi-Quellcode:
const
   PlGes = 100; //Gesamtzahl der Plätze
   MWSt = 0.19; //Mehrwertsteuer
   Preisliste : array[Low(TRang)..High(TRang)] of Double = (15,14,13,12,10,9);//könnte erweitert werden
   zuvielKarten = ('Sie wollen mehr Karten verkaufen, als vorhanden sind!');
Das würd' ich nur in der Unit uKartenberechnung deklarieren. Bei Änderungen muss man sonst an zwei Stellen ran, das ist fehleranfällig.

Die Kinokarten:= TKinokarten.create; werden zwar im FormCreate erstellt, aber beim Programmende nicht wieder freigegeben.

Im Form1 ist ein Zugriff in der Art Form1.Irgendwas nicht erforderlich, Irgendwas reicht aus.

Im FormCreate sollte auch die Methode Init des Formulares aufgerufen werden, um beim Programmstart einen definierten Zustand zu bekommen.

Dashier showMessage(format('Es wurden %d Karten im %d. Rang für %d Euro bzw. für ermäßigt %d Euro verkauft!',[50,3,10,9])); kommt in sehr ähnlicher Weise mehrfach vor. Für den Text würd' ich eine Konstante deklarieren und die dann jeweils nutzen.
Delphi-Quellcode:
const
  Verkaufsmeldung = 'Es wurden %d Karten im %d. Rang für %d Euro bzw. für ermäßigt %d Euro verkauft!';
...
showMessage(format(Verkaufsmeldung,[50,3,10,9]));
Dieses läßt sich eventuell auch "schöner" gestalten: MessageDlg('Der Preis '+floattostrF(Kinokarten.Preis,ffCurrency, 8,2)+' setzt sich zusammen aus '+floattostrF(Kinokarten.ZwSu,ffCurrency, 8,2)+' Netto plus '+floattostrF(Kinokarten.MWSt, ffCurrency, 8,2)+' MWSt' , mtInformation, [mbOK], 0);
Delphi-Quellcode:
const
  Preismeldung = 'Der Preis %8.2m setzt sich zusammen aus %8.2m Netto plus %8.2m MWST';
...
MessageDlg(format(Preismeldung,[Kinokarten.Preis,Kinokarten.ZwSu,Kinokarten.MWSt]),mtInformation,[mbOK],0);
  Mit Zitat antworten Zitat
Fritzew

 
Delphi 10.2 Tokyo Enterprise
 
#46
  Alt 21. Dez 2016, 19:21
Hallo
nahpets hat ja schon einiges genannt,

wenn Du jetzt noch "alle" Berechnungen in Deine Kinoklasse bringst, wird es schon besser.
Also diese Zeilen:
Delphi-Quellcode:
       Kinokarten.ZwSu:=Kinokarten.PreisR[Rang1] + Kinokarten.PreisR[Rang2] + Kinokarten.PreisR[Rang3];
        Kinokarten.MWSt:=Kinokarten.ZwSu * MWSt;
        Kinokarten.Preis:=Kinokarten.ZwSu+Kinokarten.MWSt;
Berechnungen gehören in die Klasse und nicht in das Formular
Fritz Westermann
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#47
  Alt 21. Dez 2016, 20:07
Erst einmal vielen Dank, werde ich genau prüfen. Wie sieht es jedoch hinsichtlich der Deklaration public und private aus. Da ich Schwierigkeiten mit dem Zugriff hatte habe ich alles public erklärt und das ist wohl nicht richtig. Was wäre da zu tun?
Norbert
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#48
  Alt 21. Dez 2016, 22:37
Vielen Dank für die Hinweise. Ich hoffe, sie alle richtig umgesetzt zu haben. Bei der Prüfung konnte ich keine Fehler feststellen, doch sicher ist die von mir gewählte Deklaration public nicht so der Hit.
Verdient das Programm somit die Bezeichnung kleines Übungsprogramm für ein "Dorfkino"? Ich habe jedenfalls in der Erstellungsphase viel dazugelernt. Nochmals Dank
Angehängte Dateien
Dateityp: zip Kinokarten5geteilt1.zip (863,8 KB, 2x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
Fritzew

 
Delphi 10.2 Tokyo Enterprise
 
#49
  Alt 21. Dez 2016, 23:29
Hallo
Vielen Dank für die Hinweise. Ich hoffe, sie alle richtig umgesetzt zu haben. Bei der Prüfung konnte ich keine Fehler feststellen, doch sicher ist die von mir gewählte Deklaration public nicht so der Hit.
Verdient das Programm somit die Bezeichnung kleines Übungsprogramm für ein "Dorfkino"? Ich habe jedenfalls in der Erstellungsphase viel dazugelernt. Nochmals Dank
Also ganz ehrlich? Nein

Du hast immer noch zuviel Logik im Formular.

z.B:

Delphi-Quellcode:
Kinokarten.setAnzK1(strtoint(EAnzK1.text));
      if Kinokarten.Karten[Rang1] > (ord(frPlR1Vorg)) then
        begin
            ShowMessage(zuvielKarten);
            EAnzK1.Text:='0';
            EAnzK1.SetFocus;
            exit;
        end;
da gehört die Prüfung in die Klasse (meiner Meinung nach).

etwa in dem Kinokarten.setAnzK1 als function deklariert wird mit einem Boolean
also etwa
Delphi-Quellcode:
function TKinokarten.setAnzK1(k1:integer) : boolean;
begin
 result := false;
 if gekaufteKarten[Rang1] + k1 <= (ord(frPlR1Vorg)) then
  begin
    Karten[Rang1]:= k1;
    result := true;
  end;
end;

// in Auswerten dann:
 if not Kinokarten.setAnzK1(strtoint(EAnzK1.text)) then
        begin
            ShowMessage(zuvielKarten);
            EAnzK1.Text:='0';
            EAnzK1.SetFocus;
            exit;
        end;
Im Moment kann ich 2 * 12 Karten Rang1 kaufen bevor eine Meldung kommt........
Fritz Westermann
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#50
  Alt 22. Dez 2016, 16:43
Hallo zusammen, hier nun das Programm mit zwei units und den angemahnten Verbesserungen. Habe all die Anregungen hoffentlich ordentlich verarbeitet. Nach meiner Prüfung sollte es nun funktionieren. (12x12 verflickst, klappt nun nicht mehr!) Nochmals vielen Dank für die Anregungen, auf die ich z.T selbst wohl nicht gekommen wäre, doch es ist einfach Klasse diese Lösung, die man sich merken sollte. Das Design ist sicher nur "Dorfkino"-gerecht, doch daauf kommt es bei einem Übungsprogramm sicher nicht an, denn die programmtechnische Umsetzung sollte im Vordergrund stehen. Ist es nun so, dass man es ohne schlechtes Gewissen anbieten kann? (Ich will es jedoch nirgendwo anders als hier in der DP zeigen!)
Angehängte Dateien
Dateityp: zip Kinokarten5geteilt2.zip (865,5 KB, 4x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf