Course:CPSC312-2017-Degree-Navigator

From UBC Wiki

Degree Navigator

Authors: Andrea Park, Ruxin Chen, Rhys Bower

What is the problem?

The problem is that there are so many rules about what courses need to be completed for a CPSC major degree at UBC. Our tool can tell students what they need to take in order to complete their degree.

We are going to use http://www.calendar.ubc.ca/vancouver/courses.cfm for course pre-requisites, http://www.calendar.ubc.ca/vancouver/index.cfm?tree=12,0,0,0 for required courses of the degree.

What is the something extra?

Our program will use the real data for courses and CPSC degree requirements from UBC.

What did we learn from doing this?

(This should be written after you have done the work.) What is the bottom-line? Is logic programming suitable for (part-of) the task? Make sure you include the evidence for your claims.

Bottom line: We found it difficult to design a general algorithm in logic programming which would allow all of the variations of degree requirements to be implemented.

Is logic programming suitable for (part-of) the task: Yes when it's simple, especially for the prerequisite checker it seems to work well. However, each degree has combined majors and minor programs; therefore, to successfully provide courses for a particular degree, it would require all possible combinations of programs with additional logic to account for the unique characteristics of each degree. This makes the program much more complex than a list of rules and a small solver program.

Our main program and degree requirements are getting bigger and bigger when we add more rules. Prolog does not seem to be flexible enough. It is hard to extend our program to account for more majors and degrees with the existing code. It almost seems like each major will require its own requirements, which we almost need to write from scratch. This makes Prolog quite unsuitable for a fully functional degree navigator for so many majors and degrees at UBC.

Handin

All source code for the project is on GitHub.