addgradeaddtestgradeshowgradeshowtestgraderemovegraderemovetestgradegpaprojectgpaaddreviewrevieweditreviewdeletereviewfindreviewamount reviewsload reviewsadd reviews databasereset all reviewsUniflow 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.
java -jar Uniflow.jar
insertAdds 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:
SESSION_TYPE field is optional. If left empty, it will default to Lecture.deleteRemoves 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.
___________________________________________________________________________
___________________________________________________________________________
listDisplays all modules in your timetable.
Format:
list
Expected Output:
___________________________________________________________________________
Your modules:
1. CS2113
2. CS3241
___________________________________________________________________________
show timetableDisplays 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]
___________________________________________________________________________
reset timetableClears 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.
filterFilters 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.
scoreAllows 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.
addreviewAllows 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.
___________________________________________________________________________
___________________________________________________________________________
reviewDisplays 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
___________________________________________________________________________
editreviewAllows 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.
deletereviewAllows 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.
findreviewSearches 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!
___________________________________________________________________________
rateAllows 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))
___________________________________________________________________________
___________________________________________________________________________
Overview:
addgradeAllows 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.
addtestgradeAllows 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.
showgradeDisplays 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)
___________________________________________________________________________
___________________________________________________________________________
showtestgradeDisplays 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
removegradeAllows 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)
removetestgradeAllows 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
gpaAllows 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
____________________________________________________________
____________________________________________________________
projectgpaAllows 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.
amount reviewsCounts 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).
___________________________________________________________________________
load reviewsClears 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)
___________________________________________________________________________
add reviews databaseManually 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.
___________________________________________________________________________
reset all reviewsThis 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.
___________________________________________________________________________
byeUsers 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)
| Action | Format and Examples | Explanation |
|---|---|---|
| insert | insert i/MODULE_CODE n/NAME d/DAY f/START_TIME t/END_TIME s/SESSION_TYPEExample: 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_INDEXExample: 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/Mondayfilter type/SESSION_TYPE e.g., filter type/tutorialfilter id/MODULE_CODE e.g., filter id/CSfilter name/MODULE_NAME e.g., filter name/Engineeringfilter hastutorialfilter notutorial |
Filters modules by given criteria such as day, session type, or presence of tutorials |
| Action | Format and Examples | Explanation |
|---|---|---|
| addgrade | addgrade c/COURSE_CODE cr/NUMBER_OF_CREDITS g/GRADE m/IS_MAJORExample: 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_MAJORExample: addtestgrade c/CS2113 cr/4 g/A m/true |
Adds a temporary grade for GPA projection |
| removegrade | removegrade INDEXExample: removegrade 3 |
Removes a grade entry for a course from your permanent record |
| removetestgrade | removetestgrade INDEXExample: 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 |
| Action | Format and Examples | Explanation |
|---|---|---|
| addreview | addreview c/MODULE_CODE u/USERNAME r/REVIEW_TEXTExample: addreview c/CS2113 u/John r/Great! |
Adds a review to memory (session-only) |
| review | review MODULE_CODEExample: review CS2113 |
Displays all reviews from memory |
| editreview | editreview c/MODULE_CODE u/USERNAME r/NEW_REVIEW_TEXTExample: editreview c/CS2113 u/John r/Improved! |
Edits an existing review in memory |
| deletereview | deletereview c/MODULE_CODE u/USERNAMEExample: 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) |
| Action | Format and Examples | Explanation |
|---|---|---|
| rate (add) | rate MODULE_CODE RATINGExample: rate CS2113 4 |
Adds a numerical rating (1–5) for a module |
| rate (view) | rate MODULE_CODEExample: rate CS2113 |
Displays the average rating for a module |
| 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_CODEExample: score CS2113 |
Displays the saved score breakdown for a module |
| Action | Format and Examples | Explanation |
|---|---|---|
| bye | bye |
Exits the program (prompts to save unsaved reviews) |
| 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:
bye or load reviews commands.add reviews database command.