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 dosyaya organize edilmiş şekilde yapacaksınız.

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

  • transaction.dart: Finansal bir işlemin değişmez (immutable) 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 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 çekim 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 inemez. Sonuçtaki bakiye -$100 veya üzerinde kaldığı sürece çekimlere izin verecek şekilde canWithdraw() metodunu 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 basamakla biçimlendirilmiş) 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.00

Kendin dene

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

void main() {
  // TODO: id değeri "C001" ve adı "John Smith" olan bir müşteri oluşturun
  
  // TODO: accountNumber değeri "SAV001" ve başlangıç bakiyesi $1000 olan bir SavingsAccount oluşturun
  
  // TODO: accountNumber değeri "CHK001" ve başlangıç bakiyesi $500 olan 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. Vadesiz hesaptan $550 çekin (overdraft kullanarak başarılı olmalı)
  // 6. Vadesiz hesaptan $100 daha çekmeyi deneyin (reddedilmeli - overdraft limitini aşar)
  
  // TODO: X'in işlem sayısı olduğu "Savings transactions: X" ifadesini yazdırın
  
  // TODO: Y'nin 2 ondalık basamakla biçimlendirildiği "Total balance: \$Y" ifadesini yazdırın
}

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