package Assignments;
import [Link];
import [Link];
import [Link].*;
public class RESTO {
static class MenuItem {
String name;
double price;
public MenuItem(String name, double price) {
[Link] = name;
[Link] = price;
}
}
static class Order {
int orderNumber;
String orderDate;
List<OrderDetails> items;
public Order(int orderNumber) {
[Link] = orderNumber;
[Link] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
[Link] = new ArrayList<>();
}
public void addItem(MenuItem item, int quantity) {
[Link](new OrderDetails(item, quantity));
}
}
static class OrderDetails {
MenuItem item;
int quantity;
public OrderDetails(MenuItem item, int quantity) {
[Link] = item;
[Link] = quantity;
}
}
private static final Map<String, List<MenuItem>> menu = new LinkedHashMap<>();
private static final Map<Integer, MenuItem> numberedMenu = new HashMap<>();
private static final List<Order> orders = new ArrayList<>();
private static int orderCount = 0;
public static void main(String[] args) {
checkLogin();
}
static void mainMenu() {
Menu();
Scanner scanner = new Scanner([Link]);
boolean isRunning = true;
while (isRunning) {
[Link]("\n===== Restaurant Ordering System =====");
[Link]("1. Display Menu");
[Link]("2. Place an Order");
[Link]("3. Remove an Order");
[Link]("4. Calculate Total Bill");
[Link]("5. Generate Report");
[Link]("6. Exit");
[Link]("Enter your choice: ");
int choice = [Link]();
switch (choice) {
case 1: displayMenu(); break;
case 2: placeOrder(scanner); break;
case 3: removeOrder(scanner); break;
case 4: calculateBill(scanner); break;
case 5: generateReport(); break;
case 6: isRunning = false; break;
default: [Link]("Invalid choice. Please try again.");
}
}
[Link]();
}
private static void Menu() {
[Link]("Main Course", [Link](
new MenuItem("Beef bulalo (2-3 servings)", 199.00),
new MenuItem("Kare-kare (1-2 servings)", 189.00),
new MenuItem("Pork sisig (2-3 servings)", 169.00)
));
[Link]("Sidedish", [Link](
new MenuItem("Laing (2-3 servings)", 199.00),
new MenuItem("Chopsuey (1-2 servings)", 189.00),
new MenuItem("Pinakbet (2-3 servings)", 169.00)
));
[Link]("Beverage", [Link](
new MenuItem("Ice tea (1 liter)", 60.00),
new MenuItem("Buko Pandan (1 liter)", 50.00),
new MenuItem("Mango Shake (1 serving)", 70.00)
));
[Link]("Dessert", [Link](
new MenuItem("Halo-Halo (1 serving)", 50.00),
new MenuItem("Maja Blanca (1-2 servings)", 60.00),
new MenuItem("Turon (per piece)", 15.00)
));
int itemNumber = 1;
for (List<MenuItem> category : [Link]()) {
for (MenuItem item : category) {
[Link](itemNumber++, item);
}
}
}
private static void displayMenu() {
[Link]("\n===== Menu =====");
for (String category : [Link]()) {
[Link]("\n" + category + ":");
for ([Link]<Integer, MenuItem> entry : [Link]()) {
if ([Link](category).contains([Link]())) {
[Link]("%d. %-20s ₱%.2f\n", [Link](),
[Link]().name, [Link]().price);
}
}
}
}
private static void placeOrder(Scanner scanner) {
Order order = new Order(++orderCount);
boolean ordering = true;
while (ordering) {
displayMenu();
[Link]("\nEnter the number of the Dish to order (Enter 0 to finish):");
int Dish = [Link]();
if (Dish == 0) {
ordering = false;
break;
}
MenuItem selectedItem = [Link](Dish);
if (selectedItem != null) {
[Link]("Enter the quantity:");
int quantity = [Link]();
[Link](selectedItem, quantity);
[Link](quantity + " " + [Link] + "(s) added to your order.");
} else {
[Link]("Invalid item number. Please try again.");
}
}
if (![Link]()) {
[Link](order);
}
}
private static void removeOrder(Scanner scanner) {
if ([Link]()) {
[Link]("\nNo orders to remove.");
return;
}
[Link]("\n===== Current Orders =====");
for (Order order : orders) {
[Link]("\nOrder #%d | Date: %s\n", [Link], [Link]);
for (OrderDetails orderDetails : [Link]) {
[Link]("%s x %d\n", [Link], [Link]);
}
}
[Link]("\nEnter the order number to remove: ");
int orderNumber = [Link]();
Order selectedOrder = [Link]().filter(o -> [Link] ==
orderNumber).findFirst().orElse(null);
if (selectedOrder != null) {
[Link]("Enter the dish number to remove: ");
int dishNumber = [Link]();
if (dishNumber <= [Link]() && dishNumber > 0) {
OrderDetails orderDetails = [Link](dishNumber - 1);
[Link]("Enter how many will be remove: ");
int Remove = [Link]();
if (Remove >= [Link]) {
[Link](orderDetails);
[Link]("All " + [Link] + "(s) removed.");
} else {
[Link] -= Remove;
[Link](Remove + " " + [Link] + "(s) removed.");
}
if ([Link]()) {
[Link](selectedOrder);
}
} else {
[Link]("Invalid dish number.");
}
} else {
[Link]("Invalid order number.");
}
}
private static void calculateBill(Scanner scanner) {
[Link]("\n===== Final Bill =====");
double total = 0.0;
for (Order order : orders) {
for (OrderDetails orderDetails : [Link]) {
double cost = [Link] * [Link];
total += cost;
[Link]("%-20s x %d = ₱%.2f\n", [Link],
[Link], cost);
}
}
[Link]("\nTotal: ₱" + total);
[Link]("With DISCOUNT? [y/n]: ");
String discount = [Link]();
if ([Link]("y")) {
[Link]("(1: PWD 20%, \n2: SCD 20%, \n3: Pag-ibig 5%):"
+ "Enter discount choice ");
int discountChoice = [Link]();
switch (discountChoice) {
case 1: total *= 0.20; break;
case 2: total *= 0.20; break;
case 3: total *= 0.5; break;
default: [Link]("Invalid choice.");
}
}
[Link]("Final Total: ₱%.2f\n", total);
double amountPaid = 0.0;
while (amountPaid < total) {
double Balance = total - amountPaid;
[Link]("\nRemaining Balance: ₱%.2f\n", Balance);
[Link]("Enter cash received: ₱");
double cash = [Link]();
if (cash < Balance) {
amountPaid += cash;
[Link]("Payment of ₱%.2f received. Remaining balance: ₱%.2f\n", cash,
Balance - cash);
} else {
amountPaid += cash;
double change = amountPaid - total;
[Link]("Cash Tendered of ₱%.2f received. Change to be given: ₱%.2f\n",
cash, change);
break;
}
}
[Link]("Ending Sale!.");
}
private static void generateReport() {
[Link]("\n===== Report =====");
if ([Link]()) {
[Link]("No orders to report.");
} else {
double totalReport = 0;
for (Order order : orders) {
double cost = 0;
[Link]("\nOrder #%d | Date: %s\n", [Link], [Link]);
for (OrderDetails orderDetails : [Link]) {
double itemTotal = [Link] * [Link];
[Link]("%-20s x %d = ₱%.2f\n", [Link],
[Link], itemTotal);
cost += itemTotal;
}
[Link]("Total for Order #%d: ₱%.2f\n", [Link], cost);
totalReport += cost;
}
[Link]("\nOverall Sales (today): ₱%.2fa\n", totalReport);
}
}
private static void checkLogin() {
Scanner scan = new Scanner([Link]);
String user = "Nadine geronimo";
[Link]("#= Welcome! To Restaurant Ordering Management System =#\n \n\t#= Login
=#\n");
[Link]("Enter username: ");
String name = [Link]();
[Link]("Enter password: ");
int pass = [Link]();
if ([Link](user) && pass == 1234) {
mainMenu();
} else {
[Link]("Incorrect username or password!");
checkLogin();
[Link]();
}
}
}