using System.Collections.Generic;
namespace IntroductionToCSharpSession3
public string ItemName { get; set;}
public decimal Prices { get; set; }
public decimal Calories { get; set; }
public MenuType ItemType { get; set; }
public int Id { get; set; }
public MenuItem(int id, string itemName, decimal price, decimal calories, MenuType itemType)
public List<MenuItem> MainMenu = new List<MenuItem>();
MenuItem item1 = new MenuItem(1, "Chezzy Sweet Wedges.", 2.00m, 587, MenuType.Food);
MenuItem item2 = new MenuItem(2, "Apple Slice.", 2.00m, 200, MenuType.Food);
MenuItem item3 = new MenuItem(3, "Fries.", 2.00m, 300, MenuType.Food);
MenuItem item4 = new MenuItem(4, "Palm size Pizza", 2.00m, 200, MenuType.Food);
MenuItem item5 = new MenuItem(5, "Ice Berg", 1.00m, 100, MenuType.ColdDrink);
public List<MenuItem> MainMenu = new List<MenuItem>();
MenuItem item1 = new MenuItem(1, "Laksa", 5.50m, 587, MenuType.Food);
MenuItem item2 = new MenuItem(2, "Roti Canai", 1.50m, 200, MenuType.Food);
MenuItem item3 = new MenuItem(3, "Roti Telur", 2.20m, 300, MenuType.Food);
MenuItem item4 = new MenuItem(4, "Coke", 2.10m, 200, MenuType.ColdDrink);
MenuItem item5 = new MenuItem(5, "Teh Panas", 1.10m, 100, MenuType.HotDrink);
public void DisplayTheMenu()
foreach(MenuItem item in MainMenu)
Console.WriteLine("Id {0} - Name {1}, Price {2}, Calories: {3}.", item.Id, item.ItemName, item.Prices, item.Calories);
public static void Main(string[] args)
Console.WriteLine("Welcome to Bersama-Sama Restaurant!");
Menu myRestaurantMenu = new Menu();
Dictionary<MenuItem, int> currentOrders = new Dictionary<MenuItem, int>();
myRestaurantMenu.DisplayTheMenu();
bool isOrderDone = false;
Console.WriteLine("Please enter the Id of the food, enter DONE to complete order");
string input = Console.ReadLine();
if(input.ToUpper() == "DONE")
else if(!string.IsNullOrEmpty(input))
int nInput = Convert.ToInt32(input);
MenuItem target = myRestaurantMenu.MainMenu.Find(x => x.Id == nInput);
Console.WriteLine("{0} has been ordered", target.ItemName);
if (currentOrders.ContainsKey(target))
currentOrders.Add(target, 1);
Console.WriteLine("Id {0} is not found in the menu.", nInput);
DisplayOrder(currentOrders);
decimal totalPrice = CalculateTotal(currentOrders);
decimal totalCalories = CalculateTotalCalories(currentOrders);
decimal totalGST = CalculateGST(totalPrice);
Console.WriteLine("The total price is ${0}, ${1} of gst is included, {2} total calories will be consumed", totalPrice, totalGST, totalCalories);
public static void DisplayOrder(Dictionary<MenuItem, int> orders)
foreach (var order in orders)
Console.WriteLine("Quantity: {0} Name: {1}", order.Value, order.Key.ItemName);
public static decimal CalculateTotalCalories(Dictionary<MenuItem, int> orders)
decimal totalCalories = 0;
foreach(MenuItem item in orders.Keys)
int quantity = orders[item];
decimal calories = item.Calories;
decimal itemCalories = quantity * calories;
totalCalories += itemCalories;
public static decimal CalculateTotal(Dictionary<MenuItem, int> orders)
foreach(MenuItem item in orders.Keys)
int quantity = orders[item];
decimal prices = item.Prices;
decimal itemPrices = quantity * prices;
totalPrices += itemPrices;
public static decimal CalculateGST(decimal total)
decimal gst = total * 0.06m;