Informatik mit Delphi: Parkautomaten für mehrere Tage?

...komplette Frage anzeigen

3 Antworten

Hi,

der Entwurf ist schonmal ganz gut. Nun noch ein bissl Tuning:

nehm statt des Edits für die Eingabe der Ankunftszeit zwei DateTimePicker (Win32 Palette). Einen für den Tag und einen für die Zeit (hier musst du die Eigenschaft Kind auf dtkTime stellen). So musst du keine StrToTime-Umwandlung mehr machen sonder kannst direkt von den DateTimePickern mit der Property DateTime die Zeitwerte abfragen.

Zum weiteren Verständis jetzt ein wenig Theorie: Der Typ TDateTime hält ein Datum und eine Zeit gleichzeitig. Der Wert vor dem Komma ist der Tag (Anzahl der Tage seit 1899) und der Teil nach dem Komma ist die Zeit als Bruch (0,5 = 12Uhr 0,25 = 6Uhr 0,75 = 18Uhr) Mann kann also mit Trunc die Zeit abschneiden und mit Frac die Vorkommastellen also die Tage abschneiden.

Genug Theorie, weiter gehts: Deine Ankunftszeit ist also trunc(dtpDay.DateTime) + Frac(dtpTime.DateTime)

wenn du nun, wie dus schon gemacht hast von now deine Zeit abziehst und mit hourof die Stunden ermittelt hast, musst du 'nur noch' die Anzahl der Stunden aus den Tagen ermitteln. Stunden = Trunc(parkdauer) * 60;

Fertig.

Mach weiter so, gruss, dj

Antwort bewerten Vielen Dank für Deine Bewertung

Moin, ich sehe dein Problem nicht ganz. Wenn der Preis pro stunde gleich bleibt, macht es doch keinen Unterschied in deinem Programm, ob man 2 oder 50 Stunden parkt.

Allerdings sind mir da ein paar...unglückliche...Anwendungen aufgefallen:

-Warum benutzt du zusätzlich zu Button1.Click nicht lieber einen Timer, dann läuft ganz automatisch die Uhr und der Preis wird auch angezeigt, wenn zd>60min. Natürlich brauchst du den Button, um wenn du wegfahren willst, aber der Timer simuliert den Rest besser

-Deine If-then-else Befehle sind sehr verschachtelt und unübersichtlich, nimm doch lieber case of

if parkdauer < 60 then begin preis:= (00.70);

-Schreib lieber Preis:=0, das andere ist unnötig und verwirrend

Zu viel Kritik, ich weiß, aber sonst ist das Programm echt gut.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von JohannR
30.05.2011, 22:53

Danke für die Kritik, nur so wird man besser :) Ich möchte, dass jemand z.b. den 28.05. eingeben kann und so noch je Tag zusätzlich zehn Euro beispielsweise dazugerechnet werden.... geht das?

0
Kommentar von DataJockey
31.05.2011, 10:10

Diese Kritik ist auch unnötig. Das Problem ist, dass das Program nicht mit 2 verschiedenen Tagen umkann. (Lösung folgt gleich)

Mit Button ist die Steuerung einfacher für einen Anfänger. nen Timer ist nur Fluff.

Mann kann aus diesen ifs keinen case baun. case geht in Delphi nur mit ordinalen Typen.

0 * 0.7 zu schreiben ist zur besseren Dokumentation manchmal hilfreich.

gruss, dj

0

Hi werde aus der Aufgabenstellung nicht so ganz schlau.

Sollt Ihr:

A) Die Zeit auswählen und das Program gibt einen Preis vor?

oder

B) Sollst Du den Geldbetrag eingeben können und ab diesem Zeitpunkt wird

die Parkdauer berechnet?

Hmm,

Und bitte beende das Program mit:

form1.Close;

Application.Terminate ist die "harte" Methode ein Program zu beenden, ist aber nicht gut, da die kompletten Ereignisse wie CloseQuery usw. übergangen wird. für spätere Projekte solltest Du das gleich richtig machen ;-)

Viele Grüße

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DataJockey
31.05.2011, 16:49

in Edit1 soll die Ankunftszeit eingegeben werden. das Programm spuckt den zu zahlenden Betrag aus.

0
Kommentar von nabucco123
09.06.2011, 03:01

form1.Close; vergiss mal ganz schnell: nur Close;

0

Was möchtest Du wissen?