Erstmaliger Programmstart im neuen Jahr

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
 

SegFault

Bekanntes Mitglied
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.
 
G

Gast

Gast
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.
 
D

DerChecker00

Gast
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????
 

SegFault

Bekanntes Mitglied
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.
 

voidee

Mitglied
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.
 

SegFault

Bekanntes Mitglied
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.
 

voidee

Mitglied
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.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
J Automatischer Programmstart Allgemeine Java-Themen 5
P Fehler beim Programmstart: java.lang.NoClassDefFound Allgemeine Java-Themen 12
U prozedur bei programmstart Allgemeine Java-Themen 2
S Zugesicherter Speicher der jvm nach Programmstart erhöhen Allgemeine Java-Themen 6
T Log4J: Bei Programmstart immer eine neue LogDatei erzeugen Allgemeine Java-Themen 9
K ersten programmstart erkennen Allgemeine Java-Themen 7
S Komischer Fehler bei Programmstart Allgemeine Java-Themen 4
D Datei beim ersten Programmstart anlegen? Allgemeine Java-Themen 3
T update() wird bei Programmstart und resize nicht gemacht Allgemeine Java-Themen 4
J Probleme mit der CommApi beim ProgrammStart über Konsole Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
G Array mit neuen Objekten der selben Klasse füllen Allgemeine Java-Themen 2
R Neuen Thread mit Verzoegerung starten..? Allgemeine Java-Themen 4
H Problem mit erzeugen eienr neuen Session Allgemeine Java-Themen 3
R in einem neuen Runnable() eine lokale Varibale verwenden Allgemeine Java-Themen 2
zilti NetBeans 6.0: neuen File Type definieren Allgemeine Java-Themen 2
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
H Vektoren nehmen keine neuen Werte an Allgemeine Java-Themen 5
D Zusammensetzen von konstanten String Arrays zu einem Neuen Allgemeine Java-Themen 14
C Wie erstelle ich einen neuen Systemproperty? Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben