Exemple #1
0
        private static void ReadData()
        {
            XmlTextReader reader = new XmlTextReader("timetableData.xml");

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    switch (reader.Name)
                    {
                    case "semester":
                        Semester semester = new Semester();
                        _allSemesters.Add(semester);
                        if (reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "name")
                                {
                                    semester.Name = reader.Value;
                                }
                                Timetable timetable = new Timetable();
                                _allTimetables.Add(timetable);
                                timetable.Name = reader.Value;
                                for (int i = 0; i < 50; i++)
                                {
                                    timetable.Table.Add("Block " + i + "\nFREI\n");
                                }

                                if (reader.Name == "students")
                                {
                                    semester.Students = Int32.Parse(reader.Value);
                                }
                                if (reader.Name.Contains("subject"))
                                {
                                    Subject semestersubject = _allSubjects.Find(s => s.Name == reader.Value);
                                    semester.Subjects.Add(semestersubject);
                                }
                            }
                        }
                        break;

                    case "lecturer":
                        Lecturer lecturer = new Lecturer();
                        _allLecturers.Add(lecturer);
                        if (reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "name")
                                {
                                    lecturer.Name = reader.Value;
                                }
                                Timetable timetable = new Timetable();
                                _allTimetables.Add(timetable);
                                timetable.Name = reader.Value;
                                for (int i = 0; i < 50; i++)
                                {
                                    timetable.Table.Add("Block " + i + "\nFREI\n");
                                }
                                if (reader.Name.Contains("subject"))
                                {
                                    Subject lecturersubject = _allSubjects.Find(s => s.Name == reader.Value);
                                    lecturer.Subjects.Add(lecturersubject);
                                }
                                if (reader.Name == "presence")
                                {
                                    string[] words = reader.Value.Split(',');
                                    foreach (string word in words)
                                    {
                                        lecturer.Availability[System.Convert.ToInt32(word)] = "free";
                                    }
                                }
                            }
                        }
                        break;

                    case "classroom":
                        Classroom classroom = new Classroom();
                        _allClassrooms.Add(classroom);
                        if (reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "name")
                                {
                                    classroom.Name = reader.Value;
                                }
                                Timetable timetable = new Timetable();
                                _allTimetables.Add(timetable);
                                timetable.Name = reader.Value;
                                for (int i = 0; i < 50; i++)
                                {
                                    timetable.Table.Add("Block " + i + "\nFREI\n");
                                }
                                if (reader.Name == "seats")
                                {
                                    classroom.Seats = Int32.Parse(reader.Value);
                                }
                                if (reader.Name == "building")
                                {
                                    classroom.Building = reader.Value;
                                }
                                if (reader.Name.Contains("equipment"))
                                {
                                    classroom.Equipment.Add(reader.Value);
                                }
                            }
                        }
                        break;

                    case "subject":
                        Subject subject = new Subject();
                        _allSubjects.Add(subject);
                        if (reader.HasAttributes)
                        {
                            while (reader.MoveToNextAttribute())
                            {
                                if (reader.Name == "name")
                                {
                                    subject.Name = reader.Value;
                                }
                                if (reader.Name == "description")
                                {
                                    subject.Description = reader.Value;
                                }
                                if (reader.Name.Contains("requirement"))
                                {
                                    subject.Requirements.Add(reader.Value);
                                }
                            }
                        }
                        break;
                    }
                }
            }
            reader.Close();
            Console.WriteLine("Daten erfolgreich eingelesen");
        }
Exemple #2
0
        private static void CreateTimetable()
        {
            int lengthLecturer = _allLecturers.Count();
            int lenghtSemester = _allSemesters.Count();
            int lenghtBlocks   = 50;

            for (int b = 0; b < lenghtBlocks; b++)
            {
                for (int a = 0; a < lengthLecturer; a++)
                {
                    Lecturer selectedLecturer = _allLecturers[a];
                    for (int c = 0; c < lenghtSemester; c++)
                    {
                        Semester selectedSemester = _allSemesters[c];
                        if (selectedSemester.Availability[b] != "reserved")
                        {
                            foreach (Subject selectedSubject in selectedLecturer.Subjects)
                            {
                                if (selectedLecturer.Availability[b] == "free")
                                {
                                    if (selectedSemester.Subjects.Exists(s => s.Name == selectedSubject.Name))
                                    {
                                        List <Classroom> matchingRooms = new List <Classroom>();
                                        foreach (Classroom room in _allClassrooms)
                                        {
                                            if (room.Availability[b] != "reserved" && room.Seats >= selectedSemester.Students)
                                            {
                                                foreach (string require in selectedSubject.Requirements)
                                                {
                                                    if (room.Equipment.Contains(require))
                                                    {
                                                        matchingRooms.Add(room);
                                                    }
                                                }
                                            }
                                        }
                                        bool isEmpty = !matchingRooms.Any();
                                        if (isEmpty == false)
                                        {
                                            Classroom smallestRoom = matchingRooms[0];
                                            foreach (Classroom matching in matchingRooms)
                                            {
                                                if (matching.Seats < smallestRoom.Seats)
                                                {
                                                    smallestRoom = matching;
                                                }
                                            }
                                            smallestRoom.Availability[b] = "reserved";
                                            selectedSemester.Subjects.Remove(selectedSubject);
                                            selectedSemester.Availability[b] = "reserved";
                                            selectedLecturer.Availability[b] = "reserved";
                                            SaveInTimetable(b, selectedSemester, selectedSubject, smallestRoom, selectedLecturer);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            Console.WriteLine("Stundenplan wurde erstellt.");
        }
Exemple #3
0
        private static void SaveInTimetable(int b, Semester selectedSemester, Subject selectedSubject, Classroom smallestRoom, Lecturer selectedLecturer)
        {
            Timetable currentTimetable;

            currentTimetable = _allTimetables.Find(t => t.Name == selectedSemester.Name);
            string stringBuilder;

            stringBuilder             = selectedSubject.Name + " (" + b + ")\n" + smallestRoom.Building + "." + smallestRoom.Name + "\n" + selectedLecturer.Name;
            currentTimetable.Table[b] = stringBuilder;
            currentTimetable          = _allTimetables.Find(t => t.Name == selectedLecturer.Name);
            stringBuilder             = selectedSubject.Name + "\n" + smallestRoom.Building + "." + smallestRoom.Name;
            currentTimetable.Table[b] = stringBuilder;
            currentTimetable          = _allTimetables.Find(t => t.Name == smallestRoom.Name);
            stringBuilder             = selectedSubject.Name + "\n" + selectedLecturer.Name + "\n" + selectedSemester.Name;
            currentTimetable.Table[b] = stringBuilder;
        }