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);
        }
示例#2
0
        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;
 }