Joel Foo's Project Portfolio Page
Project: NUSCourseMates
NUSCourseMates is a desktop address book application used for keeping track of the courses your friends are taking. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.
Given below are my contributions to the project.
- New Feature: Incorporated the ability to modify the courses of a student in the address book into the
edit
function.- What it does: Allows the user to change the courses of a particular student in the address book.
- With
edit 1 c/add-MA1521
, you can add MA1521 to student 1 in the address book. - With
edit 1 c/del-MA1521
, assuming student 1 in the address book has MA1521 originally, you can remove MA1521 from student 1. - With
edit 1 c/MA1521-CS2030
, assuming student 1 in the address book has MA1521 originally, you can change student 1’s MA1521 to CS2030. This is a convenience method that combines the power of bothadd
anddelete
in one expression.
- With
- Justification: This feature improves the product significantly because a friend in the address book can decide to take different courses at any point in time and the app should provide a convenient way for the user to update them.
- Highlights:
- It is possible to chain any amount of each type of edit in a single command, providing unparalleled flexibility.
- For example, you can perform
edit 1 c/add-MA1521 c/del-CS2030 c/add-ST2334 c/CS2103T-MA2001
, and the changes will be performed in the listed order, from left to right.
- For example, you can perform
- Implemented course validation, so that you can only add or delete a valid course.
- It is possible to chain any amount of each type of edit in a single command, providing unparalleled flexibility.
- Effort:
- The effort required for expanding this feature is essentially equivalent to the work needed for creating three
entirely new commands -
addcourse
,deletecourse
andeditcourse
, but to make it more user-friendly and convenient for the end user, I decided to make them utilise the commonedit
interface using thec/add-
andc-del
sub-prefixes. The result of this innovation is unparalleled flexibility and ease of use for the end user. - The effort required to validate the courses was non-trivial as well, as there were many edge cases we had to consider, given we allowed the user to supply not just one, but a list of modifications that will be applied sequentially.
- The effort required for expanding this feature is essentially equivalent to the work needed for creating three
entirely new commands -
- What it does: Allows the user to change the courses of a particular student in the address book.
- New Feature: Added a
clear-courses
command that clears the courses of a specified student in the address book.- What it does: Allows the user to remove all courses of a particular student in the address book.
- Justification: This feature is extremely useful from a user perspective, as when a new semester begins, you would want to keep your friends, but want to remove all their courses. The alternative would be to manually remove courses for each student (by calling the
edit
function for each person in the address book), but that would be too cumbersome.
-
Code contributed: RepoSense link
- Project management:
- Set up the Github team org and repo
- Created and managed all the project milestones on Github
- Set up codecov for the repo and updated the project
README.md
- Managed releases
v1.3
andv1.3trial
- Documentation:
- User Guide:
- Developer Guide:
- Added implementation details of the
edit
feature (#125) as well as created the sequence and activity diagrams pertaining to theedit
feature
- Added implementation details of the
- Review / Mentoring Contributions:
- Helped resolve critical bugs that were outside the scope of my assigned features:
- Resolved a critical bug where if you update the address book data JSON file to have more than two emergency contacts, you can still get the address book up and running (#279)
- Resolved a critical bug where the address book does not accept a valid course as input to the
add
andedit
commands (#255) - Resolved a critical bug where you are not permitted to edit any fields of a person once the emergency tag limit has been reached (#107)
- Helped resolve critical bugs that were outside the scope of my assigned features:
- Community:
- Contributions beyond the project team: