Universität Paderborn - Home Universität Paderborn
Die Universität der Informationsgesellschaft

Grundlagen der Programmierung 2 SS 2005 - Datei Notenspiegel.java

/*
 * Notenspiegel.java:
 * Anzahl der vorkommenden Noten werden als Balkendiagramm
 * dargestellt
 */

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;

import javagently.Stream;
import java.io.EOFException;
import java.io.IOException;

import javax.swing.JFrame;

class Notenspiegel extends JFrame {

	Notenspiegel() { // Konstruktor

		Container content = getContentPane();
		content.setBackground(Color.magenta);

		getData();

		setTitle("Notenspiegel");
		setSize(400, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public void paint(Graphics g) {

		super.paint(g);

		int x = 50;
		int y = 250; // Schnittpunkt der Achsen
		int width = 20;
		int gap = 5; // Balken und Zwischenraum

		g.drawLine(x, y, x + 11 * (width + gap), y); // x-Achse
		g.drawLine(x, y, x, 80); // y-Achse

		for (int n = 0; n < 11; n++) { // Beschriftung der x-Achse
			g.drawString(String.valueOf(notenstufen[n]), n * (width + gap)
					+ gap + x, y + 20);
		}
		g.drawString("Endnoten", 11 * (width + gap) + gap + x, y + 20);

		for (int i = 0; i < 200; i += 50) { // Beschriftung der y-Achse
			g.drawLine(48, y - i, 52, y - i);
			g.drawString(String.valueOf(i / 10), 20, y - i);
		}
		g.drawString("Anzahl", 20, 70);

		g.setFont(new Font("SansSerif", Font.BOLD, 14)); // Überschrift
		g.drawString("Klausurergebnis", 140, 60);

		g.setColor(Color.cyan); // die Balken
		for (int stufe = 0; stufe < notenstufen.length; stufe++) {
			int a = notenVorkommen[stufe] * 10;
			g.fillRect(stufe * (width + gap) + gap + x, y - a, width, a);
		}
	}

	int[] notenVorkommen = new int[11];

	double notenstufen[] = { 1.0, 1.3, 1.7, 2.0, 2.3, 2.7, 3.0, 3.3, 3.7, 4.0,
			5.0 };

	void getData() {
		/*
		 * Einlesen der Noten aus einer Textdatei (Endnoten.txt). Die Anzahl der
		 * Vorkommen jeder Note wird im Array notenVorkommen gezählt:
		 * notenVorkommen[i] gibt an, wieoft die i-te Notenstufe vorkommt. Die
		 * Notenstufen 1.0, 1.3, ...,5.0 werden von 0 an indiziert.
		 */

		Stream eingabe = null; // Eingabedatei öffnen:
		try {
			eingabe = new Stream("Endnoten.txt", Stream.READ);
		} catch (IOException e) {
			System.out.println("Datei Endnoten.txt fehlt");
			System.exit(0);
		}

		try {
			while (true) { // eine Note einlesen:
				double note = eingabe.readDouble();
				if (note >= 1.0 && note <= 5.0)
				{   // ungültige Notenwerte ignorieren
				   int index = 0;
				   // note auf Index der Notenstufe abbilden:
				   while (index < notenstufen.length-1 && note > notenstufen[index])
					   index++;
				   notenVorkommen[index]++;
				}
			}
		} catch (EOFException e) {
		} // Dateiende
		catch (IOException e) {
		} // falsche Zahl
	}

	public static void main(String[] args) {
		new Notenspiegel();
	}
}

Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 22.04.2005