Beberapa Fitur Tambahan lainnya: Yang bisa ditambahkan ke dalam Aplikasi Restoran Sederhana

Halo Codekop Friends! Ketemu lagi untuk artikel kali ini, yaitu pada artikel kali ini kita akan menambahkan fitur lainnya pada Aplikasi Restoran Sederhana yang minggu lalu sudah pernah kita buat sebelumnya. Penasaran kan? Oke cuss langsung kita tambahkan 😃

1. Menambahkan Fitur Laporan Penjualan Harian

Fitur ini akan memungkinkan manajemen untuk melihat total penjualan yang tercatat pada hari itu, termasuk jumlah pesanan, pendapatan, diskon, dan pajak.

2.  Menambahkan Fitur Pencarian Menu

Menambahkan fitur pencarian menu berdasarkan nama. Ini akan memudahkan pelanggan atau manajemen untuk mencari menu tertentu tanpa harus melihat seluruh daftar.

3. Menambahkan Fitur Pengaturan Pajak dan Biaya Layanan

Menambahkan fitur yang memungkinkan manajemen untuk mengatur tarif pajak dan biaya layanan sesuai kebijakan restoran.

Berikut adalah implementasi tambahan untuk fitur-fitur di atas:

1.  Menambahkan Fitur Laporan Penjualan Harian

Kami akan menambahkan fitur untuk melacak penjualan setiap hari. Setiap kali pesanan selesai, informasi pesanan akan disimpan dan bisa ditampilkan dalam laporan harian.

Penambahan:

  • Laporan Penjualan Harian
  • Menambah data penjualan ke dalam list
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Date;

class Penjualan {
    double totalBiaya;
    double pajak;
    double biayaPelayanan;
    double diskon;
    double grandTotal;
    Date tanggal;

    public Penjualan(double totalBiaya, double pajak, double biayaPelayanan, double diskon, double grandTotal) {
        this.totalBiaya = totalBiaya;
        this.pajak = pajak;
        this.biayaPelayanan = biayaPelayanan;
        this.diskon = diskon;
        this.grandTotal = grandTotal;
        this.tanggal = new Date();
    }
}

public class Main {
    private static ArrayList<Menu> menuList = new ArrayList<>();
    private static ArrayList<String> pesanan = new ArrayList<>();
    private static ArrayList<Integer> jumlahPesanan = new ArrayList<>();
    private static ArrayList<Penjualan> laporanPenjualan = 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. Laporan Penjualan");
            System.out.println("4. 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:
                    tampilkanLaporanPenjualan();
                    break;
                case 4:
                    System.out.println("Terima kasih telah menggunakan aplikasi!");
                    return;
                default:
                    System.out.println("Pilihan tidak valid.");
            }
        }
    }

    private static void tampilkanLaporanPenjualan() {
        if (laporanPenjualan.isEmpty()) {
            System.out.println("Tidak ada penjualan hari ini.");
        } else {
            System.out.println("\n=== Laporan Penjualan Harian ===");
            for (Penjualan p : laporanPenjualan) {
                System.out.println("Tanggal: " + p.tanggal);
                System.out.printf("Total Biaya: Rp. %.2f%n", p.totalBiaya);
                System.out.printf("Pajak (10%%): Rp. %.2f%n", p.pajak);
                System.out.printf("Biaya Pelayanan: Rp. %.2f%n", p.biayaPelayanan);
                System.out.printf("Diskon: Rp. %.2f%n", p.diskon);
                System.out.printf("Grand Total: Rp. %.2f%n", p.grandTotal);
                System.out.println("=============================");
            }
        }
    }

    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("=========================");

        // Menyimpan laporan penjualan
        laporanPenjualan.add(new Penjualan(totalBiaya, pajak, biayaPelayanan, diskon, grandTotal));
    }
}

Penjelasan:

  • Penjualan: Menyimpan informasi tentang total biaya, pajak, biaya pelayanan, diskon, dan grand total pada setiap transaksi.
  • laporanPenjualan: ArrayList untuk menyimpan setiap transaksi yang terjadi.
  • tampilkanLaporanPenjualan(): Fungsi untuk menampilkan laporan penjualan yang terjadi sepanjang hari.

2. Fitur Pencarian Menu

Penambahan:

  • Menu Pencarian
  • Pencarian berdasarkan nama menu
private static void pencarianMenu(Scanner scanner) {
    System.out.print("Masukkan nama menu yang ingin dicari: ");
    String keyword = scanner.nextLine().toLowerCase();
    
    boolean ditemukan = false;
    System.out.println("\n=== Hasil Pencarian ===");
    for (Menu menu : menuList) {
        if (menu.nama.toLowerCase().contains(keyword)) {
            System.out.printf("%s - Rp. %.2f (%s)%n", menu.nama, menu.harga, menu.kategori);
            ditemukan = true;
        }
    }
    
    if (!ditemukan) {
        System.out.println("Menu tidak ditemukan.");
    }
}

Penjelasan:

  • pencarianMenu(): Mencari menu berdasarkan kata kunci yang dimasukkan oleh pengguna. Program akan mencocokkan kata kunci dengan nama menu dan menampilkan hasilnya.

3. Fitur Pengaturan Pajak dan Biaya Layanan

Penambahan:

  • Pengaturan Pajak dan Biaya Layanan
private static double pajak = 0.1;  // Pajak 10%
private static double biayaPelayanan = 20000;  // Biaya pelayanan tetap

private static void pengaturanPajakBiaya(Scanner scanner) {
    System.out.println("1. Ubah Pajak");
    System.out.println("2. Ubah Biaya Pelayanan");
    System.out.print("Pilih opsi: ");
    int pilihan = Integer.parseInt(scanner.nextLine());

    switch (pilihan) {
        case 1:
            System.out.print("Masukkan persentase pajak baru (contoh: 0.1 untuk 10%): ");
            pajak = Double.parseDouble(scanner.nextLine());
            System.out.println("Pajak berhasil diubah!");
            break;
        case 2:
            System.out.print("Masukkan biaya pelayanan baru: ");
            biayaPelayanan = Double.parseDouble(scanner.nextLine());
            System.out.println("Biaya pelayanan berhasil diubah!");
            break;
        default:
            System.out.println("Pilihan tidak valid.");
    }
}

Penjelasan:

  • pengaturanPajakBiaya(): Menyediakan opsi untuk mengubah pajak dan biaya pelayanan sesuai dengan kebutuhan manajemen restoran.

Dengan menambahkan fitur-fitur ini, aplikasi restoran menjadi lebih canggih dan dapat memenuhi lebih banyak kebutuhan operasional.

Berikut adalah kode lengkap setelah penambahan fitur baru yang telah dibahas:

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

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;
    }
}

class Penjualan {
    double totalBiaya;
    double pajak;
    double biayaPelayanan;
    double diskon;
    double grandTotal;
    Date tanggal;

    public Penjualan(double totalBiaya, double pajak, double biayaPelayanan, double diskon, double grandTotal) {
        this.totalBiaya = totalBiaya;
        this.pajak = pajak;
        this.biayaPelayanan = biayaPelayanan;
        this.diskon = diskon;
        this.grandTotal = grandTotal;
        this.tanggal = new Date();
    }
}

public class Main {
    private static ArrayList<Menu> menuList = new ArrayList<>();
    private static ArrayList<String> pesanan = new ArrayList<>();
    private static ArrayList<Integer> jumlahPesanan = new ArrayList<>();
    private static ArrayList<Penjualan> laporanPenjualan = new ArrayList<>();
    private static double pajak = 0.1;  // Pajak 10%
    private static double biayaPelayanan = 20000;  // Biaya pelayanan tetap

    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. Laporan Penjualan");
            System.out.println("4. Pengaturan Pajak & Biaya");
            System.out.println("5. 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:
                    tampilkanLaporanPenjualan();
                    break;
                case 4:
                    pengaturanPajakBiaya(scanner);
                    break;
                case 5:
                    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 * Main.pajak;
        double biayaPelayanan = Main.biayaPelayanan;
        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("=========================");

        // Menyimpan laporan penjualan
        laporanPenjualan.add(new Penjualan(totalBiaya, pajak, biayaPelayanan, diskon, grandTotal));
    }

    private static void tampilkanLaporanPenjualan() {
        if (laporanPenjualan.isEmpty()) {
            System.out.println("Tidak ada penjualan hari ini.");
        } else {
            System.out.println("\n=== Laporan Penjualan Harian ===");
            for (Penjualan p : laporanPenjualan) {
                System.out.println("Tanggal: " + p.tanggal);
                System.out.printf("Total Biaya: Rp. %.2f%n", p.totalBiaya);
                System.out.printf("Pajak (10%%): Rp. %.2f%n", p.pajak);
                System.out.printf("Biaya Pelayanan: Rp. %.2f%n", p.biayaPelayanan);
                System.out.printf("Diskon: Rp. %.2f%n", p.diskon);
                System.out.printf("Grand Total: Rp. %.2f%n", p.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. Cari Menu");
            System.out.println("5. 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:
                    pencarianMenu(scanner);
                    break;
                case 5:
                    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 (Ma
 
Oke selesai sudah pembelajaran kita kali ini menarik bukan? Oh ya ini adalah part terakhir pada artikel Aplikasi Restoran Sederhana kali ini, sampai jumpa pada artikel selanjutnya. Goodjob 👍
 
Komentar