tp

User Guide

Table of Contents

Introduction

Uniflow is a command-line university module management assistant designed for students. It helps you organize your timetable, track grades and GPA, add and view reviews, and rate courses — all through simple text-based commands.

Quick Start

  1. Ensure you have Java 17 or above installed on your computer.
  2. Download the latest version of Uniflow.jar from your release page.
  3. Open a terminal and navigate to the folder containing the JAR file.
  4. Run the application with:
    java -jar Uniflow.jar
    
  5. Start entering commands (see the Command Summary below for examples).

Features

Adding a Module: insert

Adds a new module to your timetable.

Format:

insert i/MODULE_CODE n/NAME d/DAY f/START_TIME t/END_TIME s/SESSION_TYPE

Example:

insert i/CS2113 n/Software Engineering d/Monday f/14:00 t/16:00 s/Lecture

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Got it! I've added this module:
  Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
Now you have 1 module(s) in the list.
___________________________________________________________________________
___________________________________________________________________________

Note:

Deleting a Module: delete

Removes a module from the timetable by index.

Format:

delete index/MODULE_INDEX

Example:

delete index/1

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Noted. I've removed this module:
  Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
Now you have 0 module(s) left in the list.
___________________________________________________________________________
___________________________________________________________________________

Listing All Modules: list

Displays all modules in your timetable.

Format:

list

Expected Output:

___________________________________________________________________________
Your modules:
1. CS2113
2. CS3241
___________________________________________________________________________

Showing Your Timetable: show timetable

Displays all modules in your timetable with their full details.

Format:

show timetable

Expected Output:

___________________________________________________________________________
 Here is your timetable:
 1. Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
 2. Module[ID=CS3241, Name=Computer Graphics, Type=lecture, Day=Wednesday, Time=10:00-12:00]
___________________________________________________________________________

Resetting Your Timetable: reset timetable

Clears all modules from your timetable.

Format:

reset timetable

Expected Output:

___________________________________________________________________________
 Timetable has been reset!
___________________________________________________________________________

Note: This action cannot be undone. The system will confirm if your timetable is already empty.

Filtering Modules: filter

Filters modules by various criteria including day, session type, module CODE, module name, or tutorial presence.

Format:

filter day/DAY
filter type/SESSION_TYPE
filter id/MODULE_CODE
filter name/MODULE_NAME
filter hastutorial
filter notutorial

EXAMPLE

For all test cases below, suppose you have the following modules in your timetable:

1. CS2113 - Software Engineering - Lecture - Monday 14:00-16:00
2. CS2113 - Software Engineering - Tutorial - Tuesday 10:00-11:00
3. CS3241 - Computer Graphics - Lecture - Wednesday 10:00-12:00
4. CS2040 - Data Structures - Lecture - Thursday 14:00-16:00
5. MA1521 - Calculus - Lecture - Friday 16:00-18:00
6. MA1521 - Calculus - Tutorial - Friday 18:00-19:00

To comply with the scenario above, please run the following commands before executing the test cases:

reset timetable
insert i/CS2113 n/Software Engineering d/Monday f/14:00 t/16:00 s/Lecture
insert i/CS2113 n/Software Engineering d/Tuesday f/10:00 t/11:00 s/Tutorial
insert i/CS3241 n/Computer Graphics d/Wednesday f/10:00 t/12:00 s/Lecture
insert i/CS2040 n/Data Structures d/Thursday f/14:00 t/16:00 s/Lecture
insert i/MA1521 n/Calculus d/Friday f/16:00 t/18:00 s/Lecture
insert i/MA1521 n/Calculus d/Friday f/18:00 t/19:00 s/Tutorial

Test Case 1: Filter by Day

Input:

filter day/Monday

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 1 module(s) matching day 'Monday':
 1. Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 2: Filter by Session Type

Input:

filter type/tutorial

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 2 module(s) matching session type 'tutorial':
 1. Module[ID=CS2113, Name=Software Engineering, Type=tutorial, Day=Tuesday, Time=10:00-11:00]
 2. Module[ID=MA1521, Name=Calculus, Type=tutorial, Day=Friday, Time=18:00-19:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 3: Filter Modules with Tutorials

Input:

filter hastutorial

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 2 module(s) matching modules with tutorial sessions:
 1. Module[ID=CS2113, Name=Software Engineering, Type=tutorial, Day=Tuesday, Time=10:00-11:00]
 2. Module[ID=MA1521, Name=Calculus, Type=tutorial, Day=Friday, Time=18:00-19:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 4: Filter Modules without Tutorials

Input:

filter notutorial

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
Found 2 module(s) matching modules without tutorial sessions:
1. Module[ID=CS3241, Name=Computer Graphics, Type=lecture, Day=Wednesday, Time=10:00-12:00]
2. Module[ID=CS2040, Name=Data Structures, Type=lecture, Day=Thursday, Time=14:00-16:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 5: Filter by Module ID (Exact)

Input:

filter id/CS2113

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 2 module(s) matching ID containing 'CS2113':
 1. Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
 2. Module[ID=CS2113, Name=Software Engineering, Type=tutorial, Day=Tuesday, Time=10:00-11:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 6: Filter by Module ID (Partial Match)

Input:

filter id/CS

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 4 module(s) matching ID containing 'CS':
 1. Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
 2. Module[ID=CS2113, Name=Software Engineering, Type=tutorial, Day=Tuesday, Time=10:00-11:00]
 3. Module[ID=CS3241, Name=Computer Graphics, Type=lecture, Day=Wednesday, Time=10:00-12:00]
 4. Module[ID=CS2040, Name=Data Structures, Type=lecture, Day=Thursday, Time=14:00-16:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 7: Filter by Module Name

Input:

filter name/Software

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Found 2 module(s) matching name containing 'Software':
 1. Module[ID=CS2113, Name=Software Engineering, Type=lecture, Day=Monday, Time=14:00-16:00]
 2. Module[ID=CS2113, Name=Software Engineering, Type=tutorial, Day=Tuesday, Time=10:00-11:00]
___________________________________________________________________________
___________________________________________________________________________

Test Case 8: Filter with No Matches

Input:

filter day/Saturday

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 No modules found matching day 'Saturday'.
___________________________________________________________________________
___________________________________________________________________________

Note: The filter command performs case-insensitive matching for all criteria.


Recording Component Scores: score

Allows users to record or view score breakdowns for a specific module (e.g., exam scores, project scores, participation).

Add Score Breakdown Format:

score MODULE_CODE component1:value1 component2:value2

Example:

score CS2113 exam:50 project:30 participation:20

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Saved score breakdown for {CS2113:{exam=50, participation=20, project=30}}
___________________________________________________________________________
___________________________________________________________________________

View Score Breakdown Format:

score MODULE_CODE

Example:

score CS2113

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Score breakdown for CS2113: {exam=50, participation=20, project=30}
___________________________________________________________________________
___________________________________________________________________________

Note: The module must already exist in your timetable before you can add scores.

Adding a Review: addreview

Allows users to add a text review for a module. This review is added to the current session in such as like in-memory and is not automatically saved to the file.

Format:

addreview c/MODULE_CODE u/USERNAME r/REVIEW_TEXT

Example:

addreview c/CS2113 u/John r/Great course with practical projects!

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Review added for CS2113.
___________________________________________________________________________
___________________________________________________________________________

Viewing Reviews: review

Displays all reviews for a specific module from the current session (in-memory).

Format:

review MODULE_CODE

Example:

review CS2113

Expected Output:

___________________________________________________________________________
 Reviews for CS2113:
 - John: Great module with lots of practical examples
___________________________________________________________________________

Editing a Review: editreview

Allows users to edit their existing review for a module in the current session (in-memory).

Format:

editreview c/MODULE_CODE u/USERNAME r/NEW_REVIEW_TEXT

Example:

editreview c/CS2113 u/John r/Excellent course with hands-on learning!

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Review updated for CS2113.
___________________________________________________________________________
___________________________________________________________________________

Note: You can only edit your own review. The username must match the one used when adding the review.

Deleting a Review: deletereview

Allows users to delete their review for a module from the current session (in-memory).

Format:

deletereview c/MODULE_CODE u/USERNAME

Example:

deletereview c/CS2113 u/John

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Review deleted for CS2113.
___________________________________________________________________________
___________________________________________________________________________

Note: You can only delete your own review.

Finding Reviews: findreview

Searches for reviews in the current session (in-memory) based on the module, the user, or both.

Formats:

findreview c/MODULE_CODE
findreview u/USERNAME
findreview c/MODULE_CODE u/USERNAME

Examples:

findreview c/CS2113
findreview u/john
findreview c/CS2113 u/john

Expected Output:

___________________________________________________________________________
 Reviews by john in CS2113:
 - CS2113 - john: Great course with practical projects!
___________________________________________________________________________

Rating a Course: rate

Allows users to add or view numerical ratings for a module.

Rating Format:

rate MODULE_CODE RATING

Example:

rate CS2113 4

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Added Rating: 4 to CS2113
___________________________________________________________________________
___________________________________________________________________________

View Average Rating Format:

rate CS2113

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 CS2113 Rating: 4.0 (1 rating(s))
___________________________________________________________________________
___________________________________________________________________________

GPA calculator

Overview:

  1. It will allow you to store the grades of your completed courses in a record.
    You can then compute the cumulative GPA and the major required courses GPA, respectively.
  2. It will allow you to enter predicted grades of not yet completed courses and store them in a temporary record.
    You can then compute a projected cumulative GPA and major GPA based on the predicted grades and saved courses’ grades.

Adding a Course’s Grade Information: addgrade

Allows users to add the grade of a specific course. It will be saved in a permanent course record (or grade record).
The information stored will be the course code, number of credits (or units), grade attained and whether it is a major required course.

IS_MAJOR: true if the course is a major required course, false if not.

Format:

addgrade c/COURSE_CODE cr/NUMBER_OF_CREDITS g/GRADE m/IS_MAJOR

Example:

addgrade c/CS2113 cr/4 g/A m/true

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 OK! Now I have added your record of the course CS2113 (4 credits, Grade: A) (Major course)
___________________________________________________________________________
___________________________________________________________________________

In this example, you added the course CS2113 to the record. It is a 4-credit course. You got an A in the course. It is a major required course.

Adding a Course’s Predicted Grade: addtestgrade

Allows users to add a predicted grade of a specific course they are (or will be) studying.
It will only be stored in a temporary record and will not be saved.
The information stored will be the course code, number of credits (or units), the predicted grade the user might attain and whether it is a major required course.

It is used for testing their projected GPA.

Format:

addtestgrade c/COURSE_CODE cr/NUMBER_OF_CREDITS g/GRADE m/IS_MAJOR

Example:

addtestgrade c/CS2113 cr/4 g/A m/true

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Added course: CS2113 (4 credits, Grade: A) (Major course) in temporary record.
___________________________________________________________________________
___________________________________________________________________________

In this example, you added the course CS2113 to the temporary record. It is a 4-credit course. You assume that you get an A in the course. It is a major required course.

Listing out the currently stored course grades: showgrade

Displays what courses are saved in the permanent record.
Allows users to keep track of what courses they have saved in the permanent record.

Format:

showgrade

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
Currently, you have 3 saved course grades
Here are your saved course grade records:
___________________________________________________________________________
1. EC3322 (5 credits, Grade: B) (Major course)
2. CS2113 (5 credits, Grade: A) (Major course)
3. CS1010 (4 credits, Grade: A) (Major course)
___________________________________________________________________________
___________________________________________________________________________

Listing out the temporarily stored predicted grades: showtestgrade

Displays what courses are currently in the temporary record.
Allows users to keep track of what courses they have input into the temporary record.

Format:

showtestgrade

The output is similar to showgrade

Removing a Course From Saved Record: removegrade

Allows users to remove the record of a specific course. It will be deleted from the permanent course record (or grade record).
This is to allow users to modify the record in case of inputting the details wrongly.

Format:

removegrade INDEX

Example:

removegrade 3

Assume you have three saved courses

1. EC3322 (5 credits, Grade: B) (Major course)
2. CS2113 (5 credits, Grade: A) (Major course)
3. CS1010 (4 credits, Grade: A) (Major course)

After removegrade 3, the 3rd course in the list will be removed.

Expected Output:

___________________________________________________________________________
___________________________________________________________________________
 Removed course grade record: CS1010 (4 credits, Grade: A) (Major course)
___________________________________________________________________________
___________________________________________________________________________

Your saved record will only have two courses left. That is:

1. EC3322 (5 credits, Grade: B) (Major course)
2. CS2113 (5 credits, Grade: A) (Major course)

Removing a Course From Temporary Record: removetestgrade

Allows users to remove a specific course from the temporary record. (That you use to project your GPA)
This is to allow users to modify the temporary record in case of inputting the details wrongly or hoping to change the details.

Format:

removetestgrade INDEX

Example:

removetestgrade 3

Similar to removegrade, after removetestgrade 3, the 3rd course in the temporary record will be removed.
The output and effect is similar to removegrade

Computing Cumulative GPA: gpa

Allows users to get a summary of their academic performance based on the current course record.
It will show the cumulative GPA and major GPA, respectively.

Note: Major GPA indicates the cumulative GPA for their major-required courses.
- Many universities include this as a graduation requirement
- Even the user’s school does not count their major GPA separately. Major GPA here allows users to have an idea of their performance in the required courses of their major.

Format:

gpa

Example:

Suppose you have added two courses:
CS2113, 5 credits, grade: B, major course
EC3322, 5 credits, grade: A, not a major required course

Expected Output:

____________________________________________________________  
____________________________________________________________  
 You have studied 2 courses.  
 Your total grade points are 42.5  
 Number of credits you have studied: 10  
 Your GPA is: 4.25  
____________________________________________________________  
____________________________________________________________  
 You have studied 1 major courses.  
 Your total major course grade points are 17.5  
 Number of credits you have studied: 5  
 Your major GPA is: 3.50  
____________________________________________________________  
____________________________________________________________

Computing a projected GPA: projectgpa

Allows users to compute their predicted GPA and major course GPA, based on their predicted grades of courses they are/will be studying.

Format:

projectgpa

Example:

Suppose you have two courses in your saved records:
CS2113, 5 credits, grade: B, major course
EC3322, 5 credits, grade: A, not a major required course

You are studying a course in the upcoming semester:
EC3303, 5 credits, your prediction for your grade: A, major course

And you added it to the temporary record.

Expected Output:

____________________________________________________________
____________________________________________________________
 Your projected GPA will be: 4.50
 Your projected major GPA will be: 4.25
____________________________________________________________
____________________________________________________________

Note: after the computation of the projected GPA, the newly added course will NOT be stored in our saved record.
Only completed courses will be stored in the permanent record.

Counting Reviews: amount reviews

Counts the number of reviews currently in memory for a specific module or user.

Format:

amount reviews [c/MODULE_CODE] [u/USERNAME]

Example:

amount reviews c/CS2113

Expected Output:

___________________________________________________________________________
Course CS2113 has 1 review(s).
___________________________________________________________________________

Loading Reviews from File: load reviews

Clears all reviews from memory and reloads them from the data/reviews.txt file. Warning: If you have unsaved reviews in memory, this command will ask if you want to merge them into the file before reloading.

Format:

load reviews

Expected Output

___________________________________________________________________________
Reloading all reviews from file...
There are unsaved reviews in memory. Do you want to add them to the database? (yes/no)

Followed by:

All reviews successfully reloaded from file. (Memory now matches file)
___________________________________________________________________________

Adding In-Memory Reviews to File: add reviews database

Manually saves (merges) any new reviews from your current session into the data/reviews.txt file without clearing your memory.

Format:

add reviews database

Expected Output

___________________________________________________________________________
Synchronizing in-memory reviews with database...
Added 1 new review(s) to the database.
___________________________________________________________________________

Resetting All Reviews: reset all reviews

This clears all reviews from memory only. It does not delete the data/reviews.txt file

Format:

reset all reviews

Expected Output

___________________________________________________________________________
 All reviews have been cleared from memory.
___________________________________________________________________________

Exiting the program: bye

Users can exit the program.

Format:

bye

Note: If you have added or edited reviews in your session, Uniflow will detect these unsaved changes and ask you if you want to save them to the file before exiting.

___________________________________________________________________________
You have unsaved reviews in memory. Do you want to save them before exiting? (yes/no)

Command Summary (Uniflow)

Module Management

Action Format and Examples Explanation
insert insert i/MODULE_CODE n/NAME d/DAY f/START_TIME t/END_TIME s/SESSION_TYPE
Example: insert i/CS2113 n/Software Engineering d/Monday f/14:00 t/16:00 s/Lecture
Adds a new module to your timetable
delete delete index/MODULE_INDEX
Example: delete index/1
Deletes a module by its list index
list list Lists all modules currently added
show timetable show timetable Displays all modules with full details
reset timetable reset timetable Removes all modules from your timetable (cannot be undone)
filter filter day/DAY e.g., filter day/Monday
filter type/SESSION_TYPE e.g., filter type/tutorial
filter id/MODULE_CODE e.g., filter id/CS
filter name/MODULE_NAME e.g., filter name/Engineering
filter hastutorial
filter notutorial
Filters modules by given criteria such as day, session type, or presence of tutorials

GPA Calculator

Action Format and Examples Explanation
addgrade addgrade c/COURSE_CODE cr/NUMBER_OF_CREDITS g/GRADE m/IS_MAJOR
Example: addgrade c/CS2113 cr/4 g/A m/true
Adds a grade entry for a course to your permanent record
addtestgrade addtestgrade c/COURSE_CODE cr/NUMBER_OF_CREDITS g/GRADE m/IS_MAJOR
Example: addtestgrade c/CS2113 cr/4 g/A m/true
Adds a temporary grade for GPA projection
removegrade removegrade INDEX
Example: removegrade 3
Removes a grade entry for a course from your permanent record
removetestgrade removetestgrade INDEX
Example: removetestgrade 3
Removes a course from the temporary grade record
showgrade showgrade Displays what courses are saved in the permanent record
showtestgrade showtestgrade Displays what courses are currently in the temporary record
gpa gpa Computes cumulative GPA and major GPA based on stored grades
projectgpa projectgpa Computes predicted GPA including test grades

Review Management

Action Format and Examples Explanation
addreview addreview c/MODULE_CODE u/USERNAME r/REVIEW_TEXT
Example: addreview c/CS2113 u/John r/Great!
Adds a review to memory (session-only)
review review MODULE_CODE
Example: review CS2113
Displays all reviews from memory
editreview editreview c/MODULE_CODE u/USERNAME r/NEW_REVIEW_TEXT
Example: editreview c/CS2113 u/John r/Improved!
Edits an existing review in memory
deletereview deletereview c/MODULE_CODE u/USERNAME
Example: deletereview c/CS2113 u/John
Deletes your review from memory
findreview findreview [c/MODULE_CODE] [u/USERNAME]
Example: findreview u/John
Searches for reviews in memory by module or user
amount reviews amount reviews [c/MODULE_CODE] [u/USERNAME]
Example: amount reviews c/CS2113
Counts reviews in memory by module or user
load reviews load reviews Clears memory and loads reviews from file (prompts to merge)
add reviews database add reviews database Manually merges reviews from memory into the file (saves progress)
reset all reviews reset all reviews Clears all reviews from memory only (does not touch the file)

Course Ratings

Action Format and Examples Explanation
rate (add) rate MODULE_CODE RATING
Example: rate CS2113 4
Adds a numerical rating (1–5) for a module
rate (view) rate MODULE_CODE
Example: rate CS2113
Displays the average rating for a module

Score Breakdown

Action Format and Examples Explanation
score (add) score MODULE_CODE component1:value1 component2:value2 ...
Example: score CS2113 exam:50 project:30 participation:20
Adds a new score breakdown for a course
score (view) score MODULE_CODE
Example: score CS2113
Displays the saved score breakdown for a module

System and Utility Commands

Action Format and Examples Explanation
bye bye Exits the program (prompts to save unsaved reviews)

Data Persistence

File Location Stored Data
data/modules.txt Timetable modules
data/ratings.txt Module ratings
data/reviews.txt Module reviews
data/grades.txt Saved course grades

Note on Data Persistence: Most data (Timetable, Grades, Scores, Ratings) is saved automatically. Reviews are different. They operate in a “RAM-first” mode. Your reviews are NOT saved automatically. To save reviews, you must either:

  1. Say “yes” when prompted by the bye or load reviews commands.
  2. Manually run the add reviews database command.

↑ Back to top