====== 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.)