Allgemeine Hinweise:
Aufgabe - TelecastSelector

In dieser Aufgabe wollen wir aus einer Menge von Fernsehsendungen eine Teilmenge nicht überlappender Sendungen auswählen.

Teilaufgabe 1: Sender

Erstellen Sie im Paket jpp.tv die Enum Channel. Diese Enum repräsentiert die uns zur Verfügung stehenden Sender:

Hinweis: Zum Testen Ihrer Implementierung steht im Ordner tests der Schnittstellentest task1.TestChannelInterface zur Verfügung.

Teilaufgabe 2: Fernsehsendung

Erstellen Sie im Paket jpp.tv die Klasse Telecast. Diese Klasse repräsentiert eine einzelne Fernsehsendung. Implementieren Sie hierzu den Konstruktor

sowie folgende Methoden

Hinweis: Zum Testen Ihrer Implementierung stehen im Ordner tests der Schnittstellentest task2.TestTelecastInterface sowie der Funktionstest task2.TestTelecastRequired zur Verfügung.

Teilaufgabe 3: Comparator

Erstellen Sie im Paket jpp.tv die Klasse TelecastComparator welche das Interface java.util.Comparator<Telecast> implementiert. Die Methode

public int compare(Telecast o1, Telecast o2)

gibt einen negativen Wert, 0 oder einen positiven Wert zurück wenn o1 entsprechend kleiner, gleich oder größer als o2 ist. Hierbei werden die Attribute von o1 und o2 in der Reihenfolge end, start, name, channel verglichen. Das erste Attributpaar für welches keine Gleichheit gilt wird dann für die Berechnung des Rückgabewertes verwendet.

Beispiel:
Hinweis: Klassen wie String und Date sowie Enums, welche das Interface java.lang.Comparable implementieren, lassen sich sehr einfach vergleichen.

Hinweis: Zum Testen Ihrer Implementierung stehen im Ordner tests der Schnittstellentest task3.TestTelecastComparatorInterface sowie der Funktionstest task3.TestTelecastComparatorRequired zur Verfügung.

Teilaufgabe 4: Programmauswahl

Erstellen Sie im Paket jpp.tv die Klasse TelecastSelector mit folgender Methode:

Wichtig: Die als Parameter list übergebene Liste darf nicht verändert werden.
Wichtig: Die zurückgegebene Liste result ist Nach den Zeitpunkten aufsteigend sortiert.

Hinweis: Zum Testen Ihrer Implementierung stehen im Ordner tests der Schnittstellentest task4.TestTelecastSelectorInterface sowie der Funktionstest task4.TestTelecastSelectorRequired zur Verfügung.

Teilaufgabe 5: Konsolenanwendung

Zu guter Letzt muss jetzt noch die main-Methode der Klasse TelecastSelector implementiert werden um die Konsolenanwendung für die Programmauswahl zur realisieren. Hierzu soll es möglich sein, sich eine Grobauswahl von Fernsehsendungen zusammenszustellen für welche man dann eine nicht überlappende Teilmenge ausgeben lässt.

Verwenden Sie zum Einlesen von Benutzereingaben die Klasse java.util.Scanner. Wichtig ist hierbei für anschließende Tests der Abgabe nur eine Instanz von Scanner innerhalb der main-Methode zu verwenden.

Realisieren Sie die Konsolenanwendung nach folgenden Schema:

  1. Ausgabe der Anzahl n von Fernsehsendungen der Grobauswahl in der Form "You have <n> telecasts in your list...".
  2. Ausgabe von "Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?".
  3. Einlesen der Benutzereingabe.
    1. Wenn a, Eingabe einer neuen Fernsehsendung nach folgenden Schema:
      1. Ausgabe "Name:"
      2. Einlesen des Namens der Fernsehsendung. Bei einer ungültigen Eingabe: Ausgeben von "Invalid input!" und Abbruch der Eingabe einer neuen Fernsehsendung.
      3. Ausgabe "Channel:"
      4. Einlesen des Senders der Fernsehsendung. Bei einer ungültigen Eingabe: Ausgeben von "Invalid input!" und Abbruch der Eingabe einer neuen Fernsehsendung.
      5. Ausgabe "Start:"
      6. Einlesen des Anfangszeitpunkts der Fernsehsendung im Format "dd.MM.yyyy HH:mm". Bei einer ungültigen Eingabe: Ausgeben von "Invalid input!" und Abbruch der Eingabe einer neuen Fernsehsendung.
      7. Ausgabe "End:"
      8. Einlesen des Endzeitpunkts der Fernsehsendung im Format "dd.MM.yyyy HH:mm". Bei einer ungültigen Eingabe: Ausgeben von "Invalid input!" und Abbruch der Eingabe einer neuen Fernsehsendung.
      9. Neue Fernsehsendung in die Grobauswahl einfügen
    2. Wenn s, Ausgabe der Teilauswahl nach folgenden Schema:
      1. Ausgabe ">>>"
      2. Ausgabe der nicht überlappenden Fernsehsendungen der Grobauswahl. Verwenden Sie hierzu die Methode select aus Teilaufgabe 4. Bei der Ausgabe steht jede Fernsehsendung in einer eigenen Zeile.
      3. Ausgabe ">>>"
    3. Wenn q, Programm beenden.
    4. Andernfalls Ausgabe von "Invalid input!".
  4. Weiter bei Punkt 2.
Beispiel:
You have 0 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
aa
Invalid input!
You have 0 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
s
>>>
>>>
You have 0 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
a
Name:
Nachrichten
Channel:
ChannelZ
Invalid input!
You have 0 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
a
Name:
Nachrichten
Channel:
ChannelA
Start:
15.04.2010 20:00
End:
15.04.2010 20:10
You have 1 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
a
Name:
FilmX
Channel:
ChannelD
Start:
15.04.2010 20:15
End:
15.04.2010 22:10
You have 2 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
a
Name:
Doku
Channel:
ChannelB
Start:
15.04.2010 22:00
End:
15.04.2010 20:45
Invalid input!
You have 2 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
a
Name:
Doku
Channel:
ChannelB
Start:
15.04.2010 22:00
End:
15.04.2010 22:45
You have 3 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
s
>>>
ChannelA Nachrichten: 15.04.2010 20:00 - 15.04.2010 20:10
ChannelD FilmX: 15.04.2010 20:15 - 15.04.2010 22:10
>>>
You have 3 telecasts in your list...
Do you want to [a]dd another telecast, [s]how a selection of non-overlapping telecasts or [q]uit the programm?
q
	

Hinweis: Zum Testen Ihrer Implementierung stehen im Ordner tests der Schnittstellentest task5.TestTelecastSelectorMainInterface sowie der Funktionstest task5.TestTelecastSelectorMainRequired zur Verfügung.