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 kurs boyunca ustalaştığın OOP ilkelerini kullanarak gerçek dünyadaki finansal işlemleri modelleyen bir Bankacılık Sistemi oluşturalım. Farklı kurallara sahip hesaplar oluşturacak, işlemleri takip edecek ve müşterileri yöneteceksin; tüm bunlar birden fazla dosya üzerinde düzenlenecek.

Bankacılık sistemin altı dosya üzerinde düzenlenecek:

  • transaction.dart: Bir finansal işlemin değişmez kaydını temsil eden bir Transaction sınıfı oluştur. Her işlemde final (String - "deposit", "withdrawal" veya "transfer"), type (double) ve amount (DateTime) için timestamp alanlar bulunur. toString() metodunu, [type] $amount döndürecek şekilde geçersiz kıl.
  • account.dart: Özel bir Account (double), _balance hesap numarası (final - String) ve işlem geçmişini depolamak için bir accountNumber içeren soyut bir List<Transaction> sınıfı oluştur. Bakiye için bir getter, diğer dosyalardaki alt sınıfların bakiyeyi güncelleyebilmesi için korumalı bir setter set balance(double value), alt sınıfların uygulayacağı soyut bir bool canWithdraw(double amount) metodu ve şu somut metotları ekle:
    • deposit(double amount) - bakiyeye ekleme yapar, bir işlem kaydeder ve Deposited $amount. Balance: $balance yazdırır
    • withdraw(double amount) - canWithdraw() true döndürürse bakiyeden çıkarır, bir işlem kaydeder ve Withdrew $amount. Balance: $balance yazdırır. Aksi durumda Withdrawal denied yazdırır.
    • getTransactionCount() - işlem sayısını döndürür
  • savings_account.dart: SavingsAccount sınıfını genişleten bir Account oluştur. Tasarruf hesaplarında bir para çekme limiti vardır; tek bir işlemde $500'dan fazla çekemezler. Bu kuralı uygulamak için canWithdraw() metodunu uygula (ayrıca yeterli bakiye olduğundan emin ol). Verilen yüzde oranını kullanarak, applyInterest(double rate) getter ve setter'ını kullanıp bakiyeyi artıran bir balance metodu ekle; ardından Interest applied. Balance: $balance yazdır.
  • checking_account.dart: CheckingAccount sınıfını genişleten bir Account oluştur. Cari hesaplarda $100'a kadar kredili mevduat koruması vardır; bakiye negatif olabilir ancak -$100'un altına inemez. Sonuçta oluşan bakiye -$100 veya üzerinde kaldığı sürece para çekilmesine izin verecek şekilde canWithdraw() metodunu uygula.
  • customer.dart: Bir Customer (String), id (String) ve müşterinin hesapları için bir name içeren bir List<Account> sınıfı oluştur. Hesap eklemek için addAccount(Account account) ve tüm hesap bakiyelerinin toplamını döndüren getTotalBalance() metotlarını ekle. toString() metodunu Customer: name (X accounts) döndürecek şekilde geçersiz kıl.
  • main.dart: Bankacılık sistemini göster. Bir müşteri (C001, John Smith) oluştur. Bir SavingsAccount (SAV001, başlangıç bakiyesi $1000) ve bir CheckingAccount (CHK001, başlangıç bakiyesi $500) oluştur. Her iki hesabı da müşteriye ekle ve müşteriyi yazdır. Ardından şu işlemleri gerçekleştir:
    1. Tasarruf hesabına $200 yatır
    2. Tasarruf hesabından $300 çek (başarılı olmalı)
    3. Tasarruf hesabından $600 çekmeyi dene (reddedilmeli - limiti aşıyor)
    4. Tasarruf hesabına %5 faiz uygula
    5. Çek hesabından $550 çek (kredili mevduat kullanılarak başarılı olmalı)
    6. Çek hesabından $100 daha çekmeyi dene (reddedilmeli - kredili mevduat limitini aşar)
    Son olarak Savings transactions: X ve Total balance: $Y ifadelerini yazdır (2 ondalık basamakla biçimlendirilmiş olarak).

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

Kendi başına pratik yap: Online Dart derleyicisi