Overview on Project
AddMin+ is a student developed application under the National University of Singapore’s CS2103T Software Engineering Module. The project required students to enhance a basic command-line interface desktop application which is the AddressBook - Level 3 that was developed by the se-edu team. The AddressBook - Level 3 is a desktop address book application that was designed to be used for teaching Software Engineering principles.
About AddMin+
The AddMin+ Team comprises of 5 Computer science students from AY1920S1-CS2103T-T11-3. The team decided to morph and enhance the capabilities of the original application into an all-in-one administration desktop application. The application is specially designed for the use of any events management start-up company that is faced with limited manpower and resources.
AddMin+ is specially designed to ease the workload of admin staff in these companies and allow them to effectively handle the administrative needs of the company by providing the following functions: event creation and deletion, editing of event details, manual and automatic manpower allocation for events and providing an overview of all the data via statistics while keeping track of the companies schedule to ensure that no event will be missed!
To give you a better picture of AddMin+! This is what the application looks like:
My Roles and Responsibilities
My project responsibilities and tasking include being in charge of the group’s documentation quality as well as ensure that high standards are maintained and delivered on time and in the right format.
While my coding related tasking was to design and write codes for the entire Schedule section of the project. The following sections will illustrate the enhancements in more detail, as well as provide relevant documentation that I have added to the user and developer guides in relation to those enhancements.
Before we start
The following symbols and formatting will be used throughout this document:
LightBulbs indicate a Tip, something that is helpful to the reader |
'i' Icon indicate a Note that supplements useful information |
Text in a blue font and grey
background indicates a hyperlink
Texts with a grey background
indicates Code Logic such as class objects, OOP definitions or user-input.
Summary of contributions
This section will show a summary of all the features, enhancements, documentation, and other useful contributions that I have contributed to the team project.
-
Major feature: added and implemented the entire Schedule section of the project which includes major GUI implementations and 4 schedule related commands.
-
What does it do: The Schedule section was implemented to allow users to have an easier way to view and identify events that are happening on a specific date or period. Thus, the
display_schedule_date
,display_schedule_month
anddisplay_schedule_between
commands were implemented. The enhancement was also done to improve the user experience, by providing a clean graphical representation of the user’s schedule through the use of thegenerate_schedule
command, greatly improving the application’s user experience. -
Justification: The Schedule feature improves the product significantly because it allows users to have a convenient way to view their upcoming event schedule and keep track of all the important event dates. The feature will greatly improve the user experience of the application by providing a clean user interface to allow the users to have a visual overview of their schedules.
-
Highlights: This enhancement requires handling and dealing with the
Event
objects extensively. The implementation of the Schedule feature required an in-depth analysis of the application’s storage and modeling architecture. The Schedule feature was also challenging as it required the implementation of an additionalDistinctDate
object for thegenerate_schedule
command which was also used in theEmployee
window. During the designing of the Schedule component, deep consideration was needed to ensure that the user interface was clean and optimal for the users.
-
-
Minor features: Multiple Graphic User Interface improvements were made throughout the application to improve the user experience. Implemented the tab recognition feature, which is used to restrict commands on specific tabs to prevent unusual behavior, which can cause users to be confused. Other minor features includes the implementation of the
add_ev
,edit_ev
,find_em_tag
andfind_ev_tag
commands for the AddMin+ App. -
Code contributed: [tp Code Dashboard]
-
Model: [TagContainsKeywords, EventContainsKeyDate, EventContainsKeyDateRange, EventContainsKeyYearMonth, EventTagContainsKeywords, DistinctDate]
-
Command: [FindEventByTag, FindEmployeeByTag, GenerateSchedule, DisplayScheduleBetween, DisplayScheduleForDate, DisplayScheduleForYearMonth]
-
Parser: [DisplayScheduleBetween, DisplayScheduleForDate, DisplayScheduleForYearMonth, FindEventByTag, FindEmployeeByTag]
-
Others: [DistinctDatesProcessor, DateCard, DateWindow, FetchEmployeeWindow, ScheduleBox]
-
-
Test Code Contributed:
-
Model: [EventContainsKeyDate, EventContainsKeyDateRange, EventContainsKeyYearMonth, DistinctDateTest]
-
Command: [GenerateSchedule, DisplayScheduleBetween, DisplayScheduleForDate, DisplayScheduleForYearMonth]
-
Parser: [DisplayScheduleBetween, DisplayScheduleForDate, DisplayScheduleForYearMonth]
-
TestUtil: [DistinctDateBuilder, EventBuilder, TypicalDistinctDates, TypicalEvents]
-
-
Other contributions:
-
Project management:
-
In-charged of keep track of deadlines, submissions and issue trackers as well as the entire team’s documentation quality.
-
In-charged of Add and Edit event commands for AddMin+ (Pull requests #76, #79)
-
In-charged of Find Employee and Event Tags commands for AddMin+ (Pull requests #197)
-
In-charged of the entire Schedule feature of AddMin+ which includes 4 schedule related commands (Pull requests #102, #109, #138, #139)
-
In-charged of setting up test cases for all Schedule feature - commands, parsers, predicates (Pull requests #233, #249, #267)
-
Assisted in morphing the Events class and storage units into AddMin+ (Pull requests #76, #79)
-
Assisted in the refactoring process for person class to employee class and well as fixed test cases and checkstyle errors. (Pull requests #92)
-
Assisted in debugging AddMin+ based on User Feedback and Mock Practical Exam Feedback (Pull requests #197)
-
Assisted in setting up the test structure for Events to facilitate easier Events related test cases (Pull requests #233)
-
Assisted in implementing AddMin+ tab recognition, to reduce any unusual app behavior. (Pull requests #155, #160, #265)
-
-
Enhancements to existing features:
-
Documentation:
-
Community:
-
Contributions to the User Guide
The original user guide has been updated to document the new capabilities of the AddMin+ functionality. The following are excerpts from the AddMin+ User Guide, which will showcase the sections that I have contributed to, in particular, the Schedule section of the UG. They will showcase my ability to write documentation for end-users. |
Schedule Management
Welcome to Schedule! Looking for a way to display and see what events you have on a specific Date or Month? Want to have an overview of all the dates where you have an event? Then you are at the right place!
To get things started, all Schedule-related commands occur in the Schedule Tab as seen from the figure below. You can get to the Schedule Tab easily by either clicking on the Schedule Tab on the User Interface or just simply type in any Schedule-related commands and AddMin+ will bring you there.
|
Display Schedule for a specific date: display_schedule_date
Want to check if you have any events on a specific date?
Instead of looking through the entire list of events you have, you could use the display_schedule_date
command to do it!
Format: display_schedule_date on/dd/MM/yyyy
Examples:
display_schedule_date on/02/12/2019
Example: To display schedule for a specific date (20/11/2019):
Step 1.
Either type display_schedule_date on/20/11/2019
into the command box or click on the specific date from the date picker as seen from the figure below.
Step 2. The result box will display a message informing you how many events are being listed. In this case, the message displayed is "1 event listed!"
Step 3. In the event list, you will be able to see all the events that are on the specified date. In this case, the only event that is on 20/11/2019 is "Talk by DEF Company".
|
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. The section will cover the design considerations and
design code structure of the |
Generate Schedule Feature
Proposed Implementation
The Generate Schedule Feature is implemented to allow users to have an overview of the event schedule.
It will display all dates that have an event and the specific events that are happening on those dates listed.
Do note that the generate_schedule
command will only display dates and events that have a set date and time allocated to it.
The feature is facilitated by a DistinctDatesProcessor
and requires the use of a new Object - DistinctDate
, as well as an internal ObservableList - distinctDatesList
found in the ModelManager
.
The DistinctDateProcessor
processes the entire list of Events in the EventList
when the command is called.
The DistinctDateProcessor
will then process through these events to create specific DistinctDate
Objects which stores a list of events that occurs on the date they are representing.
These DistinctDate Objects are then used, to create DateCard
which will be displayed on the GUI. This feature can be seen in the generate schedule window as well as the employee fetch window.
The DistinctDateProcessor
utilises the following operations in the generate_schedule
command:
-
generateAllDistinctDateList(Model model)
— Returns a list ofDistinctDate
Objects. This operation utilises the generateDistinctDateList() operations. -
generateDistinctDateList(List<Event> eventList)
— Returns a list ofDistinctDate
Objects. This operation utilises the generateDateList() and generateListOfEventForDate() operations. -
generateDateList(List<Event> eventList)
— Takes in the entire list of events, identify all the dates that have been mapped to which that has at least one event and returns it as a list. -
generateListOfEventForDate(EventDate date, Model model)
— Takes in anEventDate
object, and processes through the entire list of events, to find all events on that specific date, and return them as a list.
Below is an example usage scenario and how the generate_schedule
command behaves at each step.
Step 1. The user launches the application for the first time.
Step 2.
The distinctDatesList
will be initialised based on the initial event book state.
Step 3.
The user executes add_ev n/Free Coffee …
to add a new event into the Eventlist.
The distinctDatesList will not be updated, and will not contain the new event that is added.
Any command that alters the eventBook will not change the distinctDatesList. Only when the generate_schedule command is called,
a new distinctDateList will be generated again using the latest EventList.
|
Step 4.
The user executes generate_schedule
to see all the dates that have a set time mapping and the respective events on those dates.
Step 5. The distinctDateList will be generated again based on the current list of events in the EventList and will be displayed on a separate window.
Step 6. The user now decides to close the app, the current state of the EventBook and EmployeeBook will be stored, however, the DistinctDateList would not.
Note that the Generate Schedule Feature does not load and store the DistinctDate Objects. It processes and generates the list when it is called upon or when the application starts. |
Step 7. Done.
The following sequence diagram shows how the generate_schedule
operation works:
The lifeline for GenerateScheduleCommand ends at the destroy marker (X).
|
Design Considerations
Alternative 1 |
Alternative 2 |
|
Consideration 1: |
Generates and Processes the DistinctDate Object upon Pros: Cons: |
Creates and Stores the DistinctDate object whenever a new event is added. Pros: Cons: |
Why We chose Alternative 1: |
Alternative 1 |
Alternative 2 |
|
Consideration 2: |
Display Directly on the Schedule Tab, update the list when Pros: Cons: |
Display on a separate window generates and display the list on the new window when Pros: Cons: |
Why we chose Alternative 2: |
Conclusion:
The AddMin+ project was created by the AddMin+ Team as part of a university module requirement. Through AddMin+, I was able to experience what it was like to be involved in a software development project, where we were able to experience both the technical and non-technical aspects of a software development project. We were able to directly apply the key software development concepts taught in CS2103T in our project and also experience what it was like dealing with a brown-field project.
Another aspect of software development which I felt is often overlooked is actually the non-technical aspect, such as documentation writing. However, through CS2101, we were able to learn the steps of writing quality documentation of our project that caters to our target audiences. Finally, even though the AddMin+ project was only 6 weeks long, I was able to pick up many valuable knowledge that will be essential in becoming a software developer in the future. If you would like to know more about me or AddMin+, feel free to drop by my personal website or contact me via LinkedIn.