PROJECT: Restaurant Management System


About Myself

Hello, my name is Kang Ming and I am a Year 2 Computer Engineering student at the National University of Singapore (NUS). The purpose of this page is to showcase and document my contributions to a recent software engineering project that I have been working on. The next section will provide a brief overview of what my project is about.

Overview of the Restaurant Management System

Restaurant Management System (RMS) is a restaurant management solution that helps restaurants make more money, deliver great customer experience and bring honest and meaningful statistics to the table. The RMS was designed to improve the efficiency of completing mundane processes such as taking orders and counting the cash so that you can focus on the important things that matter - serving your customers with great food.

This application is created by my team, which comprises of 5 people including myself, for the NUS module CS2113T titled, Software Engineering & Object-Oriented Programming. The project lasted for around 10 weeks and we were expected to work with an existing sample codebase given by the module. The objective was to innovate and develop the existing codebase into a desktop application for a specific group of users - restaurant owners.

The workflow of the RMS closely resembles that of a Scrum-Agile framework. At the beginning of the project, we started off with an initial architectural modeling. The project required us to release a working version of our product almost every fortnightly. Within the team, we set weekly milestones and meetings to ensure that everyone is always on track with the development of the RMS. My role in the team was to be the team leader and I was responsible for the overall project coordination. Throughout this development cycle, I have made various contributions to the team, from creating new features, writing tests and documentation and ensuring that each release is functional.

Below shows a screenshot of the simple command-line-interface of the RMS and some of the main commands to get started:

Ui

If you wish to experience a more hands-on approach to use the RMS, please key in help upon running the application to get the full list of commands.

If you are looking for a detailed tutorial on how to use the RMS, please refer to our User Guide.

If you are looking for the detailed architecture and design of the RMS or wish to contribute code to this application, please refer to our Developer Guide

Summary of contributions

Given below are various code contributions I have made. They showcase my coding ability as well as my ability to work in a team effectively.

  • Major enhancement: Created a membership platform for the RMS

    • What it does: The membership platform allows the restaurant to keep track of its existing members and accumulate their membership points. It also allows the restaurant manager / cashier to list, add and delete members from the system.

    • Justification: This feature improves the product significantly because it is an innovative way for restaurants to retain their customers.

    • Highlights: It is essential that the membership system is well integrated together with the order system. This is to ensure that when an order is made by an existing member, the member’s membership points will correspondingly be updated. Also, the commands implemented should be easy to understand and use for a non-tech savvy audience. It is important that the invalid command formats are properly taken care of in a way that it guides the user with examples on how to properly use the platform.

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

    • Below shows a series of images that are meant to aid the understanding of the features that I have developed:

AddMember

Firstly, the Restaurant Manager / Cashier can easily add a new customer as a member of the restaurant to the RMS easily.

ListOrder

Next, when a member’s order is confirmed , the RMS will display the amount of points earned from the order. This allows the Cashier to inform the member how many points he/she has earned.

OrderBeforeRedemption

When a member places an order, the RMS will display the amount of points that can be redeemed.

OrderAfterRedemption

The Cashier can then simply enter the amount of points that the member wishes to redeem. The redeemed points will then translate into a discount for the final price that has to be paid. For illustration purposes, a 100 points is equivalent to $1.

PointsEarned

Regardless of whether the member decides to redeem points, the member will earn points based on the final price of the order. For illustration purposes, $1 is equivalent to 10 points.

  • Code contributed: https://nuscs2113-ay1819s1.github.io/dashboard/#=undefined&search=kangmingtay

    • Project Management:

      • Managed releases v1.1 - v1.3 (3 releases) on GitHub

    • Membership Platform Enhancement:

    • Tests for membership features:

      • Addition of tests for membership feature: #70, #200, #201

    • Documentation:

      • Addition of content to User Guide: #3, #4, #74, #204

      • Addition of content to Developer Guide: #85

    • Community:

      • PRs reviewed (with non-trivial review comments): #72, #116

    • Tools:

      • Set up continuous integration using Travis.

      • Set up auto-publishing of documentation using Travis to deploy docs to gh-pages.

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.

Members

Add Member

Add a new member to the RMS
Format: addmember NAME e/EMAIL

  • Member name cannot be longer than 30 alphanumeric characters and spaces.

  • Member name must have at least 1 character.

  • Email should be 2 alphanumeric/period strings that are no longer than 20 characters separated by '@'

Example:
addmember kang ming e/kangming@rms.com
Returns: New member added: kang ming | Email: kangming@rms.com | Available Points: 0 | Total Points: 0 | Tier: Bronze | Date: Mon Oct 20 22:12:07 SRET 2018

List Member

Shows a list of all the members in the RMS. Displays the NAME, POINTS, DATE JOINED, MEMBERSHIP TIER of each member.
Format: listmember

Example:
listmember

Delete Member

Delete membership details of a member in the RMS
Format: delmember INDEX

  • Deletes the member at the specified INDEX.

  • The index refers to the index number shown in the displayed member list.

  • The index must be a positive integer 1, 2, 3 …​

Example:
listmember
delmember 1

Returns: Deleted member: kang ming | Email: kangming@rms.com | Available Points: 0 | Total Points: 0 | Tier: Bronze | Date: Mon Oct 20 22:19:32 SRET 2018

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.

Architecture

Architecture
Figure 1. Architecture Diagram

The Architecture Diagram given above explains the high-level design of the App. Given below is a quick overview of each component.

  • At app launch: Initializes the components in the correct sequence, and connects them up with each other.

  • At shut down: Shuts down the components and invokes cleanup method where necessary.

Commons represents a collection of classes used by multiple other components. Two of those classes play important roles at the architecture level.

  • Messages : Used by many classes to write user visible message.

  • Utils : Contains all the utility methods.

  • Name : The parent class to the MemberName and EmployeeName classes.

  • Email The parent class to the MemberEmail and EmployeeEmail classes.

The rest of the App consists of four key components.

  • UI: The UI of the App.

  • Logic: The command executor.

  • Data: Holds the data of the App in-memory.

  • Storage: Reads data from, and writes data to, the hard disk.

Use case: List member

System: Restaurant Management System (RMS)
Use Case: List member
Actor: Restaurant Manager / Cashier
Preconditions: User has started up the system.
Guarantees:

  • List of members will be displayed.

MSS

  1. User chooses to view the entire list of members.

  2. RMS displays a list of the employees.

    Use case ends.

Use case: Add member

Actor: Restaurant Manager / Cashier
Preconditions: User has started up the system.
Guarantees:

  • New member is added to the RMS.

MSS

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

  2. RMS adds a new member to the 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 there is an attempt to add a duplicate member.

    • 1b1. RMS displays an error that says the member already exists in Rms.

      Use case ends.

Use case: Delete member

Actor: Restaurant Manager / Cashier
Preconditions: User has started up the system.
Guarantees:

  • Existing member is deleted from the RMS.

MSS

  1. User requests to delete an existing member in the list of members.

  2. RMS deletes the existing member at the index that was 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 there is an attempt to delete a member that does not exist in the RMS.

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

      Use case ends.

Providing the option for members to accumulate and redeem points

To allow members in the RMS to accumulate and redeem points when an order is made, the command draftpoints was implemented.

  • As long as the customer and list of dish fields are not empty, the command draftpoints can be used to add a Points object from the Member class into the draft order. A new Points object will be created to store the points that the user wishes to redeem. Once the order is confirmed, the Points object in the Member class that was added by using the draftcustomer command will be updated. The member list will then show the newly updated points of that member while the order list will reflect the points that the member has earned from the order. The final price of the order will be calculated based on the price of each dish multiplied by the quantity and also take into account the number of points redeemed.