Aufgabe5.jar
ist in Ihrem Arbeitsverzeichnis prog1-uebungen\
neben dieser Aufgabenstellung Aufgabe5.html
noch ein Paketverzeichnis aufgabe5\
mit folgende Dateien hinzugekommen:
aufgabe5\package-info.java | Paketdokumentation |
aufgabe5\Notenspiegel.java | zu vervollständigendes Java-Programm |
Öffnen Sie ein Terminal im Arbeitsverzeichnis prog1-uebungen\ und
erweitern Sie Ihre HTML-Dokumentation um das Paket aufgabe5 mit dem Kommando
ant doc
Öffnen Sie dann die gewohnten Quellen im Browser:
doc/aufgabe5/package-summary.html
https://www-home.htwg-konstanz.de/~drachen/prog1/prog1.html
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/module-summary.html
Als Voraussetzung für das Bearbeiten dieser Aufgabe sollten Sie die Vorlesungsunterlagen bis
mindestens Seite 4-36 nachbereitet und die zugehörigen Programmbeispiele nachvollzogen haben,
insbesondere
Datum.java,
Termin.java,
nested\IntList.java
aufgabe5.Noteaufgabe5 eine öffentliche Wertklasse Note
für gültige Noten der HTWG Konstanz mit folgenden Elementen:
note
vom Typ intBESTE und
SCHLECHTESTE,Note-Objekt mit der besten bzw. schlechtesten Note referenzierenvalueOf(int),Note-Objekt mit der im Parameter angegebenen Note liefert
Werfen Sie bei unzulässiger Note eine Ausnahme vom Typ IllegalArgumentException
mit "unzulaessige Note " und der falschen Note als Fehlertext
(zulässig sind die Noten 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 50).
valueOf(String)toString (siehe unten) gelieferte Format haben.
Werfen Sie bei bei falschem Format oder unzulässiger Note eine Ausnahme vom Typ
IllegalArgumentException mit "unzulaessige Note " und
der falschen Note als Fehlertext.
intValue(),istBestanden(),true liefert, wenn der Wert der Instanzvariablen
kleiner oder gleich 4.0 ist, sonst falsetoString(),
equals(Object) und
hashCode()
Verwenden Sie das Vorlesungsbeispiel Datum.java aus Teil 4 der Vorlesung
als Vorlage.
Die String-Darstellung der Objekte soll "1,0", "1,3" usw. sein.
Als Hashcode können Sie einfach den Wert der Instanzvariable verwenden.
aufgabe5.Fachnoteaufgabe5 eine öffentliche Entitätsklasse Fachnote
mit folgenden Elementen:
fach vom Typ String und
note vom Typ Note
Fachname und Note dürfen nicht null sein und
der Fachname darf nicht die Länge 0 haben.
Werfen Sie eine Ausnahme vom Typ IllegalArgumentException,
wenn die Werte der Parameter diese Konsistenzregeln verletzten
aufgabe5.FachnotenListeaufgabe5 eine öffentliche Entitätsklasse
FachnotenListe:
nested.IntList aus Teil 4 als Vorlage.
Passen Sie darin einfach den Paket- und Klassennamen an und
stellen Sie den Typ der gespeicherten Werte von int auf Fachnote um.aufgabe5.Notenspiegelaufgabe5.Notenspiegel
aus dem entpackten Archiv:
next() einlesen,
dann mit hasNextInt() pruefen, ob die Note als ganze Zahl vorliegt,
und die Note je nachdem mit nextInt() oder next()
einlesen und schließlich per Fabrikmethode in ein Wertobjekt verpackenaufgabe5 beschrieben ist.
Damit eine Tabellenstruktur mit linksbündigen Spalten entsteht, müssen Fachnamen, die kürzer als der längste vorkommende Fachname sind, rechts mit Leerstellen aufgefüllt werden. Bestimmen Sie deshalb vor der Ausgabe zunächst den längsten Fachnamen.
Ersetzen Sie nach getaner Arbeit die TODO:-Markierungen in den Zeilenkommentaren durch DONE:. Sie dürfen die TODO:-Zeilenkommentare nicht löschen. Die Kommentare sollen als Gliederung des Programms erhalten bleiben.
Ihre Lösung darf nur Java-Sprachmittel und Java-Bibliotheksklassen enthalten, die bereits in der Vorlesung besprochen wurden oder die in dieser Aufgabenstellung explizit vorgeschlagen sind.
Notenspiegel.java muss javac die Klassen
Fachnote und Note finden.
Wenn Sie javac im Arbeitsverzeichnis aufrufen, funktioniert das problemlos:
javac aufgabe5\Notenspiegel.javaWenn Sie
javac im Paketverzeichnis aufrufen,
müssen Sie mit -cp den Classpath angeben:
javac -cp .. Notenspiegel.java
aufgabe5-in1.txt usw.)ant -Dpackage=aufgabe5 style
ant -Dpackage=aufgabe5 clean bugsspotbugs schreibt seine Meldungen nicht auf den Bildschirm, sondern in eine Datei
bugs.html, die Sie mit einem Webbrowser anschauen müssen.Sie sind erst fertig, wenn das Programm funktioniert und die Werkzeuge checkstyle und spotbugs keine Fehler mehr melden!
Führen Sie Ihre in Schritt 6 erstellten Testfälle aufgabe5-in1.txt usw. vor.
Zeigen Sie das ausgefüllte Teilnahmeprotokoll.
valueOf(Note, Note), die ein Note-Objekt mit dem Mittelwert der
beiden übergebenen Noten zurückliefert.
Erweitern Sie Notenspiegel.main um die Möglichkeit,
bei einem Fach wahlweise eine oder zwei Noten eingeben zu können.
Damit die Erkennung einer zweiten Note nicht zu kompliziert wird,
dürfen Sie verlangen, das beide Noten als ganze Zahlen eigegeben werden.
Dann können Sie die zweite Noteneingabe mit der Instanzmethode hasNextInt()
aus der Klasse java.util.Scanner erkennen.
FachnotenListe.insert neue Fachnoten nicht am Anfang der Liste ein,
sondern suchen Sie zuerst mit einer Schleife das richtige Vorgängerelement.
Für diese Zusatzaufgabe muss die Klasse Note eine natürliche Ordnung festlegen,
indem sie die Schnittstelle java.lang.Comparable<Note> implementiert.
Verwenden Sie das Vorlesungsbeispiel comparator.Datum
aus Teil 5 der Vorlesung als Vorlage.
Für diese Zusatzaufgabe darf die Instanzvariable next in der Klasse
FachnotenListe.Element keine final-Markierung haben.