schedule_maker
README.md

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