Soal Study Case: Sistem Reservasi Tiket Bioskop
Deskripsi Masalah
Anda ditugaskan untuk membuat program sistem reservasi tiket bioskop. Program ini harus memenuhi persyaratan berikut:
1. Validasi Usia: Pengguna hanya boleh memesan tiket jika usianya memenuhi persyaratan rating film.
2. Validasi Ketersediaan Kursi: Program harus memastikan kursi tersedia sebelum menerima reservasi.
3. Jenis Tiket: Terdapat dua jenis tiket:
a. Tiket Reguler (harga Rp50.000).
b. Tiket Premium (harga Rp100.000, memiliki fasilitas tambahan).
4. Fitur Pencarian Film: Program harus menyediakan metode untuk mencari film berdasarkan nama atau berdasarkan nama dan rating usia.
5. Pesan Kesalahan: Program harus menampilkan pesan kesalahan yang relevan jika:
c. Usia pengguna tidak memenuhi persyaratan film.
d. Kursi untuk film tersebut telah habis.
6. Pesan Reservasi Berhasil: Jika reservasi berhasil, program akan menampilkan informasi tiket, termasuk jenis tiket dan harga.
Instruksi Pengerjaan 1. Buat Class `Film`:
- Berisi informasi: nama film, rating usia, dan jumlah kursi yang tersedia.
- Tambahkan metode untuk:
- Mendapatkan informasi nama film dan rating usia.
- Mengurangi jumlah kursi ketika reservasi berhasil. Jika kursi habis, lemparkan exception `SeatUnavailableException`.
2. Buat Class `Tiket`:
- Sebagai superclass, berisi atribut dasar seperti nama film dan harga tiket.
- Tambahkan metode untuk mendapatkan informasi tiket.
3. Buat Subclass `TiketReguler` dan `TiketPremium`:
- `TiketReguler`: Harga tiket Rp50.000.
- `TiketPremium`: Harga tiket Rp100.000.
- Override metode `getInfo` untuk menambahkan keterangan bahwa tiket ini adalah premium.
4. Buat Class Custom Exception:
a. `InvalidAgeException`: Lemparkan exception ini jika usia pengguna tidak memenuhi rating usia film.
b. `SeatUnavailableException`: Lemparkan exception ini jika kursi habis.
7. Buat Class `Bioskop`:
- Berisi daftar film.
- Tambahkan metode `cariFilm(String namaFilm)`: Mencari film berdasarkan nama.
- Tambahkan metode `cariFilm(String namaFilm, int ratingUsia)`: Mencari film berdasarkan nama dan rating usia.
- Tambahkan metode `pesanTiket(String namaFilm, int usia, boolean
premium)`: Memesan tiket untuk pengguna. Lemparkan exception jika usia tidak memenuhi atau kursi habis.
8. Buat Class `ReservasiBioskop`:
- Buat objek `Film` dan tambahkan ke daftar film bioskop.
- Lakukan simulasi reservasi tiket:
- Skenario berhasil.
- Skenario gagal karena usia tidak memenuhi.
- Skenario gagal karena kursi habis.
--- Contoh Output 1 (Berhasil):
```
Reservasi Berhasil! Film: Avatar 2, Harga: Rp50000
```
Contoh Output 2 (Gagal karena usia):
```
Gagal Reservasi: Usia Anda tidak memenuhi rating usia film ini.
```
Contoh Output 3 (Gagal karena kursi habis):
```
Gagal Reservasi: Kursi telah habis untuk film: Spider-Man
```