public TimetableData(Block[] blocks, Course[] courses, Lecturer[] lecturers, Room[] rooms, Group[] groups) : base() { this.Blocks = blocks; this.Courses = courses; this.Lecturers = lecturers; this.Rooms = rooms; this.Groups = groups; Array.Sort(courses, SortCoursesByLength); }
public Course(string id, string name, Lecturer[] lecturers, Room roomPreference, Group group, bool needsLab, bool isDummy, /*int repeatsPerWeek,*/ int numberOfBlocks) { this.Id = id; this.Name = name; this.Lecturers = lecturers; this.RoomPreference = roomPreference; this.NeedsLab = needsLab; this.IsDummy = isDummy; this.NumberOfBlocks = numberOfBlocks; this.Group = group; Index = globalIndex; globalIndex++; }
private static void AppendLecturers(Lecturer[] lecturers, StringBuilder output) { output.Append("<lecturers>"); foreach (Lecturer l in lecturers) { output.Append("<lecturer"); output.Append(" lId=\"" + l.Id + "\""); output.Append(" lastName=\"" + l.LastName + "\""); if (l.FirstName != null && l.FirstName.Length > 0) output.Append(" firstName=\"" + l.FirstName + "\""); if (l.NeededNumberOfResearchDays > 0) output.Append(" numberOfResearchDays=\"" + l.NeededNumberOfResearchDays + "\""); if (l.IsDummy) output.Append(" isDummy=\"" + l.IsDummy + "\""); output.Append(">"); foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek))) { if ((int)day > 0 && (int)day < 6 && !l.AvailableResearchDays.Contains((int)day - 1)) output.Append("<researchException day=\"" + day.ToString() + "\"/>"); } output.Append("</lecturer>"); } output.Append("</lecturers>"); }
private static Lecturer GetLecturerWithID(string id, Lecturer[] lecturers) { foreach (Lecturer l in lecturers) { if (l.Id.Equals(id)) return l; } return null; }
private static Course[] ParseCources(XPathNavigator navigator, Lecturer[] lecturers, Room[] rooms, Group[] groups) { XPathNodeIterator nodeIterator = navigator.Select("timetableData/courses/course"); List<Course> courses = new List<Course>(); foreach (XPathNavigator node in nodeIterator) { string cId = node.GetAttribute("cId", ""); string name = node.GetAttribute("name", ""); bool needsLab = ParseBoolFromString(node.GetAttribute("needsLab", ""), false); bool isDummy = ParseBoolFromString(node.GetAttribute("isDummy", ""), false); int numberOfBlocks = ParseIntFromString(node.GetAttribute("numberOfBlocks", ""), 1); int repeatsPerWeek = ParseIntFromString(node.GetAttribute("repeatsPerWeek", ""), 1); List<Lecturer> lecturerList = new List<Lecturer>(); Lecturer l0 = GetLecturerWithID(node.GetAttribute("lId0", ""), lecturers); Lecturer l1 = GetLecturerWithID(node.GetAttribute("lId1", ""), lecturers); lecturerList.Add(l0); if (l1 != null) lecturerList.Add(l1); string roomPreference = node.GetAttribute("roomPreference", ""); Room preference = null; foreach (Room room in rooms) { if (room.Name.Equals(roomPreference)) { preference = room; break; } } string gId = node.GetAttribute("gId", ""); Group group = null; foreach (Group g in groups) { if (g.Id.Equals(gId)) { group = g; break; } } for (int repetition = 0; repetition < repeatsPerWeek; repetition++) { courses.Add(new Course(cId, name, lecturerList.ToArray(), preference, group, needsLab, isDummy, numberOfBlocks)); } } return courses.ToArray(); }
private static int GetExpectedCourseCountForLecturer(Lecturer lecturer, TimetableData ttData) { int count = 0; foreach (Course c in ttData.Courses) { for (int lIndex = 0; lIndex < c.Lecturers.Length; lIndex++) { if (c.Lecturers[lIndex].Index == lecturer.Index) count += c.NumberOfBlocks; } } return count; }