Sistem Perbankan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 85 dari 87.
Tantangan ini memintamu membangun Sistem Perbankan yang memodelkan operasi keuangan dunia nyata menggunakan prinsip OOP.
Sistemmu harus menangani berbagai tipe akun seperti SavingsAccount dan CheckingAccount, yang keduanya mewarisi class dasar Account. Setiap tipe akun memiliki perilaku unik: akun tabungan mungkin memperoleh bunga, sedangkan akun giro mungkin memiliki perlindungan cerukan.
Pikirkan cara memodelkan transaksi. Interface seperti Transactable dapat mendefinisikan method untuk deposit() dan withdraw(). Pertimbangkan untuk menggunakan exception khusus seperti InsufficientFundsException agar operasi yang tidak valid dapat ditangani dengan baik.
class Bank mungkin mengelola beberapa rekening dan pelanggan, yang menunjukkan komposisi. Kamu bisa menerapkan pola Factory untuk membuat berbagai tipe rekening, atau menggunakan pola Observer untuk memberi tahu pelanggan tentang perubahan rekening.
Fokus pada enkapsulasi untuk melindungi data sensitif seperti saldo dan nomor rekening, serta gunakan polimorfisme untuk memproses berbagai tipe rekening secara seragam.
Tantangan
MudahMari buat Sistem Perbankan lengkap yang menunjukkan penguasaanmu terhadap prinsip OOP! Kamu akan membuat sistem dengan berbagai tipe akun, penanganan transaksi, dan pengelolaan exception yang tepat, semuanya diatur dalam beberapa file.
Kamu akan mengatur kodemu dalam tujuh file:
Transactable.java: Buat interface yang menetapkan kontrak untuk operasi keuangan. Interface ini harus mendeklarasikan methoddeposit(double amount)danwithdraw(double amount), yang keduanya mengembalikan boolean untuk menunjukkan keberhasilan.InsufficientFundsException.java: Buat exception khusus yang memperluasException. Konstruktor harus menerima jumlah penarikan yang dicoba dan saldo saat ini, lalu membuat pesan dengan formatInsufficient funds: attempted [amount], available [balance].Account.java: Buat class dasar abstract yang mewakili akun bank apa pun. Sertakan field private untukaccountNumber(String) danbalance(double), konstruktor yang menginisialisasi keduanya, getter yang sesuai, setter protected untuk saldo (agar subclass dapat mengubahnya), serta method abstractgetAccountType()yang mengembalikan String. Implementasikan methodgetDetails()yang mengembalikan"[accountNumber] ([accountType]): $[balance]"dengan saldo diformat hingga 2 angka desimal.SavingsAccount.java: Buat class yang memperluasAccountdan mengimplementasikanTransactable. Tambahkan field private untukinterestRate(double). Konstruktor menerima accountNumber, saldo awal, dan interestRate. ImplementasikangetAccountType()agar mengembalikan"Savings". Untukdeposit(), tambahkan jumlahnya ke saldo dan kembalikan true. Untukwithdraw(), jika jumlahnya melebihi saldo, kembalikan false; jika tidak, kurangi saldo dan kembalikan true. Tambahkan methodapplyInterest()yang menambah saldo sebesarbalance * interestRate(suku bunga disimpan sebagai pecahan, jadi0.05berarti 5%).CheckingAccount.java: Buat class yang memperluasAccountdan mengimplementasikanTransactable. Tambahkan field private untukoverdraftLimit(double). Konstruktor menerima accountNumber, saldo awal, dan overdraftLimit. ImplementasikangetAccountType()agar mengembalikan"Checking". Untukdeposit(), tambahkan jumlahnya dan kembalikan true. Untukwithdraw(), izinkan penarikan jika jumlahnya kurang dari atau sama dengan saldo ditambah overdraftLimit; kembalikan false jika jumlahnya melebihi batas ini.Bank.java: Buat class yang mengelola akun menggunakan ArrayList. Sertakan method:addAccount(Account account)- menambahkan akun ke bankfindAccount(String accountNumber)- mengembalikan Account atau null jika tidak ditemukantransfer(String fromAccount, String toAccount, double amount)- mentransfer uang antar akun, dengan melemparInsufficientFundsExceptionjika saldo akun sumber tidak mencukupi. Jika berhasil, kembalikan"Transferred $[amount] from [fromAccount] to [toAccount]"getTotalDeposits()- mengembalikan jumlah semua saldo akun
Main.java: Buat sistem perbankanmu! Kamu akan menerima string perintah yang dipisahkan koma:SAVINGS:accountNumber:balance:interestRateCHECKING:accountNumber:balance:overdraftLimitDEPOSIT:accountNumber:amountWITHDRAW:accountNumber:amountTRANSFER:fromAccount:toAccount:amountINTEREST:accountNumber
Proses setiap perintah dan cetak:
- SAVINGS/CHECKING:
Account created: [accountNumber] - DEPOSIT:
Deposited $[amount] to [accountNumber] - WITHDRAW:
Withdrew $[amount] from [accountNumber]jika berhasil, atauWithdrawal failed: [accountNumber] - TRANSFER: Cetak pesan keberhasilan atau
Transfer failed: [exception message] - INTEREST:
Interest applied to [accountNumber]
Setelah semua perintah dijalankan, cetak
--- Bank Summary ---, lalu detail setiap akun (menggunakangetDetails()), dan terakhirTotal deposits: $[total]yang diformat hingga 2 angka desimal.
Kamu akan menerima satu input: string perintah yang dipisahkan koma.
Misalnya, dengan input SAVINGS:SAV001:1000.00:0.05,CHECKING:CHK001:500.00:200.00,DEPOSIT:SAV001:250.00,WITHDRAW:CHK001:600.00,TRANSFER:SAV001:CHK001:100.00,INTEREST:SAV001, outputmu akan menjadi:
Account created: SAV001
Account created: CHK001
Deposited $250.00 to SAV001
Withdrew $600.00 from CHK001
Transferred $100.00 from SAV001 to CHK001
Interest applied to SAV001
--- Bank Summary ---
SAV001 (Savings): $1207.50
CHK001 (Checking): $0.00
Total deposits: $1207.50Perhatikan bahwa akun checking mengizinkan penarikan $600 meskipun saldonya hanya $500: itulah cara kerja perlindungan overdraft! Akun savings mendapatkan bunga 5% dari saldonya setelah transfer. Tantangan ini menggabungkan pewarisan, interface, polimorfisme, exception khusus, dan enkapsulasi dalam aplikasi perbankan yang realistis!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
// TODO: Buat instance Bank
// TODO: Pisahkan input dengan koma untuk mendapatkan setiap perintah
// TODO: Proses setiap perintah:
// - SAVINGS:accountNumber:balance:interestRate -> Buat SavingsAccount, cetak "Account created: [accountNumber]"
// - CHECKING:accountNumber:balance:overdraftLimit -> Buat CheckingAccount, cetak "Account created: [accountNumber]"
// - DEPOSIT:accountNumber:amount -> Setor dana dan cetak "Deposited $[amount] to [accountNumber]"
// - WITHDRAW:accountNumber:amount -> Tarik dana dan cetak pesan berhasil atau "Withdrawal failed: [accountNumber]"
// - TRANSFER:fromAccount:toAccount:amount -> Transfer dana dan cetak pesan berhasil atau "Transfer failed: [exception message]"
// - INTEREST:accountNumber -> Terapkan bunga dan cetak "Interest applied to [accountNumber]"
// TODO: Setelah semua perintah diproses, cetak "--- Bank Summary ---"
// TODO: Cetak detail setiap akun menggunakan getDetails()
// TODO: Cetak "Total deposits: $[total]" dengan format 2 angka di belakang koma
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy14Tantangan Akhir
Platform E-LearningSistem PerbankanPengembangan Karakter GameLayanan Penyewaan Kendaraan3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online