Notenschlüssel-Editor (1.3) und Einstellungen in Tabs strukturiert
- Notenschlüssel-Editor im ExamDialog: Stufen (Note/Prozentgrenze) bearbeitbar, Vorbelegung passend zum GradingSystem der Gruppe, Live-Anzeige der absoluten Punktegrenze je Stufe, Validierung (lückenlos, keine Dopplungen) über GradingService.ValidateGradingKey. - Neues Modell GradingKeyTemplate + Repository: Notenschlüssel als Vorlage speichern/anwenden, direkt aus dem ExamDialog heraus. - Einstellungen: Fächer / Kompetenzen / Notenschlüssel-Vorlagen sind jetzt eigene Tabs statt einer gemeinsam wachsenden Liste. Vorlagen zeigen nur noch eine kompakte Zeile; die Stufen-Bearbeitung läuft über ein Popup-Fenster (GradingKeyTemplateDialog). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,21 @@ public class GradingService
|
||||
new() { Grade = "1", MinPercent = 20.0 },
|
||||
new() { Grade = "0", MinPercent = 0.0 },
|
||||
];
|
||||
public string? ValidateGradingKey(List<GradingKeyEntry> entries)
|
||||
{
|
||||
if (entries.Count < 2) return "Der Notenschlüssel braucht mindestens zwei Stufen.";
|
||||
if (entries.Any(e => string.IsNullOrWhiteSpace(e.Grade)))
|
||||
return "Jede Stufe braucht eine Bezeichnung.";
|
||||
if (entries.Any(e => e.MinPercent < 0 || e.MinPercent > 100))
|
||||
return "Prozentgrenzen müssen zwischen 0 und 100 liegen.";
|
||||
var sorted = entries.OrderByDescending(e => e.MinPercent).ToList();
|
||||
if (sorted.Select(e => e.MinPercent).Distinct().Count() != sorted.Count)
|
||||
return "Prozentgrenzen dürfen sich nicht doppeln.";
|
||||
if (sorted.Last().MinPercent != 0)
|
||||
return "Die unterste Stufe muss bei 0 % liegen (lückenlose Abdeckung).";
|
||||
return null;
|
||||
}
|
||||
|
||||
public double WeightedAverage(List<(string Grade, double Weight)> grades)
|
||||
{
|
||||
var numeric = grades
|
||||
|
||||
Reference in New Issue
Block a user