From 2f18629e8368708413863623f77643fddc646418 Mon Sep 17 00:00:00 2001 From: Elias Fierke Date: Tue, 3 Mar 2026 08:59:01 +0100 Subject: [PATCH] [chore:] course instance collection --- crafter.cs | 72 +++++++++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 41 deletions(-) diff --git a/crafter.cs b/crafter.cs index c6c3795..b1e63ac 100644 --- a/crafter.cs +++ b/crafter.cs @@ -6,12 +6,14 @@ namespace spplus; public class CourseCrafter { - private class CourseInstance + public class CourseInstance { public Sport Sport = null!; public int Remaining; public List Students = new(); } + public static List<(int Semester, CourseInstance Instance)> GeneratedCourses + = new(); public static void Craft() { var settings = Settings.Instance; @@ -79,11 +81,13 @@ public class CourseCrafter for (int i = 0; i < allowed; i++) { - instances.Add(new CourseInstance + var instance = new CourseInstance { Sport = sp, Remaining = sp.MaxStudents - }); + }; + instances.Add(instance); + GeneratedCourses.Add((sem, instance)); } } @@ -162,50 +166,36 @@ public class CourseCrafter public static string GenerateStatistics() { - var settings = Settings.Instance; - var students = settings.Students; - var sports = settings.Sports; - - if (students.Count == 0 || sports.Count == 0) - return "Keine Daten vorhanden."; - - int semesterCount = sports.Max(s => s.Semester.Length); - - // Kurszählung: (Semester, SportName) → Liste Schüler - var dict = new Dictionary<(int, string), List>(); - - foreach (var st in students) - { - if (st.Result == null) - continue; - - for (int sem = 0; sem < st.Result.Count; sem++) - { - var course = st.Result[sem]; - if (string.IsNullOrWhiteSpace(course) || course == "Fehler") - continue; - - var key = (sem, course); - - if (!dict.ContainsKey(key)) - dict[key] = new List(); - - dict[key].Add(st); - } - } + if (GeneratedCourses == null || GeneratedCourses.Count == 0) + return "Keine Kurse generiert."; var sb = new System.Text.StringBuilder(); - sb.AppendLine($"Anzahl generierter Kurse: {dict.Count}"); + sb.AppendLine($"Anzahl generierter Kurse: {GeneratedCourses.Count}"); sb.AppendLine("Übersicht:"); - foreach (var entry in dict.OrderBy(e => e.Key.Item1).ThenBy(e => e.Key.Item2)) - { - int semester = entry.Key.Item1 + 1; - string name = entry.Key.Item2; - int count = entry.Value.Count; + var grouped = GeneratedCourses + .GroupBy(g => new { g.Semester, g.Instance.Sport.Name }) + .OrderBy(g => g.Key.Semester) + .ThenBy(g => g.Key.Name); - sb.AppendLine($"Semester {semester}: {name} — {count} Schüler*innen"); + foreach (var group in grouped) + { + int counter = 1; + + foreach (var course in group) + { + string number = counter.ToString("D2"); + int semester = group.Key.Semester + 1; + string sportName = group.Key.Name; + int studentCount = course.Instance.Students.Count; + + sb.AppendLine( + $"Semester {semester}: {sportName} {number}: {studentCount} Schüler*innen" + ); + + counter++; + } } return sb.ToString();