Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arbeitszeitkonto (https://www.delphipraxis.net/150669-arbeitszeitkonto.html)

galantfahrer 23. Apr 2010 09:09


Arbeitszeitkonto
 
Hallo,

wir haben heute im Informatikunterricht die Aufgabe bekommen, leider hänge ich mit der tdatetime sache immer noch ganz schon durch.

- ein User soll sein Arbeitsbeginn und ende eingeben
- die Standartarbeitszeit beträgt 8h45min (pausen sind enthalten)
- das Programm soll dann daraus die Überstunden berechnen welches allerdings nur die Stunden und Minuten beachtet
- Negativstunden sind farblich hinterlegt (das mit der Farbe ist nicht das Problem, nur die Berechnung)
- jetzt soll der User wählen ob er einen Freizeitausgleich oder Bezahlung wünscht
- bei Bezahlung soll der Bruttolohn angegeben werden und dieser dann mit der Uhrzeit addiert werden
- bei Freizeitausgleich sollen dann die Wochen, tage und Stunden ausgegeben werden

wir haben allerdings noch keinen interne Speicherbenutzung behandelt -> also ist Voraussetzung das der User seine alten Überstunden kennt und eingeben kann


Herzlichen Dank im Voraus.

Matze 23. Apr 2010 09:12

Re: Arbeitszeitkonto
 
Hallo, herzlich Willkommen in der DP!

Hausaufgaben wird dir hier keiner lösen, da du selbst etwas lernen sollst. ;)

Zeige uns doch bitte deinen bisherigen Ansatz (Quellcode) und wo es genau klemmt bzw. was nicht funktioniert. Ggf. mit genauer Fehlerbeschreibung und einer auftretenden Fehlermeldung.
Dann können wir dir sicher besser helfen.

Grüße, Matze

DP-Maintenance 23. Apr 2010 09:14

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Tutorials und Kurse" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja kein Tut.

galantfahrer 23. Apr 2010 09:25

Re: Arbeitszeitkonto
 
Hallo, sorry wollte nicht da mir jemand meine Hausaufgaben macht. Brauche nur etwas Hilfe und weiß aber noch nicht so richtig wo ich anfangen soll.

hier mal der qQellcode:
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var a,b,c:tdatetime;
var ha,ma,sa,msa,hb,mb,sb,msb,hü,mü,d:word;
begin
  a:=strtotime(maskedit8.text);
  b:=strtotime(maskedit9.Text);

  decodetime(a,ha,ma,sa,msa);
  decodetime(b,hb,mb,sb,msb);
  hü:=hb-ha-8;
  mü:=mb-ma-45;
  d:=hü+mü;
  //c:=b-a;
  edit10.Text:=inttostr(hü);
  edit11.Text:=inttostr(mü);
  //edit17.Text:=timetostr(c);

end;
das ist Erstmal mein Anfang. ich weiß das ist noch nicht sehr viel und ich bin auch am zweifeln ob Info die richtige Wahl für mich war...
jedenfalls spukt er mir in beiden fällen für die Negativstunden seltsame Dinge wie: H =65534 und min :=65446 aus bei einer zeit Eingabe von 6:45 bis 13:00

und einfach nur die Uhrzeiten subtrahieren ist sicher auch nicht die Lösung meines Problems glaube ich.

[edit=Sharky]Delphi-Tags eingefügt. Mfg, Sharky[/edit]

guidok 23. Apr 2010 09:53

Re: Arbeitszeitkonto
 
Zuerst mal:

Warum gibst du deinen Variablen keine anständigen Bezeichnungen, wie "Kommtzeit" und "Gehtzeit"?

Da blickt ja keiner durch, einschließlich du selbst, wenn du mal ein paar Tage wartest und dann deinen Code wieder anschaust.

Dann:

Du kannst DateTime-Werte direkt voneinander abziehen, wobei ein Problem entstehen könnte, wenn der Mitarbeiter "Nachtschicht" arbeitet, z.B. Kommzeit = 23:00 und Gehtzeit = 6:00.

Guido

galantfahrer 23. Apr 2010 10:02

Re: Arbeitszeitkonto
 
das mit der Bezeichnerei steckt noch aus der schule drin.

a-> Kommzeit und b -> Gehzeit und h,m,s,ms entspricht Stunden, Minuten, Sekunden und Millisekunden und das jeweils zugehörig zur Komm- bzw Gehzeit

das mit der Nachtschicht wollte ich evtl. mit einen tauschen von a und b bewerkstelligen,

geschrieben , getan, nur das funktioniert so leider doch nicht

guidok 23. Apr 2010 11:03

Re: Arbeitszeitkonto
 
Wie wäre es damit:

Mit MinutesBetween können Sie die Differenz zwischen zwei TDateTime-Werten in Minuten ermitteln. MinutesBetween zählt nur vollständige Minuten. Deshalb meldet MinutesBetween als Differenz zwischen 09:00:00 Uhr und 09:00:59:999 Uhr den Wert Null, da die Differenz um eine Millisekunde kürzer als eine Minute ist.

Zur Nachtschicht:

In Delphi entspricht der Typ TDateTime einem Double-Wert. Der ganzzahlige Teil eines TDateTime-Wertes von Delphi entspricht der Anzahl der Tage seit dem 30.12.1899. Der fraktionale Teil des TDateTime-Wertes gibt die Tageszeit an.

Da du ja nur die Tageszeit angibst ist der ganzzahlige Teil in deinem Fall Null. Du müsstest als ganz einfach nur einen Tag zur Gehtzeit hinzufügen:

Gehtzeit := Gehtzeit + 1

Anschließend müsste auch die Nachschicht richtig berechnet werden.

galantfahrer 23. Apr 2010 11:52

Re: Arbeitszeitkonto
 
hm das klingt soweit ganz gut. minutesbetween war mir bisher noch unbekannt. dank dir nochmal, ich werde es gleich einmal eingeben.

DeddyH 23. Apr 2010 11:53

Re: Arbeitszeitkonto
 
Und bevor die Frage kommt: Unit DateUtils :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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