PROJECT: AddressBook - Level 4


Overview

During our Software Engineering project, my teammates and I developed an inventory management application named Drink I/O for the usage inside a typical small drink store. Adopted from an Address Book application, Drink I/O is a desktop application written in Java with a CLI, and it has a GUI created with JavaFX. The product aims to increase the productivity and efficiency in the drink store as it provides a simpler way to manage the stocks, and thus resolves many difficulties the manager and employees may face when using traditional inventory manipulation strategies.

Summary of contributions

  • Major enhancement: Proposed to added the Calendar System

    • What it does: offer the users a clear view of the batches of drinks with corresponding number left in stock, shown in a calendar form.

    • Justification: This feature improves the efficiency because the manager and staffs in the drink store can share the same view of the calendar and everyone will be able to have real-time updates on the situation in the stocks.

    • Highlights: This enhancement uses JavaFX to show the calendar view in the GUI.

    • Credits: [CalendarFX API]

  • Minor enhancement: Morphed the storage for the Address Book towards the storage for drink inventory. XML files are used as the storage file.

  • Other contributions:

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub

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.

Managing Your Inventory

The core feature of Drink I/O is to manage your company’s inventory. This includes the adding of drinks into the inventory, deleting, viewing their details and updating these details.

In Drink I/O, each drink has a unique name, a selling price, a cost price, stock count and tags that allow you to classify the drink (e.g. soft drink, tea) and enter any other information.

Adding new drinks

You can add new drinks into your inventory to let Drink I/O track them.

Summary
Command format: add n/NAME p/SELLING_PRICE cp/COST_PRICE [t/TAG]…​

  • NAME is the name of the drink you wish to record

    • This name must be unique among the drinks recorded in Drink I/O

    • Names are case-sensitive, and must contain only alphanumeric characters and spaces

  • SELLING_PRICE is the default selling price of 1 carton of the drink

  • COST_PRICE is the default cost price of 1 carton of the drink

    • Prices must not be negative values, and should have at most 2 decimal places

  • TAG is optional, and must contain only alphanumeric characters

    • You can add any number of tags, including 0

Step-by-Step Instructions
To enter a new drink into Drink I/O,

  1. Enter add into the command box

  2. Key in n/, followed by name of drink (NAME)

  3. Key in p/, followed by default selling price of 1 carton of the drink (SELLING_PRICE)

  4. Key in cp/, followed by default cost price of 1 carton of the drink (COST_PRICE)

  5. Press enter

  6. Confirm the command by entering y or Y

  7. Press enter

  8. Check whether the drink has been recorded successfully in the system

    • If you see the message "New drink added", followed by the drink’s details that you entered, the drink has been successfully entered into Drink I/O

      • The drink will also appear at the bottom of the inventory list panel

    • If not, follow the instructions displayed in the message display pane, and re-enter the command

  • The new drink you want to add must be have a unique name among the drinks in Drink I/O.

  • The adding of the drink will fail if SELLING_PRICE or COST_PRICE are negative values.

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.

Storage component

StorageClassDiagram new
Figure 1. Structure of the Storage Component

API : Storage.java

The Storage component,

  • can save UserPref objects in json format and read them back.

  • can save the LoginInfo objects in json format and read them back.

  • can save the Inventory List data in xml format and read it back.

  • can save the Transaction List data in xml format and read it back.