PROJECT: Restaurant Management System


homepage

About Myself

My name is Salsabil Tasnia Ali Nikita MD, I am a Year 2 Computer Engineering student in National University of Singapore (NUS). The purpose of this portfolio is to document my contributions to the Restaurant Management System project.

Overview

Restaurant Management System (RMS) is a desktop management App targeted to Fast Food Chains. It is an integrated system that caters to both front end and back end operations in a restaurant. This application is developed to be used by managers, cashiers and other employees in a restaurant.

For this system, I have developed the Menu system. A system that is vital for day-to-day operations of any restaurant, this feature is primarily catered to cashiers and restaurant managers. It consists of a database that stores all the menu items of a restaurant and separates them into different categories: Main, Sides, Beverage, Others, Set Meals. The menu data base is accessed for multiple operations of a restaurant, such as taking orders and collating statistics. The menu is accessed through a set of commands that I have implemented to support different operations. Some of these commands accesses the menu database, while others modifies the existing database.

RMS was created using Java and has a user interface that uses CLI. The project contains approximately 10k LoC and is thoroughly tested through multiple forms of testing. Through this project, I have gained experience in Java programming, learned how to effectively use Git Hub to collaborate with other programmers for a project and conduct thorough testing and documentation necessary when developing a product.

Summary of contributions

This sections provides a summary of the various contributions I have made to the RMS project. These contributions include Major enhancement, Code contributions and Other contributions.

  • Major Enhancement: Added the Menu Feature

    • Usage: Menu feature is mainly used by cashiers and managers for conducting separate set of operations

      Cashiers:
      Menu allows cashiers to view the menu items as a list (according to their categories) when taking an order. Using a search option, cashiers are able to find a particular menu item if they wish not to scroll through the different item categories to find one item. Finally, cashiers are also able to suggest items to customers by viewing the recommended items.
      Managers:
      Menu allows cashiers to add and delete items, individually, from the menu data base. It also allows them to clear all content of a menu if needed. Managers are also able to conduct the same operations as cashiers if needed.
    • Why the feature is important: The hassle of having separate systems for front-end and back-end operations is reduced with the RMS menu feature as it caters to both sides. With our menu feature, ordering is made easier and faster. Categorizing allows cashiers to navigate through the menu items much easily when taking an order. Furthermore, search option allows them to find a particular item in just one step, which increases efficiency when taking an order. Recommendations is useful when catering to first-time customers and customer service of a restaurant. Additionally, the feature caters to back-end operations, usually conducted by managers, such as updating the existing menu and clearing it if needed.

    • Highlights: This enhancement required me to understand the needs of a fast food chain and add, modify and improve existing commands to optimize day-to-day operations. The implementation was challenging as it required making major and minor changes to existing to morph into a menu system, while adding new commands to the feature.

    • Credits: https://github.com/nusCS2113-AY1819S1/addressbook-level3

  • Code Contributed: Salsabil Tasnia Ali Nikita MD

  • Other Contributions

    • Project Management

      • Was in charge of creating the Readme.adoc file, which served as the homepage of our product.

      • Managed the Git Hub Issue tracker by raising new issues.

  • Enhancement to existing feature

    • Created test cases to test for the existing features to ensure every command functions as expected

    • Wrote additional methods for team mate who required accessing the menu feature.

  • Documentation:

  • Community:

    • PRs reviewed (with non-trivial review comments): #109, #37, 36,

Contributions to the User Guide

Given below are sections I contributed to the User Guide. This section provides explicit instructions on how to use the Menu Feature and explains the outcome of each of the menu commands. A summary of the different commands used to operate the Menu is also provided. Overall, the User Guide serves as a manual for first time users of RMS and taken them step-by-step through each features.

Show Main Menu

Shows a list of menu categories available.

Format: showmainmenu

List Menu

Shows a list of all the menu items that exists in the restaurant’s menu database.

Each menu item include details of: menu item, price, type and any relevant tags.

Format: listmenu

  • List the current menu items in the menu

List Menu According to Category

Shows a list of the menu items of a particular category type. The category types are shown in the Main Menu (e.g main, sides).

Each menu item include details of: menu item, price, type and any relevant tags.

Format: listmenutype TYPE

  • List the current menu items of a particular category in the menu

Example:
listmenutype main
System shows all the main dishes in the menu.

Add Menu

Add a new item to the menu.
Format: addmenu NAME p/PRICE type/TYPE [t/TAG]…​

  • Adds the new menu item into the menu list

  • Names must be unique, cannot be longer than 30 alphanumeric characters and spaces. It must contain minimum one character.

  • Note that duplicate menu name is still detected even if the user tries to key in the same name with extra spaces at the end of the menu name (eg. 'Cheese Burger' and 'Cheese Burger ')

  • Price must follow the formal $A.BC or $A where A is a number of 1-3 digits and B and C are 1 digit each.

  • Type should only be of the following categories: main, sides, beverage, dessert, others, set meal

  • A new food item can have multiple tags (including 0)

Example:
addmenu Cheese Fries p/$3.50 type/sides t/newItem t/seasonalSpecial
System adds Cheese Fries to the existing menu.

Delete Menu

Delete an item on the menu
Format: delmenu INDEX
Preconditions: The user must perform 'List Menu' , 'List Menu According to Category' or 'Find Menu' use cases first before performing 'Delete Menu'

  • Deletes the menu item in that particular index

  • INDEX should be less than or equal to the total number of food items stated at the end of the list

Example:
listmenutype main
delmenu 1
System deletes menu item in index 1 from the displayed menu of main dishes.
listmenutype main
delmenu 1
System deletes the menu item in index 1 from the displayed menu of main dishes.
findmenu Cheese Fries
delmenu 3
System deletes Cheese Fries in index 3 from the displayed menu of items found with Cheese Fries keyword.

Find Menu

Finds the menu item(s) related to the keywords typed in by the user.
Format: findmenu KEYWORD [MORE KEYWORDS]

  • A list of menu items with names related to the keyword(s) will be displayed.

  • The search is case insensitive eg. cheese will match Cheese.

  • Order of keywords do not matter.

  • Only full words will be matched. eg burg will not match Burger

  • Menu items matching atleast one key word will be returned. eg '`cheese` will return Cheese Fries, Cheese Burger.

Example:
findmenu Burger Coke Fries
Returns Double Cheese burger, Veggie Burger, Coke, coke zero, Fries, Curly Fries

Displays the best selling items of each category, if they are sold, as the recommended items of the restaurant.
Format: recommendations

  • For a particular category, if no menu items are sold, items from that category will not be displayed under recommendations.

  • Atleast one item from each category must be sold in order for recommendations to reflect items from that category.

Example:
recommendations
Returns Main: Double Cheese Burger, Sides: French Fries, Beverage: Sprite

Show Main Menu Page : showmainmenu

Find Menu : findmenu KEYWORD [MORE KEYWORDS]

Add Item : addmenu NAME p/PRICE type/TYPE [t/TAG]

Delete Item : delmenu INDEX

List Menu : listmenu

List Menu According to Category : listmenubytype TYPE

See Recommended Menu Items : recommendations

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. This sections provides various scenarios when different aspects of the Menu feature ought be used and who should use them. It also shows the Data diagram that I have created for the entire project. This section allows new Developers of the product to understand each feature easily provides the architecture of the entire system.

Use case: Show Main Menu

System: Restaurant Management System (RMS)
Use Case: Show Main Menu
Actor: Manager, Cashier

MSS

  1. User chooses to view the Main Menu to see the categories of menu item available.

  2. RMS shows Main Menu of the restaurant.

Use case ends.

Use case: List Menu Based On Category

System: Restaurant Management System (RMS)
Use Case: List employees
Actor: Manager, Cashier
Preconditions: User executes the Show Main Menu use case to know the existing menu categories.
Guarantees:

  • List of menu items of a particular category will be displayed.

MSS

  1. User requests to list menu items of a particular category.

  2. RMS displays a list of the menu items of that category.

    Use case ends.

Extensions

  • 1a. RMS detects that an invalid type has been entered.

    • 1a1. RMS displays an error message stating what the valid item types are.

      Use case ends.

Use case: List Menu To View All Menu Items

System: Restaurant Management System (RMS)
Use Case: List employees
Actor: Manager, Cashier

Guarantees:

  • Displays list of menu items that exists in the menu database.

MSS

  1. User requests to view all the menu items of the menu database, not just based on their categories.

  2. RMS displays all the menu items that exist in the restaurant’s database.

    Use case ends.

Use case: Add Menu

Actor: Manager Preconditions: List Menu By Type command should be executed prior to this use case.
Guarantees:

  • New menu item is added to the RMS.

MSS

  1. User requests to add a new menu item with the required parameters.

  2. RMS adds a new menu item to the existing menu list with the parameters that were specified by the User.

    Use case ends.

Extensions

  • 1a. RMS detects that an invalid command format has been entered.

    • 1a1. RMS displays an error that says the command format is invalid.

    • 1a2. RMS displays information on the proper use of the command along with an example.

      Use case ends.

  • 1b. RMS detects that the new menu item to be added has the same name as one of the exisitng menu items.

    • 1b1. RMS detects this as an an attempt to add a duplicate menu item.

    • 1b2. RMS displays an error that says the employee already exists in Rms.

      Use case ends.

  • 1c. RMS detects that the price field entered is invalid.

    • 1c1. RMS dispays an error message stating the appropriate price field argument to be entered.

      Use case ends.

  • 1d. RMS detects that the type field entered is invalid.

    • 1d1. RMS dispays an error message stating what the valid item types are.

      Use case ends.

Use case: Delete menu

Actor: Restaurant Manager
Preconditions: List Menu By Type or Find Menu use case should be executed prior to this use case this use case.
Guarantees:

  • The specified menu item will be deleted from the RMS.

MSS

  1. User requests to delete menu item by using the index as shown on the list of menu items.

  2. RMS deletes a menu item of the specified index.

    Use case ends.

Extensions

  • 1a. RMS detects that an invalid index has been entered.

    • 1a1. RMS displays an error that says the index provided is invalid.

      Use case ends.

Use case: Find Menu

System: Restaurant Management System (RMS)
Use Case: Find Menu
Actor: Cashier

MSS

  1. User chooses to find menu items containing some keywords.

  2. RMS shows the menu items that contain those keywords.

Use case ends.

Use case: Menu Recommendations

System: Restaurant Management System (RMS)
Use Case: Menu Recommendations
Actor: Cashier

MSS

  1. User chooses to view the recommended items from the different categories.

  2. System displays the best seller items from each category as recommendations.

Use case ends.

Data component

DataComponent
Figure 1. Structure of the Data Component

API : data

  1. The Data stores the RMS data

  2. It does not depend on any of the other components

As a more OOP model, we can store a Tag list in RMS, which all the relevant features can reference. This would allow RMS to only require one Tag object per unique Tag, instead of each feature needing their own Tag object.