code ostern

package feiern;


/**

* @author Marc Heiligenstein

*

* Berechnung von Ostern, Himmelfahrt und Pfingsten nach Gauss

*/

import java.applet.*;

import java.awt.*;

import java.awt.event.*;


public class Ostern extends Applet implements ActionListener {


private Thread gaussThread;


private Button knopf;


private int jahr, m, n;


//Textfelder fuer die Ein- und Ausgabe

private TextField eingabe, ostern, himmel, pfingsten;


//Label, um bisschen Beschriftung anzeigen zu koennen

private Label leingabe, lostern, lhimmel, lpfingsten;


//Bisschen Farbe

private Color blue = new Color(25, 0, 240),

red = new Color(150, 0, 50),

green = new Color(0, 100, 100);


// Merkmal um Himmelfahrt und Pfingsten ausrechnen zu koennen

private int merken = 0;


public void start() {


gaussThread = new Thread();

gaussThread.start();


}


public void init() {


//Der Layout-Manager

GridBagLayout gridbag = new GridBagLayout();

GridBagConstraints c = new GridBagConstraints();

setFont(new Font("Arial", Font.PLAIN, 15));

setLayout(gridbag);


//Label fuer das Jahr

c.weighty = 0.25;

c.weightx = 1.0;

leingabe = new Label("Jahreszahl: ");

gridbag.setConstraints(leingabe, c);

add(leingabe);


//Text Feld Jahreszahl-Eingabe


c.weighty = 0.25;

c.gridwidth = GridBagConstraints.REMAINDER;

eingabe = new TextField("2005", 15);

eingabe.setFont(new Font("Monospaced", Font.PLAIN, 15));

gridbag.setConstraints(eingabe, c);

add(eingabe);


//Der Knopf, der alles in Bewegung setzt

c.gridwidth = 1;

knopf = new Button("Ostern");

knopf.setBackground(green);

c.anchor = GridBagConstraints.CENTER;

c.gridwidth = GridBagConstraints.REMAINDER;

gridbag.setConstraints(knopf, c);

add(knopf);

//Wenn der Knopf gedrückt wird

knopf.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent h) {

knopf_actionPerformed(h);

}

});


//Ausgabe,erstmal das Label Ostern

c.gridwidth = 1;

lostern = new Label("Datum fuer Ostern: ");

gridbag.setConstraints(lostern, c);

add(lostern);


//Ausgabe Ergebnis fuer Ostern

c.gridwidth = GridBagConstraints.REMAINDER;

ostern = new TextField(15);

ostern.setEditable(false);

ostern.setForeground(blue);

gridbag.setConstraints(ostern, c);

add(ostern);


//Himmelfahrt

c.gridwidth = 1;

lhimmel = new Label("Datum fuer Himmelfahrt: ");

gridbag.setConstraints(lhimmel, c);

add(lhimmel);


//Ausgabe Ergebnis fuer Himmelfahrt

c.gridwidth = GridBagConstraints.REMAINDER;

himmel = new TextField(15);

himmel.setEditable(false);

himmel.setForeground(green);

gridbag.setConstraints(himmel, c);

add(himmel);


//Pfingsten

c.gridwidth = 1;

lpfingsten = new Label("Datum fuer Pfingsten: ");

gridbag.setConstraints(lpfingsten, c);

add(lpfingsten);


//Ausgabe Ergebnis fuer Pfingsten

c.gridwidth = GridBagConstraints.REMAINDER;

pfingsten = new TextField(15);

pfingsten.setEditable(false);

pfingsten.setForeground(red);

gridbag.setConstraints(pfingsten, c);

add(pfingsten);

}


//Wird benoetigt, da die ActionPerformed-Klasse eine innere Klasse ist.

public void actionPerformed(ActionEvent l) {

}


void knopf_actionPerformed(ActionEvent h) {


jahr = Integer.parseInt(eingabe.getText());

//hier wird die Variable Jahr eingelesen


//wenn die Jahreszahl im erlaubten Bereich ist, dann kann es losgehen

if (jahr >= 1800 && jahr <= 2199) {


//als erstes muesssen natuerlich m und n berechnet werden

if (jahr >= 1800 && jahr <= 1899) {

n = 4;

m = 23;

} else if (jahr >= 1900 && jahr <= 2099) {

n = 5;

m = 24;

} else if (jahr >= 2100 && jahr <= 2199) {

n = 6;

m = 24;

}


//Ostern berechen*********************************************************

int a = jahr % 19; // Das Jahr modulo 19,usw

int b = jahr % 4;

int c = jahr % 7;

int d = ((19 * a) + m) % 30;

int e = ((2 * b) + (4 * c) + (6 * d) + n) % 7;


//Bei dieser rechnung darf natürlich nur höchstens 31 rauskommen, da es den 32. Maerz nicht gibt

if ((22 + d + e) < 32) {

ostern.setText(22 + d + e + ". Maerz " + jahr);

merken = 1;

}

//Sonst gehen wir in den April. Hier ist der 26. April durch den 19. April zu ersetzen

else if ((d + e - 9) == 26) {

ostern.setText("19. April " + jahr);

merken = 2;

}

// Auch der 25 April ist zu ersetzen, falls noch einige Nebenbedingungen zutreffen, auf den 18. April

else if (((d + e - 9) == 25) && d == 28 && e == 6 && a >= 10) {

ostern.setText("18. April " + jahr);

merken = 3;

} else {

ostern.setText(d + e - 9 + ". April " + jahr);

merken = 0;

}


//Himmelfahrt berechnen ****************************************************


//falls Ostern in den Maerz faellt

if (merken == 1) {

int tag = 22 + d + e + 40 - 62;

himmel.setText(tag + ". Mai " + jahr);

}

//falls Ostern in den April faellt

else if (merken == 2) {

int tag = 19 + 40 - 31;

himmel.setText(tag + ". Mai " + jahr);

} else if (merken == 3) {

int tag = 18 + 40 - 31;

himmel.setText(tag + ". Mai " + jahr);

} else {

if ((d + e - 9) < 23) {

int tag = d + e - 9 + 40 - 31;

himmel.setText(tag + ". Mai " + jahr);

} else {

int tag = d + e - 9 + 40 - 62;

himmel.setText(tag + ". Juni " + jahr);

}

}


//Pfingsten berechnen**********************************************************

// falls Ostern in den Maerz faellt

if (merken == 1) {

int tag = 22 + d + e + 50 - 62;

pfingsten.setText(tag + ". Mai " + jahr);

}

//falls Ostern in den April faellt

else if (merken == 2) {

int tag = 19 + 50 - 62;

pfingsten.setText(tag + ". Juni " + jahr);

} else if (merken == 3) {

int tag = 18 + 50 - 62;

pfingsten.setText(tag + ". Juni " + jahr);

} else if (merken == 0) {

if ((d + e - 9) < 13) {

int tag = d + e - 9 + 50 - 31;

pfingsten.setText(tag + ". Mai " + jahr);

} else {

int tag = d + e - 9 + 50 - 62;

pfingsten.setText(tag + ". Juni " + jahr);

}

}


} else {

//falls die Eingabe nicht im erlaubten Bereich ist

ostern.setText("Falsche Eingabe");

himmel.setText("nur von 1800");

pfingsten.setText("bis 2199");

}

}

public void stop() {

gaussThread = null;

}

public void destroy() throws NullPointerException {

try {

gaussThread.destroy();

} catch (NullPointerException e) {

}

}

}