Sie haben die Aufgabe, eine einfache Kalenderverwaltung zu implementieren. == Aufgabenstellung == Die Programmfunktion besteht aus einer einfachen Kalenderverwaltung. Der verwaltete Zeitraum ist ein Monat mit 31 Tagen. Die Zeit nach dem 31. Tag wird nicht betrachtet. An jedem Tag kann maximal eine Aufgabe eingetragen werden. Es wird keine Uhrzeit berücksichtigt. Eine Aufgabe hat: * einen Namen vom Typ String, der keine Leerzeichen enthält, z. B. (nehmen wir an, es geht um Kundenbesuche) "Meier", sowie * eine Priorität A, B oder C vom Typ char, z. B. 'A' (A ist die höchste Priorität). Ein Kalendereintrag ist somit durch die Nummer des Tags (zwischen 1 und 31) sowie Aufgabe und Priorität bestimmt. Eine Aufgabe gleichen Namens kann auch an mehreren Tagen im Monat geplant sein. Der Kalender wird dargestellt durch ein Array (der Länge 31) von Strings, wobei sich ein Element (d.h. ein String) aus der Priorität und dem Namen der Aufgabe zusammensetzt, z. B. "AMeier". Ein Tag, für den keine Aufgabe eingetragen ist, ist auf keine Aufgabe gesetzt: dies wird durch die Priorität '/' und einen leeren Namen der Aufgabe dargestellt, das entsprechende Array-Element hat also den Wert "/". == Einlesen und Befehle == Das Programm wird zeilenweise bedient. Jede Zeile enthält zuerst als Befehlskennung ein Zeichen, das den Befehl identifiziert, und danach die Parameter des Befehls. In der main-Methode der Klasse Kalender wird von der Standardeingabe (System.in) mittels Scanner eingelesen. Das Programm erwartet bis zum Ende der Eingabe (EOF durch Ctrl+D) beliebig viele der folgenden Befehle: * k tag zeigt den Kalender ab (inklusive) Tag ab an (ist teilweise in der Methode tagToString bereits vorgegeben): es wird die Zeile "Aufgaben:" ausgegeben, danach wird in einer Zeile pro Tag dessen Nummer und der entsprechende Eintrag ausgegeben, z. B.
5: A Meier * e tag prio aufgabe tragt die Aufgabe aufgabe mit Priorität prio am Tag tag des Monats ein. Der Eintrag erfolgt nur, wenn der Tag frei ist, oder eine Aufgabe niedrigerer Priorität eingetragen ist. Sonst passiert nichts. * w tag prio aufgabe tragt die Aufgabe wöchentlich ein. Wie eintragen, jedoch wöchentlich, d.h. am Tag tag, 7 Tage danach, usw. bis maximal am Tag 31. Jeder Eintrag erfolgt nur, wenn der Tag frei ist oder eine Aufgabe niedrigerer Priorität eingetragen ist. Die Einträge können also ganz, teilweise oder gar nicht erfolgen. * z prio gibt die Anzahl der Einträge mit Priorität prio aus. * a aufgabe prio ändert für jeden Eintrag der Aufgabe aufgabe die Priorität auf prio. * v von bis um verschiebt alle Aufgaben im Zeitraum von Tag von bis Tag bis (jeweils inklusive) um um Tage nach hinten. Für einen Tag, auf den ein Eintrag neu zu liegen käme, darf es allerdings noch keine Aufgabe gleicher oder höherer Priorität geben. Ein eventueller Eintrag mit niedriger Priorität wird ersetzt (überschrieben). Falls der Tag, auf den der Eintrag neu zu liegen käme, nach dem 31. ist, soll die Verschiebung für diesen Eintrag nicht durchgeführt werden (es kann somit vorkommen, dass nur ein vorderer Teil der (durch von und bis bestimmten) Einträge verschoben wird). Ein Tag, für den durch das Verschieben ein Eintrag entfernt wird und der dadurch keine Aufgabe mehr enthält, wird auf keine Aufgabe gesetzt (s.o.). Die angeführten Befehle sollen die zu implementierenden Methoden anzeigen, eintragen, eintragenWoechentlich, anzahl, aendern und verschieben nutzen.

Hinweis: Sie können davon ausgehen, dass alle Eingaben korrekt sind. Sie brauchen also die einzulesenden Befehle und Werte nicht auf Gültigkeit zu überprüfen und keine Fehlerbehandlung implementieren.
== Gefragte Methoden == Gibt den Kalender ab einem bestimmten Tag (inklusive) zeilenweise aus. Davor wird in einer Zeile "Aufgaben:" ausgegeben. Nummer das Tages (zwischen 1 und 31), ab dem ausgegeben werden soll (inklusive) der Kalender, der ausgegeben werden soll Tragt eine Aufgabe mit ihrer Priorität an einen bestimmten Tag in einen Kalender ein, wenn der bisherige Eintrag an diesem Tag leer ist oder eine niedrigere Priorität besitzt. der Kalender, in den eingetragen werden soll der Tag des Monats, an dem die Aufgabe eingetragen werden soll die Priorität der einzutragenden Aufgabe die einzutragende Aufgabe Wöchentliches Eintragen einer Aufgabe mit ihrer Priorität in einen Kalender. Jeder Eintrag geschieht nur, wenn der bisherige Eintrag an diesem Tag leer ist oder eine niedrigere Priorität besitzt. Achtung: Nutzen Sie für die Implementierung dieser Methode die Methode eintragen! der Kalender, in den eingetragen werden soll der Tag des Monats, an dem die Aufgabe eingetragen werden soll die Priorität der einzutragenden Aufgabe die einzutragende Aufgabe Berechnet die Anzahl der Kalendereinträge mit einer bestimmten Priorität. der Kalender, dessen Einträge gezählt werden sollen die Priorität, die die zu zählenden Einträge haben Ändert die Priorität für jeden Eintrag einer Aufgabe in einem Kalender. der zu ändernde Kalender die Aufgabe, deren Vorkommnisse geändert werden sollen die neue Priorität, die die zu ändernden Aufgaben bekommen sollen Verschieben einer Reihe von Einträge eines Kalenders. Beachten Sie die genaue Definition in der Angabe! der zu ändernde Kalender der Tag, ab dem Einträge verschoben werden sollen (inklusive) der Tag, bis dem Einträge verschoben werden sollen (inklusive) die Anzahl an Tagen, um die die Einträge verschoben werden sollen (≥0) == Herangehensweise == Folgende Vorgehensweise ist bei der Umsetzung der Aufgabe empfehlenswert: * Fügen Sie eine geeignete Deklaration des Arrays ein * Initialisieren Sie den Kalender, d.h. setzen sie jeden Tag auf keine Aufgabe * Implementieren Sie die gefragten Methoden (sowie entsprechend das Einlesen und Ausführen des jeweiligen Befehls) in der main-Methode. * Implementieren Sie die Methode anzeigen * Implementieren die den weiteren Befehlen entsprechenden Methoden. Empfehlenswert: in der obigen (und im Codegerüst) vorgegebenen Reihenfolge!