public class Kalender { // start of class
/*
*
* Erstellen eines Objektes für "Scanner" um eine Benutzereingabe auf der
* Konsole zu ermöglichen.
*
* Erstellen eines Objektes für "KalenderFunktionen" um gewisse Methode hier
* einzufügen.
*
*/
Scanner scan = new Scanner(System.in);
KalenderFunktionen kalfunk = new KalenderFunktionen();
/*
* Ich Deklariere und Initialisiere "auswahl" als Privat damit ich sie nur hier in der Klasse "Kalender" benutzen kann.
* Sie dient als Auswahl für das Kalender Format, was der Kunde auswählen kann.
*/
private String formatAuswahl = ""; // "1" = Amerikanischer-Kalender ,"2" = Deutscher-Kalender
/*
* Diese Methode gibt die Wochentage "So, Mo, Di, Mi, Do, Fr, Sa" aus jenachdem ob es Amerikanischer Kalender
* (US)ist oder ob es ein Deutscher Kalender(DE) ist "Mo, Di, Mi, Do, Fr, Sa, So"
*/
private String wochenTageInKurzform(int wochenTage) {
if (formatAuswahl.equals("1")) {
return kalfunk.wochentagkurz[wochenTage];
} else {
return kalfunk.wochentagkurz[(wochenTage + 1) % 7];
}
}// end of getWochenTagKurz()
private int wochenTageImJahr(int jahr, int n) {
if (formatAuswahl.equals("US")) {
return kalfunk.wochentag_im_jahr(jahr, n);
} else {
return (kalfunk.wochentag_im_jahr(jahr, n) + 6) % 7;
}
}
private String getKopfzeileMonatsblatt(int jahr, int monat)
{
String kopfzeileMonatsblatt = "******************* " + kalfunk.monatsname[monat] + " " + jahr + " *******************\n";
for (int tageKurz = 0; tageKurz < 7; tageKurz++) {
kopfzeileMonatsblatt += wochenTageInKurzform(tageKurz) + "\t";
}
return kopfzeileMonatsblatt;
}
public void zeigeMonat(int jahr, int monat)
{
String kopfZeile = getKopfzeileMonatsblatt(jahr, monat);
System.out.println(kopfZeile);
int monatslaenge = kalfunk.monatslaenge[kalfunk.schaltjahr(jahr)][monat];
int tagesnummerDesMonatsImJahr = kalfunk.tagesnummer(1, monat, jahr);
int wochentagTagesnummerImJahr = wochenTageImJahr(jahr, tagesnummerDesMonatsImJahr);
for (int keineTage = 0; keineTage < wochentagTagesnummerImJahr; keineTage++) {
System.out.print(" \t");
}
for (int tag = 1; tag < monatslaenge; tag++) {
int tagesNummerImJahr = kalfunk.tagesnummer(tag, monat, jahr);
int wochentagImJahr = wochenTageImJahr(jahr, tagesNummerImJahr);
System.out.print(getAufzählungsNullen(tag) + "\t");
if (wochentagImJahr == 6) {
System.out.println();
} // end of if-Verzweigung
} // end of for-Schleife
} // end of zeigeMonat()
public String getAufzählungsNullen(int tag) {
String tagesZahl = String.valueOf(tag);
if (tagesZahl.length() == 1) {
return "0" + tagesZahl;
} else {
return tagesZahl;
}// end of if/else-Verzweigung
} // end of getAufzählungsNullen
public void zeigeJahr(int jahr)
{
for (int monat = 1; monat <= 12; monat++) {
zeigeMonat(jahr, monat);
System.out.println();
System.out.println();
}
}
private int liesMonat() { // Eingabe der Monatszahl 2-stellig / 1 - 12
System.out.println("Bitte gebe eine Monatszahl ein: ");
int monat = scan.nextInt();
if (monat < 1||monat > 12) {
System.out.println("Bitte geben Sie eine gültige Zahl an (1-12):");
liesMonat();
}
return monat; // [USER=49078]@Return[/USER] monat - Die Monatszahl wird zurückgegeben.
} // end of liesMonat()
private int liesJahr() { // Eingabe der Jahreszahl 4-stellig
System.out.println("Bitte eine Jahreszahl eingeben: ");
int jahr = scan.nextInt();
int laenge = String.valueOf(jahr).length(); // Die Laenge vom Wert Jahr wird als Integer laenge abgespeichert.
/*
* Wenn die Jahreszahl nicht 4-stellig, dann gibt die if-Verzweigung einen Error Text.
* "Bitte geben Sie eine 4-stellige Zahl an: "
* Daraufhin fängt die Methode nochmal von vorne an.
*/
if (laenge != 4) {
System.out.println("Bitte geben Sie eine 4-stellige Zahl an: ");
liesJahr();
}
return jahr; // [USER=49078]@Return[/USER] jahr - Die 4-stellige Zahl wird zurückgegeben
} // end of liesJahr()
/*
* auswahlMenue() dient als Steuermodul für den Benutzer
*/
public void auswahlMenue() {
Scanner sc = new Scanner(System.in); // Einen interner Scanner in der Methode
/*
* Der Benutzer wird gefragt welches Format er gerne haben will.
* Amerikanisches Format: So, Mo, Di, Mi, Do, Fr, Sa
* Deutsches Format: Mo, Di, Mi, Do, Fr, Sa, So
* Diese Auswahl wird dann Global abgespeichert.
*/
while (!this.formatAuswahl.equals("2") && !this.formatAuswahl.equals("1")) {
System.out.println("Auswahl:\t[1] amerikanisches Format");
System.out.println("Auswahl:\t[2] deutsches Kalenderformat");
this.formatAuswahl = sc.nextLine();
}
int counter=20;
for(int i = 0; i < counter; i++) {
/*
* Abfrage welche Funktion man haben will.
* 1) Kalender fuer das ganze Jahr also 12 Monatsblätter
* 2) Ausgabe Monatsblatt
* 0) Ende des Programms, also der Nutzer entscheidet wann schluss ist.
*/
System.out.println();
System.out.println("Auswahl:\t[1] Kalender fuer das ganze Jahr");
System.out.println("Auswahl:\t[2] Ausgabe Monatsblatt");
System.out.println("Auswahl:\t[0] Ende des Programms");
int funktionAuswahl = sc.nextInt();
/*
* Die If Anweisung gibt ein Error Text wieder wenn funktionAuswahl größer ist als 2 oder kleiner ist als 0.
* z.B{...-3,-2,-1,3,4,5,6...}
*/
if (funktionAuswahl > 2 || funktionAuswahl < 0) {
System.out.println("----------------------------------------");
System.out.println("Geben Sie bitte entweder 1, 2 oder 0 ein");
System.out.println("----------------------------------------");
System.out.println();
}
/*
* Hier befindet sich die else Anweisung. Hier wird alles gesteuert. Der Benutzer wird hier weitergeleitet zu
* den entsprechenen Methoden.
*/
else {
/*
* Wenn der Benutzer die 1 auswählt dann wird er weitergeführt zur Methode liesJahr(). In dieser Methode
* liesJahr gibt er eine 4-stellige Jahreszahl ein. Diese Jahrezahl wird zurück gegeben(return) und dann
* wird der Wert als "int jahr" abgespeichert. Daraufhin wird die ganze Konfiguration in der Methode
* "zeigeJahr(jahr)"(jahr ist der Wert den der Benutzer bei liesJahr geschrieben hat) übernommen.
*/
if (funktionAuswahl == 1) {
int jahr = liesJahr();
zeigeJahr(jahr);
}
/*
* Wenn der Benutzer 2 als Auswahl auswählt dann wird nach dem Jahr gefragt in der Methode liesJahr und
* es wird nach dem Monat gefragt in der Methode liesMonat. Diese Werte werden zurückgegeben (return) und
* abgespeichert.
* Der Wert von liesJahr() wird als int jahr abgespeichert und der Wert von liesMonat() wird als int Monat
* abgespeicher. Diese Werte werden an zeigeMonat(jahr, monat) gegeben.
*/
else if (funktionAuswahl == 2) {
int jahr = liesJahr();
int monat = liesMonat();
zeigeMonat(jahr, monat);
}
/*
* Wenn der Benutzer als Auswahl 0 eingibt dann wird das Programm beendet.
*/
else if (funktionAuswahl == 0) {
break;
}
} //end of else-Verzweigung
/*
* counter wird am Ende immer erhöht da der Benutzer entscheiden kann mit der Auswahl 0 wann das Programm
* beendet wird.
*/
counter = counter + 1;
} // end of for-Schleife
sc.close(); // Der Scanner wird geschlossen.
}// end of auswahlMenue()
}// end of class