Menu
CoddyTech

Sistem Perbankan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 108 dari 110.

challenge icon

Tantangan

Mudah

Mari bangun Sistem Perbankan yang memodelkan operasi keuangan di dunia nyata dengan prinsip OOP yang telah kamu kuasai sepanjang kursus ini. Kamu akan membuat akun dengan aturan berbeda, melacak transaksi, dan mengelola pelanggan, semuanya diatur dalam beberapa file.

Sistem perbankanmu akan diatur dalam enam file:

  • transaction.dart: Buat class Transaction yang merepresentasikan catatan operasi keuangan yang tidak dapat diubah. Setiap transaksi memiliki field final untuk type (String, "deposit", "withdrawal", atau "transfer"), amount (double), dan timestamp (DateTime). Ganti implementasi toString() agar mengembalikan [type] $amount.
  • account.dart: Buat class abstrak Account dengan _balance privat (double), nomor akun final (accountNumber, String), dan List<Transaction> untuk menyimpan riwayat transaksi. Sertakan getter untuk saldo, setter terlindungi set balance(double value) agar subclass di file lain dapat memperbarui saldo, method abstrak bool canWithdraw(double amount) yang diimplementasikan oleh subclass, serta method konkret berikut:
    • deposit(double amount), menambahkan ke saldo, mencatat transaksi, dan mencetak Deposited $amount. Balance: $balance
    • withdraw(double amount), jika canWithdraw() mengembalikan true, mengurangi saldo, mencatat transaksi, dan mencetak Withdrew $amount. Balance: $balance. Jika tidak, cetak Withdrawal denied.
    • getTransactionCount(), mengembalikan jumlah transaksi
  • savings_account.dart: Buat SavingsAccount yang mewarisi Account. Akun tabungan memiliki batas penarikan, yaitu tidak dapat menarik lebih dari $500 dalam satu transaksi. Implementasikan canWithdraw() untuk menerapkan aturan ini dan memastikan saldo mencukupi. Tambahkan method applyInterest(double rate) yang menambah saldo berdasarkan persentase yang diberikan dengan menggunakan getter dan setter balance, lalu mencetak Interest applied. Balance: $balance.
  • checking_account.dart: Buat CheckingAccount yang mewarisi Account. Akun giro memiliki perlindungan overdraft hingga $100, yaitu saldonya boleh negatif tetapi tidak boleh kurang dari -$100. Implementasikan canWithdraw() agar penarikan diizinkan selama saldo setelah penarikan tetap -$100 atau lebih.
  • customer.dart: Buat class Customer dengan id (String), name (String), dan List<Account> untuk akun pelanggan. Sertakan method addAccount(Account account) untuk menambahkan akun, serta getTotalBalance() yang mengembalikan jumlah saldo semua akun. Ganti implementasi toString() agar mengembalikan Customer: name (X accounts).
  • main.dart: Demonstrasikan sistem perbankanmu. Buat pelanggan (C001, John Smith). Buat SavingsAccount (SAV001, saldo awal $1000) dan CheckingAccount (CHK001, saldo awal $500). Tambahkan kedua akun ke pelanggan dan cetak pelanggan tersebut. Kemudian lakukan operasi berikut:
    1. Setorkan $200 ke akun tabungan
    2. Tarik $300 dari akun tabungan (seharusnya berhasil)
    3. Coba tarik $600 dari akun tabungan (seharusnya ditolak, melebihi batas)
    4. Terapkan bunga 5% ke akun tabungan
    5. Tarik $550 dari akun giro (seharusnya berhasil dengan menggunakan overdraft)
    6. Coba tarik lagi $100 dari akun giro (seharusnya ditolak, karena akan melewati batas overdraft)
    Terakhir, cetak Savings transactions: X dan Total balance: $Y (diformat hingga 2 angka desimal).

Output yang diharapkan:

Customer: John Smith (2 accounts)
Deposited $200.0. Balance: $1200.0
Withdrew $300.0. Balance: $900.0
Withdrawal denied
Interest applied. Balance: $945.0
Withdrew $550.0. Balance: $-50.0
Withdrawal denied
Savings transactions: 3
Total balance: $895.00

Coba sendiri

import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';

void main() {
  // TODO: Buat pelanggan dengan id "C001" dan nama "John Smith"
  
  // TODO: Buat SavingsAccount dengan accountNumber "SAV001" dan saldo awal $1000
  
  // TODO: Buat CheckingAccount dengan accountNumber "CHK001" dan saldo awal $500
  
  // TODO: Tambahkan kedua rekening ke pelanggan
  
  // TODO: Tampilkan pelanggan
  
  // TODO: Lakukan operasi berikut:
  // 1. Setorkan $200 ke rekening tabungan
  // 2. Tarik $300 dari rekening tabungan (seharusnya berhasil)
  // 3. Coba tarik $600 dari rekening tabungan (seharusnya ditolak karena melebihi batas)
  // 4. Terapkan bunga 5% pada rekening tabungan
  // 5. Tarik $550 dari rekening giro (seharusnya berhasil dengan overdraft)
  // 6. Coba tarik lagi $100 dari rekening giro (seharusnya ditolak karena akan melebihi batas overdraft)
  
  // TODO: Cetak "Savings transactions: X", dengan X sebagai jumlah transaksi
  
  // TODO: Cetak "Total balance: \$Y", dengan Y diformat hingga 2 angka di belakang koma
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online