# Schedule Maker In this project a framework was given for the schedule maker, with a filled main.cc with the menu of the schedule maker and empty to be filled-in functions in rooster\[.h\]|.cc. It was our task to program the schedule maker using the given framework. For this we made a class containing the availability of an "object". We also made classes for a course, a lecturer and a track (a "field of study", a track contains several courses, but courses can be in multiple tracks), which all have their own availability, thus they inherit from the availability class. This way we can keep track of all the availabilities and constraints of courses, lecturers and lecture halls. Using these classes we made the actual schedule maker in rooster\[.h\]|.cc. We made three options of schedule making: the first one makes a valid schedule if possible using backtracking, the second option tries to make an as short as possible schedule using backtracking and the last option also tries to make an as short as possible schedule, but using a greedy algorithm. This project was a school project made in a group and on a git of the University. I therefore copied the whole project to this (private) repository. The language of the program, comments and (most) variables are in Dutch, since the course of this project was also in Dutch. If anything is unclear feel free to contact me. ## Constraints There are some constraints for schedules that are taken into account when making schedules, but sometimes not met, for example when using the greedy algorithm. The constraints are the following: * A track has no more than 1 in-between hour * A track has 0 timeslots or at least 2 timeslots on a day * A track has no courses that overlap * A lecturer has no courses that overlap * A lecture hall is not used at the same time for multiple courses * A lecturer only lectures when available * All courses are filled in the schedule ## Testing There are 8 test files given for a schedule, which can be used to test the schedule maker. Such files consists of:\ \[_number of days_\] \[_hours per day_\] \[_number of lecture halls_\]\ \[_number of lecturers_\]\ \[_timeslots of a lecturer_\]\ \[_timeslot_\] \[_timeslot_\] \[_timeslot_\] etc... (more timeslots)\ \[_timeslots of a lecturer_\]\ \[_timeslot_\] \[_timeslot_\] \[_timeslot_\] etc... (more timeslots)\ etc.. (more lecturers)\ \[_number of courses_\]\ \[_name of a course_\]\ \[_lecturer of course_\] \[_number of tracks containing course_\]\ \[_track id_\] \[_track id_\] \[_track id_\] etc... (more track id's)\ \[_name of a course_\]\ \[_lecturer of course_\] \[_number of tracks containing course_\]\ \[_track id_\] \[_track id_\] \[_track id_\] etc... (more track id's)\ etc.. (more courses) Note that there is a warnings for an unused variables when compiling, this is not a mistake in our code, but rather an inconvenience of the use of a variable that is needed to call a recursive function, but later never used, in code written by my classmate. ## My contribution This project was made with a classmate, I therefore did not program all the code in this project. The following functions is my contribution: * functions in rooster\[.h\]|.cc: * verwijderOpzetRooster * integerInVector * addTrack * tracksTheoretischMogelijk * leesWaardesIn * leesIn * initialiseerRooster * vakBeschikbaarheid * vakVerbondenheid * beterVakInroosteren * beterVak * bepaalRoosterGretig * vak\[.h\]|.cc * Docent\[.h\]|.cc * functions in track\[.h\]|.cc: * trackBeschikbaarheid