[chore:] course instance collection
This commit is contained in:
72
crafter.cs
72
crafter.cs
@@ -6,12 +6,14 @@ namespace spplus;
|
|||||||
|
|
||||||
public class CourseCrafter
|
public class CourseCrafter
|
||||||
{
|
{
|
||||||
private class CourseInstance
|
public class CourseInstance
|
||||||
{
|
{
|
||||||
public Sport Sport = null!;
|
public Sport Sport = null!;
|
||||||
public int Remaining;
|
public int Remaining;
|
||||||
public List<Student> Students = new();
|
public List<Student> Students = new();
|
||||||
}
|
}
|
||||||
|
public static List<(int Semester, CourseInstance Instance)> GeneratedCourses
|
||||||
|
= new();
|
||||||
public static void Craft()
|
public static void Craft()
|
||||||
{
|
{
|
||||||
var settings = Settings.Instance;
|
var settings = Settings.Instance;
|
||||||
@@ -79,11 +81,13 @@ public class CourseCrafter
|
|||||||
|
|
||||||
for (int i = 0; i < allowed; i++)
|
for (int i = 0; i < allowed; i++)
|
||||||
{
|
{
|
||||||
instances.Add(new CourseInstance
|
var instance = new CourseInstance
|
||||||
{
|
{
|
||||||
Sport = sp,
|
Sport = sp,
|
||||||
Remaining = sp.MaxStudents
|
Remaining = sp.MaxStudents
|
||||||
});
|
};
|
||||||
|
instances.Add(instance);
|
||||||
|
GeneratedCourses.Add((sem, instance));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,50 +166,36 @@ public class CourseCrafter
|
|||||||
|
|
||||||
public static string GenerateStatistics()
|
public static string GenerateStatistics()
|
||||||
{
|
{
|
||||||
var settings = Settings.Instance;
|
if (GeneratedCourses == null || GeneratedCourses.Count == 0)
|
||||||
var students = settings.Students;
|
return "Keine Kurse generiert.";
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var sb = new System.Text.StringBuilder();
|
var sb = new System.Text.StringBuilder();
|
||||||
|
|
||||||
sb.AppendLine($"Anzahl generierter Kurse: {dict.Count}");
|
sb.AppendLine($"Anzahl generierter Kurse: {GeneratedCourses.Count}");
|
||||||
sb.AppendLine("Übersicht:");
|
sb.AppendLine("Übersicht:");
|
||||||
|
|
||||||
foreach (var entry in dict.OrderBy(e => e.Key.Item1).ThenBy(e => e.Key.Item2))
|
var grouped = GeneratedCourses
|
||||||
{
|
.GroupBy(g => new { g.Semester, g.Instance.Sport.Name })
|
||||||
int semester = entry.Key.Item1 + 1;
|
.OrderBy(g => g.Key.Semester)
|
||||||
string name = entry.Key.Item2;
|
.ThenBy(g => g.Key.Name);
|
||||||
int count = entry.Value.Count;
|
|
||||||
|
|
||||||
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();
|
return sb.ToString();
|
||||||
|
|||||||
Reference in New Issue
Block a user