forked from IF-LK-2020/stundenplan
Initial commit
This commit is contained in:
commit
6559ef501d
Binary file not shown.
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
Binary file not shown.
|
@ -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);
|