diff --git a/crafter.cs b/crafter.cs index 008bffc..a68838e 100644 --- a/crafter.cs +++ b/crafter.cs @@ -148,7 +148,7 @@ public class CourseCrafter for (int semester = 1; semester <= 4; semester++) { int cancel = 0; - while (GeneratedCourses.Count(c => c.Semester == semester) < Settings.Instance.NumCoursesPerSemester) + while (GeneratedCourses.Count(c => c.Semester == semester) < Settings.Instance.NumCoursesPerSemester[semester-1]) { cancel++; if (cancel >= 20) break; @@ -349,7 +349,9 @@ public class CourseCrafter bool requestExit() { globalCount++; - if (GeneratedCourses.Count >= Settings.Instance.NumCoursesPerSemester * 4) return true; + int sum = Settings.Instance.NumCoursesPerSemester[0] + Settings.Instance.NumCoursesPerSemester[1] + + Settings.Instance.NumCoursesPerSemester[2] + Settings.Instance.NumCoursesPerSemester[3]; + if (GeneratedCourses.Count >= sum) return true; int low = 0; foreach (var item in initial_sportlist) @@ -440,7 +442,7 @@ public class CourseCrafter if (sportCoursesInSemester >= sport.Semester[semesterIndex]) continue; - if (GeneratedCourses.Count(c => c.Semester == semester) >= Settings.Instance.NumCoursesPerSemester) + if (GeneratedCourses.Count(c => c.Semester == semester) >= Settings.Instance.NumCoursesPerSemester[semester-1]) continue; var directlyPlaceable = remainingStudents @@ -683,7 +685,7 @@ public class CourseCrafter if (sportCoursesInThisSemester >= sp.Semester[i]) continue; - if (totalCoursesPerSemester[i] >= Settings.Instance.NumCoursesPerSemester) + if (totalCoursesPerSemester[i] >= Settings.Instance.NumCoursesPerSemester[i]) continue; int freeInterestedStudents = interestedStudents @@ -706,35 +708,40 @@ public class CourseCrafter return bestSem; } - var errors = ValidateCourses(GeneratedCourses); + ReloadResult(); +} - if (errors.Count == 0) + public static void ReloadResult() { - MainWindow.Instance.TbResultLog.Text = "--- Alle generierten Kursen erfüllen die gegebenen Voraussetzungen ---"; - } - else - { - MainWindow.Instance.TbResultLog.Text = "--- Bei der Generierung sind folgende Fehler aufgetreten: ---\n\n"; - foreach (var e in errors) - MainWindow.Instance.TbResultLog.Text += e + "\n"; - } + var errors = ValidateCourses(GeneratedCourses); - foreach (var student in Settings.Instance.Students) - { - student.Result = new string[4]; - } + if (errors.Count == 0) + { + MainWindow.Instance.TbResultLog.Text = "--- Alle generierten Kursen erfüllen die gegebenen Voraussetzungen ---"; + } + else + { + MainWindow.Instance.TbResultLog.Text = "--- Bei der Generierung sind folgende Fehler aufgetreten: ---\n\n"; + foreach (var e in errors) + MainWindow.Instance.TbResultLog.Text += e + "\n"; + } - foreach (var course in GeneratedCourses) - { foreach (var student in Settings.Instance.Students) { - if (course.Instance.Students.Contains(student.ID)) + student.Result = new string[4]; + } + + foreach (var course in GeneratedCourses) + { + foreach (var student in Settings.Instance.Students) { - student.Result[course.Semester - 1] = course.Instance.Sport.Name; + if (course.Instance.Students.Contains(student.ID)) + { + student.Result[course.Semester - 1] = course.Instance.Sport.Name; + } } } } -} public static string GenerateStatistics() { GeneratedCourses.Sort((x,y) => x.Semester.CompareTo(y.Semester) ); diff --git a/structs.cs b/structs.cs index bc4f09d..66e573b 100644 --- a/structs.cs +++ b/structs.cs @@ -85,7 +85,7 @@ public class Settings public List Students { get; set; } = []; public List Sports { get; set; } = []; - public int NumCoursesPerSemester { get; set; } = 10; // Exact Amount of courses, not a maximum + public int[] NumCoursesPerSemester { get; set; } = [10,10,11,11]; // Exact Amount of courses, not a maximum public Settings() {