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