[chore:] course instance collection

This commit is contained in:
2026-03-03 08:59:01 +01:00
parent 5f44e63129
commit 2f18629e83

View File

@@ -6,12 +6,14 @@ namespace spplus;
public class CourseCrafter
{
private class CourseInstance
public class CourseInstance
{
public Sport Sport = null!;
public int Remaining;
public List<Student> 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<Student>>();
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<Student>();
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();