Menambahkan Fitur Pada Aplikasi Restoran Sederhana. Menambahkan Menu Harga, Mengubah Menu Harga dll

Pada artikel kali ini kita akan memperluas atau menambahkan fitur Aplikasi Restoran Sederhana dalam artikel Membuat Restoran Sederhana sebelumnya, jadi ini Part.2 nya ya guys. Langsung aja yuk kita simak penjelasaanya yaaa ☺️

Alur Memperluas: 

  • Memisahkan kategori saat menampilkan menu.
  • Memungkinkan pelanggan memesan lebih dari 4 item hingga mereka mengetik "selesai".
  • Mencatat detail pesanan pelanggan (nama item, jumlah, dan total per item).
  • Menyediakan fitur manajemen menu (menambah, mengubah, dan menghapus menu).
  • Mengelola array secara dinamis menggunakan ArrayList.

Alur Kerja: Buka file atau buat file Main.java pada VsCode. Lalu tuliskan code program seperti dibawah ini yaaa πŸ˜‰

import java.util.ArrayList;
import java.util.Scanner;

class Menu {
    String nama;
    double harga;
    String kategori;  // "Makanan" atau "Minuman"

    public Menu(String nama, double harga, String kategori) {
        this.nama = nama;
        this.harga = harga;
        this.kategori = kategori;
    }
}

public class Main {
    private static ArrayList<Menu> menuList = new ArrayList<>();
    private static ArrayList<String> pesanan = new ArrayList<>();
    private static ArrayList<Integer> jumlahPesanan = new ArrayList<>();

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        initializeMenu();

        while (true) {
            System.out.println("\n=== Restoran Frida ===");
            System.out.println("1. Menu Pelanggan");
            System.out.println("2. Manajemen Menu");
            System.out.println("3. Keluar");
            System.out.print("Pilih menu: ");
            int pilihan = Integer.parseInt(scanner.nextLine());

            switch (pilihan) {
                case 1:
                    pelangganMenu(scanner);
                    break;
                case 2:
                    manajemenMenu(scanner);
                    break;
                case 3:
                    System.out.println("Terima kasih telah menggunakan aplikasi!");
                    return;
                default:
                    System.out.println("Pilihan tidak valid.");
            }
        }
    }

    private static void initializeMenu() {
        menuList.add(new Menu("Nasi Goreng", 20000, "Makanan"));
        menuList.add(new Menu("Nasi Uduk", 15000, "Makanan"));
        menuList.add(new Menu("Nasi Padang", 20000, "Makanan"));
        menuList.add(new Menu("Bubur", 15000, "Makanan"));
        menuList.add(new Menu("Es Jeruk", 10000, "Minuman"));
        menuList.add(new Menu("Es Teh", 5000, "Minuman"));
        menuList.add(new Menu("Jus Alpukat", 20000, "Minuman"));
        menuList.add(new Menu("Air Dingin", 5000, "Minuman"));
    }

    private static void pelangganMenu(Scanner scanner) {
        pesanan.clear();
        jumlahPesanan.clear();
        while (true) {
            displayMenu();
            System.out.print("Masukkan nomor menu (1-" + menuList.size() + ") atau ketik 'selesai': ");
            String input = scanner.nextLine();

            if (input.equalsIgnoreCase("selesai")) {
                break;
            }

            try {
                int menuIndex = Integer.parseInt(input) - 1;
                if (menuIndex >= 0 && menuIndex < menuList.size()) {
                    Menu menu = menuList.get(menuIndex);
                    System.out.print("Masukkan jumlah: ");
                    int jumlah = Integer.parseInt(scanner.nextLine());
                    pesanan.add(menu.nama);
                    jumlahPesanan.add(jumlah);
                } else {
                    System.out.println("Nomor menu tidak valid.");
                }
            } catch (NumberFormatException e) {
                System.out.println("Input tidak valid.");
            }
        }

        if (!pesanan.isEmpty()) {
            cetakStruk();
        } else {
            System.out.println("Tidak ada pesanan yang dibuat.");
        }
    }

    private static void displayMenu() {
        System.out.println("\n=== Menu Restoran ===");
        System.out.println("Makanan:");
        for (int i = 0; i < menuList.size(); i++) {
            if (menuList.get(i).kategori.equals("Makanan")) {
                System.out.printf("%d. %s - Rp. %.2f%n", i + 1, menuList.get(i).nama, menuList.get(i).harga);
            }
        }
        System.out.println("Minuman:");
        for (int i = 0; i < menuList.size(); i++) {
            if (menuList.get(i).kategori.equals("Minuman")) {
                System.out.printf("%d. %s - Rp. %.2f%n", i + 1, menuList.get(i).nama, menuList.get(i).harga);
            }
        }
    }

    private static void cetakStruk() {
        double totalBiaya = 0;
        System.out.println("\n=== Struk Pesanan ===");
        for (int i = 0; i < pesanan.size(); i++) {
            String nama = pesanan.get(i);
            int jumlah = jumlahPesanan.get(i);
            double harga = 0;
            for (Menu menu : menuList) {
                if (menu.nama.equals(nama)) {
                    harga = menu.harga;
                    break;
                }
            }
            double subtotal = harga * jumlah;
            System.out.printf("%s x%d - Rp. %.2f%n", nama, jumlah, subtotal);
            totalBiaya += subtotal;
        }

        double pajak = totalBiaya * 0.1;
        double biayaPelayanan = 20000;
        double grandTotal = totalBiaya + pajak + biayaPelayanan;

        double diskon = 0;
        if (grandTotal > 100000) {
            diskon = grandTotal * 0.1;
        }
        grandTotal -= diskon;

        if (totalBiaya > 50000) {
            System.out.println("Penawaran: Beli 1 Gratis 1 untuk minuman (diskon Rp. 10.000)");
            grandTotal -= 10000;
        }

        System.out.printf("Total Biaya: Rp. %.2f%n", totalBiaya);
        System.out.printf("Pajak (10%%): Rp. %.2f%n", pajak);
        System.out.printf("Biaya Pelayanan: Rp. %.2f%n", biayaPelayanan);
        System.out.printf("Diskon: Rp. %.2f%n", diskon);
        System.out.printf("Grand Total: Rp. %.2f%n", grandTotal);
        System.out.println("=========================");
    }

    private static void manajemenMenu(Scanner scanner) {
        while (true) {
            System.out.println("\n=== Manajemen Menu ===");
            System.out.println("1. Tambah Menu");
            System.out.println("2. Ubah Harga Menu");
            System.out.println("3. Hapus Menu");
            System.out.println("4. Kembali");
            System.out.print("Pilih menu: ");
            int pilihan = Integer.parseInt(scanner.nextLine());

            switch (pilihan) {
                case 1:
                    tambahMenu(scanner);
                    break;
                case 2:
                    ubahHarga(scanner);
                    break;
                case 3:
                    hapusMenu(scanner);
                    break;
                case 4:
                    return;
                default:
                    System.out.println("Pilihan tidak valid.");
            }
        }
    }

    private static void tambahMenu(Scanner scanner) {
        System.out.print("Masukkan nama menu: ");
        String nama = scanner.nextLine();
        System.out.print("Masukkan harga menu: ");
        double harga = Double.parseDouble(scanner.nextLine());
        System.out.print("Masukkan kategori menu (Makanan/Minuman): ");
        String kategori = scanner.nextLine();
        menuList.add(new Menu(nama, harga, kategori));
        System.out.println("Menu berhasil ditambahkan!");
    }

    private static void ubahHarga(Scanner scanner) {
        displayMenu();
        System.out.print("Masukkan nomor menu yang ingin diubah: ");
        int index = Integer.parseInt(scanner.nextLine()) - 1;
        if (index >= 0 && index < menuList.size()) {
            System.out.print("Masukkan harga baru: ");
            double hargaBaru = Double.parseDouble(scanner.nextLine());
            menuList.get(index).harga = hargaBaru;
            System.out.println("Harga berhasil diubah!");
        } else {
            System.out.println("Nomor menu tidak valid.");
        }
    }

    private static void hapusMenu(Scanner scanner) {
        displayMenu();
        System.out.print("Masukkan nomor menu yang ingin dihapus: ");
        int index = Integer.parseInt(scanner.nextLine()) - 1;
        if (index >= 0 && index < menuList.size()) {
            System.out.println("Apakah Anda yakin ingin menghapus menu ini? (Ya/Tidak)");
            String konfirmasi = scanner.nextLine();
            if (konfirmasi.equalsIgnoreCase("Ya")) {
                menuList.remove(index);
                System.out.println("Menu berhasil dihapus!");
            } else {
                System.out.println("Menu tidak dihapus.");
            }
        } else {
            System.out.println("Nomor menu tidak valid.");
        }
    }
}

Berikut adalah alur kerja aplikasi restoran sederhana:

1. Inisialisasi Program

  • Aplikasi dimulai dengan menginisialisasi daftar menu awal (4 makanan dan 4 minuman).
  • Terdapat menu utama dengan 3 pilihan,
    1. Menu Pelanggan: Untuk melakukan pemesanan dan mencetak struk.
    2. Manajemen Menu: Untuk pemilik restoran mengelola menu.
    3. Keluar: Untuk menutup program.

2. Menu Pelanggan

  1. Tampilkan Menu Restoran: Daftar menu makanan dan minuman ditampilkan, dikelompokkan berdasarkan kategori.
  2. Input Pesanan Pelanggan:
    • Pelanggan memasukkan nomor menu yang ingin dipesan.
    • Sistem meminta jumlah item yang akan dipesan.
    • Pesanan disimpan dalam daftar sementara.
    • Pelanggan dapat menambahkan pesanan lain hingga mengetik "selesai".
    • Jika input nomor menu tidak valid, pelanggan diminta untuk memasukkan ulang.
  3. Cetak Struk Pesanan:
    • Sistem menghitung total biaya berdasarkan item yang dipesan.
    • Rincian pada struk,
      • Daftar item yang dipesan (nama, jumlah, total harga per item).
      • Total biaya sebelum pajak.
      • Pajak (10% dari total biaya).
      • Biaya pelayanan tetap (Rp 20.000).
      • Diskon (10% jika total biaya > Rp 100.000).
      • Penawaran beli satu gratis satu untuk minuman (Rp 10.000) jika total biaya > Rp 50.000.
      • Total akhir setelah diskon dan penawaran.
  4. Kembali ke Menu Utama: Setelah itu akan kembali pada tampilan menu diawal.

3. Manajemen Menu

  1. Tampilkan Pilihan Manajemen Menu:
    • Tambah menu baru.
    • Ubah harga menu yang sudah ada.
    • Hapus menu yang sudah ada.
    • Kembali ke menu utama.
  2. Tambah Menu Baru:
    • Pemilik memasukkan nama, harga, dan kategori (Makanan/Minuman).
    • Menu ditambahkan ke daftar menu.
  3. Ubah Harga Menu:
    • Sistem menampilkan daftar menu beserta nomor urutnya.
    • Pemilik memilih nomor menu yang ingin diubah.
    • Sistem meminta harga baru dan memperbarui harga menu.
  4. Hapus Menu:
    • Sistem menampilkan daftar menu.
    • Pemilik memilih nomor menu yang ingin dihapus.
    • Sistem meminta konfirmasi ("Ya" untuk melanjutkan, "Tidak" untuk batal).
    • Jika dikonfirmasi, menu dihapus dari daftar.
  5. Kembali ke Menu Utama: Setelah itu akan kembali pada tampilan menu diawal.

4. Keluar

Jika pengguna memilih opsi Keluar, program berhenti dengan pesan "Terima kasih telah menggunakan aplikasi!".

Alur Penjelasan Perubahan:

  • ArrayList digunakan untuk daftar menu agar lebih fleksibel dalam menambah, menghapus, atau mengubah data.
  • Menambahkan konfirmasi saat mengubah atau menghapus menu.
  • Memisahkan kategori makanan dan minuman saat menampilkan menu.
  • Memproses pesanan dengan detail jumlah dan harga setiap item.

SEE YAA. LANJUT KE PART. 3 GUYS. THANKS >>>

PART 1 : Yuk Buat Aplikasi Restoran Sederhana Menggunakan Java

Komentar