package kalender;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Kalender {
Scanner scan = new Scanner(System.in);
KalenderFunktionen kalfunk = new KalenderFunktionen();
boolean form = true;
/**
* Beschreibung: Erzeugt ein Monatsblatt des Jahreskalenders
* und gibt das Monatsblatt in Stringform zurück.
* Das Monatsblatt wird in einem String mit Zeilenumbrüchen abgelegt.
* Das Monatsblatt enthält immer die Kopfzeile für den entsprechenden Monat.
* Beispiel:
*
******************* Mai 2016 *******************
So Mo Di Mi Do Fr Sa
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
*
*@param jahr - das Jahr zum Monat
*@param monat - der Monat, der angezeigt werden soll
*@return String - der zusammengebastelte String
*/
// private String getMonatsblatt(int jahr, int monat){
//
// String pattern="###,#00";
// DecimalFormat asdf = new DecimalFormat(pattern);
//
// if(kalfunk.istSchaltjahr(jahr)) {
// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {
// if(y % 7 == 0) {
// System.out.println();
// }
// System.out.print(asdf.format(y=y+1)+" " );
// System.out.print(" ");
// }
// return " ";
// } else {
// for(int y=0;y < kalfunk.monatslaenge[0][monat];) {
// if(y % 7 == 0) {
// System.out.println();
// }
// System.out.print(asdf.format(y=y+1) );
// System.out.print(" ");
// }
// return " ";
// }
// private String getMonatsblatt(int jahr, int monat){
//
// String pattern="###,#00";
// DecimalFormat asdf = new DecimalFormat(pattern);
// for(int t=0; t<kalfunk.wochentag_im_jahr(jahr, kalfunk.tagesnummer(1, monat, jahr));t++){
//System.out.print(" ");
//}
// if(kalfunk.istSchaltjahr(jahr)) {
// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {
// if(y % 7 == 0) {
// System.out.println();
// }
// System.out.print(asdf.format(y=y+1)+" " );
// System.out.print(" ");
// }
// return " ";
// } else {
// for(int y=0;y < kalfunk.monatslaenge[0][monat];) {
// if(y % 7 == 0) {
// System.out.println();
// }
// System.out.print(asdf.format(y=y+1) );
// System.out.print(" ");
// }
// return " ";
// }
// }
private String getMonatsblatt(int jahr, int monat) {
if(form) {
int day = 0;
int firstDay = kalfunk.wochentag_im_jahr(jahr, kalfunk.tagesnummer(1, monat, jahr));
String pattern = "###,#00";
DecimalFormat asdf = new DecimalFormat(pattern);
if (kalfunk.istSchaltjahr(jahr)) {
for (int y = 0; y < kalfunk.monatslaenge[1][monat] + firstDay ; y++) {
if (y % 7 == 0) {
System.out.println();
}
if (y == 0) {
for (int t = 0; t < firstDay; t++) {
System.out.print(" ");
System.out.print(" ");
System.out.print(" ");
System.out.print(" ");
y++;
}
}
System.out.print(asdf.format(day = day + 1) + " ");
System.out.print(" ");
}
return " ";
} else {
for (int y = 0; y < kalfunk.monatslaenge[0][monat] + firstDay;) {
if (y % 7 == 0) {
System.out.println();
}
if (y == 0) {
for (int t = 0; t < firstDay; t++) {
System.out.print(" ");
System.out.print(" ");
System.out.print(" ");
System.out.print(" ");
y++;
}
}
System.out.print(asdf.format(day = day + 1) + " ");
System.out.print(" ");
}
}
} return " ";
}
/**
* Methode, um die Kopfzeile eines Monatsblattes in Stringform zurückzugeben.
* Dieses erfordert die Übergabe des Monats und des Jahres als Integer
* und liefert die Kopfzeile komplett als String zurück.
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, der angezeigt werden soll
* @return liefert die Kopfzeile komplett als String zurück
* Beispiel:
******************* Mai 2016 *******************
So Mo Di Mi Do Fr Sa
*
*/
private String getKopfzeileMonatsblatt(int jahr, int monat) {
String Kopfzeile = "*******************"+kalfunk.monatsname[monat]+ " " +jahr+"******************* \r";
if(form) {
System.out.print(Kopfzeile);
for(int x = 0; x < 7; x++){
System.out.print(kalfunk.wochentagkurz[x]+ " ");
}
} else {
System.out.print(Kopfzeile);
for(int y = 1; y < 7; y++){
System.out.print(kalfunk.wochentagkurz[y]+ " ");
System.out.print(kalfunk.wochentagkurz[0]+ " ");
}
}
return Kopfzeile;
}
/**
* Methode zur Ausgabe eines Monatsblattes auf der Konsole
*
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, der angezeigt werden soll
*/
public void zeigeMonat(int jahr, int monat) {
// String Kopfzeile = "*******************"+kalfunk.monatsname[monat]+ " " +jahr+"******************* \r";
// System.out.println(Kopfzeile);
//
// String pattern="###,#00";
// DecimalFormat form = new DecimalFormat(pattern);
// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {
// if(y % 7 == 0) {
// System.out.println();
// }
// System.out.print(form.format(y=y+1) );
// System.out.print(" ");
//
//
// if(kalfunk.istSchaltjahr(jahr)) {
// }}
// System.out.println(getKopfzeileMonatsblatt(jahr,monat));
System.out.println(getMonatsblatt(jahr,monat));
}
/**
* Methode zur Ausgabe aller Monatblätter eines Jahres auf der Konsole
* @param jahr - das Jahr, das angezeigt werden soll.
*/
public void zeigeJahr(int jahr){
for(int h = 1;h < 13;h++) {
getKopfzeileMonatsblatt(jahr,h);
zeigeMonat(jahr,h);
System.out.println();
}
}
/**
* Die Methode liest eine Monatszahl ein,
* evaluiert diese Zahl auf den gültigen Bereich[1,..,12]
* und gibt die eingelesene und überprüfte Monatszahl zurück.
* Wenn der Benutzer keine gültige Monatszahl eingibt, verbleibt
* das Programm in der Einlese-Schleife.
* @return in - der eingelesene Monat
*/
private int liesMonat(){
System.out.print("Bitte geben Sie den Monat ein:");
int monat = scan.nextInt();
do{
System.out.println("Bitte geben Sie einen Wert zwischen 1 und 12 ein.");
monat = scan.nextInt();
}while(monat > 12 || monat < 1);
return monat;
}
/**
* Die Methode liest eine Jahreszahl ein,
* evaluiert diese Zahl auf die gültigen Ziffern
* und gibt die eingelesene und überprüfte Jahreszahl zurück.
* Wenn der Benutzer keine gültige Jahresangabe macht, verbleibt
* das Programm in der Einlese Schleife.
* @return int - das eingelesene Jahr
*/
private int liesJahr(){
System.out.print("Bitte geben Sie das Jahr ein:");
int jahr = scan.nextInt();
do{
System.out.print("Bitte ein Jahr zwischen 2000 und 2020 eingeben");
jahr = scan.nextInt();
} while(jahr > 2020 || jahr < 2000);
return jahr;
}
/**
* stellt das Auswahlmenü dar und liest die Benutzerauswahl ein.
* die Benutzerauswahl wird evaluiert auf Gültigkeit.
* Wenn der Benutzer keine gültige Eingabe macht, verbleibt
* das Programm in der Einlese-Schleife
*/
public void auswahlMenue() {
// int jahr = liesJahr();
// int monat = liesMonat();
// getKopfzeileMonatsblatt(jahr, monat);
// getMonatsblatt(jahr,monat);
//
//
int jahr = 0;
int monat = 0;
int e = 0;
boolean operation = true;
do{
System.out.println("1: Amerikanisches Format oder 2: Deutsches Format?");
e = scan.nextInt();
switch(e) {
case 1: form = true;
case 2: form = false;
default: System.out.println("Bitte geben Sie \"1\" oder \"2\" ein!");
e = scan.nextInt();
}
if(form) {
System.out.println("Bitte wählen Sie aus!");
System.out.println("Auswahl 1: alle Monatsblätter eines Jahres"
+ "\t Auswahl 2: bestimmter Monat"
+ "\t Auswahl 9: Ich bin fertig :)");
int f = scan.nextInt();
switch(f) {
case 1:
zeigeJahr(liesJahr());
break;
case 2:
jahr = liesJahr();
monat = liesMonat();
System.out.println();
getKopfzeileMonatsblatt(jahr, monat);
zeigeMonat(jahr, monat);
break;
case 9:
System.out.println("Vielen Dank @Kuzuoglu");
operation = false;
break;
default:
System.out.print("Bitte geben Sie korrekte Werte ein \n Auswahl 1: alle Monatsblätter eines Jahres \t Auswahl 2: bestimmter Monat \t Auswahl 9: Ich bin fertig :)");
f = scan.nextInt();
}
}else {
int j = scan.nextInt();
switch(j) {
case 1:
zeigeJahr(liesJahr());
break;
case 2:
jahr = liesJahr();
monat = liesMonat();
System.out.println();
getKopfzeileMonatsblatt(jahr, monat);
zeigeMonat(jahr, monat);
break;
case 9:
System.out.println("Vielen Dank @Kuzuoglu");
operation = false;
break;
default:
System.out.print("Bitte geben Sie korrekte Werte ein \n Auswahl 1: alle Monatsblätter eines Jahres \t Auswahl 2: bestimmter Monat \t Auswahl 9: Ich bin fertig :)");
j = scan.nextInt();
}
}
} while(operation == true);
}
}