diff --git a/DatabaseConnector.class b/DatabaseConnector.class
new file mode 100644
index 0000000..4cd65a1
Binary files /dev/null and b/DatabaseConnector.class differ
diff --git a/DatabaseConnector.ctxt b/DatabaseConnector.ctxt
new file mode 100644
index 0000000..4c65897
--- /dev/null
+++ b/DatabaseConnector.ctxt
@@ -0,0 +1,19 @@
+#BlueJ class context
+comment0.target=DatabaseConnector
+comment0.text=\r\n\
\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\ \r\n\ Klasse\ DatabaseConnector\r\n\
\r\n\ \r\n\ Ein\ Objekt\ der\ Klasse\ DatabaseConnector\ ermoeglicht\ die\ Abfrage\ und\ Manipulation\ \r\n\ einer\ SQLite-Datenbank.\ \r\n\ Beim\ Erzeugen\ des\ Objekts\ wird\ eine\ Datenbankverbindung\ aufgebaut,\ so\ dass\ \r\n\ anschlie\u00DFend\ SQL-Anweisungen\ an\ diese\ Datenbank\ gerichtet\ werden\ koennen.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ 2016-01-24\r\n
+comment1.params=pIP\ pPort\ pDatabase\ pUsername\ pPassword
+comment1.target=DatabaseConnector(java.lang.String,\ int,\ java.lang.String,\ java.lang.String,\ java.lang.String)
+comment1.text=\r\n\ Ein\ Objekt\ vom\ Typ\ DatabaseConnector\ wird\ erstellt,\ und\ eine\ Verbindung\ zur\ Datenbank\ \r\n\ wird\ aufgebaut.\ Mit\ den\ Parametern\ pIP\ und\ pPort\ werden\ die\ IP-Adresse\ und\ die\ \r\n\ Port-Nummer\ uebergeben,\ unter\ denen\ die\ Datenbank\ mit\ Namen\ pDatabase\ zu\ erreichen\ ist.\ \r\n\ Mit\ den\ Parametern\ pUsername\ und\ pPassword\ werden\ Benutzername\ und\ Passwort\ fuer\ die\ \r\n\ Datenbank\ uebergeben.\r\n
+comment2.params=pSQLStatement
+comment2.target=void\ executeStatement(java.lang.String)
+comment2.text=\r\n\ Der\ Auftrag\ schickt\ den\ im\ Parameter\ pSQLStatement\ enthaltenen\ SQL-Befehl\ an\ die\ \r\n\ Datenbank\ ab.\ \r\n\ Handelt\ es\ sich\ bei\ pSQLStatement\ um\ einen\ SQL-Befehl,\ der\ eine\ Ergebnismenge\ \r\n\ liefert,\ so\ kann\ dieses\ Ergebnis\ anschlie\u00DFend\ mit\ der\ Methode\ getCurrentQueryResult\ \r\n\ abgerufen\ werden.\r\n
+comment3.params=
+comment3.target=QueryResult\ getCurrentQueryResult()
+comment3.text=\r\n\ Die\ Anfrage\ liefert\ das\ Ergebnis\ des\ letzten\ mit\ der\ Methode\ executeStatement\ an\ \r\n\ die\ Datenbank\ geschickten\ SQL-Befehls\ als\ Ob-jekt\ vom\ Typ\ QueryResult\ zurueck.\r\n\ Wurde\ bisher\ kein\ SQL-Befehl\ abgeschickt\ oder\ ergab\ der\ letzte\ Aufruf\ von\ \r\n\ executeStatement\ keine\ Ergebnismenge\ (z.B.\ bei\ einem\ INSERT-Befehl\ oder\ einem\ \r\n\ Syntaxfehler),\ so\ wird\ null\ geliefert.\ \ \r\n
+comment4.params=
+comment4.target=java.lang.String\ getErrorMessage()
+comment4.text=\r\n\ Die\ Anfrage\ liefert\ null\ oder\ eine\ Fehlermeldung,\ die\ sich\ jeweils\ auf\ die\ letzte\ zuvor\ ausgefuehrte\ \r\n\ Datenbankoperation\ bezieht.\r\n
+comment5.params=
+comment5.target=void\ close()
+comment5.text=\r\n\ Die\ Datenbankverbindung\ wird\ geschlossen.\r\n
+numComments=6
diff --git a/QueryResult.class b/QueryResult.class
new file mode 100644
index 0000000..0f04b29
Binary files /dev/null and b/QueryResult.class differ
diff --git a/QueryResult.ctxt b/QueryResult.ctxt
new file mode 100644
index 0000000..22f0d6b
--- /dev/null
+++ b/QueryResult.ctxt
@@ -0,0 +1,22 @@
+#BlueJ class context
+comment0.target=QueryResult
+comment0.text=\r\n\ \r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\ \r\n\ Klasse\ QueryResult\r\n\
\r\n\ \r\n\ Ein\ Objekt\ der\ Klasse\ QueryResult\ stellt\ die\ Ergebnistabelle\ einer\ Datenbankanfrage\ mit\ Hilfe\ \r\n\ der\ Klasse\ DatabaseConnector\ dar.\ Objekte\ dieser\ Klasse\ werden\ nur\ von\ der\ Klasse\ DatabaseConnector\ erstellt.\ \r\n\ Die\ Klasse\ verfuegt\ ueber\ keinen\ oeffentlichen\ Konstruktor.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ 2015-01-31\r\n
+comment1.params=pData\ pColumnNames\ pColumnTypes
+comment1.target=QueryResult(java.lang.String[][],\ java.lang.String[],\ java.lang.String[])
+comment1.text=\r\n\ Paketinterner\ Konstruktor.\r\n
+comment2.params=
+comment2.target=java.lang.String[][]\ getData()
+comment2.text=\r\n\ Die\ Anfrage\ liefert\ die\ Eintraege\ der\ Ergebnistabelle\ als\ zweidimensionales\ Feld\r\n\ vom\ Typ\ String.\ Der\ erste\ Index\ des\ Feldes\ stellt\ die\ Zeile\ und\ der\ zweite\ die\ \r\n\ Spalte\ dar\ (d.h.\ Object[zeile][spalte]).\r\n
+comment3.params=
+comment3.target=java.lang.String[]\ getColumnNames()
+comment3.text=\r\n\ Die\ Anfrage\ liefert\ die\ Bezeichner\ der\ Spalten\ der\ Ergebnistabelle\ als\ Feld\ vom\ \r\n\ Typ\ String\ zurueck.\r\n
+comment4.params=
+comment4.target=java.lang.String[]\ getColumnTypes()
+comment4.text=\r\n\ Die\ Anfrage\ liefert\ die\ Typenbezeichnung\ der\ Spalten\ der\ Ergebnistabelle\ als\ Feld\ \r\n\ vom\ Typ\ String\ zurueck.\ Die\ Bezeichnungen\ entsprechen\ den\ Angaben\ in\ der\ MySQL-Datenbank.\r\n
+comment5.params=
+comment5.target=int\ getRowCount()
+comment5.text=\r\n\ Die\ Anfrage\ liefert\ die\ Anzahl\ der\ Zeilen\ der\ Ergebnistabelle\ als\ Integer.\r\n
+comment6.params=
+comment6.target=int\ getColumnCount()
+comment6.text=\r\n\ Die\ Anfrage\ liefert\ die\ Anzahl\ der\ Spalten\ der\ Ergebnistabelle\ als\ Integer.\r\n
+numComments=7
diff --git a/Queue$QueueNode.class b/Queue$QueueNode.class
new file mode 100644
index 0000000..70cf8e7
Binary files /dev/null and b/Queue$QueueNode.class differ
diff --git a/Queue.class b/Queue.class
new file mode 100644
index 0000000..99c3d00
Binary files /dev/null and b/Queue.class differ
diff --git a/Queue.ctxt b/Queue.ctxt
new file mode 100644
index 0000000..d277cda
--- /dev/null
+++ b/Queue.ctxt
@@ -0,0 +1,19 @@
+#BlueJ class context
+comment0.target=Queue
+comment0.text=\r\n\ \r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\ \r\n\ Generische\ Klasse\ Queue\r\n\
\r\n\ \r\n\ Objekte\ der\ generischen\ Klasse\ Queue\ (Warteschlange)\ verwalten\ beliebige\r\n\ Objekte\ vom\ Typ\ ContentType\ nach\ dem\ First-In-First-Out-Prinzip,\ d.h.,\ das\r\n\ zuerst\ abgelegte\ Objekt\ wird\ als\ erstes\ wieder\ entnommen.\ Alle\ Methoden\ haben\r\n\ eine\ konstante\ Laufzeit,\ unabhaengig\ von\ der\ Anzahl\ der\ verwalteten\ Objekte.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Generisch_02\ 2014-02-21\r\n
+comment1.params=
+comment1.target=Queue()
+comment1.text=\r\n\ Eine\ leere\ Schlange\ wird\ erzeugt.\ \r\n\ Objekte,\ die\ in\ dieser\ Schlange\ verwaltet\ werden,\ muessen\ vom\ Typ\r\n\ ContentType\ sein.\r\n
+comment2.params=
+comment2.target=boolean\ isEmpty()
+comment2.text=\r\n\ Die\ Anfrage\ liefert\ den\ Wert\ true,\ wenn\ die\ Schlange\ keine\ Objekte\ enthaelt,\ \r\n\ sonst\ liefert\ sie\ den\ Wert\ false.\r\n\ \r\n\ @return\ true,\ falls\ die\ Schlange\ leer\ ist,\ sonst\ false\r\n
+comment3.params=pContent
+comment3.target=void\ enqueue(java.lang.Object)
+comment3.text=\r\n\ Das\ Objekt\ pContentType\ wird\ an\ die\ Schlange\ angehaengt.\ \r\n\ Falls\ pContentType\ gleich\ null\ ist,\ bleibt\ die\ Schlange\ unveraendert.\r\n\ \r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ das\ anzuhaengende\ Objekt\ vom\ Typ\ ContentType\r\n
+comment4.params=
+comment4.target=void\ dequeue()
+comment4.text=\r\n\ Das\ erste\ Objekt\ wird\ aus\ der\ Schlange\ entfernt.\ \r\n\ Falls\ die\ Schlange\ leer\ ist,\ wird\ sie\ nicht\ veraendert.\r\n
+comment5.params=
+comment5.target=java.lang.Object\ front()
+comment5.text=\r\n\ Die\ Anfrage\ liefert\ das\ erste\ Objekt\ der\ Schlange.\ \r\n\ Die\ Schlange\ bleibt\ unveraendert.\ \r\n\ Falls\ die\ Schlange\ leer\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @return\ das\ erste\ Objekt\ der\ Schlange\ vom\ Typ\ ContentType\ oder\ null,\r\n\ \ \ \ \ \ \ \ \ falls\ die\ Schlange\ leer\ ist\r\n
+numComments=6
diff --git a/Queue.java b/Queue.java
index 5a6ef1f..b6f9c59 100755
--- a/Queue.java
+++ b/Queue.java
@@ -1,142 +1,142 @@
-/**
- *
- * Materialien zu den zentralen NRW-Abiturpruefungen im Fach Informatik ab 2018
- *
- *
- * Generische Klasse Queue
- *
- *
- * Objekte der generischen Klasse Queue (Warteschlange) verwalten beliebige
- * Objekte vom Typ ContentType nach dem First-In-First-Out-Prinzip, d.h., das
- * zuerst abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben
- * eine konstante Laufzeit, unabhaengig von der Anzahl der verwalteten Objekte.
- *
- *
- * @author Qualitaets- und UnterstuetzungsAgentur - Landesinstitut fuer Schule
- * @version Generisch_02 2014-02-21
- */
-public class Queue {
-
- /* --------- Anfang der privaten inneren Klasse -------------- */
-
- private class QueueNode {
-
- private ContentType content = null;
- private QueueNode nextNode = null;
-
- /**
- * Ein neues Objekt vom Typ QueueNode wird erschaffen.
- * Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer.
- *
- * @param pContent das Inhaltselement des Knotens vom Typ ContentType
- */
- public QueueNode(ContentType pContent) {
- content = pContent;
- nextNode = null;
- }
-
- /**
- * Der Verweis wird auf das Objekt, das als Parameter uebergeben wird,
- * gesetzt.
- *
- * @param pNext der Nachfolger des Knotens
- */
- public void setNext(QueueNode pNext) {
- nextNode = pNext;
- }
-
- /**
- * Liefert das naechste Element des aktuellen Knotens.
- *
- * @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt
- */
- public QueueNode getNext() {
- return nextNode;
- }
-
- /**
- * Liefert das Inhaltsobjekt des Knotens vom Typ ContentType.
- *
- * @return das Inhaltsobjekt des Knotens
- */
- public ContentType getContent() {
- return content;
- }
-
- }
-
- /* ----------- Ende der privaten inneren Klasse -------------- */
-
- private QueueNode head;
- private QueueNode tail;
-
- /**
- * Eine leere Schlange wird erzeugt.
- * Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ
- * ContentType sein.
- */
- public Queue() {
- head = null;
- tail = null;
- }
-
- /**
- * Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt,
- * sonst liefert sie den Wert false.
- *
- * @return true, falls die Schlange leer ist, sonst false
- */
- public boolean isEmpty() {
- return head == null;
- }
-
- /**
- * Das Objekt pContentType wird an die Schlange angehaengt.
- * Falls pContentType gleich null ist, bleibt die Schlange unveraendert.
- *
- * @param pContent
- * das anzuhaengende Objekt vom Typ ContentType
- */
- public void enqueue(ContentType pContent) {
- if (pContent != null) {
- QueueNode newNode = new QueueNode(pContent);
- if (this.isEmpty()) {
- head = newNode;
- tail = newNode;
- } else {
- tail.setNext(newNode);
- tail = newNode;
- }
- }
- }
-
- /**
- * Das erste Objekt wird aus der Schlange entfernt.
- * Falls die Schlange leer ist, wird sie nicht veraendert.
- */
- public void dequeue() {
- if (!this.isEmpty()) {
- head = head.getNext();
- if (this.isEmpty()) {
- head = null;
- tail = null;
- }
- }
- }
-
- /**
- * Die Anfrage liefert das erste Objekt der Schlange.
- * Die Schlange bleibt unveraendert.
- * Falls die Schlange leer ist, wird null zurueckgegeben.
- *
- * @return das erste Objekt der Schlange vom Typ ContentType oder null,
- * falls die Schlange leer ist
- */
- public ContentType front() {
- if (this.isEmpty()) {
- return null;
- } else {
- return head.getContent();
- }
- }
-}
+/**
+ *
+ * Materialien zu den zentralen NRW-Abiturpruefungen im Fach Informatik ab 2018
+ *
+ *
+ * Generische Klasse Queue
+ *
+ *
+ * Objekte der generischen Klasse Queue (Warteschlange) verwalten beliebige
+ * Objekte vom Typ ContentType nach dem First-In-First-Out-Prinzip, d.h., das
+ * zuerst abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben
+ * eine konstante Laufzeit, unabhaengig von der Anzahl der verwalteten Objekte.
+ *
+ *
+ * @author Qualitaets- und UnterstuetzungsAgentur - Landesinstitut fuer Schule
+ * @version Generisch_02 2014-02-21
+ */
+public class Queue {
+
+ /* --------- Anfang der privaten inneren Klasse -------------- */
+
+ private class QueueNode {
+
+ private ContentType content = null;
+ private QueueNode nextNode = null;
+
+ /**
+ * Ein neues Objekt vom Typ QueueNode wird erschaffen.
+ * Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer.
+ *
+ * @param pContent das Inhaltselement des Knotens vom Typ ContentType
+ */
+ public QueueNode(ContentType pContent) {
+ content = pContent;
+ nextNode = null;
+ }
+
+ /**
+ * Der Verweis wird auf das Objekt, das als Parameter uebergeben wird,
+ * gesetzt.
+ *
+ * @param pNext der Nachfolger des Knotens
+ */
+ public void setNext(QueueNode pNext) {
+ nextNode = pNext;
+ }
+
+ /**
+ * Liefert das naechste Element des aktuellen Knotens.
+ *
+ * @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt
+ */
+ public QueueNode getNext() {
+ return nextNode;
+ }
+
+ /**
+ * Liefert das Inhaltsobjekt des Knotens vom Typ ContentType.
+ *
+ * @return das Inhaltsobjekt des Knotens
+ */
+ public ContentType getContent() {
+ return content;
+ }
+
+ }
+
+ /* ----------- Ende der privaten inneren Klasse -------------- */
+
+ private QueueNode head;
+ private QueueNode tail;
+
+ /**
+ * Eine leere Schlange wird erzeugt.
+ * Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ
+ * ContentType sein.
+ */
+ public Queue() {
+ head = null;
+ tail = null;
+ }
+
+ /**
+ * Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt,
+ * sonst liefert sie den Wert false.
+ *
+ * @return true, falls die Schlange leer ist, sonst false
+ */
+ public boolean isEmpty() {
+ return head == null;
+ }
+
+ /**
+ * Das Objekt pContentType wird an die Schlange angehaengt.
+ * Falls pContentType gleich null ist, bleibt die Schlange unveraendert.
+ *
+ * @param pContent
+ * das anzuhaengende Objekt vom Typ ContentType
+ */
+ public void enqueue(ContentType pContent) {
+ if (pContent != null) {
+ QueueNode newNode = new QueueNode(pContent);
+ if (this.isEmpty()) {
+ head = newNode;
+ tail = newNode;
+ } else {
+ tail.setNext(newNode);
+ tail = newNode;
+ }
+ }
+ }
+
+ /**
+ * Das erste Objekt wird aus der Schlange entfernt.
+ * Falls die Schlange leer ist, wird sie nicht veraendert.
+ */
+ public void dequeue() {
+ if (!this.isEmpty()) {
+ head = head.getNext();
+ if (this.isEmpty()) {
+ head = null;
+ tail = null;
+ }
+ }
+ }
+
+ /**
+ * Die Anfrage liefert das erste Objekt der Schlange.
+ * Die Schlange bleibt unveraendert.
+ * Falls die Schlange leer ist, wird null zurueckgegeben.
+ *
+ * @return das erste Objekt der Schlange vom Typ ContentType oder null,
+ * falls die Schlange leer ist
+ */
+ public ContentType front() {
+ if (this.isEmpty()) {
+ return null;
+ } else {
+ return head.getContent();
+ }
+ }
+}
diff --git a/SelectionListener.class b/SelectionListener.class
new file mode 100644
index 0000000..a2a6eaf
Binary files /dev/null and b/SelectionListener.class differ
diff --git a/SelectionListener.ctxt b/SelectionListener.ctxt
new file mode 100644
index 0000000..93a69b2
--- /dev/null
+++ b/SelectionListener.ctxt
@@ -0,0 +1,7 @@
+#BlueJ class context
+comment0.target=SelectionListener
+comment0.text=\r\n\ Listener-INterface,\ um\ auf\ \u00C4nderungen\ der\ Auswahlboxen\ im\ GUI\ zu\ reagieren.\r\n
+comment1.params=pList\ pNewValue
+comment1.target=void\ selectionChanged(java.lang.String,\ java.lang.String)
+comment1.text=\r\n\ Wird\ aufgerufen,\ wenn\ sich\ die\ Auswahl\ \u00E4ndert.\r\n\ @param\ pList\ Name\ der\ Auswahlbox\r\n\ @param\ pNewValue\ Neuer\ Wert\r\n
+numComments=2
diff --git a/Stundenplan.class b/Stundenplan.class
new file mode 100644
index 0000000..997d73f
Binary files /dev/null and b/Stundenplan.class differ
diff --git a/Stundenplan.ctxt b/Stundenplan.ctxt
new file mode 100644
index 0000000..d48c169
--- /dev/null
+++ b/Stundenplan.ctxt
@@ -0,0 +1,12 @@
+#BlueJ class context
+comment0.target=Stundenplan
+comment1.params=args
+comment1.target=void\ main(java.lang.String[])
+comment1.text=\r\n\ Main-Methode\ um\ das\ Programm\ (au\u00DFerhalb\ von\ BlueJ)\ zu\ starten.\r\n\r\n\ @param\ args\r\n
+comment2.params=
+comment2.target=Stundenplan()
+comment2.text=\r\n\ Konstruktor\ des\ Hauptprogramms\r\n
+comment3.params=pList\ pNewValue
+comment3.target=void\ selectionChanged(java.lang.String,\ java.lang.String)
+comment3.text=\r\n\ Methode\ \ um\ auf\ \u00C4nderungen\ in\ der\ GUi\ zu\ reagieren.\ Sobald\ der\ nutzer\ die\r\n\ Auswahl\ \u00E4ndert,\ wird\ diese\ Methode\ aufgerufen.\ Der\ erste\ Parameter\ ist\ der\r\n\ Name\ der\ Auswahlliste,\ die\ sich\ ge\u00E4ndert\ hat\ (erster\ Parameter\ von\r\n\ {@link\ StundenplanGUI\#addFilter(String,\ String[])}\ oben)\ und\ der\ zweite\ ist\r\n\ der\ neue\ Wert\ der\ Auswahl.\r\n\r\n\ @param\ pList\ \ \ \ \ Name\ der\ Auswahlliste\r\n\ @param\ pNewValue\ Neuer\ Wert\ der\ Auswahl\r\n
+numComments=4
diff --git a/Stundenplan.erdplus b/Stundenplan.erdplus
new file mode 100644
index 0000000..b821fe9
--- /dev/null
+++ b/Stundenplan.erdplus
@@ -0,0 +1 @@
+{"version":2,"www":"erdplus.com","shapes":[{"type":"Entity","details":{"name":"Lehrer","type":"regular","x":559,"y":352.5,"isDisjointed":true,"isTotalSpecialization":true,"isSubtype":false,"supertypeEntityId":null,"id":1}},{"type":"Entity","details":{"name":"Klassen","type":"regular","x":560,"y":148.5,"isDisjointed":true,"isTotalSpecialization":true,"isSubtype":false,"supertypeEntityId":null,"id":3}},{"type":"Entity","details":{"name":"Unterrichtsstunden","type":"regular","x":888,"y":149.5,"isDisjointed":true,"isTotalSpecialization":true,"isSubtype":false,"supertypeEntityId":null,"id":4}},{"type":"Attribute","details":{"name":"Fach","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":886,"y":36.5,"id":6}},{"type":"Attribute","details":{"name":"Tag","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1044,"y":38.5,"id":7}},{"type":"Attribute","details":{"name":"Stunde","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1056,"y":152.5,"id":8}},{"type":"Attribute","details":{"name":"Jahrgang","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":561,"y":33.5,"id":12}},{"type":"Attribute","details":{"name":"Zug","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":373,"y":148.5,"id":14}},{"type":"Attribute","details":{"name":"Kürzel","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":381,"y":359.5,"id":18}},{"type":"Attribute","details":{"name":"Vorname","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":390,"y":465.5,"id":19}},{"type":"Attribute","details":{"name":"Nachname","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":561,"y":478.5,"id":20}},{"type":"Attribute","details":{"name":"Raum","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":884,"y":328.5,"id":24}},{"type":"Relationship","details":{"name":"unterrichtet in","isIdentifying":false,"x":732,"y":263,"slots":[{"slotIndex":0,"minimum":"","maximum":"","participation":"unspecified","cardinality":"many","role":"","entityId":1},{"slotIndex":1,"minimum":"","maximum":"","participation":"unspecified","cardinality":"one","role":"","entityId":4}],"id":30}},{"type":"Relationship","details":{"name":"sind in","isIdentifying":false,"x":733,"y":150,"slots":[{"slotIndex":0,"minimum":"","maximum":"","participation":"unspecified","cardinality":"many","role":"","entityId":3},{"slotIndex":1,"minimum":"","maximum":"","participation":"unspecified","cardinality":"many","role":"","entityId":4}],"id":33}},{"type":"Attribute","details":{"name":"ID","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":747,"y":37.5,"id":42}},{"type":"Relationship","details":{"name":"unterrichtet","isIdentifying":false,"x":559,"y":253,"slots":[{"slotIndex":0,"minimum":"","maximum":"","participation":"unspecified","cardinality":"many","role":"","entityId":1},{"slotIndex":1,"minimum":"","maximum":"","participation":"unspecified","cardinality":"many","role":"","entityId":3}],"id":54}},{"type":"Attribute","details":{"name":"Bezeichner","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":383,"y":34,"id":57}}],"connectors":[{"type":"Connector","details":{"id":43},"source":6,"destination":4},{"type":"Connector","details":{"id":44},"source":7,"destination":4},{"type":"Connector","details":{"id":45},"source":8,"destination":4},{"type":"Connector","details":{"id":46},"source":12,"destination":3},{"type":"Connector","details":{"id":47},"source":14,"destination":3},{"type":"Connector","details":{"id":48},"source":18,"destination":1},{"type":"Connector","details":{"id":49},"source":19,"destination":1},{"type":"Connector","details":{"id":50},"source":20,"destination":1},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":31},"source":1,"destination":30},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":32},"source":4,"destination":30},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":34},"source":3,"destination":33},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":35},"source":4,"destination":33},{"type":"Connector","details":{"id":52},"source":42,"destination":4},{"type":"Connector","details":{"id":53},"source":24,"destination":4},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":55},"source":1,"destination":54},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":56},"source":3,"destination":54},{"type":"Connector","details":{"id":58},"source":57,"destination":3}],"width":2000,"height":1000}
\ No newline at end of file
diff --git a/StundenplanGUI.class b/StundenplanGUI.class
new file mode 100644
index 0000000..2036948
Binary files /dev/null and b/StundenplanGUI.class differ
diff --git a/StundenplanGUI.ctxt b/StundenplanGUI.ctxt
new file mode 100644
index 0000000..59f1b9e
--- /dev/null
+++ b/StundenplanGUI.ctxt
@@ -0,0 +1,40 @@
+#BlueJ class context
+comment0.target=StundenplanGUI
+comment0.text=\r\n\ GUI\ f\u00FCr\ das\ Stundenplanprogramm.\r\n
+comment1.params=
+comment1.target=StundenplanGUI()
+comment1.text=\r\n\ Erstellt\ ein\ neues\ GUI,\ zeigt\ es\ aber\ noch\ nicht\ an.\ Das\ Hauptprogramm\r\n\ muss\ dies\ explizit\ mit\ {@link\ \#setVisible(boolean)}\ tun.\r\n
+comment10.params=
+comment10.target=void\ addComponents()
+comment10.text=\r\n\ F\u00FCgt\ dem\ GUI\ die\ Standard-Komponenten\ hinzu.\r\n
+comment11.params=pLabel
+comment11.target=javax.swing.JLabel\ makeLabel(java.lang.String)
+comment11.text=\r\n\ Erzeugt\ ein\ Text-Label\ mit\ der\ Standard-Schrift\ und\ dem\ angegebenen\ Text.\r\n\ @param\ pLabel\r\n\ @return\r\n
+comment12.params=pLabel\ pFont
+comment12.target=javax.swing.JLabel\ makeLabel(java.lang.String,\ java.awt.Font)
+comment12.text=\r\n\ Erzeugt\ ein\ Text-Label\ mit\ der\ angegebenen\ Schrift\ und\ dem\ Text.\r\n\ @param\ pLabel\r\n\ @param\ pFont\r\n\ @return\r\n
+comment2.params=pName\ pOptions
+comment2.target=void\ addFilter(java.lang.String,\ java.lang.String[])
+comment2.text=\r\n\ F\u00FCgt\ der\ Seitenleister\ eine\ neue\ Auswahlbox\ hinzu.\ Der\ Name\ wird\ bei\r\n\ \u00C4nderungen\ an\ den\ {@link\ SelectionListener}\ \u00FCbergeben,\ um\ verschiedene\r\n\ Boxen\ unterscheiden\ zu\ k\u00F6nnen.\r\n\ @param\ pName\ Name\ des\ Filters\r\n\ @param\ pOptions\ M\u00F6gliche\ Optionen\r\n
+comment3.params=pName
+comment3.target=void\ removeFilter(java.lang.String)
+comment3.text=\r\n\ Entfernt\ die\ Auswahlbox\ mit\ dem\ angegebnen\ Namen\ aus\ der\ Seitenleiste.\r\n\ @param\ pName\r\n
+comment4.params=
+comment4.target=void\ removeAllFilters()
+comment4.text=\r\n\ Entfernt\ alle\ Auswahlboxen\ aus\ der\ Seitenleiste.\r\n
+comment5.params=pCol\ pRow\ pTitle\ pSubtitle\ pText\ pFooter\ pColor
+comment5.target=void\ addLesson(int,\ int,\ java.lang.String,\ java.lang.String,\ java.lang.String,\ java.lang.String,\ java.awt.Color)
+comment5.text=\r\n\ F\u00FCgt\ eine\ neue\ Stunde\ in\ den\ Plan\ ein.\ Exisitiert\ in\ der\ angegebenen\ Zelle\r\n\ schon\ eine\ Stunde,\ wird\ diese\ entfernt\ und\ durch\ die\ neue\ ersetzt.\r\n\r\n\ Eine\ Stunde\ in\ der\ GUI\ hat\ verschiedene\ Bereiche,\ in\ denen\ Informationen\r\n\ (Text)\ untergebracht\ werden\ k\u00F6nnen,\ sowie\ eine\ Farbe.\r\n\r\n\ Nachdem\ eine\ oder\ mehrere\ Stunden\ hinzugef\u00FCgt\ wurden,\ sollte\ das\ Fenster\ mit\r\n\ {@link\ JFrame\#revalidate()}\ und\ {@link\ JFrame\#repaint()}\ neu\ gezeichnet\ werden.\r\n\r\n\ @param\ pCol\ Spaltenindex\ (0\=Montag,\ ...,\ 4\=Freitag)\r\n\ @param\ pRow\ Zeilenindex\ (0\=1.\ Stunde,\ ...,\ 9\=10.\ Stunde)\r\n\ @param\ pTitle\ \u00DCberschrift\r\n\ @param\ pSubtitle\ Untertitel\r\n\ @param\ pText\ Beschreibung\r\n\ @param\ pFooter\ Fu\u00DFzeile\r\n\ @param\ pColor\ Farbe\ der\ Stunde\ im\ Plan\r\n
+comment6.params=pCol\ pRow
+comment6.target=void\ removeLesson(int,\ int)
+comment6.text=\r\n\ Entfernt\ die\ Stunde\ aus\ der\ angebenen\ Zelle.\r\n\ @param\ pCol\ Spaltenindex\ (0\=Montag,\ ...,\ 4\=Freitag)\r\n\ @param\ pRow\ Zeilenindex\ (0\=1.\ Stunde,\ ...,\ 9\=10.\ Stunde)\r\n
+comment7.params=
+comment7.target=void\ removeAllLessons()
+comment7.text=\r\n\ Entfernt\ alle\ derzeit\ angezeigten\ Stunden\ aus\ dem\ GUI.\r\n
+comment8.params=pSelectionListener
+comment8.target=void\ addSelectionListener(SelectionListener)
+comment8.text=\r\n\ Setzt\ den\ Listener,\ der\ \u00FCber\ \u00C4nderungen\ der\ Auswahlboxen\ informiert\ wird.\r\n\ @param\ pSelectionListener\r\n
+comment9.params=pActionEvent
+comment9.target=void\ actionPerformed(java.awt.event.ActionEvent)
+comment9.text=\r\n\ Leitet\ die\ \u00C4nderungen\ der\ Auswahlboxen\ an\ den\ {@link\ SelectionListener}\r\n\ weiter.\r\n\ @param\ pActionEvent\r\n
+numComments=13
diff --git a/StundenplanGUI.java b/StundenplanGUI.java
index 85b5380..ef2c7d2 100644
--- a/StundenplanGUI.java
+++ b/StundenplanGUI.java
@@ -162,8 +162,8 @@ public class StundenplanGUI extends JFrame implements ActionListener {
* Entfernt alle derzeit angezeigten Stunden aus dem GUI.
*/
public void removeAllLessons() {
- for (int i = 0; i < 10; i++) {
- for (int j = 0; j < 5; j++) {
+ for (int i = 0; i < 5; i++) {
+ for (int j = 0; j < 10; j++) {
removeLesson(i, j);
}
}
diff --git a/package.bluej b/package.bluej
new file mode 100644
index 0000000..c427612
--- /dev/null
+++ b/package.bluej
@@ -0,0 +1,319 @@
+#BlueJ package file
+dependency1.from=Lunk
+dependency1.to=Welt
+dependency1.type=UsesDependency
+dependency10.from=Karte_0
+dependency10.to=Feld
+dependency10.type=UsesDependency
+dependency11.from=Karte_1
+dependency11.to=Welt
+dependency11.type=UsesDependency
+dependency12.from=Karte_1
+dependency12.to=Wassereimer
+dependency12.type=UsesDependency
+dependency13.from=Karte_1
+dependency13.to=Feld
+dependency13.type=UsesDependency
+dependency14.from=Karte_2
+dependency14.to=Welt
+dependency14.type=UsesDependency
+dependency15.from=Karte_2
+dependency15.to=Ork
+dependency15.type=UsesDependency
+dependency16.from=Karte_2
+dependency16.to=Feld
+dependency16.type=UsesDependency
+dependency17.from=Karte_3
+dependency17.to=Welt
+dependency17.type=UsesDependency
+dependency18.from=Karte_3
+dependency18.to=Feld
+dependency18.type=UsesDependency
+dependency19.from=Karte_3
+dependency19.to=Heiltrank
+dependency19.type=UsesDependency
+dependency2.from=Lunk
+dependency2.to=Gegenstand
+dependency2.type=UsesDependency
+dependency20.from=Karte_3
+dependency20.to=TrankAngriff
+dependency20.type=UsesDependency
+dependency21.from=Karte_3
+dependency21.to=Zombie
+dependency21.type=UsesDependency
+dependency22.from=Karte_3
+dependency22.to=Troll
+dependency22.type=UsesDependency
+dependency23.from=Gegenstand
+dependency23.to=Karte
+dependency23.type=UsesDependency
+dependency24.from=Gegenstand
+dependency24.to=Lunk
+dependency24.type=UsesDependency
+dependency25.from=Gegenstand
+dependency25.to=Gegner
+dependency25.type=UsesDependency
+dependency26.from=Gegner
+dependency26.to=Karte
+dependency26.type=UsesDependency
+dependency27.from=Zombie
+dependency27.to=Karte
+dependency27.type=UsesDependency
+dependency28.from=Zombie
+dependency28.to=Troll
+dependency28.type=UsesDependency
+dependency29.from=Zombie
+dependency29.to=Lunk
+dependency29.type=UsesDependency
+dependency3.from=Karte
+dependency3.to=Welt
+dependency3.type=UsesDependency
+dependency30.from=Ork
+dependency30.to=Karte
+dependency30.type=UsesDependency
+dependency31.from=Ork
+dependency31.to=Lunk
+dependency31.type=UsesDependency
+dependency32.from=Heiltrank
+dependency32.to=Karte
+dependency32.type=UsesDependency
+dependency33.from=Heiltrank
+dependency33.to=Lunk
+dependency33.type=UsesDependency
+dependency34.from=Heiltrank
+dependency34.to=Gegner
+dependency34.type=UsesDependency
+dependency35.from=Troll
+dependency35.to=Karte
+dependency35.type=UsesDependency
+dependency36.from=Troll
+dependency36.to=Lunk
+dependency36.type=UsesDependency
+dependency37.from=Wassereimer
+dependency37.to=Karte
+dependency37.type=UsesDependency
+dependency38.from=Wassereimer
+dependency38.to=Lunk
+dependency38.type=UsesDependency
+dependency39.from=Wassereimer
+dependency39.to=Feld
+dependency39.type=UsesDependency
+dependency4.from=Karte
+dependency4.to=Gegenstand
+dependency4.type=UsesDependency
+dependency40.from=Wassereimer
+dependency40.to=Gegner
+dependency40.type=UsesDependency
+dependency41.from=TrankAngriff
+dependency41.to=Karte
+dependency41.type=UsesDependency
+dependency42.from=TrankAngriff
+dependency42.to=Lunk
+dependency42.type=UsesDependency
+dependency43.from=TrankAngriff
+dependency43.to=Gegner
+dependency43.type=UsesDependency
+dependency44.from=Welt
+dependency44.to=Lunk
+dependency44.type=UsesDependency
+dependency45.from=Welt
+dependency45.to=Karte
+dependency45.type=UsesDependency
+dependency46.from=Welt
+dependency46.to=Karte_0
+dependency46.type=UsesDependency
+dependency47.from=Welt
+dependency47.to=Karte_1
+dependency47.type=UsesDependency
+dependency48.from=Welt
+dependency48.to=Karte_2
+dependency48.type=UsesDependency
+dependency49.from=Welt
+dependency49.to=Karte_3
+dependency49.type=UsesDependency
+dependency5.from=Karte
+dependency5.to=Gegner
+dependency5.type=UsesDependency
+dependency50.from=Welt
+dependency50.to=Feld
+dependency50.type=UsesDependency
+dependency51.from=Welt
+dependency51.to=Gegenstand
+dependency51.type=UsesDependency
+dependency52.from=Welt
+dependency52.to=Gegner
+dependency52.type=UsesDependency
+dependency53.from=Welt
+dependency53.to=Zombie
+dependency53.type=UsesDependency
+dependency54.from=Welt
+dependency54.to=Ork
+dependency54.type=UsesDependency
+dependency55.from=Zulda
+dependency55.to=Welt
+dependency55.type=UsesDependency
+dependency56.from=Zulda
+dependency56.to=Lunk
+dependency56.type=UsesDependency
+dependency6.from=Karte
+dependency6.to=Feld
+dependency6.type=UsesDependency
+dependency7.from=Karte_0
+dependency7.to=Welt
+dependency7.type=UsesDependency
+dependency8.from=Karte_0
+dependency8.to=Heiltrank
+dependency8.type=UsesDependency
+dependency9.from=Karte_0
+dependency9.to=Troll
+dependency9.type=UsesDependency
+editor.fx.0.height=0
+editor.fx.0.width=0
+editor.fx.0.x=0
+editor.fx.0.y=0
+objectbench.height=87
+objectbench.width=1240
+package.divider.horizontal=0.6
+package.divider.vertical=0.8422818791946308
+package.editor.height=482
+package.editor.width=1116
+package.editor.x=0
+package.editor.y=25
+package.frame.height=695
+package.frame.width=1280
+package.numDependencies=56
+package.numTargets=18
+package.showExtends=true
+package.showUses=true
+project.charset=UTF-8
+readme.height=58
+readme.name=@README
+readme.width=47
+readme.x=10
+readme.y=10
+target1.height=50
+target1.name=Lunk
+target1.showInterface=false
+target1.type=ClassTarget
+target1.width=80
+target1.x=170
+target1.y=120
+target10.height=50
+target10.name=Karte_1
+target10.showInterface=false
+target10.type=ClassTarget
+target10.width=80
+target10.x=1300
+target10.y=240
+target11.height=50
+target11.name=Ork
+target11.showInterface=false
+target11.type=ClassTarget
+target11.width=80
+target11.x=1320
+target11.y=650
+target12.height=70
+target12.name=Wassereimer
+target12.showInterface=false
+target12.type=ClassTarget
+target12.width=120
+target12.x=190
+target12.y=670
+target13.height=50
+target13.name=Gegner
+target13.showInterface=false
+target13.type=AbstractTarget
+target13.width=80
+target13.x=1190
+target13.y=680
+target14.height=50
+target14.name=Feld
+target14.showInterface=false
+target14.type=ClassTarget
+target14.width=80
+target14.x=1250
+target14.y=100
+target15.height=50
+target15.name=Karte_2
+target15.showInterface=false
+target15.type=ClassTarget
+target15.width=80
+target15.x=1200
+target15.y=240
+target16.height=70
+target16.name=Karte_3
+target16.showInterface=false
+target16.type=ClassTarget
+target16.width=120
+target16.x=1230
+target16.y=310
+target17.height=50
+target17.name=TrankAngriff
+target17.showInterface=false
+target17.type=ClassTarget
+target17.width=100
+target17.x=160
+target17.y=580
+target18.height=50
+target18.name=Welt
+target18.showInterface=false
+target18.type=ClassTarget
+target18.width=80
+target18.x=530
+target18.y=140
+target2.height=50
+target2.name=Karte
+target2.showInterface=false
+target2.type=ClassTarget
+target2.width=80
+target2.x=1300
+target2.y=170
+target3.height=50
+target3.name=Troll
+target3.showInterface=false
+target3.type=ClassTarget
+target3.width=80
+target3.x=1100
+target3.y=730
+target4.height=50
+target4.name=FigureMaker
+target4.showInterface=false
+target4.type=ClassTarget
+target4.width=100
+target4.x=450
+target4.y=80
+target5.height=70
+target5.name=Zombie
+target5.showInterface=false
+target5.type=ClassTarget
+target5.width=120
+target5.x=1320
+target5.y=730
+target6.height=50
+target6.name=Zulda
+target6.showInterface=false
+target6.type=ClassTarget
+target6.width=80
+target6.x=580
+target6.y=80
+target7.height=50
+target7.name=Heiltrank
+target7.showInterface=false
+target7.type=ClassTarget
+target7.width=100
+target7.x=30
+target7.y=550
+target8.height=50
+target8.name=Gegenstand
+target8.showInterface=false
+target8.type=AbstractTarget
+target8.width=100
+target8.x=20
+target8.y=710
+target9.height=50
+target9.name=Karte_0
+target9.showInterface=false
+target9.type=ClassTarget
+target9.width=80
+target9.x=1200
+target9.y=170
diff --git a/stundenplan.db b/stundenplan.db
index cbb9d2b..6b3b451 100644
Binary files a/stundenplan.db and b/stundenplan.db differ