das programm besteht aus 2 klassen(application and dateobject) (eine dritte, die eingabeklasse ist nicht aufgeführt und an einer anderen stelle zu finden) und berechnet gedöns mit jahren und werktagen zwischen 1901-01-01 und 2100-12-31.
application
import java.util.*;
class datum_app {
public static void main (String[] args) {
int l = 6;
int m = 10;
int n = 1909;
int nowtag = 0;
int nowmonat = 0;
int nowjahr = 0;
int s,t,u,diff,nsumme,msumme,x,y,z,i,help,whelp,dhelp;
int wzaehler = 0;
GregorianCalendar GC = new GregorianCalendar();
System.out.println("Dieses Programm loest eine wiwi-Programmieraufgabe von 2005 (Stand: 17.12.2007), laeuft sequentiell ab und erwartet vom Benutzer einige Parameter.");
System.out.println("Zunaechst werden zwei Daten zwischen 1901-01-01 und 2100-12-31 im Format yyyy<return>mm<return>dd<return> erwartet.");
System.out.println("Es folgen einige debug-parameter der Datumsobjekte.");
System.out.println("Die zu loesenden Bedingungen werden angezeigt.");
System.out.println("Der Gregorianische Kalender wird nur zur HEUTE-Feststellung benutzt.");
System.out.println("Ein drittes Datum YYYY-MM-DD wird erwartet");
n = eingabe.readInt("Erstes Datum, Jahr:");
m = eingabe.readInt("Erstes Datum, Monat:");
l = eingabe.readInt("Erstes Datum, Tag:");
u = eingabe.readInt("Zweites Datum, Jahr:");
t = eingabe.readInt("Zweites Datum, Monat:");
s = eingabe.readInt("Zweites Datum, Tag:");
Datum ndatum = new Datum (l,m,n);
System.out.println("n");
System.out.println ("gueltig : " + ndatum.gueltig);
System.out.println (ndatum.jahr + "-" + ndatum.monat + "-" + ndatum.tag);
System.out.println (ndatum.tagesdiff);
System.out.println (ndatum.wochentag);
System.out.println ("Werktag : " + ndatum.werktag);
if (ndatum.schaltjahr) { System.out.println ("Schaltjahr"); }
else { System.out.println ("kein Schaltjahr"); }
System.out.println();
nowtag = GC.get(Calendar.DATE);
nowmonat = GC.get(Calendar.MONTH) + 1;
nowjahr = GC.get(Calendar.YEAR);
Datum heute = new Datum (nowtag, nowmonat, nowjahr);
System.out.println("und jetzt heute");
System.out.println ("gueltig : " + heute.gueltig);
System.out.println (heute.jahr + "-" + heute.monat + "-" + heute.tag);
System.out.println (heute.tagesdiff);
System.out.println (heute.wochentag);
System.out.println ("Werktag : " + heute.werktag);
if (ndatum.schaltjahr) { System.out.println ("Schaltjahr"); }
else { System.out.println ("kein Schaltjahr"); }
System.out.println();
Datum mdatum = new Datum (s,t,u);
System.out.println("m");
System.out.println ("gueltig : " + mdatum.gueltig);
System.out.println (mdatum.jahr + "-" + mdatum.monat + "-" + mdatum.tag);
System.out.println (mdatum.tagesdiff);
System.out.println (mdatum.wochentag);
System.out.println ("Werktag : " + mdatum.werktag);
if (ndatum.schaltjahr) { System.out.println ("Schaltjahr"); }
else { System.out.println ("kein Schaltjahr"); }
System.out.println();
if ((ndatum.gueltig == true) && (mdatum.gueltig == true)) {
if (ndatum.tagesdiff == mdatum.tagesdiff) help = 0;
else if (ndatum.tagesdiff < mdatum.tagesdiff) help = 1;
else help = 2;
switch (help) {
case 0 : {
System.out.println("(Punkt2)Beide Tage identisch. Differenz 0");
}
case 1 :
case 2 : {
diff = Math.abs(mdatum.tagesdiff - ndatum.tagesdiff);
System.out.println("(Punkt2)Die Differenz betraegt " + diff + " Tage");
}
default : {
break;
}
}//switch--help
}//if
else {
System.out.println ("(mindestens) eines der Daten ist ungueltig");
}
nsumme = ndatum.tagesdiff - ndatum.jahrsumme;
msumme = mdatum.tagesdiff - mdatum.jahrsumme;
System.out.println ("(Punkt 1) :");
System.out.println ("Tage seit 1. Januar " + ndatum.jahr + " (n) " + nsumme);
System.out.println ("Tage seit 1. Januar " + mdatum.jahr + " (m) " + msumme);
System.out.println ("Eingabe eines Datums in der Vergangenheit (Punkt 3)");
z = eingabe.readInt ("Jahr");
y = eingabe.readInt ("Monat");
x = eingabe.readInt ("Tag");
Datum past = new Datum (x,y,z);
if (!past.gueltig) System.out.println("Datum nicht gueltig");
else if (past.tagesdiff > heute.tagesdiff) {
System.out.println ("Datum liegt nicht in der Vergangenheit. Identische Daten hier kein Fehlerfall.");
}//if
else if (past.tagesdiff == heute.tagesdiff) {
if (heute.werktag == true) System.out.println("Daten identisch. Werktag.");
else System.out.println("Daten identisch. kein Werktag.");
}//else-if1
else if (Math.abs(past.tagesdiff - heute.tagesdiff) < 3) {
diff = (heute.tagesdiff - past.tagesdiff);
switch (diff) {
case 1 : {
if (past.werktag && heute.werktag) wzaehler = 2;
else if (past.werktag || heute.werktag) wzaehler = 1;
else wzaehler = 0;
break;
}
case 2 : {
dhelp = past.wtag;
switch (dhelp) {
case 1 :
case 2 :
case 3 :
case 4 : wzaehler = 2;
break;
case 5 : wzaehler = 1;
break;
case 6 : wzaehler = 0;
break;
case 7 : wzaehler = 1;
break;
default : break;
}//switch--dhelp
}
default : {
break;
}
}//switch--diff
}//else-if_diff3
else {
wzaehler = 1;
for (i=past.tagesdiff; i<heute.tagesdiff; i++) {
whelp = i;
Datum idate = new Datum (whelp);
if (idate.werktag) { wzaehler+=1; }
}//for
}//else
System.out.println ("Werktage von " + past.jahr + "-" + past.monat + "-" + past.tag + " bis heute (Punkt 3): " + wzaehler);
System.out.println ("Programmende. success");
}//main
}//class
objectclass
class Datum {
Boolean gueltig;
int tag;
int monat;
int jahr;
String wochentag;
Boolean werktag;
Boolean schaltjahr;
int tagesdiff;
int jahrsumme;
int wtag;
//Standard-Konstruktor
public Datum () {
gueltig = true;
tag = 6;
monat = 10;
jahr = 2012;
wochentag = "Samstag";
werktag = false;
schaltjahr = true;
tagesdiff = 40822;
}//Standard-Konstruktor
public Datum (int neuerTag, int neuerMonat, int neuesJahr) {
int i = 0;
int jahrdiff = 0;
tag = neuerTag;
monat = neuerMonat;
jahr = neuesJahr;
if ((jahr < 1901) || (jahr > 2100)) {
gueltig = false;
tag = 0;
monat = 0;
jahr = 0;
werktag = false;
schaltjahr = false;
}
else {
if ((jahr % 4) == 0) {
if ((jahr % 100) == 0) {
if ((jahr % 400) == 0) {
schaltjahr = true;
}//400
else { schaltjahr = false; }
}//100
else { schaltjahr = true; }
}//4
else { schaltjahr = false; }
switch (monat) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:
case 12 : {
if ((tag < 1) || (tag > 31)) {
gueltig = false;
tag = 0;
monat = 0;
jahr = 0;
}//if
else { gueltig = true; }
break;
}
case 4:
case 6 :
case 9 :
case 11 : {
if ((tag < 1) || (tag > 30)) {
gueltig = false;
tag = 0;
monat = 0;
jahr = 0;
}//if
else { gueltig = true; }
break;
}
case 2 : {
if (schaltjahr) { i = 29; }
else { i = 28; }
if ((tag < 1) || (tag > i)) {
gueltig = false;
tag = 0;
monat = 0;
jahr = 0;
}//if
else { gueltig = true; }
break;
}
default : {
gueltig = false;
break;
}
}//switch--monat
//Referenztag
if ((tag == 1) && (monat == 1) && (jahr == 1901)) { wochentag = "Dienstag"; werktag = true; tagesdiff = 1; }
else {
jahrdiff = jahr - 1901;
for (i=1901; i<jahr; i++) {
if ((i % 4) == 0) {
if ((i % 100) == 0) {
if ((i % 400) == 0) {
tagesdiff += 366;
}//400
else { tagesdiff += 365; }
}//100
else { tagesdiff += 366; }
}//4
else tagesdiff += 365;
}//for
jahrsumme = tagesdiff;
switch (monat) {
case 1 : {
tagesdiff += tag;
break;
}
case 3 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += tag;
}
break;
}
case 5 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
break;
}
case 7 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
break;
}
case 8 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
break;
}
case 10 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
break;
}
case 12 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += tag;
}
break;
}
case 4 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += tag;
}
break;
}
case 6 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
break;
}
case 9 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += tag;
}
break;
}
case 11 : {
if (schaltjahr) {
tagesdiff += 31;
tagesdiff += 29;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
else {
tagesdiff += 31;
tagesdiff += 28;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += 31;
tagesdiff += 30;
tagesdiff += 31;
tagesdiff += tag;
}
break;
}
case 2 : {
tagesdiff += 31;
tagesdiff += tag;
}
default : {
break;
}
}//switch--monat
i = tagesdiff % 7;
switch (i) {
case 0 : {
wochentag = "Montag";
wtag = 1;
break;
}
case 1 : {
wochentag = "Dienstag";
wtag = 2;
break;
}
case 2 : {
wochentag = "Mittwoch";
wtag = 3;
break;
}
case 3 : {
wochentag = "Donnerstag";
wtag = 4;
break;
}
case 4: {
wochentag = "Freitag";
wtag = 5;
break;
}
case 5 : {
wochentag = "Samstag";
wtag = 6;
break;
}
case 6 : {
wochentag = "Sonntag";
wtag = 7;
break;
}
default : {
wtag = -1;
break;
}
}//switch--i
switch (wtag) {
case 1 :
case 2 :
case 3 :
case 4 :
case 5 : {
werktag = true;
break;
}
case 6 :
case 7 : {
werktag = false;
break;
}
default : {
break;
}
}//switch--wtag
}//Referenztag-else
}//gueltiger Bereich
}//Konstruktor
public Datum (int tageszaehler) {
int i = 0;
if ((tageszaehler < 1) || (tageszaehler > 73049)) {
gueltig = false;
}
else {
i = tageszaehler % 7;
switch (i) {
case 0 : {
wtag = 2;
wochentag = "Dienstag";
werktag = true;
break;
}
case 1 : {
wtag = 3;
wochentag = "Mittwoch";
werktag = true;
break;
}
case 2 : {
wtag = 4;
wochentag = "Donnerstag";
werktag = true;
break;
}
case 3 : {
wtag = 5;
wochentag = "Freitag";
werktag = true;
break;
}
case 4 : {
wtag = 6;
wochentag = "Samstag";
werktag = false;
break;
}
case 5 : {
wtag = 7;
wochentag = "Sonntag";
werktag = false;
break;
}
case 6 : {
wtag = 1;
wochentag = "Montag";
werktag = true;
break;
}
default : {
break;
}
}//switch--i
}//gueltig
}//Konstruktor2
}//class Datum