Java:
public class Start {
public static void main(String[] args) {
(new Kalender()).auswahlMenue();
}
}//end of main
public class KalenderFunktion
{
/**
=========================================================================
* Funktion: istSchaltjahr( int jahr )
* Parameter: jahr (int) : das Jahr, das auf Schaltjahr ueberprueft wird
* Rueckgabe: (boolean) : true, wenn das Jahr ein Schaltjahr ist
* : false, wenn das Jahr nicht Schaltjahr ist
* Beschreibung: jedes 4.te Jahr ist Schaltjahr,
* (wenn sich das Jahr durch 4 ohne Rest teilen laesst, ist es Schaltjahr )
* Ausnahme davon jedes 100.te Jahr ist kein Schaltjahr
* (wenn sich das Jahr durch 100 ohne Rest teilen laesst, ist es kein Schaltjahr)
* Ausnahme davon jedes 400.ter Jahr ist wieder Schaltjahr
* (wenn sich das Jahr durch 400 ohne Rest teilen laesst, ist es Schaltjahr)
* =========================================================================
*/
boolean istSchaltjahr(int jahr)
{
return ((jahr%4 == 0 )&&((jahr%100 != 0 )||( jahr%400 == 0 )));
}
/**
=========================================================================
* Funktion: schaltjahr(int jahr)
* Parameter: jahr (int) : das Jahr, das auf Schaltjahr ueberprueft wird
* Rueckgabe: (int) : 1 = true, wenn das Jahr ein Schaltjahr ist
* : 0 = false, wenn das Jahr nicht Schaltjahr ist
* Beschreibung: siehe --> istSchaltjahr(long jahr)
* =========================================================================
*/
int schaltjahr(int jahr)
{
if(istSchaltjahr(jahr)) return 1;
else return 0;
}
/**
=========================================================================
* Funktion: tagesnummer(int tag, int monat, int jahr)
* Parameter: tag (long) : Tag
* monat (long) : Monat
* jahr (long) : Jahr
* Rueckgabe: n (int) : Tagesnummer rel. zum Jahresanfang
* (1=1.1.,2=2.1.,...365/366=31.12)
* Beschreibung: Algorithmus von Robertson
* =========================================================================
*/
int tagesnummer(int tag, int monat, int jahr)
{
int d, e;
d = (monat+10)/13;
e = tag + (611*(monat+2))/20 - 2*d - 91;
return (e + schaltjahr (jahr) * d );
}
/**
=========================================================================
* Funktion: wochentag_im_jahr(int jahr, int n)
* Parameter: jahr (long) : Jahr
* n (int) : Tagesnummer rel. zum Jahresanfang
* (1=1.1.,2=2.1.,...365/366=31.12)
* Rueckgabe: (int) : Wochentag (0=So, 1=Mo,..., 6=Sa)
* Beschreibung: Algorithmus von Zeller
* =========================================================================
*/
int wochentag_im_jahr(int jahr, int n)
{
int j, c;
j = (jahr-1) % 100;
c = (jahr-1) / 100;
return (28+j+n+(j/4)+(c/4)+5*c) % 7;
}
} // end of class
public class Kalender implements IKalender {
private static boolean beenden=false;
public static final String[] monatName={null,"Januar","Februar","Maerz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"};
public static final int [] monatsTageGesamt= {0,31,28,31,30,31,30,31,30,31,30,31};
public static final String [] wochenDeu = {null,"Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"};
public static final String [] wochenEng = {"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"};
@Override
public String getMonatsblatt(int jahr, int monat) {
String monatkoerper =" ";
System.out.println(getKopfzeileMonatsblatt(jahr, monat) );
if (monat == 2 && (new KalenderFunktion().istSchaltjahr(jahr))){
monatsTageGesamt[monat] = 29;
}
int i= monatsTageGesamt[monat];
int w=(new KalenderFunktion()).tagesnummer(i, monat, jahr);
monatkoerper=Integer.toString(w);
System.out.println(monatkoerper);
return monatkoerper;
}
@Override
public String getKopfzeileMonatsblatt(int jahr, int monat) {
String kopfzeile = " ";
String ersteZeile=" "; // Zeil für Monat und Jahr
String zweiteZeile;//Zeile für die Wochentage, einmal Englisch und Deutsche Schreibweise
String monatsName =monatName[monat];
//ausgabe
Ausgabe.ausgabeKopfzeile();
do{
//eingabe
int auswahl=Eingabe.inKopfzeiele();
//auswerten
switch(auswahl){
case 1://Deutsche Schreibweise
ersteZeile =" "+"******************"+ monatsName + " "+ jahr + "*******************\n ";
zweiteZeile=wochenDeu[1]+"\t"+wochenDeu[2]+"\t"+wochenDeu[3]+"\t"+wochenDeu[4]+"\t"+wochenDeu[5]+"\t"+wochenDeu[6]+"\t"+wochenDeu[7];
kopfzeile =ersteZeile+zweiteZeile; //weisse alles den return sting zurueck
System.out.println(kopfzeile);
break;
case 0://Englische Schreibweise
ersteZeile =" "+"******************"+ monatsName +" "+ jahr+ "*******************\n ";
zweiteZeile=wochenEng[0]+"\t"+wochenEng[1]+"\t"+wochenEng[2]+"\t"+wochenEng[3]+"\t"+wochenEng[4]+"\t"+wochenEng[5]+"\t"+wochenEng[6];
kopfzeile =ersteZeile+zweiteZeile; //weisse alles den return sting zurueck
System.out.println(kopfzeile);
break;
}
}while(beenden==false);
return kopfzeile;
}
@Override
public void zeigeMonat(int jahr, int monat) {
//hier Monatsblatt ausgeben
//getKopfzeileMonatsblatt(jahr,monat);
String tmp = getMonatsblatt(jahr,monat);
System.out.println(tmp);
}
@Override
public void zeigeJahr(int jahr) {
//hier 12 Monatsblätter zeigen
for(int i=1;i<=12;i++){
}
}
@Override
public int liesMonat() {
int ret = -1;
//ausgabe
Ausgabe.ausgabeMonatsEingabe();
//eingabe
ret=Eingabe.liesMonat();
return ret;
}
@Override
public int liesJahr() {
int ret = -1;
//ausgabe
Ausgabe.ausgabeJahrEingabe();
//eingabe
ret=Eingabe.liesJahr();
return ret;
}
@Override
public void auswahlMenue() {
do{
//ausgabe
Ausgabe.ausgabeAuswahl();
//eingabe
int auswahl=Eingabe.eingabeAuswahl();
//auswerten
switch(auswahl){
case 1://Das ganze Jahr
int jahr = this.liesJahr();
this.zeigeJahr(jahr);
break;
case 2://Monatsblatt
jahr =this.liesJahr();
int monat=this.liesMonat();
this.zeigeMonat(jahr, monat);
break;
case 0://Programm ende
beenden=true;
break;
}
}while(beenden==false);
System.out.println("Das Programm wird benndet");
}
}//end of class
public interface IKalender {
/**
* Beschreibung: Erzeugt ein Monatsblatt des Jahreskalenders
* und gibt das Monatsblatt in Stringform zurück.
* Das Monatsblatt wird in einenm String mit Zeilenumbruechen abgelegt.
* Das Monatsblatt enthält immer die Kopfzeile für den entsprechenden Monat.
* Beispiel:
*
******************* Mai 2017 ******************
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, das angezeigt werden soll
* @return String - der zusammengebastelte String
*/
public String getMonatsblatt(int jahr, int monat);
/**
* Methode, um die Kopfzeile eines Monatsblattes in Stringform zurückzugeben.
* Dieses erfordert die Uebergabe des Monats und des Jahres als Integer
* und liefert die Kopfzeile komplett als String zurueck.
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, das angezeigt werden soll
* @return liefert die Kopfzeile komplett als String zurueck
* Beisiel:
******************* Mai 2016 ******************
So Mo Di Mi Do Fr Sa
*
*/
public String getKopfzeileMonatsblatt(int jahr, int monat);
/**
* Methode zur Ausgabe eines Monatsblattes auf der Konsole
*
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, das angezeigt werden soll
*/
public void zeigeMonat(int jahr, int monat);
/**
* Methode zur Ausgabe aller Monatsblaetter eines Jahres auf der Konsole
* @param jahr - das Jahr, das angezeigt werden soll
*/
public void zeigeJahr(int jahr);
/**
* Die Methode liest eine Monatszahl ein,
* evaluiert diese Zahl auf den gültigen Bereich [1,..,12]
* und gibt die eingelese und überrüfte Monatszahl zurück.
* Wenn der Benutzer keine gültige Monatszahl eingibt, verbleibt
* das Programm in der Einlese-Schleife.
* @return int - der eingelesene Monat
*/
public int liesMonat();
/**
* Die Methode liest eine Jahreszahl ein,
* evaluiert diese Zahl auf den gültige Ziffern
* und gibt die eingelese und überrüfte Jahreszahl zurück.
* Wenn der Benutzer keine gültige Jahresangabe macht, verbleibt
* das Programm in der Einlese-Schleife.
* @return int - das eingelesene Jahr
*/
public int liesJahr();
/**
* stellt das Auswahlmenue dar und liest die Benutzeruswahl ein
* die Benutzerauswahl wird evaluiert auf Gültigkeit
* Wenn der Benutzer keine gültige Engabe macht, verbleibt
* das Programm in der Einlese-Schleife.
*/
public void auswahlMenue();
}// end of interface
package io;
public class Ausgabe {
public static void ausgabeAuswahl(){
System.out.println();
System.out.println("Auswahl: [1] Kalender fuer das ganze Jahre");
System.out.println("Auswahl: [2] Ausgabe Monatsblatt");
System.out.println("Auswahl: [0] Ende des Programms");
}
public static void ausgabeKopfzeile() {
System.out.println();
System.out.println("Auswahl: [1] Deutsche Schreibweise (Wochentage)");
System.out.println("Auswahl: [0] Amerikanische Schreibweise (Wochentage)");
}
public static String zeigeMonatsblatt(String kopfzeile, String monatkoerper){
return monatkoerper;
}
public static void ausgabeJahrEingabe(){
System.out.println("Bitte geben Sie eine Jahreszahl ein:");
}
public static void ausgabeMonatsEingabe(){
System.out.println("Bitte geben Sie eine Monatszahl ein:");
}
}
package io;
import java.util.Scanner;
public class Eingabe {
private static Scanner scan = new Scanner(System.in);
private static boolean ende= true;//gehen von Fehler aus
/**
* @return liefert den eingelesen Wert zurück
*/
public static int eingabeAuswahl(){
int retWert= -1;
// einlesen
// evaluiren auf gültigkeit
// solange bis Werte gültig
do{
String tmp = scan.next();
if(tmp.equals("1")||tmp.equals("2")||tmp.equals("0") ){
//konvertieren
retWert = Integer.parseInt(tmp);
ende=false;
}
else{
System.out.println("Bitte Menuepunkte auswaehlen:");
}
}while(ende == true);
return retWert;
}
/**
* Georgischen Kalender ab 1582
* @return int- gibt die eingeben Jahres Zahl zurueck
*/
public static int liesJahr() {
int jahr= -1;
// einlesen
// evaluiren auf gültigkeit
// solange bis Werte gültig
do{
try {
String strJahr = scan.next();
int tmpjahr = Integer.parseInt(strJahr);
if (tmpjahr >= 1582) {
jahr = tmpjahr;
} else{
System.out.println("Bitte geben Sie ein Jahr ab 1582 ein:");
ende=false;
}
} catch (NumberFormatException e) {
System.out.println("Falsche Eingabe! Bitte geben Sie eine Zahl ein:");
}
}while(ende == true);
return jahr;
}
/*
* @return int - eingelesener Monat
*/
public static int liesMonat() {
int monat = -1;
do{
try{
// einlesen
// evaluiren auf gültigkeit
// solange bis Werte gültig
String tmpMonat = scan.next();
//konvertieren
monat = Integer.parseInt(tmpMonat);
if((1<=monat) && (monat<=12)){
}
else{
System.out.println("Bitte geben Sie ein Monat ein:");
ende=false;
}
}catch (NumberFormatException e){
System.out.println("Falsche Eingabe! Bitte geben Sie eine Zahl ein:");
ende=false;
}
}while(ende == true);
return monat;
}
public static int inKopfzeiele() {
int retWert= -1;
// einlesen
// evaluiren auf gültigkeit
// solange bis Werte gültig
do{
String tmpKopf = scan.next();
if(tmpKopf.equals("1")||tmpKopf.equals("0")){
//konvertieren
retWert = Integer.parseInt(tmpKopf);
ende=false;
}else{
System.out.println("Bitte Menuepunkte auswaehlen:");
}
}while(ende == true);
return retWert;
}
}
ich bin neu hier und muss im Rahmen meinen Studiums bis zum Sonntag ein Kalender erstellen. Aber ich komme nicht mehr weiter.
Ich hänge bei der Darstellung des Kalender.
Würde mich um schnell Hilfe freuen