add nix package & fill out studiengänge

This commit is contained in:
Frieder Hannenheim 2025-01-30 12:30:30 +01:00
parent 0abc3b60d0
commit 9b30e7f948
10 changed files with 364 additions and 17 deletions

View file

@ -6,18 +6,34 @@
outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system:
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
buildInputs = with pkgs; [
just
toml2json
nodePackages.webpack-cli
entr
typescript
typescript-language-server
];
in in
{ {
devShell = pkgs.mkShell { packages.default = pkgs.stdenv.mkDerivation {
buildInputs = with pkgs; [ name = "notenrechner";
just src = ./.;
toml2json
nodePackages.webpack-cli
entr
typescript inherit buildInputs;
typescript-language-server
]; buildPhase = ''
just build
'';
installPhase = ''
mkdir -p $out
cp dist/* $out/
'';
};
devShell = pkgs.mkShell {
inherit buildInputs;
}; };
} }
); );

13
src/converter.py Normal file
View file

@ -0,0 +1,13 @@
import re
import sys
input = sys.stdin.read()
for line in input.splitlines():
match = re.search(r'"(\w+)"\D*(\d+).*"(.*)"', line)
print(f"""\
[[ma_minf_2009.module]]
short = "{match.group(1)}"
lp = {match.group(2)}
name = "{match.group(3)}"\
""")

View file

@ -18,11 +18,23 @@ import studiengaenge from '../build/studiengaenge.json'
var select = document.getElementById("studiengaenge") as HTMLSelectElement; var select = document.getElementById("studiengaenge") as HTMLSelectElement;
for (let key in studiengaenge) { for (let key in studiengaenge) {
let studiengang = studiengaenge[key as keyof typeof studiengaenge];
let option = document.createElement('option'); let option = document.createElement('option');
option.value = key; option.value = key;
option.text = String(studiengaenge[key as keyof typeof studiengaenge].display_name); option.text = String(studiengang.display_name);
select.add(option);
let optGroupId = "optgroup" + studiengang.type.toLowerCase();
let optionGroup = document.getElementById(optGroupId) as HTMLOptGroupElement;
if (optionGroup == null) {
optionGroup = document.createElement("optgroup");
optionGroup.id = optGroupId;
optionGroup.label = studiengang.type;
select.add(optionGroup);
}
optionGroup.appendChild(option);
} }
select.selectedIndex = 0; select.selectedIndex = 0;
@ -67,18 +79,32 @@ select.onchange = function changed() {
label.textContent = modul.name; label.textContent = modul.name;
row.insertCell().appendChild(label); row.insertCell().appendChild(label);
row.insertCell().appendChild(input); let input_cell = row.insertCell();
input_cell.className = "noteninputcell";
if (modul.lp != 0) {
input_cell.appendChild(input);
} else {
let hinweis = document.createElement('small');
hinweis.innerText = "Keine Note.\n Muss bestanden sein."
input_cell.appendChild(hinweis);
}
} }
notenInner.appendChild(table);
let submit = document.createElement('input'); let submit = document.createElement('input');
submit.type = "submit"; submit.type = "submit";
submit.value = "Berechnen"; submit.value = "Berechnen";
let row = table.insertRow();
row.insertCell();
let cell = row.insertCell();
cell.className = "noteninputcell";
cell.appendChild(submit);
notenInner.appendChild(table);
let result = document.createElement('p'); let result = document.createElement('p');
notenInner.appendChild(result); notenInner.appendChild(result);
notenInner.appendChild(submit);
noten.onsubmit = function calculate(event) { noten.onsubmit = function calculate(event) {
event.preventDefault(); event.preventDefault();
@ -87,6 +113,10 @@ select.onchange = function changed() {
for (let modulIndex in gewichtung.module) { for (let modulIndex in gewichtung.module) {
let modul = gewichtung.module[modulIndex]; let modul = gewichtung.module[modulIndex];
if (modul.lp == 0) {
continue;
}
let noteInput = document.getElementById(modul.short + "input") as HTMLInputElement; let noteInput = document.getElementById(modul.short + "input") as HTMLInputElement;
let noteString = noteInput.value; let noteString = noteInput.value;
let note = parseFloat(noteString.replace(",", ".")); let note = parseFloat(noteString.replace(",", "."));

View file

@ -1,5 +1,6 @@
[ba_inf_2009] [ba_inf_2009]
display_name = "Abschlussnote Bachelor Informatik (PO 2009)" display_name = "Abschlussnote Bachelor Informatik (PO 2009)"
type = "Bachelor"
# Module aufgelistet mit Kürzel, LP, Modulname # Module aufgelistet mit Kürzel, LP, Modulname
[[ba_inf_2009.module]] [[ba_inf_2009.module]]
@ -40,7 +41,7 @@ lp = 6
name = "Softwaretechnologie" name = "Softwaretechnologie"
[[ba_inf_2009.module]] [[ba_inf_2009.module]]
short = "swtp" short = "swtp"
lp = 6 lp = 0
name = "Softwaretechnologie-Projekt" name = "Softwaretechnologie-Projekt"
[[ba_inf_2009.module]] [[ba_inf_2009.module]]
short = "dbrn" short = "dbrn"

View file

@ -0,0 +1,101 @@
[ba_minf_2009]
display_name = "Abschlussnote Bachelor Medieninformatik (PO 2009)"
type = "Bachelor"
[[ba_minf_2009.module]]
short = "mathe1"
lp = 15
name = "Einführung in die Mathematik für Informatiker"
[[ba_minf_2009.module]]
short = "mathe2"
lp = 15
name = "Mathematische Methoden für Informatiker"
[[ba_minf_2009.module]]
short = "aud"
lp = 6
name = "Algorithmen und Datenstrukturen"
[[ba_minf_2009.module]]
short = "prog"
lp = 6
name = "Programmierung"
[[ba_minf_2009.module]]
short = "lab"
lp = 4
name = "Einführungspraktikum"
[[ba_minf_2009.module]]
short = "swt"
lp = 6
name = "Softwaretechnologie"
[[ba_minf_2009.module]]
short = "swtp"
lp = 0
name = "Softwaretechnologie-Projekt"
[[ba_minf_2009.module]]
short = "bus"
lp = 7
name = "Betriebssysteme und Sicherheit"
[[ba_minf_2009.module]]
short = "dbrn"
lp = 10
name = "Datenbanken und Rechnernetze"
[[ba_minf_2009.module]]
short = "ikt"
lp = 5
name = "Informations- und Kodierungstheorie"
[[ba_minf_2009.module]]
short = "fs"
lp = 8
name = "Formale Systeme"
[[ba_minf_2009.module]]
short = "gdg"
lp = 4
name = "Grundlagen der Gestaltung"
[[ba_minf_2009.module]]
short = "emg"
lp = 4
name = "Einführung in die Mediengestaltung"
[[ba_minf_2009.module]]
short = "ra"
lp = 10
name = "Rechnerarchitektur"
[[ba_minf_2009.module]]
short = "mums"
lp = 5
name = "Medien und Medienströme"
[[ba_minf_2009.module]]
short = "emi"
lp = 5
name = "Einführung in die Medieninformatik"
[[ba_minf_2009.module]]
short = "ecg"
lp = 5
name = "Einführung in die Computergrafik"
[[ba_minf_2009.module]]
short = "medida"
lp = 3
name = "Medienpsychologie und -didaktik"
[[ba_minf_2009.module]]
short = "wme"
lp = 5
name = "Web- und Multimedia Engineering"
[[ba_minf_2009.module]]
short = "komp"
lp = 0
name = "Komplexpraktikum"
[[ba_minf_2009.module]]
short = "vert1"
lp = 12
name = "Vertiefung"
[[ba_minf_2009.module]]
short = "vert2"
lp = 12
name = "Vertiefung zur Bachelor-Arbeit"
[[ba_minf_2009.module]]
short = "aqua"
lp = 5
name = "Allgemeine Qualifikationen"
[[ba_minf_2009.module]]
short = "bachelor"
lp = 52
name = "Bachelor-Arbeit und Kolloquium"

View file

@ -0,0 +1,41 @@
[dip_inf_2010]
display_name = "Abschlussnote Diplom Informatik (PO 2010)"
type = "Diplom"
[[dip_inf_2010.module]]
short = "bas1"
lp = 12
name = "Basismodul 1"
[[dip_inf_2010.module]]
short = "bas2"
lp = 12
name = "Basismodul 2"
[[dip_inf_2010.module]]
short = "bas3"
lp = 12
name = "Basismodul 3"
[[dip_inf_2010.module]]
short = "vert"
lp = 15
name = "Vertiefungsmodul"
[[dip_inf_2010.module]]
short = "profil"
lp = 12
name = "Profilmodul 2"
[[dip_inf_2010.module]]
short = "beleg"
lp = 9
name = "Großer Beleg"
[[dip_inf_2010.module]]
short = "aqua"
lp = 5
name = "Berufsspezifische Schlüsselkompetenzen"
[[dip_inf_2010.module]]
short = "vnf"
lp = 15
name = "Vertiefung im Nebenfach"
[[dip_inf_2010.module]]
short = "diplom"
lp = 60
name = "Diplomarbeit und Verteidigung"

View file

@ -0,0 +1,41 @@
[ma_inf_2010]
display_name = "Abschlussnote Master Informatik (PO 2010)"
type = "Master"
[[ma_inf_2010.module]]
short = "bas1"
lp = 12
name = "Basismodul 1"
[[ma_inf_2010.module]]
short = "bas2"
lp = 12
name = "Basismodul 2"
[[ma_inf_2010.module]]
short = "bas3"
lp = 12
name = "Basismodul 3"
[[ma_inf_2010.module]]
short = "vert"
lp = 15
name = "Vertiefungsmodul"
[[ma_inf_2010.module]]
short = "profil1"
lp = 0
name = "Profilmodul 1"
[[ma_inf_2010.module]]
short = "profil2"
lp = 12
name = "Profilmodul 2"
[[ma_inf_2010.module]]
short = "praktikum"
lp = 12
name = "Vertieftes Master-Praktikum"
[[ma_inf_2010.module]]
short = "aqua"
lp = 6
name = "Allgemeine Qualifikation"
[[ma_inf_2010.module]]
short = "master"
lp = 60
name = "Master-Arbeit und Verteidigung"

View file

@ -0,0 +1,29 @@
[ma_minf_2010]
display_name = "Abschlussnote Master Medieninformatik (PO 2010)"
type = "Master"
[[ma_minf_2010.module]]
short = "bruecke"
lp = 12
name = "Brückenmodul"
[[ma_minf_2010.module]]
short = "profil"
lp = 0
name = "Profilmodul 1"
[[ma_minf_2010.module]]
short = "vert"
lp = 60
name = "Vertiefungsmodule"
[[ma_minf_2010.module]]
short = "ergaenzung"
lp = 12
name = "Ergänzungsmodule"
[[ma_minf_2010.module]]
short = "aqua"
lp = 6
name = "Allgemeine Qualifikation"
[[ma_minf_2010.module]]
short = "master"
lp = 60
name = "Master-Arbeit und Verteidigung"

View file

@ -0,0 +1,73 @@
[vordip_inf_2010]
display_name = "Vordiplomnote Diplom Informatik (PO 2010)"
type = "Diplom"
[[vordip_inf_2010.module]]
short = "mathe1"
lp = 12
name = "Einführung in die Mathematik für Informatiker"
[[vordip_inf_2010.module]]
short = "mathe2"
lp = 12
name = "Mathematische Methoden für Informatiker"
[[vordip_inf_2010.module]]
short = "aud"
lp = 5
name = "Algorithmen und Datenstrukturen"
[[vordip_inf_2010.module]]
short = "prog"
lp = 5
name = "Programmierung"
[[vordip_inf_2010.module]]
short = "lab"
lp = 4
name = "Einführungs- und Programmierpraktikum"
[[vordip_inf_2010.module]]
short = "swt"
lp = 5
name = "Softwaretechnologie"
[[vordip_inf_2010.module]]
short = "bus"
lp = 7
name = "Betriebssysteme und Sicherheit"
[[vordip_inf_2010.module]]
short = "dbrn"
lp = 9
name = "Datenbanken und Rechnernetze"
[[vordip_inf_2010.module]]
short = "ikt"
lp = 4
name = "Informations- und Kodierungstheorie"
[[vordip_inf_2010.module]]
short = "fs"
lp = 8
name = "Formale Systeme"
[[vordip_inf_2010.module]]
short = "logik"
lp = 8
name = "Theoretische Informatik und Logik"
[[vordip_inf_2010.module]]
short = "is"
lp = 4
name = "Intelligente Systeme"
[[vordip_inf_2010.module]]
short = "ra"
lp = 10
name = "Rechnerarchitektur"
[[vordip_inf_2010.module]]
short = "tg"
lp = 9
name = "Technische Grundlagen und Hardwarepraktikum"
[[vordip_inf_2010.module]]
short = "soi"
lp = 4
name = "Systemorientierte Informatik / Hardware Software-Codesign"
[[vordip_inf_2010.module]]
short = "nf"
lp = 7
name = "Nebenfach"
[[vordip_inf_2010.module]]
short = "aqua"
lp = 5
name = "Allgemeine Basisqualifikationen"

View file

@ -58,6 +58,10 @@ th, td {
padding: 4px; padding: 4px;
} }
.noteninputcell {
text-align: center;
}
input { input {
outline: none; outline: none;
padding: 4px; padding: 4px;
@ -74,9 +78,7 @@ input:focus {
} }
input[type=submit] { input[type=submit] {
align-self: end;
width: 82px; width: 82px;
margin-right: 4px;
box-sizing: border-box; box-sizing: border-box;
} }