P. Pfahler, E. Stümpel
Programmieren in Java, Winter 1997/98
2. Übungsblatt, 3.11.1997
Abgabe: 10.11.1997, 18h
durch Email an elfriede@uni-paderborn.de, subject "Blatt2"
Aufgabe 2 (Ernst):
==================
Der Ablauf der Konstruktion von Java-Objekten (Folie 66) soll durch Erzeugung
von Testausgabe in Initialisierungscode und Konstruktoren deutlich gemacht
werden. Entwickeln Sie dazu eine Klassenhierarchie aus Klasse und
Oberklasse und konstruieren Sie ein Objekt derart, daß alle Pfade des
Ablaufdiagramms (Folie 66) durchlaufen werden.
Geben Sie die Java-Quellen von Klasse und Oberklasse ab sowie ein
Protokoll der erzeugten Testausgabe.
Aufgabe 3 (Spaß):
=================
Für die grafische Darstellung der Klausurergebnisse zu "Programmieren in
Java" wurde ein Java-Applet entwickelt. Es besteht aus einer Klasse "klausur",
die die Klausurpunkte und Namen der TeilnehmerInnen als Parameter aus der
zugehörigen HTML-Datei erhält und daraus ein Diagramm aus horizontalen
Balken erzeugt.
Dieses Applet erzeugt die folgende Grafik:
Der Quellcode dieses Applets ist hier (69 Zeilen):
// klausur.java
// Ergebnisse der Klausur "Programmieren in Java" als Balkendiagramm
import java.awt.*;
public class klausur extends java.applet.Applet {
String title = "Klausurergebnis ´Programmieren in Java'";
int fontsize = 12;
int anz_teiln;
int punkte[];
String namen[];
int scale = 10;
int max_namen_länge = 0;
int balken_abstand = 10;
Font courier = new Font("Courier", Font.BOLD, fontsize);
public void init() {
String rs;
// die anzahl der klausurteilnehmerInnen
rs = getParameter("anz_teiln");
anz_teiln = Integer.parseInt(rs);
// punkte- und namenslisten
punkte = new int[anz_teiln];
namen = new String[anz_teiln];
for (int i=0; i < anz_teiln; i++) {
// lies punkte und namen der teilnehmerInnen
rs = getParameter("T" + (i+1)+ "_punkte");
punkte[i] = (rs == null) ? 0 : Integer.parseInt(rs);
rs = getParameter("T" + (i+1) + "_name");
namen[i] = (rs == null) ? "Niemand, Norbert" : rs;
// die länge des längsten namens merken wir uns
if (getFontMetrics(courier).stringWidth(namen[i]) > max_namen_länge)
max_namen_länge = getFontMetrics(courier).stringWidth(namen[i]);
}
}
public void paint(Graphics g) {
int cx, cy;
g.setFont(courier);
// schreibe die überschrift
g.setColor(Color.black);
g.drawString(title, 5, 15);
for (int i=0; i < anz_teiln; i++) {
// setze x- und y-koordinaten
cx = max_namen_länge + 10;
cy = (fontsize + balken_abstand) * i + balken_abstand + 30;
// schreibe den namen
g.setColor(Color.black);
g.drawString(namen[i], 5, cy + fontsize);
// male den blauen balken
g.setColor(Color.blue);
g.fillRect(cx, cy, punkte[i] * scale, fontsize);
// schreibe punkzahl neben den balken
g.drawString("" + punkte[i],
cx + (punkte[i] * scale) + 10,
cy + fontsize);
}
}
}
// ENDE klausur.java
Gestartet wird es von folgendem HTML-Code, der die Aufgabe
hat, dem Applet sämtliche Klausurergebniss zur Verfügung zu stellen:
Java-Klausur
Java Quelltext
Ihre Aufgabe besteht darin, zwei kleine Änderungen vorzunehmen:
a) Fügen Sie einen neuen Parameter "scheinlimit" ein, der angeben soll
wieviele Punkte man mindestens braucht, um den Schein zu bekommen.
Auch dieser Parameter soll von der HTML-Seite an das Applet übergeben werden
(so wie z.B. "anz_teiln"). Die Balken der TeilnehmerInnen, die das Schein-
kriterium erfüllen sollen grün gezeichnet werden, die anderen rot.
b) In das horizontale Balkendiagramm soll eine senkrechte Linie zur
Markierung der durchschnittlich erreichten Punktezahl eingefügt werden.