Inspiration
We were inspired to build this project because we have seen so many people on campus with multiple different majors. For each major there is a specific set of requirements you have to fulfill and it could be hard to keep track of all of that. That is why we created this application, to help students generate possible course plans that fulfill their degree requirements as well as check their current course plans to see if they satisfy the requirements.
What it does
What it does it that users can input courses they have already taken into a semester text box and on the right side of the screen they can see what degree requirements they have fulfilled for the majors of Economics, Computer Science, and Applied Math. Additionally, there is another button on the screen that generates a possible future course schedule given the courses they have already manually put in that would satisfy their major (Economics, Computer Science, and Applied Math).
How we built it
We build it first by web scraping CaB (Courses at Brown) which is the website that contains all the courses from that given semester. Then we looked at the degree requirements for Computer Science, Economics, and Applied Math and wrote them as a JSON file with fields. These fields contain information such as a function to use which we created a recursive parsing method to parse. Then we see if the person satisfied all the degree requirements which we see if the recursive parsing method returns true for the base case (PICK one course out of these x courses).
Challenges we ran into
We ran into a challenge when trying to figure out how to display degree requirements. There are many different paths someone can take to get to fulfill their requirements and those requirements change based on previous classes they have taken. For example, in Computer Science there is an advanced introductory sequence and a normal introductory sequence. In the advanced introductory sequence, there is a class called CS-19 which if someone takes they need to take another upper level elective course. However, if someone takes CS-15, CS-17, or CS-11, they will have to take CS-200. For this specific edge case, we made a field in each of the requirements on the JSON file called function where the function can be AND, OR, or PICK. When we parse the JSON requirements, we parse in the AND case we make sure that when we continue to traverse down the JSON file and fulfill both requirements in the values field in the JSON. We did the same for the OR case but instead of both requirements they only have to fulfill one. In the base case, PICK, we PICK a course out of the course options in the courses field. In the values field in the base case, if the number of courses we need. Therefore, with all these functions, we can return true or false and have any number of requirements we can take into account as long as we organize the JSON file correctly.
Accomplishments that we're proud of
We are proud that we figured out the logic for the functions AND, OR, and PICK as well as the recursive parsing method we used to parse our JSON.
What we learned
We learned how to do web scraping as well as how important it is to plan out the project before coding. At first we sort of rushed into writing the JSON file for the course requirements and tried to hard code some of the parsing. However, we realized it would not work if we wanted to add more majors so we generalized the parsing method to make it very easy to add new majors as well as modify the requirements.
What's next for Course Explorer
Expand major offerings and include additional fields into calculating courses such as pre-requisites and hours spent. Additionally, we could include a whitelist and blacklist of courses which users could manually input courses they are interested in taking or definitely do not want to take.
Built With
- chakraui
- javascript
- next.js
- python
- react
- selenium
- typescript
Log in or sign up for Devpost to join the conversation.