Menu
Coddy logo textTech

Bankacılık Sistemi

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 108 / 110.

challenge icon

Görev

Kolay

Bu kursta ustalaştığınız OOP prensiplerini kullanarak gerçek dünyadaki finansal işlemleri modelleyen bir Bankacılık Sistemi inşa edelim. Farklı kurallara sahip hesaplar oluşturacak, işlemleri takip edecek ve müşterileri yöneteceksiniz - tüm bunlar birden fazla dosya arasında organize edilecek.

Bankacılık sisteminiz altı dosya halinde organize edilecektir:

  • transaction.dart: Finansal bir işlemin değişmez (immutable) bir kaydını temsil eden bir Transaction sınıfı oluşturun. Her işlemin type (String - "deposit", "withdrawal" veya "transfer"), amount (double) ve timestamp (DateTime) için final alanları olmalıdır. toString() metodunu [type] $amount döndürecek şekilde geçersiz kılın (override).
  • account.dart: Özel bir _balance (double), final bir hesap numarası (accountNumber - String) ve işlem geçmişini saklamak için bir List<Transaction> içeren soyut bir Account sınıfı oluşturun. Bakiye için bir getter, diğer dosyalardaki alt sınıfların bakiyeyi güncelleyebilmesi için korumalı (protected) bir setter set balance(double value), alt sınıfların uygulayacağı soyut bir metod olan bool canWithdraw(double amount) ve şu somut metodları ekleyin:
    • deposit(double amount) - bakiyeye ekleme yapar, bir işlem kaydeder ve Deposited $amount. Balance: $balance yazdırır.
    • withdraw(double amount) - eğer canWithdraw() true dönerse, bakiyeden düşer, bir işlem kaydeder ve Withdrew $amount. Balance: $balance yazdırır. Aksi takdirde Withdrawal denied yazdırır.
    • getTransactionCount() - işlem sayısını döndürür.
  • savings_account.dart: Account sınıfını genişleten bir SavingsAccount oluşturun. Tasarruf hesaplarının bir para çekme limiti vardır - tek bir işlemde $500'dan fazla çekemezler. Bu kuralı uygulamak için canWithdraw() metodunu gerçekleştirin (ayrıca yeterli bakiye olduğundan emin olun). balance getter ve setter'ını kullanarak bakiyeyi verilen yüzde oranında artıran ve ardından Interest applied. Balance: $balance yazdıran bir applyInterest(double rate) metodu ekleyin.
  • checking_account.dart: Account sınıfını genişleten bir CheckingAccount oluşturun. Vadesiz hesapların $100'a kadar kredili mevduat (overdraft) koruması vardır - bakiye negatife düşebilir ancak -$100'ın altına düşemez. canWithdraw() metodunu, sonuçtaki bakiye -$100 veya üzerinde kaldığı sürece para çekmeye izin verecek şekilde gerçekleştirin.
  • customer.dart: Bir id (String), name (String) ve hesapları için bir List<Account> içeren bir Customer sınıfı oluşturun. Bir hesap eklemek için addAccount(Account account) ve tüm hesap bakiyelerinin toplamını döndüren getTotalBalance() metodlarını ekleyin. toString() metodunu Customer: name (X accounts) döndürecek şekilde geçersiz kılın.
  • main.dart: Bankacılık sisteminizi gösterin. Bir müşteri oluşturun (C001, John Smith). Bir SavingsAccount (SAV001, başlangıç bakiyesi $1000) ve bir CheckingAccount (CHK001, başlangıç bakiyesi $500) oluşturun. Her iki hesabı da müşteriye ekleyin ve müşteriyi yazdırın. Ardından şu işlemleri gerçekleştirin:
    1. Tasarruf hesabına $200 yatırın
    2. Tasarruf hesabından $300 çekin (başarılı olmalı)
    3. Tasarruf hesabından $600 çekmeyi deneyin (reddedilmeli - limiti aşıyor)
    4. Tasarruf hesabına %5 faiz uygulayın
    5. Vadesiz hesaptan $550 çekin (kredili mevduat kullanarak başarılı olmalı)
    6. Vadesiz hesaptan $100 daha çekmeyi deneyin (reddedilmeli - kredili mevduat limitini aşar)
    Son olarak, Savings transactions: X ve Total balance: $Y (2 ondalık basamak olacak şekilde formatlanmış) yazdırın.

Beklenen çıktı:

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.0

Kendin dene

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

void main() {
  // TODO: "C001" id'li ve "John Smith" isimli bir müşteri oluşturun
  
  // TODO: "SAV001" hesap numaralı ve 1000$ başlangıç bakiyeli bir SavingsAccount oluşturun
  
  // TODO: "CHK001" hesap numaralı ve 500$ başlangıç bakiyeli bir CheckingAccount oluşturun
  
  // TODO: Her iki hesabı da müşteriye ekleyin
  
  // TODO: Müşteriyi yazdırın
  
  // TODO: Aşağıdaki işlemleri gerçekleştirin:
  // 1. Tasarruf hesabına 200$ yatırın
  // 2. Tasarruf hesabından 300$ çekin (başarılı olmalı)
  // 3. Tasarruf hesabından 600$ çekmeyi deneyin (reddedilmeli - limiti aşıyor)
  // 4. Tasarruf hesabına %5 faiz uygulayın
  // 5. Çek hesabından 550$ çekin (overdraft kullanarak başarılı olmalı)
  // 6. Çek hesabından 100$ daha çekmeyi deneyin (reddedilmeli - overdraft limitini aşar)
  
  // TODO: "Savings transactions: X" yazdırın, burada X işlem sayısıdır
  
  // TODO: "Total balance: \$Y" yazdırın, burada Y 2 ondalık basamaklı olacak şekilde formatlanmalıdır
}

Nesne Yönelimli Programlama bölümündeki tüm dersler