This is a group project done as part of CS5500 (Software Engineering) during Spring 2014 at the University of Missouri Saint Louis (UMSL)
Our group consisted of: Ryan Chrisco, Peter Zylka, Shahrouz Yousefi, Tjaart van der Walt
The mandate was to write a system that can help you schedule your graduate studies.
Currently the system is deployed here: http://comp.umsl.edu/~Group1/graduate-advisor/ but we have no guarantee on how long it will remain available at this location.
At the end of the semester we decided to open source the code, and publish it under the MIT license.
The system was not really built with reusability in mind. You will have to align your data strictly with our schema to make the system work for you. If you want to use the system and have specific requirements not covered by the current system, send a message (or better yet a pull request) and I will see what I can do for you.
There are 3 different source XML files:
A list of all courses.
http://comp.umsl.edu/~xml_data/Courses.xml
http://comp.umsl.edu/~xml_data/Courses.xsd
A list of what courses gets presented in what semester over the medium to long term.
http://comp.umsl.edu/~xml_data/Rotation.xml
http://comp.umsl.edu/~xml_data/Rotation.xsd
A detailed list of the courses for the next semester.
http://comp.umsl.edu/~xml_data/Schedule.xml
http://comp.umsl.edu/~xml_data/Schedule.xsd
Apart from these input files, we have a JSON rules file:
In this file you can specify certain rules
Rule | Description |
---|---|
core | a list of courses that are always required |
total | total number of courses in the degree |
restrictions | undergraduate courses that has to be taken if a student is permitted on restricted status |
We alo have more specific rules like how many courses must be taken at each level, but these could be omitted.
The JSON can be found here http://comp.umsl.edu/~Group1/graduate-advisor/json/rules.json
Our approach is to map out the schedule for your entire degree using the available data. You simply have to input
- some configuration details
- courses you have waivers for
- courses you have completed
- courses you would like to take
You do not need to specify all courses you want to take, the system will fill any unselected courses so that the degree requirements will be fulfilled.
The backend normally returns almost instantaneously, for difficult cases however it can take some time to complete. On our test systems it normally returned within a minute. If it cannot find a valid schedule it will display an error message to that effect.
During our testing, we often found found our configuration to be the thing that tripped us up. If you can’t get a solution try relaxing some restrictions.
If you don’t understand the user interface we have a context sensitive help page that explain the usage for the currently selected tab. Simply click on the button marked with a ? in the top corner.
- The default browser in the computer lab is Firefox.
- We wanted to use some advanced HTML5 functionality.
- We had limited resources and time.
- Internet Explorer has become irrelevant.
Browser | Versions | Status |
---|---|---|
Firefox | 27, 29 | fully tested and supported |
Chrome | 34 | supported (not comprehesively tested) |
Internet Explorer | all | UNSUPPORTED |
We have implemented almost everything in Javascript. The only exception is that the XML data files are parsed with a 5-line php script and embedded as JSON directly into the html page. The advantage of this approach is that we can provide a cached version of the XML data should the original XML page be down for any reason. If we rewrote this code in javascript we would have a completely client side solution, requiring only that the XML data files be available in some predefined location.
We use the following Javascript frameworks
- JQuery
- Bootstrap
- Trip.js
Our backend implements a depth first search algorithm with backtracking.
- If you Select a 6000 level course and you add other courses after that the “bucket fill lines” grow thicker.
- If you select a 6000 without its prerequisite, run the scheduler, and go back to the selected tab the 6000 level course will be be highlighted as if it was scheduled with a prerequisite.
- After loading data from the JSON file, not all configuration options are correctly displayed.
- Edit your schedule after it has been created by the application, and then recreate with the new criteria. Possible options will be to: Anchor a course in its current position, move a course to another semester, or remove a course from the schedule.