====== Tool zur Planung der Maturaarbeitspräsentationen ======
* {{lehrkraefte:blc:informatik:ffprg2-2024:praesentationsplaner:intro.zip}}
* zip entpacken, Ordner mit VSCode öffnen, index.html mit Live-Server öffnen, Debug-Console im Browser öffnen.
* Code in ''planer.js'' studieren.
* Code in ''datahelper.js'' in der Funktion ''buggyCSVParser'' vervollständigen. (CSV ist ein «schlechtes» Format und es ist kompliziert, einen allgemeinen Parser zu schreiben).
* Folgende Arrays mit Objekten sind zu erstellen (alle Referenzen bestehen aus dem Index im jeweiligen Array):
* ''student'': Enthält die Infos zu den Schülern (erst mal nur "name", dann auch Klasse, und eine Referenz auf ''paper'')
* ''teacher'': Enthält die Infos zu den Betreuern (erst mal nur "code" (Lehrerkürzel), später auch Name, zeitliche Präferenzen etc.)
* ''paper'': Enthält die Infos zu den Maturaarbeiten:
* Array mit Referenzen auf ''student'' (Autoren)
* ''teachers'' Array mit einem oder mehreren Einträgen, Referenzen auf ''teacher'' (Betreuer, sprachl. Betreuer)
* ''timeslots'': Enthält Infos zu den Zeitangaben (''slot'', erst mal als String, später wohl Datum/Uhrzeit (Start und Ende?)
* ''rooms'': Enthält Infos zu den Räumen (''name'', später auch ein Array mit Referenzen auf die planbaren ''timeslots''
* Ein Plan wird als Array von Arrays mit 2 Einträgen wie folgt dargestellt:
* ''plan[p] = [t,r]'', wobei $p$ der Index vom ''paper'', $t$ der Index vom ''timeslot'' und $r$ der Index vom ''room'' ist.
* Erstellen Sie einen Plan mit folgender Methode:
* Wählen Sie zufällig ein ''paper'' aus und planen Sie es unter Berücksichtigung der Bedingungen möglichst früh im ersten freien Zimmer.
export function buggyCSVParser(csv) {
// Return an array of Stings for a csv line:
// Assumption: All Strings are quoted with "", Separated by commas.
function parseLine(line) {
return JSON.parse("["+line+"]");
}
let lines = csv.split("\n");
// Extract header
let header = parseLine(lines[0]);
// Extract all lines and build objects like
// {"Name": "Hans Wurst", "Titel": "Bla blah", ...}
let table = [];
for (let i=1; i
===== Daten =====
==== Maturaarbeit ====
* Titel
* Referenzen auf 1 bis n Schüler
* 1 Betreuer
* 0-1 sprachliche Betreuer
==== Zeitfenster ====
* Datum, Uhrzeit
==== Räume ====
* Name
==== Weitere Daten ====
* Zeitliche Verfügbarkeit von Zimmern.
* Zeitliche und räumliche Bedingungen für eine Präsentation (Einschränkung auf ein oder mehrere Zimmer, mögliche Zeitfenster)
* Wünsche: Reihenfolge von Präsentationen eines Betreuers, zeitliche Wünsche, Zimmerwünsche
===== Plan (Resultat) =====
Jeder **Maturaarbeit** wird genau ein Zimmer und Zeitfenster zugewiesen, und zwar so, dass
* Keine Kombination Zimmer/Zeitfenster doppelt belegt ist.
* Kein Betreuer und kein sprachlicher Betreuer zur gleichen Zeit zwei Präsentation hat.
Ausgegeben wird der Plan in verschiedenen Ansichten:
* Tabelle mit allen Schülern (Titel, Betreuer, sprachl. Betr., Zimmer, Zeit)
* Für jeden Betreuer (Schüler, Titel, sprachl. Betr. Zimmer, Zeit)
* Für jedes Zimmer (Schüler Titel, Betreuer, sprachl. Betr.)