0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan7 halaman

Tugas Praktik OOP: Manajemen Restoran

ok

Diunggah oleh

Bertiana Beleko
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan7 halaman

Tugas Praktik OOP: Manajemen Restoran

ok

Diunggah oleh

Bertiana Beleko
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

Pertama, Tugas Praktik 3 ini memiliki tiga Indikator untuk menilai Hasil Belajar Mahasiswa, yaitu:

1. Mampu mengimplementasikan konsep abstraksi dan/atau inheritance

2. Mampu mengimplementasikan konsep encapsulation, polymorphism, exception, I/O, dan


Operasi File

3. Mampu mengimplementasikan materi-materi sebelumnya seperti struktur keputusan,


struktur pengulangan, Array dan String.

Tugas Praktik Pemrograman Berbasis Objek - Studi Kasus: Manajemen Restoran

Sekarang, anda diminta untuk membuat program Java yang akan digunakan untuk manajemen
restoran. Program ini akan mencakup berbagai konsep pemrograman berbasis objek yang telah
dipelajari.

Petunjuk Pengerjaan Tugas dan Poin untuk Penjelasan di Rekaman Video:

1. Buatlah sebuah kelas abstrak MenuItem yang akan menjadi kelas dasar untuk semua menu
item dalam restoran. Kelas ini harus memiliki atribut nama (String), harga (double), dan
kategori (String). Definisikan metode abstrak tampilMenu() yang akan digunakan untuk
menampilkan informasi tentang item menu.

2. Buatlah tiga kelas turunan dari MenuItem: Makanan, Minuman, dan Diskon.

 Kelas Makanan dan Minuman adalah subkelas dari MenuItem dan harus memiliki
atribut tambahan yang sesuai dengan jenisnya
(misalnya, jenisMakanan dan jenisMinuman). Implementasikan
metode tampilMenu() untuk menampilkan informasi khusus tentang makanan dan
minuman.

 Kelas Diskon adalah subkelas dari MenuItem yang akan digunakan untuk
menerapkan diskon khusus pada menu. Kelas ini harus memiliki atribut diskon
(double) dan mengimplementasikan metode tampilMenu() untuk menampilkan
informasi tentang diskon yang ditawarkan.

3. Buatlah sebuah kelas Menu yang akan digunakan untuk mengelola semua item menu dalam
restoran. Kelas ini harus memiliki atribut berupa sebuah ArrayList untuk menyimpan semua
item menu.

4. Buatlah kelas Pesanan yang akan digunakan untuk mencatat pesanan pelanggan. Kelas ini
harus memiliki atribut berupa ArrayList untuk menyimpan item-item yang dipesan oleh
pelanggan.

5. Implementasikan konsep inheritance dengan benar antara kelas-kelas ini.

6. Implementasikan konsep encapsulation dengan membatasi akses ke atribut-atribut kelas.

7. Pergunaan pengecualian (exception) yang mungkin terjadi, seperti ketika mencoba


mengakses item yang tidak ada dalam menu.

8. Program harus memiliki menu utama yang memungkinkan pengguna untuk:

 Menambahkan item baru ke menu (makanan, minuman, atau diskon).

 Menampilkan menu restoran.


 Menerima pesanan dari pelanggan dan mencatatnya.

 Menghitung total biaya pesanan dengan mempertimbangkan diskon yang mungkin


diterapkan.

 Menampilkan struk pesanan pelanggan.

 Keluar dari program.

9. Implementasikan operasi I/O dan operasi file untuk menyimpan dan memuat daftar menu
dari sebuah file teks, dan juga menyimpan struk pesananan pelanggan dan memuat dari file
teks.

10. Gunakan struktur keputusan dan pengulangan sesuai dengan kebutuhan, seperti saat
menampilkan menu dan memproses pesanan.

Tugas Praktik Pemrograman Berbasis Objek - Studi Kasus: Manajemen Restoran


dalam Java:

1. Kelas Abstrak MenuItem


java
Copy code
import java.io.Serializable;

public abstract class MenuItem implements Serializable {


private String nama;
private double harga;
private String kategori;

public MenuItem(String nama, double harga, String kategori) {


this.nama = nama;
this.harga = harga;
this.kategori = kategori;
}

public String getNama() {


return nama;
}

public double getHarga() {


return harga;
}

public String getKategori() {


return kategori;
}

public abstract void tampilMenu();


}

2. Kelas Turunan Makanan, Minuman, dan Diskon


java
Copy code
public class Makanan extends MenuItem {
private String jenisMakanan;

public Makanan(String nama, double harga, String kategori, String


jenisMakanan) {
super(nama, harga, kategori);
this.jenisMakanan = jenisMakanan;
}

@Override
public void tampilMenu() {
System.out.println("Makanan: " + getNama() + " | Harga: Rp" +
getHarga() + " | Jenis: " + jenisMakanan);
}
}

public class Minuman extends MenuItem {


private String jenisMinuman;

public Minuman(String nama, double harga, String kategori, String


jenisMinuman) {
super(nama, harga, kategori);
this.jenisMinuman = jenisMinuman;
}

@Override
public void tampilMenu() {
System.out.println("Minuman: " + getNama() + " | Harga: Rp" +
getHarga() + " | Jenis: " + jenisMinuman);
}
}

public class Diskon extends MenuItem {


private double diskon;

public Diskon(String nama, double harga, String kategori, double


diskon) {
super(nama, harga, kategori);
this.diskon = diskon;
}

@Override
public void tampilMenu() {
System.out.println("Diskon: " + getNama() + " | Diskon: " + diskon
+ "%");
}

public double getDiskon() {


return diskon;
}
}

3. Kelas Menu
java
Copy code
import java.io.*;
import java.util.ArrayList;

public class Menu {


private ArrayList<MenuItem> daftarMenu = new ArrayList<>();

public void tambahMenuItem(MenuItem item) {


daftarMenu.add(item);
}

public void tampilkanMenu() {


if (daftarMenu.isEmpty()) {
System.out.println("Menu kosong.");
} else {
for (MenuItem item : daftarMenu) {
item.tampilMenu();
}
}
}

public MenuItem cariMenuItem(String nama) {


for (MenuItem item : daftarMenu) {
if (item.getNama().equalsIgnoreCase(nama)) {
return item;
}
}
return null;
}

public void simpanMenuKeFile(String namaFile) throws IOException {


try (ObjectOutputStream oos = new ObjectOutputStream(new
FileOutputStream(namaFile))) {
oos.writeObject(daftarMenu);
}
}

public void muatMenuDariFile(String namaFile) throws IOException,


ClassNotFoundException {
try (ObjectInputStream ois = new ObjectInputStream(new
FileInputStream(namaFile))) {
daftarMenu = (ArrayList<MenuItem>) ois.readObject();
}
}
}

4. Kelas Pesanan
java
Copy code
import java.io.*;
import java.util.ArrayList;

public class Pesanan {


private ArrayList<MenuItem> items = new ArrayList<>();

public void tambahPesanan(MenuItem item) {


items.add(item);
}

public double hitungTotal() {


double total = 0;
for (MenuItem item : items) {
if (item instanceof Diskon) {
Diskon diskon = (Diskon) item;
total -= total * (diskon.getDiskon() / 100);
} else {
total += item.getHarga();
}
}
return total;
}

public void tampilkanStruk() {


System.out.println("=== Struk Pesanan ===");
for (MenuItem item : items) {
System.out.println(item.getNama() + " - Rp" + item.getHarga());
}
System.out.println("Total: Rp" + hitungTotal());
}

public void simpanStrukKeFile(String namaFile) throws IOException {


try (PrintWriter writer = new PrintWriter(new
FileWriter(namaFile))) {
writer.println("=== Struk Pesanan ===");
for (MenuItem item : items) {
writer.println(item.getNama() + " - Rp" + item.getHarga());
}
writer.println("Total: Rp" + hitungTotal());
}
}
}

5. Kelas Utama Main


java
Copy code
import java.util.Scanner;

public class Main {


public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Menu menu = new Menu();
Pesanan pesanan = new Pesanan();

while (true) {
System.out.println("\n=== Menu Utama ===");
System.out.println("1. Tambah Item ke Menu");
System.out.println("2. Tampilkan Menu");
System.out.println("3. Tambah Pesanan");
System.out.println("4. Hitung Total Pesanan");
System.out.println("5. Tampilkan Struk Pesanan");
System.out.println("6. Simpan Menu ke File");
System.out.println("7. Muat Menu dari File");
System.out.println("8. Simpan Struk ke File");
System.out.println("9. Keluar");
System.out.print("Pilih opsi: ");
int pilihan = scanner.nextInt();
scanner.nextLine();

try {
switch (pilihan) {
case 1:
System.out.println("Tambah Item: (1. Makanan, 2.
Minuman, 3. Diskon)");
int jenis = scanner.nextInt();
scanner.nextLine();
System.out.print("Nama: ");
String nama = scanner.nextLine();
System.out.print("Harga: ");
double harga = scanner.nextDouble();
scanner.nextLine();
System.out.print("Kategori: ");
String kategori = scanner.nextLine();

if (jenis == 1) {
System.out.print("Jenis Makanan: ");
String jenisMakanan = scanner.nextLine();
menu.tambahMenuItem(new Makanan(nama, harga,
kategori, jenisMakanan));
} else if (jenis == 2) {
System.out.print("Jenis Minuman: ");
String jenisMinuman = scanner.nextLine();
menu.tambahMenuItem(new Minuman(nama, harga,
kategori, jenisMinuman));
} else if (jenis == 3) {
System.out.print("Diskon (%): ");
double diskon = scanner.nextDouble();
scanner.nextLine();
menu.tambahMenuItem(new Diskon(nama, harga,
kategori, diskon));
}
break;

case 2:
menu.tampilkanMenu();
break;

case 3:
System.out.print("Nama item pesanan: ");
String itemNama = scanner.nextLine();
MenuItem item = menu.cariMenuItem(itemNama);
if (item != null) {
pesanan.tambahPesanan(item);
} else {
System.out.println("Item tidak ditemukan!");
}
break;

case 4:
System.out.println("Total: Rp" +
pesanan.hitungTotal());
break;

case 5:
pesanan.tampilkanStruk();
break;

case 6:
System.out.print("Nama file untuk menyimpan menu:
");
String namaFileMenu = scanner.nextLine();
menu.simpanMenuKeFile(namaFileMenu);
break;
case 7:
System.out.print("Nama file untuk memuat menu: ");
String namaFileMuat = scanner.nextLine();
menu.muatMenuDariFile(namaFileMuat);
break;

case 8:
System.out.print("Nama file untuk menyimpan struk:
");
String namaFileStruk = scanner.nextLine();
pesanan.simpanStrukKeFile(namaFileStruk);
break;

case 9:
System.out.println("Keluar dari program.");
return;

default:
System.out.println("Pilihan tidak valid.");
}
} catch (Exception e) {
System.out.println("Terjadi kesalahan: " + e.getMessage());
}
}
}
}

Penjelasan Tambahan

 Inheritance: Kelas Makanan, Minuman, dan Diskon mewarisi dari kelas abstrak
MenuItem.
 Encapsulation: Semua atribut diberi akses private dan menggunakan getter untuk
akses.
 Exception Handling: Ditangani saat file tidak ditemukan atau item tidak ada.
 I/O dan File Handling: Menggunakan ObjectOutputStream dan
ObjectInputStream untuk menyimpan/memuat daftar menu.

Program ini mencakup semua konsep yang diminta, siap digunakan, dan diuji untuk
pembelajaran!

Anda mungkin juga menyukai