Erstmaliger Programmstart im neuen Jahr

  • Themenstarter Themenstarter DerChecker00
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

DerChecker00

Gast
Hallo,
hab leider ein kleines Problem und weiß nicht ob mein Lösungsvorschlag sinnvoll ist. Ich will beim erstmaligen Programmstart in einem neuen Jahr bei meiner kleinen Urlaubsverwaltung den Resturlaub neu errechnen lassen.
Wie soll ich dies realisieren?
Mein Vorschlag wäre das ich jeden Login in einer Datei speichere und Abfrage, ob das neue Jahr noch nicht in dieser Datei steht. Steht schon ein Datum aus dem neuen Jahr in der Datei, so passiert nichts.

Was haltet ihr von diesem Lösungsvorschlag? Hat irgendjemand eine sinnvollere Idee?

lg
 
hmm solltest du nicht das implementieren was dir am sinnvollsten erscheint? Ich Persönlich würde z.B. in einer datei schreiben von welchem jahr ich schon diesen Resturlaub errechnet hab. Und den mit den aktuellen Jahr vergleichen. Ist der Wert nicht gleich Kalkuliere ich den Resturlaub und schreibe das neue Jahr in die Datei.
Kann sein das es genau das ist was du machen willst. Nur anders beschrieben. Aber dazu braucht man ja nicht jedes Login abspeichern.
 
wenn du den resturlaub _neu_ berechnen lässt, dann speicherst du ihn doch sicherlich sowieso irgendwo. sprich, wenn der resturlaub für das aktuelle jahr fehlt, wird er halt berechnet.
 
Hmm, egtl wird der Resturlaub nicht gespeichert. Es wird ein Urlaubsanspruch gespeichert und und wann jemand in Urlaub gegangen ist. Der Resturlaub wird dann nicht gespeichert. Ich sehe egtl auch keinen Grund, warum man ihn speichern sollte, oder liege ich da falsch????
 
Das mit dem Resturlaub kommt wohl auf die Komplexität des Programmes an. Im normalfall braucht man das nicht wirklich mit speichern jedoch gibts wohl anwendungsfälle wo sowas von Belang ist. Wenn du für deinen konkreten Fall sagst, du brauchst sowas nicht dann lass es weg. Meinst du aber "Ich könnte es vielleicht irgendwann mal gebrauchen" machs gleich mit rein.
Die Sache hat wohl auch rechtliche belange. Resturlaub an einen bestimmten Datum verfällt an einen gewissen Datum wenn der Arbeitnehmer diesen nicht genommen hat aber die Chance hatte diesen in Anspruch zu nehmen. Ansonsten muss ihn der Chef auszahlen. Da ich aber mal davon ausgehe das dein Programm eher für Private Zwecke genutzt wird und nicht soweit gehen muss das du alle rechtlichen Belange berücksichtigen musst reicht es aus den Resturlaub einfach im neuen Jahr neu zu kalkulieren.
 
Ermittle doch den Resturlaub immer dann, wenn die entsprechende Variable noch null ist:

Code:
class irgendwas {

  int resturlaub = -1;

  public int getResturlaub() {
    if (resturlaub==-1)
      resturlaub = ermittleResturlaub();

    return resturlaub;
  }


  /**
   * diese Funktion wird immer aufgerufen, wenn der Resturlaub mittels
   * <tt>getResturlaub</tt> abgefragt wird, und die entsprechende
   * Variable noch auf einem nicht initialisierten Zustans ist.  
  **/
  protected int ermittleResturlaub() {
    ...
  }

}  // -- eoclass -- //

Das vermindert auch die "Last", da der Resturlaub nicht zu einem bestimmten Zeitpunkt ermittelt wird, sondern immer dann, wenn er tatsächlich benötigt wird.

Da ja eine Datenhaltung vorhanden ist, ist nach der Ermittlung der Wert für resturlauv nach einer erfolgreichen Ermittlung immer >= 0. Wenn -1 zu unsicher ist (weil man im Jahr x schon Urlaun des Jahres x+1 nehmen kann) könnte man auch einen höhere negativen Wert (z.B. -999) nehmen.

Ansonsten könnte man die Ermittlung auch in eine eigene Anwendung auslagern.
 
Das ganze bringt aber keine lösung wenn überträge vom vorrigen Jahr vorhanden sind. Dann ist resturlaub > 0 und auf den sollen die ansprüche fürs neue Jahr aufaddiert werden. Das darf aber nicht mehrfach geschehen (Zumindest nicht aus der sicht des Chefs die Arbeitnehmer würden sich freuen) daher war ja die Frage wie kriege ich heraus ob dieses Jahr schon einmal der Urlaub berechnet wurde.
 
Hä?

Wenn resturlaub = -1 wurde er noch nie berechnet. Wenn er größer oder gleich 0 ist wurde er bereits ermittelt.

Wahrscheinlich ist es so, dass der gesamte möglich Urlaub in einer Variablen urlaub steckt, dann ist's halt schleht gemacht. M.E. müsste das in etwa so aussehen:

Code:
public class Urlaub {

 private int resturlaub = -1;
 private int urlaub = 29;

 public int getUrlaub() {
   return getJahresurlaub() + getResturlaub();
 }

 public int getJahresurlaub() {
   return urlaub;
 }

 public int getResturlaub() {
   // s.o
 }

 // vermindert den GesamtUrlaub um 1 einen Tag
 public void decUrlaub() {
   if (resturlaub > 0)
     resturlaub--;
   
  if (urlaub==0)
    throw Exception("nicht möglich");
  else
    urlaub--;
 }



}
Wenn du den Resturlaub in einer einmaligen Aktion zum Jahresuralub einfach dazuzählst bekommst Du igendwann Probleme. Beispiel:
Ein Angestellter hat einen Jahresurlaub von 30 Tagen und einen Resturlaub vom Vorjahr von 10 Tagen. Macht für das aktuelle Jahr einen gesamten Urlaubsanspruch von 40 Tagen. Wenn dem Angestellten einfällt, dass er nur noch zu 50% arbeiten möchte vermindern sich ggfs. sein Jahresurlaub auch um 50%. Wieviele Tage bleiben übrig?

urlaub/2 + resturlaub

Genau. Denn der Vorjahresurlaub darf nicht gekürzt werden.

Deshalb: Jahresurlaub + Resturalub bitte nicht einfach zusammenzählen, sondern Funktionen aufrufen, die ggfs. das addierte Ergebnis liefern.

Wenn alles nichts hilft, kannst du immer noch eine boolean-Variable einfügen, die anzeigt, ob die Berechnung bereits erfolgt ist oder nicht.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben