Overview
TutorPal is a desktop application used by private home tutors for managing student information. The useage is primarily through CLI. It is written in Java.
Summary of contributions
-
Major enhancement: enhanced FindCommand to make it support fuzzy matching
-
What it does: allows the user to find Person by name and supports fuzzy matching, which means even if the user has a small typo, it can still find Persons with similar names.
-
Justification: This feature enhancement makes this command more practical because sometimes users may type wrongly during searching. However, fuzzy matching allows small mistakes in typing and makes searching much easier.
-
Highlights: This search allows fuzzy matching (with Levenshtein Distance < 3) only when the length of the keyword is greater than 3. If the length of the keyword you type in is smaller or equal to 3, the keyword must be exactly the same to expected
-
-
Major enhancement: extended FindCommand to FindAddressCommand, FindEmailCommand, and FindPhoneCommand
-
What it does: allows the user to find Persons by address, email, and phone number and support fuzzy matching, which means even if the user has a small typo, it can still find Persons with similar address, email, or phone number.
-
Justification: These features largely improve the convenience for finding a specific Person or a list of Persons. For instance, a Person now can be found by his or her address, email or phone number, and multiple step of find command can be used to find a person by more than one kind of conditions.
-
Highlights: All these commands are case insensitive and support fuzzy matching (however, with some restrictions, which are specified in User Guide).
-
-
Minor enhancement:
-
Built tests case for Find related commands and UI.
-
-
Code contributed: [Functional code] [Test code] {give links to collated code files}
-
Other contributions:
-
Project management:
-
Set milestones for
v1.2 - v1.4
on GitHub -
Opened issues for
v1.2 - v1.4
on GitHub -
Set up milestone deadlines, close issues accordingly on GitHub
-
-
Enhancements to existing features:
-
Documentation:
-
Modified the format and changed some inaccurate expressions for the whole User Guide: #167
-
-
Community:
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Locating persons by name: find
Finds persons whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]…
Examples:
-
find John
Returnsjohn
andJohn Doe
-
find challotto
ReturnsCharlotte Oliveiro
-
find David Roy John
Returns any person having namesDavid
,Roy
, orJohn
Locating persons by address: find/a
Finds persons whose addresses contain all the given keywords.
Format: find/a KEYWORD [MORE_KEYWORDS]…
Examples:
-
find/a B311, Clementi Ave 2, #02-25
ReturnsJohn Doe
-
find/a B311, CLEMENTI Ave 2, #02-25
ReturnsJohn Doe
(case insensitive) -
find/a #02-25, Ave 2 Clementi, B311
ReturnsJohn Doe
(the order of the keywords does not matter) -
find/a serangoon
Returns person whose addresses containing the keywordSerangoon
, i.e.Bernice Yu
andDavid Li
-
find/a srangon
Returns persons whose addresses containing the keywordSerangoon
, i.e.Bernice Yu
andDavid Li
(fuzzy matching)
Locating persons by email address: find/e
Finds a person through his/her email address.
Format: find/e EMAIL [MORE_EMAILS]…
Examples:
-
find/e John@example.com
ReturnsJohn Doe
whose email address isJohn@example.com
-
find/e LIDavd@example.com
ReturnsDavid Li
whose email address islidavid@example.com
(case insensitive) -
find/e lidavd@exmple.com
ReturnsDavid Li
whose email address islidavid@example.com
(fuzzy matching)
Locating persons by phone number: find/p
Finds a person through his/her phone number.
Format: find/p PHONE_NUMBER [MORE_PHONE_NUMBER]…
Examples:
-
find/p 98765432
ReturnsJohn Doe
whose phone number is98765432
-
find/p 9876543
ReturnsJohn Doe
whose phone number is98765432
(fuzzy matching) -
find/p 98765433
ReturnsJohn Doe
whose phone number is98765432
(fuzzy matching)
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Find Related Feature
The find related features include four commands, which are FindCommand
, FindAddressCommand
, FindEmailCommand
, and FindPhoneCommand
. They support finding by name, address, email, and phone numbers.
Current Implementation
Find command (find KEYWORD [MORE_KEYWORDS]…
)
The find
command has been implemented to find students by their names.
-
The
find
command accepts one or more arguments, each argument represent a keyword. -
The
find
command finds persons whose names contain any of the given keywords. -
The number of students found will be displayed on the PersonCard GUI.
-
All the keywords are put into a List<String> and converted to a stream. Perform .anyMatch(…) on the keywords stream to find all the students whose names match any of the keywords.
-
The matching process is case insensitive and support fuzzy matching. Fuzzy matching is achieved by applying Levenshtein Distance method. The condition for using fuzzy matching in this command is the length of the keyword is greater than 3 and if the condition is satisfied, we set the Levenshtein Distance to be less than 3, which means at most two differences.
Find by address command (find/a KEYWORD [MORE_KEYWORDS]…
)
The find/a
command has been implemented to find students by their address.
-
The
find/a
command accepts one or more arguments, each argument represent a keyword. -
The
find/a
command finds persons whose addresses contain all the given keywords. -
The number of students found will be displayed on the PersonCard GUI.
-
All the keywords are put into a List<String> and converted to a stream. Perform .allMatch(…) on the keywords stream to find all the students whose addresses match all the keywords.
-
The matching process is case insensitive and support fuzzy matching. Fuzzy matching is achieved by applying Levenshtein Distance method. The condition for using fuzzy matching in this command is the length of the keyword is greater than 3 and if the condition is satisfied and the length of keyword is 4 to 7, we set the Levenshtein Distance to be less than 3; if the length of keyword is more than 8, we set the Levenshtein Distance to be less than 4.
Find by email command (find/e EMAIL [MORE_EMAILS]…
)
The find/e
command has been implemented to find students by their email.
-
The
find/e
command accepts one or more arguments, each argument represent an email address keyword. -
The
find/e
command finds persons whose emails are the same as any of the keywords. -
The number of students found will be displayed on the PersonCard GUI.
-
All the keywords are put into a List<String> and converted to a stream. Perform .anyMatch(…) on the keywords stream to find all the students whose emails match any of the keywords.
-
The matching process is case insensitive and support fuzzy matching. Fuzzy matching is achieved by applying Levenshtein Distance method. We set the Levenshtein Distance to be less than 4, which means at most three differences.
Find by phone number command (find/p PHONE_NUMBER [MORE_PHONE_NUMBERS]…
)
The find/p
command has been implemented to find students by their phone number.
-
The
find/p
command accepts one or more arguments, each argument represent a phone number keyword. -
The
find/p
command finds persons whose phone numbers are the same as any of the keywords. -
The number of students found will be displayed on the PersonCard GUI.
-
All the keywords are put into a List<String> and converted to a stream. Perform .anyMatch(…) on the keywords stream to find all the students whose phone numbers match any of the keywords.
-
The matching process is case insensitive and support fuzzy matching. Fuzzy matching is achieved by applying Levenshtein Distance method. We set the Levenshtein Distance to be less than 3, which means at most two differences.
Design considerations
Aspect: Fuzzy matching
-
Alternative 1 (current choice): Allow fuzzy matching in searching.
-
Pros:
-
Small typos will not affect the searching output.
-
Make the application much more practical and easier to use.
-
-
Cons:
-
Some minor mistakes in spelling might lead to totally different meanings. We have tried to prevent this from happening by limiting the minimum length of keywords for fuzzy matching, however, there might still be a few cases that exist problems.
-
-