forked from IF-LK-2020/stundenplan
Initial commit
This commit is contained in:
BIN
+libs/sqlite-jdbc-3.36.0.3.jar
Normal file
BIN
+libs/sqlite-jdbc-3.36.0.3.jar
Normal file
Binary file not shown.
148
DatabaseConnector.java
Executable file
148
DatabaseConnector.java
Executable file
@@ -0,0 +1,148 @@
|
|||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Materialien zu den zentralen NRW-Abiturpruefungen im Fach Informatik ab 2018
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Klasse DatabaseConnector
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Ein Objekt der Klasse DatabaseConnector ermoeglicht die Abfrage und Manipulation
|
||||||
|
* einer SQLite-Datenbank.
|
||||||
|
* Beim Erzeugen des Objekts wird eine Datenbankverbindung aufgebaut, so dass
|
||||||
|
* anschließend SQL-Anweisungen an diese Datenbank gerichtet werden koennen.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author Qualitaets- und UnterstuetzungsAgentur - Landesinstitut fuer Schule
|
||||||
|
* @version 2016-01-24
|
||||||
|
*/
|
||||||
|
public class DatabaseConnector{
|
||||||
|
private Connection connection;
|
||||||
|
private QueryResult currentQueryResult = null;
|
||||||
|
private String message = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ein Objekt vom Typ DatabaseConnector wird erstellt, und eine Verbindung zur Datenbank
|
||||||
|
* wird aufgebaut. Mit den Parametern pIP und pPort werden die IP-Adresse und die
|
||||||
|
* Port-Nummer uebergeben, unter denen die Datenbank mit Namen pDatabase zu erreichen ist.
|
||||||
|
* Mit den Parametern pUsername und pPassword werden Benutzername und Passwort fuer die
|
||||||
|
* Datenbank uebergeben.
|
||||||
|
*/
|
||||||
|
public DatabaseConnector(String pIP, int pPort, String pDatabase, String pUsername, String pPassword){
|
||||||
|
//Eine Impementierung dieser Schnittstelle fuer SQLite ignoriert pID und pPort, da die Datenbank immer lokal ist.
|
||||||
|
//Auch pUsername und pPassword werden nicht verwendet, da SQLite sie nicht unterstuetzt.
|
||||||
|
try {
|
||||||
|
//Laden der Treiberklasse
|
||||||
|
Class.forName("org.sqlite.JDBC");
|
||||||
|
|
||||||
|
//Verbindung herstellen
|
||||||
|
connection = DriverManager.getConnection("jdbc:sqlite:"+pDatabase);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
message = e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Der Auftrag schickt den im Parameter pSQLStatement enthaltenen SQL-Befehl an die
|
||||||
|
* Datenbank ab.
|
||||||
|
* Handelt es sich bei pSQLStatement um einen SQL-Befehl, der eine Ergebnismenge
|
||||||
|
* liefert, so kann dieses Ergebnis anschließend mit der Methode getCurrentQueryResult
|
||||||
|
* abgerufen werden.
|
||||||
|
*/
|
||||||
|
public void executeStatement(String pSQLStatement){
|
||||||
|
//Altes Ergebnis loeschen
|
||||||
|
currentQueryResult = null;
|
||||||
|
message = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Neues Statement erstellen
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
|
||||||
|
//SQL Anweisung an die DB schicken.
|
||||||
|
if (statement.execute(pSQLStatement)) { //Fall 1: Es gibt ein Ergebnis
|
||||||
|
|
||||||
|
//Resultset auslesen
|
||||||
|
ResultSet resultset = statement.getResultSet();
|
||||||
|
|
||||||
|
//Spaltenanzahl ermitteln
|
||||||
|
int columnCount = resultset.getMetaData().getColumnCount();
|
||||||
|
|
||||||
|
//Spaltennamen und Spaltentypen in Felder uebertragen
|
||||||
|
String[] resultColumnNames = new String[columnCount];
|
||||||
|
String[] resultColumnTypes = new String[columnCount];
|
||||||
|
for (int i = 0; i < columnCount; i++){
|
||||||
|
resultColumnNames[i] = resultset.getMetaData().getColumnLabel(i+1);
|
||||||
|
resultColumnTypes[i] = resultset.getMetaData().getColumnTypeName(i+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Queue fuer die Zeilen der Ergebnistabelle erstellen
|
||||||
|
Queue<String[]> rows = new Queue<String[]>();
|
||||||
|
|
||||||
|
//Daten in Queue uebertragen und Zeilen zaehlen
|
||||||
|
int rowCount = 0;
|
||||||
|
while (resultset.next()){
|
||||||
|
String[] resultrow = new String[columnCount];
|
||||||
|
for (int s = 0; s < columnCount; s++){
|
||||||
|
resultrow[s] = resultset.getString(s+1);
|
||||||
|
}
|
||||||
|
rows.enqueue(resultrow);
|
||||||
|
rowCount = rowCount + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ergebnisfeld erstellen und Zeilen aus Queue uebertragen
|
||||||
|
String[][] resultData = new String[rowCount][columnCount];
|
||||||
|
int j = 0;
|
||||||
|
while (!rows.isEmpty()){
|
||||||
|
resultData[j] = rows.front();
|
||||||
|
rows.dequeue();
|
||||||
|
j = j + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Statement schließen und Ergebnisobjekt erstellen
|
||||||
|
statement.close();
|
||||||
|
currentQueryResult = new QueryResult(resultData, resultColumnNames, resultColumnTypes);
|
||||||
|
|
||||||
|
} else { //Fall 2: Es gibt kein Ergebnis.
|
||||||
|
//Statement ohne Ergebnisobjekt schliessen
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
//Fehlermeldung speichern
|
||||||
|
message = e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert das Ergebnis des letzten mit der Methode executeStatement an
|
||||||
|
* die Datenbank geschickten SQL-Befehls als Ob-jekt vom Typ QueryResult zurueck.
|
||||||
|
* Wurde bisher kein SQL-Befehl abgeschickt oder ergab der letzte Aufruf von
|
||||||
|
* executeStatement keine Ergebnismenge (z.B. bei einem INSERT-Befehl oder einem
|
||||||
|
* Syntaxfehler), so wird null geliefert.
|
||||||
|
*/
|
||||||
|
public QueryResult getCurrentQueryResult(){
|
||||||
|
return currentQueryResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert null oder eine Fehlermeldung, die sich jeweils auf die letzte zuvor ausgefuehrte
|
||||||
|
* Datenbankoperation bezieht.
|
||||||
|
*/
|
||||||
|
public String getErrorMessage(){
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Datenbankverbindung wird geschlossen.
|
||||||
|
*/
|
||||||
|
public void close(){
|
||||||
|
try{
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
message = e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
12
Datenbanken.Stundenplan.iml
Normal file
12
Datenbanken.Stundenplan.iml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="sqlite-jdbc-3.36.0.3" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
76
QueryResult.java
Executable file
76
QueryResult.java
Executable file
@@ -0,0 +1,76 @@
|
|||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Materialien zu den zentralen NRW-Abiturpruefungen im Fach Informatik ab 2018
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Klasse QueryResult
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Ein Objekt der Klasse QueryResult stellt die Ergebnistabelle einer Datenbankanfrage mit Hilfe
|
||||||
|
* der Klasse DatabaseConnector dar. Objekte dieser Klasse werden nur von der Klasse DatabaseConnector erstellt.
|
||||||
|
* Die Klasse verfuegt ueber keinen oeffentlichen Konstruktor.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author Qualitaets- und UnterstuetzungsAgentur - Landesinstitut fuer Schule
|
||||||
|
* @version 2015-01-31
|
||||||
|
*/
|
||||||
|
public class QueryResult{
|
||||||
|
private String[][] data;
|
||||||
|
private String[] columnNames;
|
||||||
|
private String[] columnTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paketinterner Konstruktor.
|
||||||
|
*/
|
||||||
|
QueryResult(String[][] pData, String[] pColumnNames, String[] pColumnTypes){
|
||||||
|
data = pData;
|
||||||
|
columnNames = pColumnNames;
|
||||||
|
columnTypes = pColumnTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert die Eintraege der Ergebnistabelle als zweidimensionales Feld
|
||||||
|
* vom Typ String. Der erste Index des Feldes stellt die Zeile und der zweite die
|
||||||
|
* Spalte dar (d.h. Object[zeile][spalte]).
|
||||||
|
*/
|
||||||
|
public String[][] getData(){
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert die Bezeichner der Spalten der Ergebnistabelle als Feld vom
|
||||||
|
* Typ String zurueck.
|
||||||
|
*/
|
||||||
|
public String[] getColumnNames(){
|
||||||
|
return columnNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert die Typenbezeichnung der Spalten der Ergebnistabelle als Feld
|
||||||
|
* vom Typ String zurueck. Die Bezeichnungen entsprechen den Angaben in der MySQL-Datenbank.
|
||||||
|
*/
|
||||||
|
public String[] getColumnTypes(){
|
||||||
|
return columnTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert die Anzahl der Zeilen der Ergebnistabelle als Integer.
|
||||||
|
*/
|
||||||
|
public int getRowCount(){
|
||||||
|
if (data != null )
|
||||||
|
return data.length;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Anfrage liefert die Anzahl der Spalten der Ergebnistabelle als Integer.
|
||||||
|
*/
|
||||||
|
public int getColumnCount(){
|
||||||
|
if (data != null && data.length > 0 && data[0] != null)
|
||||||
|
return data[0].length;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
142
Queue.java
Executable file
142
Queue.java
Executable file
@@ -0,0 +1,142 @@
|
|||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Materialien zu den zentralen NRW-Abiturpruefungen im Fach Informatik ab 2018
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Generische Klasse Queue<ContentType>
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* 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.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author Qualitaets- und UnterstuetzungsAgentur - Landesinstitut fuer Schule
|
||||||
|
* @version Generisch_02 2014-02-21
|
||||||
|
*/
|
||||||
|
public class Queue<ContentType> {
|
||||||
|
|
||||||
|
/* --------- Anfang der privaten inneren Klasse -------------- */
|
||||||
|
|
||||||
|
private class QueueNode {
|
||||||
|
|
||||||
|
private ContentType content = null;
|
||||||
|
private QueueNode nextNode = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ein neues Objekt vom Typ QueueNode<ContentType> 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
SelectionListener.java
Normal file
13
SelectionListener.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Listener-INterface, um auf Änderungen der Auswahlboxen im GUI zu reagieren.
|
||||||
|
*/
|
||||||
|
public interface SelectionListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wird aufgerufen, wenn sich die Auswahl ändert.
|
||||||
|
* @param pList Name der Auswahlbox
|
||||||
|
* @param pNewValue Neuer Wert
|
||||||
|
*/
|
||||||
|
public void selectionChanged(String pList, String pNewValue );
|
||||||
|
|
||||||
|
}
|
||||||
100
Stundenplan.java
Normal file
100
Stundenplan.java
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class Stundenplan implements SelectionListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main-Methode um das Programm (außerhalb von BlueJ) zu starten.
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// Setzen des "Look & Feel" des Programms
|
||||||
|
try {
|
||||||
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Programm starten
|
||||||
|
new Stundenplan();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instanz des GUI des Programms
|
||||||
|
private StundenplanGUI gui;
|
||||||
|
|
||||||
|
// Instanz der Datenbankverbindung
|
||||||
|
private DatabaseConnector dbc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Konstruktor des Hauptprogramms
|
||||||
|
*/
|
||||||
|
public Stundenplan() {
|
||||||
|
// Erstellen des GUIs
|
||||||
|
gui = new StundenplanGUI();
|
||||||
|
|
||||||
|
// Aufbau der Datenbankverbindung
|
||||||
|
dbc = new DatabaseConnector("", 0, "stundenplan.db", "", "");
|
||||||
|
QueryResult r;
|
||||||
|
|
||||||
|
// Lehrer abfragen und ein Auswahlfeld erstellen, dass in der
|
||||||
|
// GUI angezeigt wird, um den angezeigten Stundenplan anzupassen
|
||||||
|
dbc.executeStatement("SELECT kuerzel FROM lehrer");
|
||||||
|
r = dbc.getCurrentQueryResult();
|
||||||
|
String[] teachers = new String[r.getRowCount()];
|
||||||
|
for (int i = 0; i < r.getRowCount(); i++) {
|
||||||
|
teachers[i] = r.getData()[i][0];
|
||||||
|
}
|
||||||
|
gui.addFilter("Lehrer", teachers);
|
||||||
|
|
||||||
|
// GUI anzeigen und Verhalten bei Interaktion festlegen
|
||||||
|
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
gui.addSelectionListener(this); // GUI ruft Methode selectionChanged auf, wenn sich eine Auswahlbox ändert.
|
||||||
|
gui.setLocationRelativeTo(null);
|
||||||
|
gui.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Methode um auf Änderungen in der GUi zu reagieren. Sobald der nutzer die
|
||||||
|
* Auswahl ändert, wird diese Methode aufgerufen. Der erste Parameter ist der
|
||||||
|
* Name der Auswahlliste, die sich geändert hat (erster Parameter von
|
||||||
|
* {@link StundenplanGUI#addFilter(String, String[])} oben) und der zweite ist
|
||||||
|
* der neue Wert der Auswahl.
|
||||||
|
*
|
||||||
|
* @param pList Name der Auswahlliste
|
||||||
|
* @param pNewValue Neuer Wert der Auswahl
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void selectionChanged(String pList, String pNewValue) {
|
||||||
|
if (pList == "Lehrer") {
|
||||||
|
// Zuerst alle bisherigen Stunden aus der GUI entfernen
|
||||||
|
gui.removeAllLessons();
|
||||||
|
|
||||||
|
// Neue Daten aus der Datenbank abfragen.
|
||||||
|
// Hier gefakte Daten, die Struktur der Datenbank ist nicht vorgegeben.
|
||||||
|
dbc.executeStatement("SELECT 0,'Q2','405',kuerzel,0,0,'Informatik',-16711936 FROM lehrer WHERE kuerzel = '" + pNewValue + "'");
|
||||||
|
QueryResult r = dbc.getCurrentQueryResult();
|
||||||
|
|
||||||
|
// Falls es ein Ergebnis gibt ...
|
||||||
|
if (r != null) {
|
||||||
|
String[][] data = r.getData();
|
||||||
|
|
||||||
|
// Neue Stunden in die GUI schreiben
|
||||||
|
for (int i = 0; i < data.length; i++) {
|
||||||
|
gui.addLesson(
|
||||||
|
Integer.parseInt(data[i][4]), // Spalte im Plan (0=Montag, ... ,4=Freitag)
|
||||||
|
Integer.parseInt(data[i][5]), // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
|
||||||
|
data[i][6], // Titel
|
||||||
|
"Raum " + data[i][2], // Untertitel
|
||||||
|
data[i][1], // Beschreibungstext
|
||||||
|
data[i][3], // Fußzeile
|
||||||
|
new Color(Integer.parseInt(data[i][7])) // Farbe (Objekt der Klasse Color)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
|
||||||
|
gui.revalidate();
|
||||||
|
gui.repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
265
StundenplanGUI.java
Normal file
265
StundenplanGUI.java
Normal file
@@ -0,0 +1,265 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.LineBorder;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GUI für das Stundenplanprogramm.
|
||||||
|
*/
|
||||||
|
public class StundenplanGUI extends JFrame implements ActionListener {
|
||||||
|
|
||||||
|
// Initiale Größe des Fensters
|
||||||
|
public static final int FRAME_WIDTH = 800;
|
||||||
|
public static final int FRAME_HEIGHT = 600;
|
||||||
|
|
||||||
|
// Schriftarten
|
||||||
|
public static Font fHeader = new Font(Font.SANS_SERIF, Font.BOLD, 12);
|
||||||
|
public static Font fTitle = new Font(Font.SANS_SERIF, Font.BOLD, 11);
|
||||||
|
public static Font fSubtitle = new Font(Font.SANS_SERIF, Font.PLAIN, 8);
|
||||||
|
public static Font fText = new Font(Font.SANS_SERIF, Font.PLAIN, 9);
|
||||||
|
public static Font fFooter = new Font(Font.SANS_SERIF, Font.ITALIC, 8);
|
||||||
|
|
||||||
|
|
||||||
|
// Der Listener, der bei Änderungen informiert wird.
|
||||||
|
private SelectionListener selectionListener;
|
||||||
|
|
||||||
|
// Caches für Stunden und Filter
|
||||||
|
private Hashtable<String, JPanel> filters;
|
||||||
|
private Hashtable<Point, JPanel> lessons;
|
||||||
|
|
||||||
|
// Panels für die Bereiche des GUIs
|
||||||
|
private JPanel jpPlan, jpSidebar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erstellt ein neues GUI, zeigt es aber noch nicht an. Das Hauptprogramm
|
||||||
|
* muss dies explizit mit {@link #setVisible(boolean)} tun.
|
||||||
|
*/
|
||||||
|
public StundenplanGUI() {
|
||||||
|
filters = new Hashtable<>();
|
||||||
|
lessons = new Hashtable<>();
|
||||||
|
|
||||||
|
this.setSize(FRAME_WIDTH, FRAME_HEIGHT);
|
||||||
|
this.addComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fügt der Seitenleister eine neue Auswahlbox hinzu. Der Name wird bei
|
||||||
|
* Änderungen an den {@link SelectionListener} übergeben, um verschiedene
|
||||||
|
* Boxen unterscheiden zu können.
|
||||||
|
* @param pName Name des Filters
|
||||||
|
* @param pOptions Mögliche Optionen
|
||||||
|
*/
|
||||||
|
public void addFilter(String pName, String[] pOptions) {
|
||||||
|
JPanel jpFilter = new JPanel();
|
||||||
|
jpFilter.setLayout(new BorderLayout());
|
||||||
|
jpFilter.setBackground(jpSidebar.getBackground());
|
||||||
|
jpFilter.setPreferredSize(new Dimension(jpSidebar.getPreferredSize().width, 50));
|
||||||
|
jpFilter.add(makeLabel(pName, fHeader), BorderLayout.NORTH);
|
||||||
|
|
||||||
|
JComboBox<String> jcbFilter = new JComboBox<String>(pOptions);
|
||||||
|
jcbFilter.setName(pName);
|
||||||
|
jcbFilter.addActionListener(this);
|
||||||
|
jpFilter.add(jcbFilter, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
filters.put(pName, jpFilter);
|
||||||
|
jpSidebar.add(jpFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entfernt die Auswahlbox mit dem angegebnen Namen aus der Seitenleiste.
|
||||||
|
* @param pName
|
||||||
|
*/
|
||||||
|
public void removeFilter(String pName) {
|
||||||
|
if (filters.containsKey(pName)) {
|
||||||
|
JPanel jpFilter = filters.get(pName);
|
||||||
|
jpSidebar.remove(jpFilter);
|
||||||
|
filters.remove(pName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entfernt alle Auswahlboxen aus der Seitenleiste.
|
||||||
|
*/
|
||||||
|
public void removeAllFilters() {
|
||||||
|
jpSidebar.removeAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fügt eine neue Stunde in den Plan ein. Exisitiert in der angegebenen Zelle
|
||||||
|
* schon eine Stunde, wird diese entfernt und durch die neue ersetzt.
|
||||||
|
*
|
||||||
|
* Eine Stunde in der GUI hat verschiedene Bereiche, in denen Informationen
|
||||||
|
* (Text) untergebracht werden können, sowie eine Farbe.
|
||||||
|
*
|
||||||
|
* Nachdem eine oder mehrere Stunden hinzugefügt wurden, sollte das Fenster mit
|
||||||
|
* {@link JFrame#revalidate()} und {@link JFrame#repaint()} neu gezeichnet werden.
|
||||||
|
*
|
||||||
|
* @param pCol Spaltenindex (0=Montag, ..., 4=Freitag)
|
||||||
|
* @param pRow Zeilenindex (0=1. Stunde, ..., 9=10. Stunde)
|
||||||
|
* @param pTitle Überschrift
|
||||||
|
* @param pSubtitle Untertitel
|
||||||
|
* @param pText Beschreibung
|
||||||
|
* @param pFooter Fußzeile
|
||||||
|
* @param pColor Farbe der Stunde im Plan
|
||||||
|
*/
|
||||||
|
public void addLesson(int pCol, int pRow, String pTitle, String pSubtitle, String pText, String pFooter, Color pColor) {
|
||||||
|
removeLesson(pCol, pRow);
|
||||||
|
|
||||||
|
Color bg = new Color(pColor.getRed(), pColor.getGreen(), pColor.getBlue(), 128);
|
||||||
|
|
||||||
|
JPanel jpLesson = new JPanel();
|
||||||
|
jpLesson.setBackground(bg);
|
||||||
|
jpLesson.setForeground(pColor);
|
||||||
|
jpLesson.setBorder(new LineBorder(pColor, 2, true));
|
||||||
|
jpLesson.setLayout(new BoxLayout(jpLesson, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
JLabel jlTitle = new JLabel(pTitle);
|
||||||
|
jlTitle.setFont(fTitle);
|
||||||
|
jpLesson.add(jlTitle);
|
||||||
|
|
||||||
|
JLabel jlSubtitle = new JLabel(pSubtitle);
|
||||||
|
jlSubtitle.setFont(fSubtitle);
|
||||||
|
jpLesson.add(jlSubtitle);
|
||||||
|
|
||||||
|
JLabel jlText = new JLabel(pText);
|
||||||
|
jlText.setFont(fText);
|
||||||
|
jpLesson.add(jlText);
|
||||||
|
|
||||||
|
JLabel jlFooter = new JLabel(pFooter);
|
||||||
|
jlFooter.setFont(fFooter);
|
||||||
|
jpLesson.add(jlFooter);
|
||||||
|
|
||||||
|
|
||||||
|
GridBagConstraints c = new GridBagConstraints();
|
||||||
|
c.gridx = pCol + 1;
|
||||||
|
c.gridy = pRow + 1;
|
||||||
|
c.weightx = 0.5;
|
||||||
|
c.weighty = 0.5;
|
||||||
|
c.insets = new Insets(2, 4, 2, 4);
|
||||||
|
c.fill = GridBagConstraints.BOTH;
|
||||||
|
|
||||||
|
lessons.put(new Point(pCol, pRow), jpLesson);
|
||||||
|
jpPlan.add(jpLesson, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entfernt die Stunde aus der angebenen Zelle.
|
||||||
|
* @param pCol Spaltenindex (0=Montag, ..., 4=Freitag)
|
||||||
|
* @param pRow Zeilenindex (0=1. Stunde, ..., 9=10. Stunde)
|
||||||
|
*/
|
||||||
|
public void removeLesson(int pCol, int pRow) {
|
||||||
|
Point key = new Point(pCol, pRow);
|
||||||
|
JPanel jpLesson = lessons.get(key);
|
||||||
|
if (jpLesson != null) {
|
||||||
|
jpPlan.remove(jpLesson);
|
||||||
|
lessons.remove(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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++) {
|
||||||
|
removeLesson(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setzt den Listener, der über Änderungen der Auswahlboxen informiert wird.
|
||||||
|
* @param pSelectionListener
|
||||||
|
*/
|
||||||
|
public void addSelectionListener(SelectionListener pSelectionListener) {
|
||||||
|
this.selectionListener = pSelectionListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Leitet die Änderungen der Auswahlboxen an den {@link SelectionListener}
|
||||||
|
* weiter.
|
||||||
|
* @param pActionEvent
|
||||||
|
*/
|
||||||
|
public void actionPerformed(ActionEvent pActionEvent) {
|
||||||
|
if (this.selectionListener != null) {
|
||||||
|
JComboBox<String> source = ((JComboBox<String>) pActionEvent.getSource());
|
||||||
|
|
||||||
|
String newValue = (String) source.getSelectedItem();
|
||||||
|
String sourceName = source.getName();
|
||||||
|
|
||||||
|
this.selectionListener.selectionChanged(sourceName, newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fügt dem GUI die Standard-Komponenten hinzu.
|
||||||
|
*/
|
||||||
|
private void addComponents() {
|
||||||
|
this.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
// Seitenleiste für Filter (Auswahlboxen)
|
||||||
|
jpSidebar = new JPanel();
|
||||||
|
jpSidebar.setBackground(Color.LIGHT_GRAY);
|
||||||
|
jpSidebar.setPreferredSize(new Dimension(100, FRAME_HEIGHT));
|
||||||
|
this.add(jpSidebar, BorderLayout.LINE_START);
|
||||||
|
|
||||||
|
// Hauptbereich für den Stundenplan
|
||||||
|
jpPlan = new JPanel();
|
||||||
|
this.add(jpPlan, BorderLayout.CENTER);
|
||||||
|
jpPlan.setLayout(new GridBagLayout());
|
||||||
|
jpPlan.add(new JPanel());
|
||||||
|
|
||||||
|
// Überschriften für die Spalten (Wochentage)
|
||||||
|
GridBagConstraints c = new GridBagConstraints();
|
||||||
|
c.gridx = 1;
|
||||||
|
c.gridy = 0;
|
||||||
|
c.fill = GridBagConstraints.NONE;
|
||||||
|
c.weightx = 0.5;
|
||||||
|
c.weighty = 0.2;
|
||||||
|
jpPlan.add(makeLabel("Montag", fHeader), c);
|
||||||
|
c.gridx++;
|
||||||
|
jpPlan.add(makeLabel("Dienstag", fHeader), c);
|
||||||
|
c.gridx++;
|
||||||
|
jpPlan.add(makeLabel("Mittwoch", fHeader), c);
|
||||||
|
c.gridx++;
|
||||||
|
jpPlan.add(makeLabel("Donnerstag", fHeader), c);
|
||||||
|
c.gridx++;
|
||||||
|
jpPlan.add(makeLabel("Freitag", fHeader), c);
|
||||||
|
|
||||||
|
// Überschriften für die Zeilen (Stunden)
|
||||||
|
c = new GridBagConstraints();
|
||||||
|
c.gridx = 0;
|
||||||
|
c.fill = GridBagConstraints.NONE;
|
||||||
|
c.weightx = 0.2;
|
||||||
|
c.weighty = 0.5;
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
c.gridy = i + 1;
|
||||||
|
jpPlan.add(makeLabel((i + 1) + ". Stunde", fHeader), c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erzeugt ein Text-Label mit der Standard-Schrift und dem angegebenen Text.
|
||||||
|
* @param pLabel
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private JLabel makeLabel(String pLabel) {
|
||||||
|
return makeLabel(pLabel, fText);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erzeugt ein Text-Label mit der angegebenen Schrift und dem Text.
|
||||||
|
* @param pLabel
|
||||||
|
* @param pFont
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private JLabel makeLabel(String pLabel, Font pFont) {
|
||||||
|
JLabel jlLabel = new JLabel(pLabel);
|
||||||
|
jlLabel.setFont(pFont);
|
||||||
|
return jlLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
25
klassen.csv
Normal file
25
klassen.csv
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
bezeichner,jahrgang,zug
|
||||||
|
05a,5,a
|
||||||
|
05b,5,b
|
||||||
|
05c,5,c
|
||||||
|
05d,5,d
|
||||||
|
06a,6,a
|
||||||
|
06b,6,b
|
||||||
|
06c,6,c
|
||||||
|
06d,6,d
|
||||||
|
07a,7,a
|
||||||
|
07b,7,b
|
||||||
|
07c,7,c
|
||||||
|
07d,7,d
|
||||||
|
08a,8,a
|
||||||
|
08b,8,b
|
||||||
|
08c,8,c
|
||||||
|
08d,8,d
|
||||||
|
09a,9,a
|
||||||
|
09b,9,b
|
||||||
|
09c,9,c
|
||||||
|
09d,9,d
|
||||||
|
EFa,10,a
|
||||||
|
EFb,10,b
|
||||||
|
EFc,10,c
|
||||||
|
EFd,10,d
|
||||||
|
98
lehrer.csv
Normal file
98
lehrer.csv
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
Kuerzel,Vorname,Nachname
|
||||||
|
bar,Barner,Angela
|
||||||
|
beh,Behlke,Christina
|
||||||
|
bhz,Buchholz-Neidhardt,Ilka
|
||||||
|
bmr,Burmeister,Felix
|
||||||
|
bod,Bodeck,Jörn
|
||||||
|
brs,Bruns,Maren
|
||||||
|
bru,Brune,Kerstin
|
||||||
|
buk,Bukarz,Julia Maria
|
||||||
|
buo,Bucko,Anna
|
||||||
|
det,Deters,Svenja
|
||||||
|
dfe,Diefenbach,Frank
|
||||||
|
dsl,Diesel,Stefan
|
||||||
|
est,Ester-Burschel,Barbara
|
||||||
|
fel,Felsch,Michael
|
||||||
|
fis,Fischer,Silke
|
||||||
|
frd,Freund,Sarah
|
||||||
|
fri,Fricke,Jan Dennis
|
||||||
|
ger,Gerke,Timo
|
||||||
|
gor,Gorges,Kristin
|
||||||
|
göt,Göttner,Wendy
|
||||||
|
grd,Gradowski von,Thomas
|
||||||
|
gru,Grube,Viktoria
|
||||||
|
gry,Generotzky,Constanze
|
||||||
|
hel,Held,Joachim
|
||||||
|
hob,Hoberg,Annika
|
||||||
|
hof,Hofmann,Jonas
|
||||||
|
hök,Höke,Sandra
|
||||||
|
hor,Hornig,Manuel
|
||||||
|
htn,Horstmann,Anne
|
||||||
|
imm,Immel,Bettina
|
||||||
|
jka,Jutka,Sabine
|
||||||
|
kah,Kahrau,Larissa
|
||||||
|
kch,Koch,Britta
|
||||||
|
khm,Kuhlmann,Florian
|
||||||
|
kop,Kropp,Elke
|
||||||
|
kpp,Knüppel,Christoph
|
||||||
|
kse,Krause,Kerstin
|
||||||
|
ksg,Klausing,Susanne
|
||||||
|
kth,Kreth,Maren
|
||||||
|
ldr,Linder,Sarah
|
||||||
|
leh,Lehmann,Daria
|
||||||
|
lin,Lindemann,Armin
|
||||||
|
lÜb,Lübbecke,Annika
|
||||||
|
mab,Maybaum,Regina
|
||||||
|
mei,Meise-Amthauer,Sylvia
|
||||||
|
mrg,Müller-Goerke,Ulrike
|
||||||
|
msl,Müller-Slanitz,Nadja
|
||||||
|
müh,Mühlenhoff,Paul
|
||||||
|
ngb,Neugebauer,Jonas
|
||||||
|
nid,Niedworok,Christian
|
||||||
|
nkp,Niekamp,Andrea
|
||||||
|
osm,Ostmeier,Tim
|
||||||
|
par,Paarmann,Oliver
|
||||||
|
pie,Pieper,Jennifer
|
||||||
|
plv,Pehlivan,Dervis
|
||||||
|
pör,Pörschke-Watt,Inga Kristin
|
||||||
|
pui,Puissant,Susanne
|
||||||
|
rak,Raach-Kallmer,Roswitha
|
||||||
|
rbg,Randenborgh van,Christian
|
||||||
|
rc,Reckelkamm,Bernd
|
||||||
|
rde,Rohde,Christine
|
||||||
|
rdt,Randt,Achim
|
||||||
|
rix,Rixe,Jeanette
|
||||||
|
rm,Redmann,Bastian
|
||||||
|
rup,Rupik,Karolina Beata
|
||||||
|
rüt,Rüthemann,Gunnar
|
||||||
|
sar,Sauer,Lisa
|
||||||
|
sat,Straetmanns,Florian
|
||||||
|
sdt,Schmidt,Moritz
|
||||||
|
sei,Seidenberg,Kristina
|
||||||
|
shz,Scholz,Nicole
|
||||||
|
sim,Simon-Edsen,Katja
|
||||||
|
slg,Stölting,Heike
|
||||||
|
smr,Schollmeier,David
|
||||||
|
snk,Schöneck,Gudrun-Verena
|
||||||
|
sön,Schöne,Claudia
|
||||||
|
spr,Sprenger,René
|
||||||
|
sra,Schramm,Saskia
|
||||||
|
stf,Steffen,Wiebke
|
||||||
|
stm,Strotherm,Janine
|
||||||
|
sto,Storz,Martin
|
||||||
|
str,Struwe,Simone
|
||||||
|
tes,Theessen,Johanna
|
||||||
|
the,Theeßen,Daniel
|
||||||
|
tsi,Tsironi,Paraskevi
|
||||||
|
ulr,Ulrich,Elias
|
||||||
|
vhs,Viehhauser,Werner
|
||||||
|
wab,Wabnitz,Sandra
|
||||||
|
wae,Wagner-Euteneier,Ina
|
||||||
|
wag,Wagner,Susanne
|
||||||
|
weh,Wehry,Martin
|
||||||
|
wel,Welland,Tanja
|
||||||
|
wen,Wendler,Jessica
|
||||||
|
wig,Wieling,Petra
|
||||||
|
wlm,Wiegelmann,Karen
|
||||||
|
wss,Weiß,David
|
||||||
|
zuc,Zucchini,Laura
|
||||||
|
101
raeume.csv
Normal file
101
raeume.csv
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
nummer,etage
|
||||||
|
101,1
|
||||||
|
102,1
|
||||||
|
103,1
|
||||||
|
104,1
|
||||||
|
105,1
|
||||||
|
106,1
|
||||||
|
107,1
|
||||||
|
108,1
|
||||||
|
109,1
|
||||||
|
110,1
|
||||||
|
111,1
|
||||||
|
112,1
|
||||||
|
113,1
|
||||||
|
114,1
|
||||||
|
115,1
|
||||||
|
116,1
|
||||||
|
117,1
|
||||||
|
118,1
|
||||||
|
119,1
|
||||||
|
120,1
|
||||||
|
121,1
|
||||||
|
122,1
|
||||||
|
123,1
|
||||||
|
124,1
|
||||||
|
201,2
|
||||||
|
202,2
|
||||||
|
203,2
|
||||||
|
204,2
|
||||||
|
205,2
|
||||||
|
206,2
|
||||||
|
207,2
|
||||||
|
208,2
|
||||||
|
209,2
|
||||||
|
210,2
|
||||||
|
211,2
|
||||||
|
212,2
|
||||||
|
213,2
|
||||||
|
214,2
|
||||||
|
215,2
|
||||||
|
216,2
|
||||||
|
217,2
|
||||||
|
218,2
|
||||||
|
219,2
|
||||||
|
220,2
|
||||||
|
221,2
|
||||||
|
222,2
|
||||||
|
223,2
|
||||||
|
224,2
|
||||||
|
301,3
|
||||||
|
302,3
|
||||||
|
303,3
|
||||||
|
304,3
|
||||||
|
305,3
|
||||||
|
306,3
|
||||||
|
307,3
|
||||||
|
308,3
|
||||||
|
309,3
|
||||||
|
310,3
|
||||||
|
311,3
|
||||||
|
312,3
|
||||||
|
313,3
|
||||||
|
314,3
|
||||||
|
315,3
|
||||||
|
316,3
|
||||||
|
317,3
|
||||||
|
318,3
|
||||||
|
319,3
|
||||||
|
320,3
|
||||||
|
321,3
|
||||||
|
322,3
|
||||||
|
323,3
|
||||||
|
324,3
|
||||||
|
401,4
|
||||||
|
402,4
|
||||||
|
403,4
|
||||||
|
404,4
|
||||||
|
405,4
|
||||||
|
406,4
|
||||||
|
407,4
|
||||||
|
408,4
|
||||||
|
409,4
|
||||||
|
410,4
|
||||||
|
411,4
|
||||||
|
412,4
|
||||||
|
413,4
|
||||||
|
414,4
|
||||||
|
415,4
|
||||||
|
416,4
|
||||||
|
417,4
|
||||||
|
418,4
|
||||||
|
419,4
|
||||||
|
420,4
|
||||||
|
421,4
|
||||||
|
422,4
|
||||||
|
423,4
|
||||||
|
424,4
|
||||||
|
501,5
|
||||||
|
033a,0
|
||||||
|
033b,0
|
||||||
|
025,0
|
||||||
|
BIN
stundenplan.db
Normal file
BIN
stundenplan.db
Normal file
Binary file not shown.
243
stundenplan.sql
Normal file
243
stundenplan.sql
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
BEGIN TRANSACTION;
|
||||||
|
DROP TABLE IF EXISTS "klassen";
|
||||||
|
CREATE TABLE IF NOT EXISTS "klassen" (
|
||||||
|
"bezeichner" TEXT NOT NULL,
|
||||||
|
"jahrgang" INTEGER,
|
||||||
|
"zug" TEXT,
|
||||||
|
PRIMARY KEY("bezeichner")
|
||||||
|
);
|
||||||
|
DROP TABLE IF EXISTS "lehrer";
|
||||||
|
CREATE TABLE IF NOT EXISTS "lehrer" (
|
||||||
|
"Kuerzel" TEXT NOT NULL,
|
||||||
|
"Vorname" TEXT,
|
||||||
|
"Nachname" TEXT,
|
||||||
|
PRIMARY KEY("Kuerzel")
|
||||||
|
);
|
||||||
|
DROP TABLE IF EXISTS "raeume";
|
||||||
|
CREATE TABLE IF NOT EXISTS "raeume" (
|
||||||
|
"nummer" TEXT NOT NULL,
|
||||||
|
"etage" INTEGER,
|
||||||
|
PRIMARY KEY("nummer")
|
||||||
|
);
|
||||||
|
INSERT INTO "klassen" VALUES ('05a',5,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('05b',5,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('05c',5,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('05d',5,'d');
|
||||||
|
INSERT INTO "klassen" VALUES ('06a',6,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('06b',6,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('06c',6,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('06d',6,'d');
|
||||||
|
INSERT INTO "klassen" VALUES ('07a',7,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('07b',7,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('07c',7,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('07d',7,'d');
|
||||||
|
INSERT INTO "klassen" VALUES ('08a',8,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('08b',8,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('08c',8,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('08d',8,'d');
|
||||||
|
INSERT INTO "klassen" VALUES ('09a',9,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('09b',9,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('09c',9,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('09d',9,'d');
|
||||||
|
INSERT INTO "klassen" VALUES ('EFa',10,'a');
|
||||||
|
INSERT INTO "klassen" VALUES ('EFb',10,'b');
|
||||||
|
INSERT INTO "klassen" VALUES ('EFc',10,'c');
|
||||||
|
INSERT INTO "klassen" VALUES ('EFd',10,'d');
|
||||||
|
INSERT INTO "lehrer" VALUES ('bar','Barner','Angela');
|
||||||
|
INSERT INTO "lehrer" VALUES ('beh','Behlke','Christina');
|
||||||
|
INSERT INTO "lehrer" VALUES ('bhz','Buchholz-Neidhardt','Ilka');
|
||||||
|
INSERT INTO "lehrer" VALUES ('bmr','Burmeister','Felix');
|
||||||
|
INSERT INTO "lehrer" VALUES ('bod','Bodeck','Jörn');
|
||||||
|
INSERT INTO "lehrer" VALUES ('brs','Bruns','Maren');
|
||||||
|
INSERT INTO "lehrer" VALUES ('bru','Brune','Kerstin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('buk','Bukarz','Julia Maria');
|
||||||
|
INSERT INTO "lehrer" VALUES ('buo','Bucko','Anna');
|
||||||
|
INSERT INTO "lehrer" VALUES ('det','Deters','Svenja');
|
||||||
|
INSERT INTO "lehrer" VALUES ('dfe','Diefenbach','Frank');
|
||||||
|
INSERT INTO "lehrer" VALUES ('dsl','Diesel','Stefan');
|
||||||
|
INSERT INTO "lehrer" VALUES ('est','Ester-Burschel','Barbara');
|
||||||
|
INSERT INTO "lehrer" VALUES ('fel','Felsch','Michael');
|
||||||
|
INSERT INTO "lehrer" VALUES ('fis','Fischer','Silke');
|
||||||
|
INSERT INTO "lehrer" VALUES ('frd','Freund','Sarah');
|
||||||
|
INSERT INTO "lehrer" VALUES ('fri','Fricke','Jan Dennis');
|
||||||
|
INSERT INTO "lehrer" VALUES ('ger','Gerke','Timo');
|
||||||
|
INSERT INTO "lehrer" VALUES ('gor','Gorges','Kristin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('göt','Göttner','Wendy');
|
||||||
|
INSERT INTO "lehrer" VALUES ('grd','Gradowski von','Thomas');
|
||||||
|
INSERT INTO "lehrer" VALUES ('gru','Grube','Viktoria');
|
||||||
|
INSERT INTO "lehrer" VALUES ('gry','Generotzky','Constanze');
|
||||||
|
INSERT INTO "lehrer" VALUES ('hel','Held','Joachim');
|
||||||
|
INSERT INTO "lehrer" VALUES ('hob','Hoberg','Annika');
|
||||||
|
INSERT INTO "lehrer" VALUES ('hof','Hofmann','Jonas');
|
||||||
|
INSERT INTO "lehrer" VALUES ('hök','Höke','Sandra');
|
||||||
|
INSERT INTO "lehrer" VALUES ('hor','Hornig','Manuel');
|
||||||
|
INSERT INTO "lehrer" VALUES ('htn','Horstmann','Anne');
|
||||||
|
INSERT INTO "lehrer" VALUES ('imm','Immel','Bettina');
|
||||||
|
INSERT INTO "lehrer" VALUES ('jka','Jutka','Sabine');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kah','Kahrau','Larissa');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kch','Koch','Britta');
|
||||||
|
INSERT INTO "lehrer" VALUES ('khm','Kuhlmann','Florian');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kop','Kropp','Elke');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kpp','Knüppel','Christoph');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kse','Krause','Kerstin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('ksg','Klausing','Susanne');
|
||||||
|
INSERT INTO "lehrer" VALUES ('kth','Kreth','Maren');
|
||||||
|
INSERT INTO "lehrer" VALUES ('ldr','Linder','Sarah');
|
||||||
|
INSERT INTO "lehrer" VALUES ('leh','Lehmann','Daria');
|
||||||
|
INSERT INTO "lehrer" VALUES ('lin','Lindemann','Armin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('lÜb','Lübbecke','Annika');
|
||||||
|
INSERT INTO "lehrer" VALUES ('mab','Maybaum','Regina');
|
||||||
|
INSERT INTO "lehrer" VALUES ('mei','Meise-Amthauer','Sylvia');
|
||||||
|
INSERT INTO "lehrer" VALUES ('mrg','Müller-Goerke','Ulrike');
|
||||||
|
INSERT INTO "lehrer" VALUES ('msl','Müller-Slanitz','Nadja');
|
||||||
|
INSERT INTO "lehrer" VALUES ('müh','Mühlenhoff','Paul');
|
||||||
|
INSERT INTO "lehrer" VALUES ('ngb','Neugebauer','Jonas');
|
||||||
|
INSERT INTO "lehrer" VALUES ('nid','Niedworok','Christian');
|
||||||
|
INSERT INTO "lehrer" VALUES ('nkp','Niekamp','Andrea');
|
||||||
|
INSERT INTO "lehrer" VALUES ('osm','Ostmeier','Tim');
|
||||||
|
INSERT INTO "lehrer" VALUES ('par','Paarmann','Oliver');
|
||||||
|
INSERT INTO "lehrer" VALUES ('pie','Pieper','Jennifer');
|
||||||
|
INSERT INTO "lehrer" VALUES ('plv','Pehlivan','Dervis');
|
||||||
|
INSERT INTO "lehrer" VALUES ('pör','Pörschke-Watt','Inga Kristin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('pui','Puissant','Susanne');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rak','Raach-Kallmer','Roswitha');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rbg','Randenborgh van','Christian');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rc','Reckelkamm','Bernd');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rde','Rohde','Christine');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rdt','Randt','Achim');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rix','Rixe','Jeanette');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rm','Redmann','Bastian');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rup','Rupik','Karolina Beata');
|
||||||
|
INSERT INTO "lehrer" VALUES ('rüt','Rüthemann','Gunnar');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sar','Sauer','Lisa');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sat','Straetmanns','Florian');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sdt','Schmidt','Moritz');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sei','Seidenberg','Kristina');
|
||||||
|
INSERT INTO "lehrer" VALUES ('shz','Scholz','Nicole');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sim','Simon-Edsen','Katja');
|
||||||
|
INSERT INTO "lehrer" VALUES ('slg','Stölting','Heike');
|
||||||
|
INSERT INTO "lehrer" VALUES ('smr','Schollmeier','David');
|
||||||
|
INSERT INTO "lehrer" VALUES ('snk','Schöneck','Gudrun-Verena');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sön','Schöne','Claudia');
|
||||||
|
INSERT INTO "lehrer" VALUES ('spr','Sprenger','René');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sra','Schramm','Saskia');
|
||||||
|
INSERT INTO "lehrer" VALUES ('stf','Steffen','Wiebke');
|
||||||
|
INSERT INTO "lehrer" VALUES ('stm','Strotherm','Janine');
|
||||||
|
INSERT INTO "lehrer" VALUES ('sto','Storz','Martin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('str','Struwe','Simone');
|
||||||
|
INSERT INTO "lehrer" VALUES ('tes','Theessen','Johanna');
|
||||||
|
INSERT INTO "lehrer" VALUES ('the','Theeßen','Daniel');
|
||||||
|
INSERT INTO "lehrer" VALUES ('tsi','Tsironi','Paraskevi');
|
||||||
|
INSERT INTO "lehrer" VALUES ('ulr','Ulrich','Elias');
|
||||||
|
INSERT INTO "lehrer" VALUES ('vhs','Viehhauser','Werner');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wab','Wabnitz','Sandra');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wae','Wagner-Euteneier','Ina');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wag','Wagner','Susanne');
|
||||||
|
INSERT INTO "lehrer" VALUES ('weh','Wehry','Martin');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wel','Welland','Tanja');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wen','Wendler','Jessica');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wig','Wieling','Petra');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wlm','Wiegelmann','Karen');
|
||||||
|
INSERT INTO "lehrer" VALUES ('wss','Weiß','David');
|
||||||
|
INSERT INTO "lehrer" VALUES ('zuc','Zucchini','Laura');
|
||||||
|
INSERT INTO "raeume" VALUES ('101',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('102',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('103',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('104',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('105',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('106',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('107',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('108',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('109',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('110',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('111',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('112',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('113',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('114',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('115',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('116',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('117',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('118',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('119',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('120',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('121',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('122',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('123',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('124',1);
|
||||||
|
INSERT INTO "raeume" VALUES ('201',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('202',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('203',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('204',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('205',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('206',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('207',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('208',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('209',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('210',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('211',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('212',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('213',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('214',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('215',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('216',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('217',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('218',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('219',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('220',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('221',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('222',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('223',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('224',2);
|
||||||
|
INSERT INTO "raeume" VALUES ('301',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('302',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('303',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('304',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('305',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('306',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('307',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('308',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('309',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('310',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('311',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('312',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('313',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('314',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('315',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('316',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('317',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('318',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('319',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('320',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('321',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('322',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('323',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('324',3);
|
||||||
|
INSERT INTO "raeume" VALUES ('401',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('402',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('403',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('404',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('405',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('406',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('407',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('408',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('409',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('410',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('411',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('412',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('413',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('414',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('415',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('416',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('417',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('418',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('419',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('420',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('421',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('422',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('423',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('424',4);
|
||||||
|
INSERT INTO "raeume" VALUES ('501',5);
|
||||||
|
INSERT INTO "raeume" VALUES ('033a',0);
|
||||||
|
INSERT INTO "raeume" VALUES ('033b',0);
|
||||||
|
INSERT INTO "raeume" VALUES ('025',0);
|
||||||
|
COMMIT;
|
||||||
Reference in New Issue
Block a user