Scheinaufgabe Kompaktkurs Java WS 98/99
Realisieren Sie ein Java-Programm zur Verwaltung und Steuerung von Aktivitäten.
Das Programm soll dreierlei tun:
- eine Datei einlesen, in der Aktivitäten beschrieben sind,
- die Aktivitäten auf Konsistenz prüfen,
- die Aktivitäten übersichtlich darstellen.
Das Programm ist als Applet zu realisieren, das eine Aktivitätendatei
als Parameter (tag <param ...>) erhält.
Aktivitätendatei
Die einzulesende Datei soll aus einer beliebigen Anzahl von Einträgen
bestehen, wobei jeder Eintrag die folgenden Felder besitzt: Bezeichnung
der Aktivität, zugehöriges Projekt, Ausführende, Beginn der Aktivität,
Ende der Aktivität, abhängige Aktivitäten, benötigte Hilfsmittel, Benachrichtigungen,
Priorität. Die folgende EBNF beschreibt den Aufbau der Datei präzise.
[] steht dabei für optionale Elemente, * für eine Sequenz von n > 0 Elementen,
A-list für nicht-leere Listen von A's, durch ',' getrennt. Zwischen
Symbolen in Produktionen, die nicht durch Großbuchstaben (z.B. ZEIT) benannt sind,
dürfen in der Datei beliebig viele Leerzeichen, Zeilenumbrüche
oder Tabulatoren stehen. Bei den anderen Produktionen (DATUM, JAHR,
ZEIT, STRING, NAME) dürfen keine Leerzeichen etc. zwischen den einzelnen Token
stehen. Anmerkungen in der Datei dürfen an beliebiger Stelle stehen. Sie werden mit
'--' eingeleitet und gehen bis zum Ende der Zeile.
Aktivitätendatei ::= Projekt*
Projekt ::= "Projekt:" Projektbezeichnung Beginn "-" Ende
"Mitarbeiter:"
(Personenname ["(" email ")"])-list
"Aktivitäten:" Aktivität*
email ::= STRING
Projektbezeichnung ::= NAME | STRING
Personenname ::= NAME | STRING
Aktivität ::= Aktivitätsbezeichnung [Ausführende] Beginn ["-" Ende]
["vor:" Abhängige_Aktivitäten] ["Benachrichtigen:" Benachrichtigung-list]
["Benötigt:" Hilfsmittel-list] ["Priorität:" Priorität] ["Sonstiges:" Kommentar]
Aktivitätsbezeichnung ::= NAME | STRING
Ausführende ::= NAME-list | "alle"
Abhängige_Aktivitäten ::= Aktivitätsbezeichnung-list
Beginn ::= Zeitpunkt
Ende ::= Zeitpunkt
Zeitpunkt ::= DATUM [ZEIT] | ZEIT
DATUM ::= Tag "." Monat "." [JAHR]
Tag ::= "1" | ... | "31"
Monat ::= "1" | ... | "12"
JAHR ::= Digit Digit*
ZEIT ::= [Digit] Digit ":" Digit Digit
Hilfsmittel ::= STRING
Benachrichtigung ::= Zeitpunkt (Personenname-list | "alle")
Priorität ::= "1" | "2" | "3" | "4"
Kommentar ::= STRING
NAME ::= Letter (Letter | Digit | "-")*
Letter ::= "a" | ... | "z" | "A" ... | "Z" | ä | ö | ü | Ä | Ö | Ü
| ß
Digit ::= "0" | ... | "9"
STRING ::= '"' (Letter | Digit | SpecialCharacter | " ")* '"'
Konsistenzprüfungen
Das Programm soll beim Einlesen der Aktivitätendatei Prüfungen durchführen.
Grundsätzlich ist bei jedem entdeckten Fehler die Position (Zeile,
Spalte) und die Art des Fehlers präzise zu beschreiben. Die folgenden Prüfungen sind
zu tätigen:
Die Aktivitätendatei ist syntaktisch korrekt.
Die Ausführenden einer Aktivität müssen beim Projekt aufgeführt
sein. Dieser Eintrag darf nur fehlen, wenn einem Projekt genau ein
Mitarbeiter zugeordnet ist. In diesem Fall ist dieser Mitarbeiter
implizit auch der Ausführende.
Für die zu benachrichtigenden Mitarbeiter muss eine e-mail Adresse
angegeben sein.
Datums- und Zeitangaben sind syntaktisch legal, ebenso
Datumsbereiche (Beginn-Ende). Zeitangaben sind nur erlaubt, falls
eine Tagesangabe vorhanden ist. Eine Zeitangabe bei Ende setzt
eine Zeitangabe bei Beginn voraus.
Terminangaben bei Aktivitäten müssen im Zeitrahmen des Projekts
erfolgen. Eine fehlende Jahresangabe bei Aktivitäten muss eindeutig aus dem
Projektzeitraum ermittelt werden können.
Von einer Aktivität A abhängige Aktivitäten sind als Aktivitäten aufgeführt (nicht
notwendigerweise vor dieser Aktivität) und beginnen nicht vor dem
Ende von A.
Darstellung der Aktivitäten
Die Aktivitäten der Datei sollen in Netscape 4.5 dargestellt werden.
Dabei sollen die folgenden Filter für den Benutzer zur Verfügung stehen:
-
Selektion der zu einem bestimmten Projekt gehörenden Aktivitäten.
-
Alle Aktivitäten, bei der eine bestimmte Person beteiligt ist.
-
Alle Aktivitäten einer bestimmten Priorität.
Diese Filter sollen auch in Kombination ausgewählt werden können, so dass
sich der Benutzer z.B. alle Aktivitäten einer Person in einem bestimmten
Projekt mit der Priorität 4 (höchste Priorität) anzeigen lassen kann.
Die selektierten Aktivitäten sollen in zeitlicher Reihenfolge geordnet
mit sämtlichen spezifizierten Attributen erscheinen (es ist nicht vorgeschrieben,
in welcher grafischen Darstellung dies zu erfolgen hat). Zusätzlich soll
der Benutzer durch Drücken eines Buttons eine grafische Übersicht über
die ausgewählten Aktivitäten erhalten, wobei die Aktivitäten als (mglw.
parallele) Balken über einer beschrifteten Zeitachse erscheinen.
Organisatorisches
Aus der Spezifikation der oben
beschriebenen Eingabesprache kann mit Hilfe des Parsergenerators
(javacc)
ein funktionsfähiger Parser erzeugt werden (eine modifizierte
ASTZeitpunkt-Datei finden sie hier). Ein Makefile finden Sie
hier. Eine (korrekte) Beispieldatei für
Projektbeschreibungen finden Sie hier.
Die Spezifikation ist bereits angereichert mit einigen Angaben und Code
für die Verwendung des Werkzeugs jjtree.
Die Sourcen für beide Werkzeuge stehen auf den CIP-Pool-Rechnern unter
/home/holzmuel/javakk/javacc/. Erweitern Sie Ihre PATH-Variable
entsprechend um das dortige bin-Verzeichnis. Wenden Sie jjtree zuerst
einmal auf die Spezifikaton an (siehe Makefile) und erzeugen Sie so
einige ASTxxx-Klassen, die Sie dann nach Ihren Bedürfnissen
vervollständigen können. Ergänzen Sie außerdem die u.U. noch fehlenden
Teile in der Spezifikation (siehe Kommentare in der Spezifikation).
Die Aufgabe kann in Gruppen zu jeweils 2 Personen bearbeitet werden,
d.h. jede Gruppe liefert ein Resultat ab. Definieren Sie
entsprechende Teilaufgaben und die Schnittstellen zwischen den
Teilaufgaben. Die Lösung (Namen der Autoren mit Matrikelnummern,
Source-Dateien [.java], Bytecode-Dateien [.class], HTML-Datei für das
Applet sowie ein Testfile mit mindestens zwei Projekten mit dem Namen
"projects.txt", das als Parameter im html-file für das Applet
verwendet wird) ist elektronisch bis 9.4.1999, 23:59 per e-mail an
Thomas Eisenbarth
eisenbarth@informatik.uni-stuttgart.de abzugeben (zip-Format als
Attachment).
Wichtig: Testen Sie Ihr Produkt sorgfältig! Leiten Sie aus dieser
Aufgabenbeschreibung einen vollständigen Satz an Testfällen ab und
unterziehen Sie der Software eine entsprechende
Prüfung. Offensichtlich ungetestete Software wird rigoros abgelehnt.
Viel Erfolg!