User Guide
Welcome to Car@leads
Car@leads is a desktop app for a car salesperson to manage customer contacts (CLI).
Users can add new customer contacts which include details such as customer’s car brand and car type preferences
along with other personal information.
Users can filter through the customer data using specific filters, such as filtering out customers who prefer a
specific car brand and follow up with them for sales opportunities.
Car@leads is optimized for use via a Command Line Interface, while still having the benefits of a Graphical User
Interface (GUI).
If you can type fast, Car@leads can get your contact management tasks done faster than traditional GUI apps.
- Table of Contents
Quick start
- Ensure you have Java
11
or above installed in your Computer. - Double-click the file to start the app. The GUI similar to the below should appear in a few seconds.
Note how the app contains some sample data to provide a example of how app usage.
Remember to clear these sample data using the clear command before use.
-
Type the command in the command box and press Enter to execute it. e.g. typing
help
and pressing Enter will open the help window.
Some example commands you can try:-
- `add n/Bob Ang p/88765432 e/bobhnd@example.com a/John street, block 123, #01-01 b/1998 07 10
- c/BMW+Coupe|2030 01 01 c/Porsche+SUV|2030 01 01 cp/MercedesBenz+SUV`
- Adds a contact named
Bob Ang
-
find n/Bob Ang cp/BMW+Coupe
- Finds a contact named
Bob Ang
whose preferred car is a BMW Coupe.
-
delete John Doe
: Deletes ‘John Doe’ contact from contact list . -
list
: Lists all contacts. -
clear
: Deletes all contacts. -
exit
: Exits the app. -
help
: Opens the help window. -
email
: Opens the email interface.
-
- Refer to the Features below for details of each command.
Features
Notes about the command format:
-
Words in
UPPER_CASE
are the parameters to be supplied by the user.
e.g. inadd n/NAME
,NAME
is a parameter which can be used asadd n/John Doe
. -
Items in square brackets are optional.
e.gn/NAME [t/TAG]
can be used asn/John Doe t/friend
or asn/John Doe
. -
Items with
…
after them can be used multiple times including zero times.
e.g.[t/TAG]…
can be used ast/friend
,t/friend t/family
etc. -
Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER
,p/PHONE_NUMBER n/NAME
is also acceptable. -
If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specifyp/12341234 p/56785678
, onlyp/56785678
will be taken. -
Extraneous parameters for commands that do not take in parameters (such as
help
,list
,exit
andclear
) will be ignored.
e.g. if the command specifieshelp 123
, it will be interpreted ashelp
. -
COE_EXPIRY_DATE
input order: YYYY{space}MM{space}DD- Example:
2013 12 31
- This is the same input format as
DATE_OF_BIRTH
- Example:
-
|
joins car with COE expiry date -
+
joins car brand and car type
Command summary
Note : (pipe_char) means |
below.
Note : All commands add
find
etc, and command prefixes n/
p/
etc are case-sensitive.
Action | Format, Examples |
---|---|
add |
add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS b/DATE_OF_BIRTH [t/TAG] [c/CAR_BRAND_OWNED+CAR_TYPE_OWNED(pipe_char) COE_EXPIRY_DATE] [cp/CAR_BRAND_PREFERRED+CAR_TYPE_PREFERRED] e.g., add n/Bob Ang p/88765432 e/bobhnd@example.com a/John street, block 123, #01-01 b/1998 07 10 c/BMW+Coupe(pipe_char)2030 01 01 c/Porsche+SUV(pipe_char)2030 01 01 cp/MercedesBenz+SUV
|
find | find [e/bob /and p/98761234] /or b/1999 10 11 |
delete |
delete NAME e.g., delete John doe
|
list |
list Generates a default list of unfiltered contacts saved in the contact book. |
clear |
clear Clears the contact list, erasing all saved data. |
exit |
exit Exits the app. Ignores all texts type after ‘exit’ e.g. exit 12345. |
help |
help Opens the help window. Ignores all texts type after ‘help’ e.g. help 12345. |
email Opens the email interface. Ignores all texts type after ‘email’ e.g. email 12345. |
|
up |
/up{X} , meaning any command starting with /up . Eg: /up delete John Doe
|
Prefix | Format |
---|---|
n/ |
n/NAME only prefix is case-sensitive. |
p/ |
p/PHONE_NUMBER only prefix is case-sensitive. |
e/ |
e/EMAIL only prefix is case-sensitive. |
a/ |
a/ADDRESS only prefix is case-sensitive. |
b/ |
b/DATE_OF_BIRTH only prefix is case-sensitive. |
t/ |
t/TAG only prefix is case-sensitive. |
c/ |
c/CAR_BRAND_OWNED+CAR_TYPE_OWNED (pipe_char) COE_EXPIRY_DATE only prefix is case-sensitive. |
cp/ |
cp/CAR_BRAND_PREFERRED+CAR_TYPE_PREFERRED only prefix is case-sensitive. |
ex/ |
ex/COE_EXPIRY_DATE only prefix is case-sensitive. |
/and |
n/NAME /and a/ADDRESS only prefix is case-sensitive. |
/or |
n/NAME /or a/ADDRESS only prefix is case-sensitive. |
/not |
/not n/NAME only prefix is case-sensitive. |
+ |
CAR_BRAND_PREFERRED+CAR_TYPE_PREFERRED CAR_BRAND_OWNED+CAR_TYPE_OWNED Joins car brand and car type |
(pipe_char) |
c/CAR_BRAND_OWNED+CAR_TYPE_OWNED(pipe_char)COE_EXPIRY_DATE joins car with COE expiry date |
Adding a customer: add
Adds a customer to the contact list.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS b/DATE_OF_BIRTH [t/TAG]… [c/CAR_BRAND_OWNED+CAR_TYPE_OWNED|COE_EXPIRY_DATE] [cp/CAR_BRAND_PREFERRED+CAR_TYPE_PREFERRED]
Examples:
add n/John Wayne p/88765432 e/bobhnd@example.com a/John street, block 123, #01-01 b/1998 07 10
-
add n/Bob Ang p/88765432 e/bobhnd@example.com a/John street, block 123, #01-01 b/1998 07 10 t/friend c/BMW+Coupe|2030 01 01 c/Porsche+SUV|2030 01 01 cp/MercedesBenz+SUV
Finding a customer: find
Find customers from the contact list that matches specified filters.
Format: find [n/NAME] [op] [p/PHONE_NUMBER] [op] [e/EMAIL a/ADDRESS] [op] [c/OWNED_CARBRAND+OWNED_CARTYPE]
[op] [coe/COE_EXPIRY_DATE] [op] [t/TAGs] [op]
[op] [cp/PREFERRED_CARBRAND+PREFERRED_CARTYPE] [op] [b/DATE_OF_BIRTH]
Note
Here [op]
means /and
, /or
, /not
as explained below. Note that two filter parameters MUST be separated by an
operator denoted by [op]
.
Example :
-
find n/John /and e/weird@example.com
is valid, but -
find n/John e/weird@example.com
is not valid, asn/John
ande/weird@example.com
does not have an operator in between.
Important : All arguments are optional. In particular:
-
for
c/OWNED_CARBRAND+OWNED_CARTYPE
, user can either give brand or type information, or both using the+
sign to separate. phrases with spaces for specific car models are allowed e.g.find c/honda civic
The car brand and types are case-insensitive. Note: You will notice that if you set a more specific filter with car type, a list of customers that has more general details that has the same brand but with different car type will be displayed.find c/Ferrari 458+Weak
. This is intended as car sales person would see these customers as potential customers. - for
p/PHONE
any phone number starting with the given parameter string will be returned.- a person with phone number
123456789
will be matched with123
. Note: Filter requires a match from the start of customers number, or else this customer will be filtered out. e.g. customer with phone number123456789
will not be included with234
.
- a person with phone number
-
for
cp/PREFERRED_CARBRAND+PREFERRED_CARTYPE
user can either give brand or type information, or both using the+
sign to separate. Note: Similar toc/
command, if car type is given, customers with other car type preferences are included as intended. The car brand and types are case-insensitive. -
for
n/NAME
giving a partial name is also okay - all names which have the given parameter as a subsequence (Note thatAlx
is a subsequence ofAlex
) will be matched. Note that this is the only field for which we match a subsequence instead of a simple substring. Note thatfind n/Alex Yeoh
is treated the same asfind n/Alex /AND n/Yeoh
. Name is case-insensitive.find n/Alex
is same asfind n/alex
. - for
e/EMAIL
, all email containing the given parameter consecutively will be valid. Emails are case-insensitive.- eg
find e/gmail
will return profiles with the following emails:abcd@gmail.com
-
bbabc@gmail.com
- eg
find e/d@gmail
will return profiles with the following email:-
abcd@gmail.com
But does not return profile with following email: -
bbabc@gmail.com
-
- eg
-
for
ex/COE_EXPIRY_DATE
, usingex/exp
will search for all customers with an expired COE on any of the cars they own. it is a special case alias for the searchex/0
, whereex/NON_NEGATIVE_NUMBER
will search for any customers with at least one car that will expire inNON_NEGATIVE_NUMBER
years or less. - for
a/ADDRESS
partial addresses are also acceptable. However, the exact filter parameter must be contained in the Address field of the customer, there is no typo-tolerance.- Eg: If the customer’s address is
Tembusu college
,all of the following matchTembusu college
Tembusu
Temb
-
embus
- Eg: If the customer’s address is
-
for
b/DATE_OF_BIRTH
partial dates also work. Note thatfind b/1999
is a more generic search thanfind b/1999 02
and hence will return more items. Note: As for now, there is no restriction to the parameters forfind b/
, the intended feature for this is to allow for quick filtering of birth year or birth month. - for
t/TAGS
all customers satisfying any tag will be returned. In particular,find t/TAG_A TAG_B TAG_C
is a more generic query thanfind t/TAG_A
- Here, satisfying means checking if the tag starts with the parameter string.
COMBINING FIND PARAMETERS
We can use /and
, /or
, /not
to combine the above filters. Let A
and B
be two filter statements like n/Jo
or e/ggmail@gmail.com
Then
-
A /and B
: Only if the customer passes both the filterA
andB
-
A /or B
: Only if the customer either of the filterA
orB
-
/not A
: Only if the customer doesn’t pass the filterA
We can combine in the following way :
find a/orchard /and n/John /and /not t/CRIMINAL
find a/orchard /and n/John /and [ t/RICH /or /not t/CRIMINAL ]
Make sure the bracket sequence is consistent. Moreover, only [
]
is supported for this - other types of brackets are
considered as part of the text.
Note that for find A /and B /or C /or D /and E
, the implicit bracketing considered
is find A /and [B /or [C /or [D /and E]]]
Further, the bracketing order is not dependent on /and
or /or
– we treat them as the same.
Deleting a customer : delete
Deletes the specified customer from the contact list.
Format: delete name
- Deletes the customer with the specified
name
. - The name refers to the customer name shown in the displayed customer contact list.
- The name must be valid does not contain special characters …
Listing all customers : list
Shows a list of all customers in the system
Format: list
Clear all customers : clear
-
clear
: Deletes all customers in the system.
Repeat last Command : /up
-
/up{X}
: Loads in the previous command.{X}
can be any string of characters, usually the previous command. - Examples:
/updelete John Doe
/up/up
/upfind n/K
-
/upfghsdgdsfg
- All of the above examples have the same effect.
- Importantly note that
/up
and/up/up
are the same, we do not go back twice.
Aggregating /up
Commands
- We can go more than one level up in the command history. For example :
find n/John
find n/JJ
find e/John
-
find e/JJ
-
/up
- Here we will get
find e/JJ
- Now type
/up
again. [Note that you can just move to the beginning and type/up
the rest of the portion doesn’t matter! Hence, you can save keystrokes since you do not have to delete] - Now you will get
find e/John
appear. - you can type
/up
again and again to go up in the history. Note: You do not need to delete the displayed text, as all texts after the /up will be ignored.
- Now type
- Here we will get
Note that as soon as you enter a different string (either a valid or invalid command), the counter is reset and
entering /up
will again start from the latest command.
eg: The command Box is as follows
- find e/Apple
- find e/AppleChain
- /up
- /up
Result:
find e/Apple
Exiting app: exit
-
exit
: Exits the app safely.
Quick help: help
-
help
: Overview of commands and input syntax.
Email Contact person: email
-
email
: Opens a simplified mailbox interface as shown below, enabling user to send email through Simple Mail Transfer Protocol(SMTP). Please ensure that you enable google to allow for less secure access - this is the term by google, which means an action to disable 2-step verification for logging in. You may use the following dummy email provided for testing: username: cs2103emailtest@gmail.com
password: emailtest1
Note: This feature only allows for out going SMTP server access, the application do not have access to your incoming mails as it is on a different server.
If you face any difficulty enabling access, please follow through below guide, or check out the help window for steps in setting up.
- Go to google security(URL: https://myaccount.google.com/security)
- Scroll down or use the search function and type in ‘Less secure app access’ without quotation marks.
- Turn on the feature and this grants application access to only the Mail sending server. This feature disables the feature for 2-Step Authentication.
After set up: You will be required to fill in the respective fields, please note that current version does not support multiple authentication attempts, hence you will be required to restart the application if your email or password details are filled incorrectly.
Successful Login
You will receive a confirmation message ‘Message Sent’ when email is successfully sent out. Please note that in this we
have blocked multiple log in and authentication, the email and password box will be disabled after successful
authentication. If you have been successfully authenticated, a green text will be shown in the bottom left corner of the
interface ‘You are logged in’. You may continue to send email to other receiver addresses without having to re-enter the
password.
Please note that if you input a non-existing receiver email, message will still mark as sent. You will however receive a sending fail message at your gmail inbox, but since this application does not have access to this information, we are unable to check validity of email.
Please note that this version does not support identification of invalid domain name, but only absence of domain. Hence your email will still be mark as sent. However you will be receiving a failed message in your email inbox.
Failed Login
If you have failed the authentication, either due to mismatching email and password, you will be required to restart the application, as support for multiple logins are blocked. The password you entered will be cleared, together with the email and password fields removed. You will see a red text appearing at the bottom left of the interface ‘Please restart the program’.