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:
<!-- ANFANG: klausur.html --> <title>Java-Klausur</title> <hr> <applet code="klausur.class" width=400 height=620> <param name=anz_teiln value="26"> <param name=t1_punkte value="10"> <param name=t1_name value="Ampel,Alf"> <param name=t2_punkte value="20"> <param name=t2_name value="Ball, Berta"> <param name=t3_punkte value="5"> <param name=t3_name value="Citro, Chris"> <param name=t4_punkte value="6"> <param name=t4_name value="Dunkel, Dirk"> <param name=t5_punkte value="11"> <param name=t5_name value="Engel, Ernst"> <param name=t6_punkte value="19"> <param name=t6_name value="Färber, Fabian"> <param name=t7_punkte value="14"> <param name=t7_name value="Gärtner, Gisela"> <param name=t8_punkte value="12"> <param name=t8_name value="Hausmann, Heinz"> <param name=t9_punkte value="2"> <param name=t9_name value="Igel, Ingo"> <param name=t10_punkte value="15"> <param name=t10_name value="Japan, Johanna"> <param name=t11_punkte value="19"> <param name=t11_name value="Klein, Kurt"> <param name=t12_punkte value="8"> <param name=t12_name value="Lampe, Lutz"> <param name=t13_punkte value="9"> <param name=t13_name value="Morgen, Manfred"> <param name=t14_punkte value="10"> <param name=t14_name value="Nachtigall, Nora"> <param name=t15_punkte value="1"> <param name=t15_name value="Odenwald, Olga"> <param name=t16_punkte value="18"> <param name=t16_name value="Petersson, Peter"> <param name=t17_punkte value="16"> <param name=t17_name value="Quast, Quendolin"> <param name=t18_punkte value="13"> <param name=t18_name value="Regen, Roland"> <param name=t19_punkte value="10"> <param name=t19_name value="Sattel, Sabina"> <param name=t20_punkte value="5"> <param name=t20_name value="Tisch, Thomas"> <param name=t21_punkte value="11"> <param name=t21_name value="Ulme, Uta"> <param name=t22_punkte value="19"> <param name=t22_name value="Vogel, Veronika"> <param name=t23_punkte value="11"> <param name=t23_name value="Waldmann, Werner"> <param name=t24_punkte value="10"> <param name=t24_name value="Xanten, Xaver"> <param name=t25_punkte value="12"> <param name=t25_name value="Yogi, Yogi"> <param name=t26_punkte value="4"> <param name=t26_name value="Zaun, Zenzi"> </applet> <hr> <a href="klausur.java">Java Quelltext</a> <!-- ENDE: klausur.html --> 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.