Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeitberechnung für Parkscheinautomat....??!! (https://www.delphipraxis.net/92766-zeitberechnung-fuer-parkscheinautomat.html)

Sonne 25. Mai 2007 15:44


Zeitberechnung für Parkscheinautomat....??!!
 
HALLO!


Habe ein Problem. Und zwar bin ich absoluter Delphi-Neuanfänger und nun sollen wir als Hausaufgabe einen Parkscheinautomaten programmieren, der ausrechnet, wie viel man bezahlen muss. Dabei soll die erste Stunde frei sein und jede weitere, angebrochene kostet 0,70 Euro.

Ich hätte ja schon eine Idee, würde aber gerne mal eure Ansätze hören.
Was zu beachten wäre ist, dass die Zeit, die das Auto parkt, durch den Computer selber errechnet werden soll ( also sicher Endzeit minus Anfangszeit?!) und dabei eine der beiden Zeiten (ich denke mal am logischsten ist die Endzeit - also wenn das Auto rausfahren will) der Computer von seiner Zeit erkennen soll. Also die Zeit, die er auch da unten rechts in der Leiste anzeigt...

Ich hoffe, dass das einiger Maßen verständlich ist und mir jemand weiterhelfen kann!

Danke schonmal!
Liebe Grüße Sonne

:bounce2:

shmia 25. Mai 2007 15:53

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von Sonne
Ich hätte ja schon eine Idee, würde aber gerne mal eure Ansätze hören.

Es ist aber eine Hausaufgabe!!!
Ich könnte dir innerhalb 3 Min. eine fertige Lösung auftischen, aber das ist ja nicht Sinn der Sache.
Also zeig mal deine Idee her (am besten mit Sourcecode).

Ich geb dir mal ein paar Stichpunkte:
aktuelles Datum & Uhrzeit kann man so abfragen:
Delphi-Quellcode:
var
   jetzt : TDateTime;
begin
   jetzt := Now;
Wenn man zwei Zeitpunkte hat, kann man so die Zeitdifferenz ausrechnen:
Delphi-Quellcode:
zeitdiff_in_tagen : double;
begin
   zeitdiff_in_tagen := Now- gemerkteZeitpunkt;
   zeitdiff_in_stunden := zeitdiff_in_tagen / ???;
Mit Floor() kann man auf ganze Werte abrunden; wie aufrunden geht steht in der Hilfe.

DeddyH 25. Mai 2007 15:59

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Mit Floor() kann man auf ganze Werte abrunden
AFAIK ist das eine C/C++/Java/PHP-Funktion. Meinst Du trunc?

shmia 25. Mai 2007 16:01

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von DeddyH
Meinst Du trunc?

Ja, schon. Wollte nur testen, ob jemand mitdenkt. :zwinker:

Dunkel 25. Mai 2007 16:01

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von DeddyH
Zitat:

Mit Floor() kann man auf ganze Werte abrunden
AFAIK ist das eine C/C++/Java/PHP-Funktion. Meinst Du trunc?

Floor & Ceil gibt es auch in Delphi.

Sonne 25. Mai 2007 16:16

Re: Zeitberechnung für Parkscheinautomat....??!!
 
ja ich wollte ja auch nicht die komplette lösung haben..
nur mit der zeitberechnung vorallem wie der die computerzeit nimmt davon hab ich halt keine ahnung..

das macht der mit deinem "1. stichpunkt" ja?
zumindest denk ich dsa jetzt mal so ;)

und kannst du mir vll nochmal erklären was das bei deinem zweiten stichpunkt alles zu bedeuten hat? weil wenn ich sowas benutze muss ich ja wissen was es bedeutet und bewirkt
und mit dem floor das weiß ich auch net...

wie das mit der IF- THEN schleife geht weiß ich ja dann.. eigentlich...

danke und lg sonne

DeddyH 25. Mai 2007 16:36

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Floor & Ceil gibt es auch in Delphi.
Seit welcher Version denn? In Delphi 5 gab es sie jedenfalls nicht.

jmit 25. Mai 2007 16:46

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von DeddyH
Zitat:

Floor & Ceil gibt es auch in Delphi.
Seit welcher Version denn? In Delphi 5 gab es sie jedenfalls nicht.

Das würde mich auch einmal interessieren.

Gruß Jörg

jmit 25. Mai 2007 16:50

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von jmit
Zitat:

Zitat von DeddyH
Zitat:

Floor & Ceil gibt es auch in Delphi.
Seit welcher Version denn? In Delphi 5 gab es sie jedenfalls nicht.

Das würde mich auch einmal interessieren.

Gruß Jörg

Bei Borland Developer Studio 2006 gibt es die Funktionen in der Unit Math.

Gruß Jörg

DeddyH 25. Mai 2007 16:51

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Stelle gerade fest, in Delphi 7 ist sie vorhanden, kann also nur mit Version 6 oder 7 hinzugekommen sein.

Klaus01 25. Mai 2007 18:03

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Nun. ich weiß nicht ob ihr das dürft, aber
in den DateUtils gibt es eine Funktion Namens minutesBetween.
Diese gibt Dir die Anzahl der Minuten zwischen zwei Daten zurück, wie der Name schon sagt.

Die Stunden erhälts Du wenn Du das Ergebnis div 60 nimmst.
Die restlichen Minuten wenn Du das Ergebnis mod 60 nimmst.

Wenn Ergebnis mod 60 > 0 dann ist eine weitere Stunde angebrochen
und der Stundenwert muß um eins erhöht werden.

Zu MinutesBetween mal in der Delphihilfe nachschlagen.

Grüße
Klaus

Dunkel 25. Mai 2007 18:15

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Zitat:

Zitat von DeddyH
Zitat:

Floor & Ceil gibt es auch in Delphi.
Seit welcher Version denn? In Delphi 5 gab es sie jedenfalls nicht.

Delphi 7 kennt die auf jeden Fall, ich bin mir jetzt nicht sicher, ob die auch schon in Delphi 6 vorhanden waren; MATH einbinden nicht vergessen.

DeddyH 25. Mai 2007 19:46

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Mal kurz zurück zum Thema: wenn ich die Differenz zwischen 2 TDateTime (die ja faktisch Double sind) ermittle, habe ich die Differenz in Tagen als Bruchzahl. Nun müsste diese doch nur noch mit "der Anzahl der Stunden eines Tages" ;) multipliziert werden (dabei die erste Freistunde nicht vergessen) und fertig ist der Lack, oder denke ich mal wieder zu simpel? Der Rest ist lediglich eine Frage der Genauigkeit, d.h. es ist die Frage zu klären, wann eine Stunde als angebrochen gilt (nach einer Minute, Sekunde, Millisekunde?)

TheWedler 30. Mai 2007 16:08

Parkscheinautomatennot!!
 
Hallo!

Vll hat der eine oder andere schon den Parkscheinbeitrag von Sonne und mir gelesen. Leider konnten wir mit den Antworten nicht viel anfangen da wir wirklich absolute Beginner sind. Sonne, ich und weitere 50 Schüler müssen das Programm morgen abgeben und KEINER hat die verlangte Version. Daher meine Bitte an einen "ders Kann" HILFE!!! so unverschämt wie es klingen mag aber wir bräuchten den kompletten Quelltext für die procedur.

LG verzweifelter Tim

Klaus01 30. Mai 2007 16:20

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Jetzt mal im Ernst,

in dem Beitrag steht, wie man die Zeit zwischen zwei Zeitpunkten ermittelt.
Davon eine Stunde abzuziehen dürfte auch nicht so schwer sein.

Ein Editfeld in dem man die EinfahrZeit in das Parkhaus einträgt, könnt Ihr aber schon auf die Form packen?
Oder amcht zwei Editfelder eines für die Stunde und eine für die Minute.
Um aus dem Edit.text eine Zeit zu bekommen, dazu gibt es Funktion encodeTime (aus der Unit SysUitls).
Dazu ist sogar ein Beispiel in der Hilfe vorhanden.

Um die Funktion encodeTime zu nutzen müßt Ihr noch den Edit.text in einen Zahl umwandeln.
Dazu nimmt man die Funktion StrToInt.

Um die aktuelle Zeit zu bekommen gibt es den Befehl now.

So am besten noch einmal alle Beiträge durchlesen und mal loslegen.

Viel Glück.
Klaus

DeddyH 30. Mai 2007 17:25

Re: Zeitberechnung für Parkscheinautomat....??!!
 
Also, ich habe das Programm gerade mal erstellt (war ja noch einfacher, als ich zuerst dachte). Wenn mir die Damen und Herren Schüler hier vor allen anderen versprechen, dass sie bis zum Wochenende fleißig die Hilfe wälzen und mir dann erklären, was ich da eigentlich tue, stelle ich den Source hier rein. Deal? :coder:

DeddyH 30. Mai 2007 19:02

Re: Zeitberechnung für Parkscheinautomat....??!!
 
OK, da keine Antwort mehr kam, nehme ich an, der Deal ist geplatzt ;). Ich stelle mal meine Lösung zur Diskussion, falls wer Interesse daran hat (weil sie so schön klein ist, gleich die ganze Unit):
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Startzeit: TDateTime;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const Stundenpreis = 0.7;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  Startzeit := now - Random(2) - Random;
  Label1.Caption := Format('Einfahrt: %s Uhr',[FormatDateTime('dd.MM.yyyy hh:mm',Startzeit)]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Ende: TDateTime;
    Preis: double;
begin
  Ende := now;
  Label2.Caption := Format('Ausfahrt: %s Uhr',[FormatDateTime('dd.MM.yyyy hh:mm',Ende)]);
  Preis := trunc((Ende - Startzeit) * 24) * Stundenpreis;
  Label3.Caption := Format('Zu zahlen: %.2f €',[Preis]);
(*  das ginge auch noch etwas kürzer unter Einsparung der Variablen "Preis":
  Ende := now;
  Label2.Caption := Format('Ausfahrt: %s Uhr',[FormatDateTime('dd.MM.yyyy hh:mm',Ende)]);
  Label3.Caption := Format('Zu zahlen: %.2f €',[trunc((Ende - Startzeit) * 24) * Stundenpreis]); *)
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz