Sistem Perbankan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 85 dari 87.
Tantangan ini menugaskanmu membangun Sistem Perbankan yang memodelkan operasi keuangan di 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. Sebuah 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.
Sebuah class Bank mungkin mengelola beberapa akun dan pelanggan, yang menunjukkan komposisi. Kamu bisa menerapkan pola Factory untuk membuat berbagai tipe akun, atau menggunakan pola Observer untuk memberi tahu pelanggan tentang perubahan akun.
Fokus pada enkapsulasi untuk melindungi data sensitif seperti saldo dan nomor rekening, serta gunakan polimorfisme untuk memproses berbagai tipe rekening secara seragam.
Tantangan
MudahMari bangun Sistem Perbankan lengkap yang menunjukkan penguasaanmu atas prinsip OOP! Kamu akan membuat sistem dengan berbagai tipe rekening, 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 abstrak yang mewakili rekening 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 abstrakgetAccountType()yang mengembalikan String. Implementasikan methodgetDetails()yang mengembalikan"[accountNumber] ([accountType]): $[balance]"dengan saldo yang 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 menaikkan 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 melebihi batas ini.Bank.java: Buat class yang mengelola rekening menggunakan ArrayList. Sertakan method berikut:addAccount(Account account)- menambahkan rekening ke bankfindAccount(String accountNumber)- mengembalikan Account atau null jika tidak ditemukantransfer(String fromAccount, String toAccount, double amount)- mentransfer uang antar rekening, dengan melemparInsufficientFundsExceptionjika rekening sumber tidak memiliki dana yang cukup. Jika berhasil, kembalikan"Transferred $[amount] from [fromAccount] to [toAccount]"getTotalDeposits()- mengembalikan jumlah semua saldo rekening
Main.java: Bangun 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 diproses, cetak
--- Bank Summary ---, lalu detail setiap rekening (menggunakangetDetails()), dan terakhirTotal deposits: $[total]yang diformat hingga 2 angka desimal.
Kamu akan menerima satu input: string perintah yang dipisahkan koma.
Contohnya, 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 rekening checking mengizinkan penarikan $600 meskipun saldonya hanya $500: itulah perlindungan overdraft! Rekening savings memperoleh 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 instans Bank
// TODO: Pisahkan input berdasarkan koma untuk mendapatkan setiap perintah
// TODO: Proses setiap perintah:
// - SAVINGS:accountNumber:balance:interestRate -> Buat SavingsAccount, lalu cetak "Account created: [accountNumber]"
// - CHECKING:accountNumber:balance:overdraftLimit -> Buat CheckingAccount, lalu cetak "Account created: [accountNumber]"
// - DEPOSIT:accountNumber:amount -> Setorkan dana, lalu cetak "Deposited $[amount] to [accountNumber]"
// - WITHDRAW:accountNumber:amount -> Tarik dana, lalu cetak pesan keberhasilan atau "Withdrawal failed: [accountNumber]"
// - TRANSFER:fromAccount:toAccount:amount -> Transfer dana, lalu cetak pesan keberhasilan atau "Transfer failed: [exception message]"
// - INTEREST:accountNumber -> Terapkan bunga, lalu 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