[chore:] course instance collection
This commit is contained in:
72
crafter.cs
72
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<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();
|
||||
|
||||
Reference in New Issue
Block a user