Overview
Trajectory is a lightweight management system for those who need a no-frills solution for managing students, modules, grades, classes and notes. It is built for users who prefer typing (CLI) over GUI interaction and has a GUI created with JavaFX.
Summary of contributions
-
Code Contributed: https://nuscs2113-ay1819s1.github.io/dashboard/#=undefined&search=zhicaizack
-
Major enhancement: added the ability to manage a classroom
-
What it does: allows the user to add a classroom, edit and delete a classroom, assign/unassign students from the classroom and mark the attendance of the students in the classroom.
-
Justification: This feature improves the cohesiveness of the product as a student enrolled into a module inside a course should have his/her classroom.
-
Highlights: This enhancement can be further enhanced to allow for calculation of student attendance that may be factored into their grades in the future release.
-
Credits: https://cs2113-ay1819s1-t16-1.github.io/main/AboutUs.html and https://github.com/nusCS2113-AY1819S1/addressbook-level4
-
-
Other contributions:
-
Project management:
-
Friendly reminder for team to update documentation for
v1.2
on GitHub -
Fix checkstyle issues on a global scale
-
Updated the diagram for UI segment in developer guide
-
-
Community:
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Class Management
Add Class : class add
Creates a class and assigns it to a module for the system.
Format: class add cn/CLASS_NAME mc/MODULE_CODE e/MAX_ENROLLMENT
Examples:
-
class add cn/T16 mc/CG1111 e/20
Creates a class T16, assigns it to the module CG1111 with the max enrollment size of 20
List class : class list
Lists class(es) with information of the class as well as students assigned to class (if any) for the system.
Format: class list
Examples:
-
class list
Lists all the class(es) created as well as students assigned to class (if any).
Update Class Enrollment Limits : class edit
Modifies the max enrollment size for a class for the system.
Format: class edit cn/CLASS_NAME mc/MODULE_CODE e/ENROLLMENT_SIZE
Examples:
Remove class : class delete
Deletes a class for a module in the system.
Format: class delete cn/CLASS_NAME mc/MODULE_CODE
Examples:
-
class delete cn/T16 mc/CG1111
Deletes the class T16 from the module CG1111 -
class edit cn/T16 mc/CG1111 e/69
Modifies the new max class enrollment size for the class T16 of module CG1111 to be 69
Assign Student To Class : class addstudent
Assigns a student to a class in the system.
Format: class addstudent cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
Examples:
-
class addstudent cn/T16 mc/CG1111 i/A6942069M
Adds a student of the admission number A6942069M to the class T16 of module CG1111
Unassigning Student From Class : class delstudent
Unassigns a student from the class in the system.
Format: class delstudent cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
Examples:
-
class delstudent cn/T16 mc/CG1111 i/A6942069M
Removes a student of the admission number A6942069M from the class T16 of module CG1111
Marking class attendance list : class markattendance
Mark the class attendance list for a specified student for the system.
Format: class markattendance cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
Examples:
-
class markattendance cn/T16 mc/CG1111 i/A6942069M
Marks the attendance of the student of the admission number A6942069M for the class T16 for the module CG1111
Accessing class attendance list : class listattendance
Access the class attendance list for the system.
Format: class listattendance cn/CLASS_NAME mc/MODULE_CODE
Examples:
-
class listattendance cn/T16 mc/CG1111
Displays the class attendance list for the class T16 for the module CG1111
Update Class Attendance List : class modattendance
Modifies the class attendance list for the system.
Format: class modattendance cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
Examples:
-
class modattendance cn/T16 mc/CG1111 i/A6942069M
Modifies the attendance of the student of the admission number A6942069M for the class T16 of module CG1111 to be absent
Gradebook Management
Add Gradebook Component : gradebook add
Creates a grade item to a module code.
Format: gradebook add mc/MODULE_CODE cn/COMPONENT_NAME [mm/MAX_MARKS] [w/WEIGHTAGE]
Examples:
-
gradebook add mc/CS2113 cn/Assignment 1 mm/60
Adds gradebook component, Assignment 1 with maximum marks of 60, to module CS2040C.
Edit Gradebook Component : gradebook edit
Edits a gradebook item.
Format: gradebook edit mc/MODULE_CODE cn/COMPONENT_NAME [ei/EDITED_COMPONENT_NAME] [mm/EDITED_MAX_MARKS] [w/EDITED_WEIGHTAGE]
Examples:
-
gradebook edit mc/CS2113 cn/Assignment 1 en/Finals
Updated component name for CS2040C Assignment 1 to Finals. -
gradebook edit mc/CS2113 cn/Assignment 1 mm/60 w/50
Updated maximum marks and weightage of Assignment 1 in CS2113 to 60 and 50% respectively.
Remove Gradebook Component : gradebook delete
Removes a gradebook item to a module code.
Format: gradebook delete mc/MODULE_CODE cn/COMPONENT_NAME
Examples:
-
gradebook delete mc/CS2113 cn/Assignment 1
Deletes Assignment 1 from module CS2113.
Find Gradebook Component : gradebook find
Finds gradebook component.
Format: gradebook find mc/MODULE_CODE cn/COMPONENT_NAME
Examples:
-
gradebook find mc/CS2113 cn/Assignment 1
Finds Assignment 1 to module CS2113.
List Gradebook Components : gradebook list
Lists all the gradebook items in a certain module.
Format: gradebook list
Examples:
-
gradebook list
Lists all the gradebook items found in Trajectory.
Grade Management
List Students Grades : grade list
Lists grades of all students enrolled in all modules.
Format: grade list
Examples:
-
grade list
Lists all students grades recorded in Trajectory.
Add Student Grade : grade add
Assigns marks to a student.
Format: grade add mc/MODULE_CODE cn/COMPONENT_NAME i/MATRIC_NO m/MARKS
Examples:
-
grade add mc/CS2113 cn/Assignment 1 i/A0167789S m/50
Assigns 50 marks to CS2113 student with matric number A0167789S for Assignment 1.
Edit Student Grade : grade edit [coming in v2.0]
Edit marks of a student.
Format: grade edit mc/MODULE_CODE cn/COMPONENT_NAME i/MATRIC_NO m/MARKS
Examples:
-
grade edit mc/CS2113 cn/Assignment 1 i/A0167789S m/20
Assigns 20 marks to CS2113 student with matric number A0167789S for Assignment 1.
Display Graph of Student Grades : grade graph
Displays graph of all students of one grade component of an existing module.
Format: grade graph mc/MODULE_CODE cn/COMPONENT_NAME
Examples:
-
grade graph mc/CS2113 cn/Finals
Displays graph which shows result of 'Finals' grade component of all CS2113 students.
Notes Management
Add Note : note add
Adds a note to a module.
Format: note add [mc/MODULE_CODE] [tt/TITLE] [sd/START_DATE] [st/START_TIME] [ed/END_DATE] [et/END_TIME] [lc/LOCATION]
-
The START_DATE and END_DATE parameters allows the following date formats only.
-
d-M-yyyy (e.g. 2-11-2018)
-
d/M-yyyy (e.g. 2/11/2018)
-
d.M.yyyy (e.g. 2.11.2018)
-
d-MMM-yyyy (e.g. 2-Nov-2018)
-
d MMM yyyy (e.g. 2 Nov 2018)
-
d-MMM-yy (e.g. 2-Nov-18)
-
d MMM yy (e.g. 2 Nov 18)
-
-
The START_TIME and END_TIME parameters follows the following time format only.
-
h:m AM/PM (e.g. 4:00 PM)
-
- MODULE_CODE strictly follows the following:Module code should begin with 2 or 3 uppercase letters, followed by a 4-digit number and an optional uppercase letter at the end. - The date and time fields are case-insensitive which means the user can enter 2-nOv-2018 as date.- If dates are specified but not the time, the system defines a default time of 12:00 AM for START_DATE and 11:59 PM for END_DATE .- Specifying an END_DATE or any time parameters requires the START_DATE to be defined. Otherwise, the system will show an error message.- The TITLE and LOCATION parameters allows characters up to 30 and 80 maximum respectively. Otherwise, an error message will be displayed. - Omitting the TITLE will show a "(No title)" when the note is displayed. - Defining the START_DATE but not the END_DATE automatically assigns the same date to it.- Entering a START_DATE and START_TIME later than END_DATE and END_TIME is not allowed.- Specifying the prefix but with an empty field is not allowed. (e.g. tt/ ) |
Examples:
-
note add
This creates a note in Trajectory without any other information except for the note’s content itself. -
note add mc/CS2113 tt/Lecture sd/2.11.2018 st/4:00 PM et/6:00 pm lc/LT15
This tells the system that the note is to be saved in the CS2113 module with a title "Lecture", a start date (2 Nov 2018) and end date (2 Nov 2018) from 4PM to 6PM at LT15.
Edit note : note edit
Edits an existing note.
Format: note edit INDEX [mc/NEW_MODULE_CODE] [sd/NEW_START_DATE] [st/NEW_START_TIME] [ed/NEW_END_DATE] [et/NEW_END_TIME] [lc/NEW_LOCATION]
-
Edits the note with the specified INDEX.
-
The INDEX refers to the corresponding number of each note when
note list
command is invoked. -
Upon entering the
note edit
command, the system will prompt the user to type his/her modifications to the note. -
The user can complete his/her edits by pressing
CTRL+S
. -
The user can choose to cancel anytime during the editing stage with
CTRL+Q
.
The system does not allow calling this command when the notes list is not displayed. This is to prevent accidentally editing another note. |
Examples:
-
note list mc/CS1010
A list of all notes saved in CS1010 module is displayed.
note edit 3 tt/Changed the title lc/NUS
The user will now be able to edit the note that corresponds to INDEX=3 in the list. The modified note will be saved with its attributes changed accordingly.
Delete note : note delete
Delete notes.
Format: note delete INDEX [MORE_INDEXES]..
-
Delete one or more notes with the specified INDEX.
-
The command allows for multiple deletion by entering multiple INDEXES separated by space.
-
Entering a range of INDEXES separated by a hyphen (e.g. 2-4) is also allowed.
-
The INDEX refers to the corresponding number of each note when
note list
command is invoked.
Examples:
-
note list
A list of all notes is displayed.
note delete 2 1 4-6
Delete notes that are numbered #1, #2, #4, #5, and #6 from the list.
Find note : note find
Search and display existing notes using keywords.
Format: note find k/KEYWORD [k/MORE_KEYWORDS]..
-
The command searches for notes that contains ALL of the keywords.
-
It only matches with
TITLE
and the note’s text. -
Multiple keywords can be accepted.
-
A minimum of one keyword is required for the command to work.
-
Keywords are case-insensitive.
-
Each keyword must consist only of a single word (e.g. "Sort", "Git-Hub") and is not separated by spaces.
Examples:
-
note find k/git k/OOP
Lists all notes which contain both keywords "git" and "OOP".
List notes : note list
Shows a list of all saved notes.
Format: note list [mc/MODULE_CODE]
-
MODULE_CODE
field is case-insensitive, hence the user can use either lowercase or uppercase.
Examples:
-
note list
This will list all existing notes from Trajectory. -
note list mc/CS1231
This will list all notes saved in CS1231 module.
Export notes: note export
Converts all exportable notes to CSV.
Format: note export fn/FILE_NAME
-
This command creates a <FILE_NAME>.csv file in the local storage.
-
Directory: {Trajectory’s path}/data/CSVexport/<FILE_NAME>.csv
-
The format follows the Google Calendar’s CSV import formatting. Hence, the user can import their CSV notes to Google Calendar with this command.
-
Only notes with dates are exportable.
Viewing help : help
Shows the help page
Format: help
Listing entered commands : history
Lists all the commands that you have entered in reverse chronological order.
Format: history
Pressing the ↑ and ↓ arrows will display the previous and next input respectively in the command box. |
Exiting the program : exit
Exits the program.
Format: exit
Saving the data
Trajectory data are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.
FAQ
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous Address Book folder.
Command Summary
-
Add course :
course add c/COURSE_CODE n/COURSE_NAME f/FACULTY_NAME
e.g.course add c/CEG n/Computer Engineering f/FoE
-
Delete course :
course delete c/COURSE_CODE
e.g.course delete c/CEG
-
Edit course :
course edit c/COURSE_CODE [n/COURSE_NAME] [f/FACULTY_NAME]
e.g.course edit c/CEG n/Comp Eng
-
List all courses :
course list
-
List all students ordered by courses :
course liststudents
-
Add student :
student add n/NAME i/ADMIN_NUMBER c/COURSE_CODE p/MOBILE_NUMBER e/EMAIL a/ADDRESS
e.g.student add n/Megan Nicole c/CEG e/E0169113@u.nus.edu a/14 Changi South i/A0177897E p/92667921
-
Update student :
student edit INDEX [n/NAME] [i/ADMIN_NUMBER] [c/CLASS] [p/MOBILE_NUMBER] [e/EMAIL a/ADDRESS] `
e.g. `student edit 1 p/99887890 a/14 Simei Avenue 1 -
Finding a student by name :
student find STUDENT_NAME
e.g.student find Megan Nicole
-
List all students :
student list
-
Delete student by INDEX :
student delete
e.g.student delete 2
-
Export students [COMING IN V2.0] :
student export
e.g.student export C:\export
-
Add module :
module add mc/MODULE_CODE mn/MODULE_NAME
e.g.module add mc/CS2113 mn/Software Engineering
-
Update module :
module edit mc/MODULE_CODE mn/MODULE_NAME
e.g.module edit mc/CS2113 mn/Software
-
Remove module :
module delete mc/MODULE_CODE
e.g.module delete mc/CS2113
-
View module details :
module view mc/MODULE_CODE
e.g.module view mc/CS2113
-
Find module by module code :
module find KEYWORD [MORE_KEYWORDS]
e.g.module find cs2113 structures
-
List modules :
module list
-
Enrol student in module :
module enrol mc/MODULE_CODE i/MATRIC_NUMBER…
e.g.module enrol mc/CS2113 i/A0167263X i/A0179821B
-
Archive module :
module archive mc/MODULE_CODE
[coming in v1.4]
e.g.module archive mc/CS2113
-
Assign TA :
module assign mc/MODULE_CODE [i/MATRIC_NUMBER] [e/EMAIL]
[coming in v2.0]
e.g.module assign mc/CS2113 i/A0171234B
-
Add Gradebook Component :
gradebook add mc/MODULE_CODE cn/COMPONENT_NAME [mm/MAX_MARKS] [w/WEIGHTAGE]
e.g.gradebook add mc/CS2113 cn/Assignment 1 mm/60
-
Edit Gradebook Component :
gradebook edit mc/MODULE_CODE cn/COMPONENT_NAME [en/EDITED_COMPONENT_NAME] [mm/EDITED_MAX_MARKS] [w/EDITED_WEIGHTAGE]
e.g.gradebook edit mc/CS2113 cn/Assignment 1 en/Finals
-
Delete Gradebook Component :
gradebook delete mc/MODULE_CODE cn/COMPONENT_NAME
e.g.gradebook delete mc/CS2113 cn/Assignment 1
-
List Gradebook Components :
gradebook list
e.g.gradebook list
-
Find Gradebook Components :
gradebook find mc/MODULE_CODE cn/COMPONENT_NAME
e.g.gradebook find mc/CS2113 cn/Assignment 1
-
List Students Grades :
grade list
e.g.grade list
-
Add Student Grade :
grade add mc/MODULE_CODE cn/COMPONENT_NAME i/MATRIC_NO m/MARKS
e.g.grade add mc/CS2113 cn/Assignment 1 i/A0167789S m/50
-
Edit Student Grade :
grade edit mc/MODULE_CODE cn/COMPONENT_NAME i/MATRIC_NO m/MARKS
[coming in v2.0]
e.g.grade edit mc/CS2113 cn/Assignment 1 i/A0167789S m/20
-
Display Graph of Student Grades :
grade graph mc/MODULE_CODE cn/COMPONENT_NAME
e.g.grade graph mc/CS2113 cn/Finals
-
Creating a class
class add cn/CLASS_NAME mc/MODULE_CODE e/ENROLLMENT_SIZE
e.g.class add cn/T16 mc/CG1111 e/20
-
List class
class list
e.g.class list
-
Modifying class enrollment limits
class edit cn/CLASS_NAME mc/MODULE_CODE e/ENROLLMENT_SIZE
e.g.class edit cn/T16 mc/CG1111 e/69
-
Deleting a class
class delete cn/CLASS_NAME mc/MODULE_CODE
e.g.class delete cn/T16 mc/CG1111
-
Assigning a student to class
class addstudent cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
e.g.class addstudent cn/T16 mc/CG1111 i/A6942069M
-
Unassigning a student from class
class delstudent cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
e.g.class delstudent cn/T16 mc/CG1111 i/A6942069M
-
Marking class attendance list
class markattendance cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
e.g.class markattendance cn/T16 mc/CG1111 i/A6942069M
-
Accessing class attendance list
class listattendance cn/CLASS_NAME mc/MODULE_CODE
e.g.class listattendance cn/T16 mc/CG1111
-
Modifying class attendance list
class modattendance cn/CLASS_NAME mc/MODULE_CODE i/MATRIC_NO
e.g.class modattendance cn/T16 mc/CG1111 i/A6942069M
-
Add a note
note add [mc/MODULE_CODE] [sd/START_DATE] [st/START_TIME] [ed/END_DATE] [et/END_TIME] [lc/LOCATION]
e.g.note add tt/Consultation lc/NUS Techno Edge
-
List notes
note list [mc/MODULE_CODE]
e.g.note list mc/CS2113
-
Delete a note
note delete INDEX
e.g.note delete 8
-
Edit a note
note edit INDEX [mc/NEW_MODULE_CODE] [sd/NEW_START_DATE] [st/NEW_START_TIME] [ed/NEW_END_DATE] [et/NEW_END_TIME] [lc/NEW_LOCATION]
e.g.note edit 5 ed/30-12-2018
-
Find a note
note find k/KEYWORD [k/MORE_KEYWORDS]..
e.g.note find k/bubble k/queue
-
Export notes
note export fn/FILE_NAME
e.g.note export fn/notes
-
History :
history
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Class Add feature
Current Implementation
The add mechanism is facilitated by ClassroomManager
supported by StorageController
.
It makes use of the following operations:
-
ClassroomManager#addClassroom()
— Adds a new classroomList to the in-memory array list. -
ClassroomManager#readClassroomList()
— Gets the classroom list from storage and converts it to a Classroom array list. -
ClassroomManager#saveClassroomList()
— Converts the classroom array list and invokes the StorageController to save the current classroom list to file.
These operations are used in the ClassAddCommand
class under ClassAddCommand#execute()
.
Given below is an example usage scenario and how the add/list mechanism behaves at each step.
Step 1. The user launches the application for the first time. The StorageController#retrieveData()
will retrieve all datasets saved locally.
Step 2. The user executes class add c/16…
command to add a new classroom to Trajectory. The class add
command calls the ClassAddCommand#execute()
. The ClassroomManager
will be instantiated and read the classroom list from the storage and converts the data from XmlAdaptedClassroom to the Classroom data type.
Step 3. The classroomManager#saveClassroomList()
will be called to converts the classroom array list and invokes the StorageController to save the current classroom list to file. This is done by first converting our Classroom
object into XmlAdaptedClassroom
objects and saving it.
The following sequence diagram summarizes what happens when a user executes a new command:
Class List feature
Current Implementation
The list mechanism is facilitated by ClassroomManager
supported by StorageController
.
It makes use the following operations:
-
ClassroomManager#readClassroomList()
— Gets the classroom list from storage and converts it to a Classroom array list. -
ClassroomManager#saveClassroomList()
— Converts the classroom array list and invokes the StorageController to save the current classroom list to file. -
ClassroomManager#getClassroomList()
— Gets the classroom list from the in-memory array list.
These operations are used in the ClassListCommand
class under ClassListCommand#execute()
..
Given below is an example usage scenario and how the add/list mechanism behaves at each step.
Step 1. The user launches the application for the first time. The StorageController#retrieveData()
will retrieve all datasets saved locally.
Step 2. The user executes class list
command to list all classrooms to Trajectory. The class list
command calls the ClassListCommand#execute()
. The ClassroomManager
will be instantiated and read the classroom list from the storage and converts the data from XmlAdaptedClassroom to the Classroom data type.
Step 3. The classroom list with the corresponding classroom information will be appended to the with the support of the StringBuilder
and displayed as a message successfully.
The following activity diagram summarizes what happens when a user executes a new command:
Use case: Assign Student To Class
Precondition(s) :
-
Module code exists in data file.
-
Student exists and enrolled into module in data file.
-
Class must not be full.
-
Class belonging to the module code exists in data file.
Guarantees :
-
NIL
MSS :
-
User enters command to assign a student to class.
-
Student gets assigned to class.
-
System displays message of successful assignment of student to class.
Use case ends.
Extensions :
-
1a. User entered invalid command.
-
1a1. System shows ‘invalid format’ error.
Use case resumes at step 1.
-
-
1b. Class doesn’t exist.
-
1b1. System displays class not found error.
Use case resumes at step 1.
-
Use case: Unassign Student From Class
Precondition(s) :
-
Module code exists in data file.
-
Student exists and enrolled into module in data file.
-
Class belonging to the module code exists in data file.
-
Student must be assigned to class before unassigning them.
Guarantees :
-
NIL
MSS :
-
User enters command to unassign a student from class.
-
Student gets unassigned from class.
-
System displays message of successful unassignment of student from class.
Use case ends.
Extensions :
-
1a. User entered invalid command.
-
1a1. System shows ‘invalid format’ error.
Use case resumes at step 1.
-
-
1b. Module code doesn’t exist.
-
1b1. System displays module not found error.
Use case resumes at step 1.
-
-
1c. Specified student does not belong to class.
-
1c1. System displays specified student does not belong to class error.
Use case resumes at step 1.
-
Use case: Mark Class Attendance List
Precondition(s) :
-
Student exists in data file.
-
Module code exists in data file.
-
Class belonging to module code exists in data file.
-
Student must be assigned to class.
Guarantees :
-
NIL
MSS :
-
User enters command to mark class attendance.
-
Class attendance is marked for specified student.
-
System displays message of successful marking of class attendance list.
Use case ends.
Extensions :
-
1a. User entered invalid command.
-
1a1. System shows ‘invalid format’ error.
Use case resumes at step 1.
-
-
1b. Specified student does not belong to class.
-
1b1. System displays specified student does not belong to class error.
Use case resumes at step 1.
-
Use case: Access Class Attendance List
Precondition(s) :
-
Module code exists in data file.
-
Class belonging to module code exists in data file.
Guarantees :
-
NIL
MSS :
-
User enters command to view class attendance list.
-
System displays the class attendance list.
Use case ends.
Extensions :
-
1a. User entered invalid command.
-
1a1. System shows ‘invalid format’ error.
Use case resumes at step 1.
-
Use case: Modify Class Attendance List
Precondition(s) :
-
Module code exists in data file.
-
Class belonging to the module code exists in data file.
-
Student exists in data file and must be marked present.
Guarantees :
-
NIL
MSS :
-
User enters command to modify class attendance list.
-
The class attendance list is updated.
-
System displays message of successful modification of class attendance list.
Use case ends.
Extensions :
-
1a. User entered invalid command.
-
1a1. System shows ‘invalid format’ error.
Use case resumes at step 1.
-