PlanPal is a desktop application designed for international students studying in NUS. It functions as an all-in-one organizational tool, enabling users to manage contacts, track expenses, and schedule activities. The user interacts with the application using a CLI and is written in Java 17.
The purpose of this guide is to show you how to get started on using this PlanPal and to introduce you to the basics of using it. This includes getting to know the feature and syntax of the commands.
NUS International students who are frugal and organized. It caters to the needs of these NUS international students, allowing them to keep track of important contacts, activities, as well as manage their spending while in a foreign country.
PlanPal
from here.
Find the latest release and download PlanPal.jar
. Place the file in a folder of your choice.PlanPal.jar
is downloaded.java -jar PlanPal.jar
to launch PlanPal
On start up, you should see the following screen:bye
command to terminate the application. This will ensure that your data is stored correctly and is available for future access.Due to the nature of PlanPal as CLI-based application, please take care to avoid malformed commands to avoid undesirable performance of PlanPal. Some examples are shown below
Warning: PlanPal allows for phone numbers of any length to be entered
For example:
Example of how your phone number should look like. Since phone numbers outside of Singapore may not have the standard 8-digits, any length of phone number will be allowed, and it is up to the user to ensure the phone number is entered correctly.
Warning: Inputs in PlanPal should not contain any :
or /
. Due to the fact they are used in determining the category, using :
or /
in your inputs may lead to unsatisfactory results when using PlanPal.
For example:
Example of invalid inputs. Since /
and :
is used in determining category, it detects that there is a second category within the name with a missing /
. If there is a need to use a separator, please use any symbol other than /
and :
.
This section will focus on some of the key features of PlanPal and explain their usage. We will go over several features, including the Contact, Expenses and Activity Manager functionalities.
Within PlanPal, there exists 3 modes, namely Contact Manager, Expense Manager, and Activity Manager.
mode
you want to use, enter a number ranging from 1 to 3. In this example, to use Contacts
, enter 1 into the CLI.mode
will be expanded on below.exit
command.PlanPal will assist you in tracking the Contacts
in your planner. The guide below will show you how to make use of the contact manager commands.
The add
command allows users to add a Contact
with one or more of these categories: name
, phone
, email
, and category
.
add /name: <value 1> /phone: <value 2> /email: <value 3>
Remarks :
Category can only be edited using the category
command.
There are no other tags other than name
, phone
, email
and category
in Contact Manager.
Email format : must consist of four parts
character : [a-zA-Z0-9_]
i.e. letters (uppercase and lowercase), digits (0-9), and underscores (_).
1) username : begins with at least one word character, followed by more word characters or .
or -
or nothing (directly to part 2).
However, a .
or -
must follow by a word character. That is, the input string cannot begin with .
or -
; and cannot contain ..
, --
, .-
or -.
. Example of valid string are a.1-2-3
.
2) @
.
3) email domain name : same rule as username (part 1).
4) matches a .
followed by two or three word characters, e.g., .com
, .edu
, .us
, .uk
, .co
.
add /name: johnny /phone:12345678 /email:johnny@gmail.com
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [Name = johnny, Phone = 12345678, Email = johnny@gmail.com, Categories = []]
_________________________________________________________
add /name: johnny
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [Name = johnny, Phone = null, Email = null, Categories = []]
_________________________________________________________
The list
command allows users to view all their current Contacts
.
list
_________________________________________________________
Below is the list:
1. [Name = johnny, Phone = 12345678, Email = johnny@gmail.com, Categories = []]
_________________________________________________________
Format:
_________________________________________________________
Below is the list:
1. [Name = <name>, Phone = <phone>, Email = <email>, Categories = [<category1>, ...]]
_________________________________________________________
The delete
command allows users to delete an existing Contact
in the contact list.
delete <index>
The user wants to delete an existing Contact
that has an index of ‘2’ in the contact list.
delete 2
_________________________________________________________
Deleted successfully!
_________________________________________________________
Currently in list:
1. [Name = johnny, Phone = 12345678, Email = johnny@gmail.com, Categories = []]
_________________________________________________________
The edit
command allows users to edit a Contact
from the list.
edit <index> /<category 1>: <value 1> /<category 2>: <value 2>...
edit 1 /name: Cassie
_________________________________________________________
Edited successfully!
_________________________________________________________
Currently in list:
1. [Name = Cassie, Phone = 12345678, Email = johnny@gmail.com, Categories = []]
_________________________________________________________
The find
command allows users to find Contacts
from the list. User can search of multiple words at a time and the
input is not case-sensitive.
find <value>
find alice david
_________________________________________________________
Here is what I found:
1. [Name = David, Phone = null, Email = null, Categories = []]
2. [Name = Alice, Phone = null, Email = null, Categories = []]
_________________________________________________________
The category
command allows users to enter setting category mode to customize category
in contacts.
Stored category data will be loaded automatically once enter contact mode. Once there is categories data corruption, error and subsequent adding, editing statements will be shown. After that, categories.txt will restore data from the backup file (with no error) automatically to prevent error in the next loading of the program.
category
_________________________________________________________
Current Mode: setting category mode
_________________________________________________________
_________________________________________________________
invalid command
_________________________________________________________
The add <category>
command allows users to add category
that can be assigned to contact for efficient contacts searching by category.
Remark : This command only works in setting category mode.
add
outside setting category mode can perform a completely different function
Example 1 (successfully added):
add friend
Expected output:
_________________________________________________________
successfully added Category : 'friend'
_________________________________________________________
Example 2 (“/” is included):
add /friend
Expected output:
_________________________________________________________
/ is not allowed to be used in category name
_________________________________________________________
Example 3 (empty description):
add
Expected output:
_________________________________________________________
Description cannot be empty!
_________________________________________________________
Example 3 (category already exists):
add
Expected output:
_________________________________________________________
Category already exists
_________________________________________________________
The remove <category>
command allows users to remove category.
This command will automatically remove the original assignment of this category to all contacts
Remark : This command only works in setting category mode.
Example:
remove friend
Expected output if friend is not a category:
_________________________________________________________
friend is not a category
_________________________________________________________
Expected output if friend is a category:
_________________________________________________________
successfully deleted Category : 'friend'
_________________________________________________________
The edit <contact index> <category1/category2/...>
command allows users to assign
a category to contact and to delete the category assigned to contact.
Note:
Format
edit <contact index> <category1/category2/...>
Example 1:
edit 1 friend
Expected output for successfully edit:
_________________________________________________________
successfully assigned categories to Contact id : 1
_________________________________________________________
Expected output if friend is not a category:
_________________________________________________________
friend is not a valid category
_________________________________________________________
Note: If there is no category included in the command, the contact will be assigned with no category, i.e. remove all categories assigned to the contact. (See Example 2 below)
Example 2:
edit 1
or
edit 1 /
Expected output if contact id is valid:
_________________________________________________________
successfully assigned categories to Contact id : 1
_________________________________________________________
Example 3 (contact id is invalid):
edit 0 friend
Expected output:
_________________________________________________________
Invalid contact id
_________________________________________________________
Example 4 (contact id is empty):
edit
Expected output:
_________________________________________________________
Description cannot be empty!
_________________________________________________________
The view
command allows users to view all categories that are existing
and can be assigned to contacts.
Example:
view
Expected output:
_________________________________________________________
Below is the list:
1. friend
_________________________________________________________
The list
command allows users to view all their current Contacts
.
Usage:
list
Expected Output:
_________________________________________________________
Below is the list:
1. [Name = johnny, Phone = 12345678, Email = johnny@gmail.com, Categories = []]
_________________________________________________________
Format:
_________________________________________________________
Below is the list:
1. [Name = <name>, Phone = <phone>, Email = <email>, Categories = [<category1>...]]
_________________________________________________________
This command will provide guide to functions in setting category mode.
Usage:
help
Expected Output:
—
This command allows users to exit the setting category mode.
exit
Expected Output:
_________________________________________________________
exit category
_________________________________________________________
The search
command allows users to search Contacts
belonging to user-defined category
.
search <query>
search friend
Category not found.
_________________________________________________________
Contacts in category: friend
There is no contact in friend
_________________________________________________________
Contacts in category: friend
[Name = andy Phone = null Email = null]
_________________________________________________________
PlanPal will assist you in tracking your Expenses
in your planner. The guide below will show you how to make use of the expense manager commands.
This section provides a quick tutorial on how to use expense manager.
As a start, ALWAYS follow this sequence to prevent errors:
budget
command. PlanPal will still allow you to add expenses even when no budget is set / budget is negative. This is intentional since you can be in a deficit in real life.add
command.list
command.exit
command.IMPORTANT NOTE
There are 2 additional tags you need to take note of.
By default, the program assumes that you are working the current month and also NOT on the recurring list.
Adding these tags to any of your commands in this mode does the following:
/recurring
:
/month:
:
/month: <monthValue>
The budget
command allows users to add a budget.
By default, without the month being specified, it will assume that the month is the current month.
IMPORTANT NOTE
/recurring
tag for this function./month:
tags!budget <value>
budget <value> <month>
budget <month> </> <value>
budget 1000
budget 1000 /month: 2024-11
budget /month:2024-11 /1000
_________________________________________________________
For the month of 2024-11
Budget has been set to: $1000.0
_________________________________________________________
The add
command allows users to add an expense to the expense list.
By default, without any tags the following is assumed:
Currently, the fields that can be used are as follows:
Field | Constraints |
---|---|
name | Name is set to null by default |
cost | Cost is set to $0 by default |
type | Type is set to OTHER by default Only these values are allowed: - FOOD - TRANSPORTATION - ENTERTAINMENT - OTHER |
IMPORTANT NOTE
/recurring
and /month:
tags together./month:
tags are used together (which should not happen), the last month is prioritisedadd /<field 1>: <value 1> /<field 2>: <value 2> /<field 3>: <value 3>...
add /name: Lunch /cost: 10 /type: food
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [Name = Lunch, Cost = $10, Type = FOOD]
_________________________________________________________
add /recurring /<field 1>: <value 1> /<field 2>: <value 2> ...
add /recurring /name: Spotify /cost: 10.90 /type: entertainment
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [Name = Spotify, Cost = $10.90, Type = ENTERTAINMENT]
_________________________________________________________
add /month: <monthValue> /<field 1>: <value 1> /<field 2>: <value 2> ...
add /month: 2024-11 /name: Spotify /cost: 10.90 /type: entertainment
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [Name = Lunch, Cost = $10, Type = FOOD]
2. [Name = Spotify, Cost = $10.90, Type = ENTERTAINMENT]
_________________________________________________________
The list
command allows users to view their expense list.
By default, without any tags the following is assumed:
Viewing list also shows the user’s spending information:
IMPORTANT NOTE
/recurring
and /month:
tags together./recurring
tag is prioritisedlist
list
_________________________________________________________
Below is the list:
1. [Name = lunch, Cost = $10, Type = FOOD]
2. [Name = gift, Cost = $20, Type = OTHER]
3. [Name = grab, Cost = $15, Type = TRANSPORTATION]
4. [Name = train, Cost = $8, Type = TRANSPORTATION]
5. [Name = cake, Cost = $15, Type = FOOD]
_________________________________________________________
For the month of 2024-11
Total budget: $1000.0
Total cost: $68.0
Remaining budget: $932.0
_________________________________________________________
Expense Type Proportions:
FOOD: 36.76%
OTHER: 29.41%
TRANSPORTATION: 33.82%
_________________________________________________________
Expense Type Cost Breakdown:
FOOD: $25.00
OTHER: $20.00
TRANSPORTATION: $23.00
_________________________________________________________
list /recurring
list /recurring
_________________________________________________________
Below is the list:
1. [Name = lunch, Cost = $10, Type = FOOD]
2. [Name = gift, Cost = $20, Type = OTHER]
3. [Name = grab, Cost = $15, Type = TRANSPORTATION]
4. [Name = train, Cost = $8, Type = TRANSPORTATION]
5. [Name = cake, Cost = $15, Type = FOOD]
_________________________________________________________
list /month: <monthValue>
list /month: 2024-12
_________________________________________________________
Below is the list:
1. [Name = car rental, Cost = $80, Type = TRANSPORTATION]
2. [Name = dinner, Cost = $20, Type = FOOD]
3. [Name = movie, Cost = $10, Type = ENTERTAINMENT]
4. [Name = concert, Cost = $20, Type = ENTERTAINMENT]
_________________________________________________________
For the month of 2024-12
Total budget: $900.0
Total cost: $130.0
Remaining budget: $770.0
_________________________________________________________
Expense Type Proportions:
TRANSPORTATION: 61.54%
FOOD: 15.38%
ENTERTAINMENT: 23.08%
_________________________________________________________
Expense Type Cost Breakdown:
TRANSPORTATION: $80.00
FOOD: $20.00
ENTERTAINMENT: $30.00
_________________________________________________________
The edit
command allows users to edit their expense list.
By default, without any tags the following is assumed:
IMPORTANT NOTE
/recurring
and /month:
tags together./recurring
tag is prioritised/month:
tag is used together, the first month is prioritisededit <index> </field:> <value> ...
edit 1 /name: Dinner /cost: 20
_________________________________________________________
Edited successfully!
_________________________________________________________
Currently in list:
1. [Name = Dinner, Cost = $20, Type = FOOD]
2. [Name = Spotify, Cost = $10.90, Type = ENTERTAINMENT]
_________________________________________________________
edit <index> </recurring> </field:> <value> ...
edit 1 /recurring /name: Netflix /cost: 18.70
_________________________________________________________
Edited successfully!
_________________________________________________________
Currently in list:
1. [Name = Netflix, Cost = $18.70, Type = ENTERTAINMENT]
_________________________________________________________
edit <index> </month:> <monthValue> </field:> <value> ...
edit 1 /month: 2024-11 /name: Breakfast /cost: 5.40
_________________________________________________________
Edited successfully!
_________________________________________________________
Currently in list:
1. [Name = Breakfast, Cost = $5.40, Type = FOOD]
2. [Name = Spotify, Cost = $10.90, Type = ENTERTAINMENT]
_________________________________________________________
The delete
command allows users to delete an expense from the expense list and displays the remaining expenses for that month.
By default, without any tags the following is assumed:
IMPORTANT NOTE
/recurring
and /month:
tags together.delete <index>
delete 1
_________________________________________________________
Deleted successfully!
_________________________________________________________
Currently in list:
edit <index> </recurring>
delete 1 /recurring
_________________________________________________________
Deleted successfully!
_________________________________________________________
Currently in list:
delete <index> </month:> <monthValue>
delete 1 /month:2024-05
_________________________________________________________
Deleted successfully!
_________________________________________________________
Currently in list:
The find
command allows users to find an expense from the expense list based on any of the fields.
By default, without any tags the following is assumed:
IMPORTANT NOTE
/recurring
and /month:
tags together./recurring
tag is prioritised/month:
tag is used together, the first month is prioritisedfind <query>
find dinner
_________________________________________________________
Here is what I found:
1. [Name = tues dinner, Cost = $7, Type = FOOD]
2. [Name = wed dinner, Cost = $6, Type = FOOD]
_________________________________________________________
find 7
_________________________________________________________
Here is what I found:
1. [Name = tues dinner, Cost = $7, Type = FOOD]
2. [Name = wed lunch, Cost = $7, Type = FOOD]
_________________________________________________________
find transportation
_________________________________________________________
Here is what I found:
1. [Name = grab, Cost = $10, Type = TRANSPORTATION]
2. [Name = MRT, Cost = $2, Type = TRANSPORTATION]
_________________________________________________________
find <query> </recurring>
find spotify /recurring
_________________________________________________________
Here is what I found:
1. [Name = Spotify, Cost = $10.90, Type = ENTERTAINMENT]
_________________________________________________________
find <query> </month:> <monthValue>
find lunch /month:2024-05
_________________________________________________________
Here is what I found:
1. [Name = lunch, Cost = $5, Type = FOOD]
_________________________________________________________
PlanPal will assist you in tracking your activities
in your planner. The guide below will show you how to make use of
the activity manager commands.
The add
command allows users to add an activity to the activities
list.
If only the name of the activity
is specified, the type of the activity will be set to others
by default.
add /name: <name> /type: <type>
add /name: running /type: exercise
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [activity = running, type = exercise]
_________________________________________________________
add /name: sleep
_________________________________________________________
Added successfully!
_________________________________________________________
Currently in list:
1. [activity = running, type = exercise]
2. [activity = sleep, type = others]
_________________________________________________________
The list
command allows users to view all their current activities
.
list
_________________________________________________________
Below is the list:
1. [activity: running, type: exercise]
2. [activity: swimming, type: exercise]
3. [activity: groceries, type: necessities]
_________________________________________________________
The find
command allows users to find activities
from the list. User can search of multiple words at a time and the input is not case-sensitive.
find <value>
find exercise
_________________________________________________________
Here is what I found:
1. [activity = running, type = exercise]
2. [activity = swimming, type = exercise]
_________________________________________________________
The edit
command allows users to edit an activity
from the list.
edit <index> /<category 1>: <value 1> /<category 2>: <value 2> ...
edit 1 /name: diving
_________________________________________________________
Currently in list:
1. [activity = diving, type = exercise]
2. [activity = swimming, type = exercise]
3. [activity = groceries, type = necessities]
_________________________________________________________
The delete
command allows users to delete an existing activity
from the list, with
reference to its index in the list.
delete <index>
delete 2
_________________________________________________________
Deleted successfully!
_________________________________________________________
Currently in list:
1. [activity = running, type = exercise]
2. [activity = groceries, type = necessities]
_________________________________________________________
The commands below are not the main features of the 3 modes. However, they will make it more convenient for you when using the PlanPal application
IMPORTANT NOTE
The commands below ONLY WORKS in the following screens of PlanPal:
Main Menu
CONTACT_MANAGER
EXPENSE_MANAGER
ACTIVITY_MANAGER
The /b/
command is able to store all your current files into a back-up folder in the event that you corrupted your data. This folder is also encrypted to ensure that your files are secured.
IMPORTANT NOTE
/b/
The /r/
command restores your data files to the state of the previously saved back-up files.
/r/
The clear
command can be used to simulate the clearing of the screen. It is done by printing multiple blank lines. This would help to reduce the clutter on your screen if you wish to do so.
clear
The exit
command can be used to switch between different modes.
exit
The bye
command can be used to shut down the program when you no longer need it.
bye
Description | Command |
---|---|
Back Up Files | /b/ |
Restore Files | /r/ |
Clear Screen | clear |
Exit Mode | exit |
Leave Application | bye |
Description | Command | Example |
---|---|---|
Adding a contact | add /name: <name> /type: <type> |
add /name: PlanPal /phone: 12345678 /email: PlanPal@gmail.com |
Deleting a contact | delete <index> |
delete 1 |
Viewing the contact list | list |
list |
Finding an activity | find <value> |
find Plan |
Editing a contact | edit <index> /<field 1>: <value 1> /<field 2>: <value 2> ... |
edit 1 /name: PlanPal_v1.0 /email: PlanPal_v1@gmail.com |
Search contacts by category | search <category> |
search friend |
Setting contact category | category |
category |
Description | Command | Example |
---|---|---|
Adding category | add <category> |
add friend |
Removing category | remove <category> |
remove friend |
Edit contact category | edit <contact index> <category 1>/<category 2>/... |
edit 1 friend/family |
Deleting contact category | edit <contact index> |
edit 1 |
Viewing category list | view |
view |
Viewing the contact list | list |
list |
Printing category functions | help |
help |
Quiting setting category mode | quit |
quit |
Description | Command | Example |
---|---|---|
Setting a Budget (default) | budget <value> |
budget 1000 |
Setting a Budget (with /month: tag) |
- budget <value> <month> - budget <month> </> <value> |
- budget 1000 /month: 2024-11 - budget /month:2024-11 /1000 |
Adding an Expense (default) | add /<field 1>: <value 1> ... |
add /name: Lunch /cost: 10 |
Adding an Expense (with /recurring tag) |
add /recurring /<field 1>: <value 1> ... |
add /recurring /name: Spotify /cost: 10 |
Adding an Expense (with /month: tag) |
add /month: <monthValue> /<field 1>: <value 1> ... |
add /month: 2024-11 /name: Spotify /cost: 10 |
Viewing an Expense (default) | list |
list |
Viewing an Expense (with /recurring tag) |
list /recurring |
list /recurring |
Viewing an Expense (with /month: tag) |
list </month:> <monthValue> |
list /month: 2024-11 |
Editing an Expense (default) | edit <index> </field:> <value> ... |
edit 1 /name: Dinner /cost: 20 |
Editing an Expense (with /recurring tag) |
edit <index> </recurring> </field:> <value> ... |
edit 1 /recurring /name: Netflix /cost: 18.70 |
Editing an Expense (with /month: tag) |
edit <index> </month:> <monthValue> </field:> <value> ... |
edit 1 /month: 2024-11 /name: Breakfast /cost: 5.40 |
Deleting an Expense (default) | delete <index> |
delete 1 |
Deleting an Expense (with /recurring tag) |
delete <index> </recurring> |
delete 1 /recurring |
Deleting an Expense (with /month: tag) |
delete <index> </month:> <monthValue> |
delete 1 /month:2024-05 |
Finding an Expense (default) | find query> |
find dinner |
Finding an Expense (with /recurring tag) |
find query> </recurring> |
find spotify /recurring |
Finding an Expense (with /month: tag) |
find <query> </month:> <monthValue> |
find lunch /month:2024-05 |
Description | Command | Example |
---|---|---|
Adding an activity | add /name: <name> /type: <type> |
add /name: running /type: exercise |
Adding an activity with just its name | add /name: <name> |
add /name: sleep |
Viewing the activity list | list |
list |
Finding an activity | find <value> |
find exercise |
Editing an activity | edit <index> /<category 1>: <value 1> /<category 2>: <value 2> ... |
edit 1 /name: diving |
Deleting an activity | delete <index> |
delete 4 |