Bankacılık Sistemi
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 108 / 110.
Görev
KolayBu 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 birTransactionsınıfı oluşturun. Her işlemintype(String - "deposit", "withdrawal" veya "transfer"),amount(double) vetimestamp(DateTime) içinfinalalanları olmalıdır.toString()metodunu[type] $amountdöndürecek şekilde geçersiz kılın (override).account.dart: Özel bir_balance(double),finalbir hesap numarası (accountNumber- String) ve işlem geçmişini saklamak için birList<Transaction>içeren soyut birAccountsı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 setterset balance(double value), alt sınıfların uygulayacağı soyut bir metod olanbool canWithdraw(double amount)ve şu somut metodları ekleyin:deposit(double amount)- bakiyeye ekleme yapar, bir işlem kaydeder veDeposited $amount. Balance: $balanceyazdırır.withdraw(double amount)- eğercanWithdraw()true dönerse, bakiyeden düşer, bir işlem kaydeder veWithdrew $amount. Balance: $balanceyazdırır. Aksi takdirdeWithdrawal deniedyazdırır.getTransactionCount()- işlem sayısını döndürür.
savings_account.dart:Accountsınıfını genişleten birSavingsAccountoluşturun. Tasarruf hesaplarının bir para çekme limiti vardır - tek bir işlemde $500'dan fazla çekemezler. Bu kuralı uygulamak içincanWithdraw()metodunu gerçekleştirin (ayrıca yeterli bakiye olduğundan emin olun).balancegetter ve setter'ını kullanarak bakiyeyi verilen yüzde oranında artıran ve ardındanInterest applied. Balance: $balanceyazdıran birapplyInterest(double rate)metodu ekleyin.checking_account.dart:Accountsınıfını genişleten birCheckingAccountoluş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: Birid(String),name(String) ve hesapları için birList<Account>içeren birCustomersınıfı oluşturun. Bir hesap eklemek içinaddAccount(Account account)ve tüm hesap bakiyelerinin toplamını döndürengetTotalBalance()metodlarını ekleyin.toString()metodunuCustomer: 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). BirSavingsAccount(SAV001, başlangıç bakiyesi $1000) ve birCheckingAccount(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:- Tasarruf hesabına $200 yatırın
- Tasarruf hesabından $300 çekin (başarılı olmalı)
- Tasarruf hesabından $600 çekmeyi deneyin (reddedilmeli - limiti aşıyor)
- Tasarruf hesabına %5 faiz uygulayın
- Vadesiz hesaptan $550 çekin (kredili mevduat kullanarak başarılı olmalı)
- Vadesiz hesaptan $100 daha çekmeyi deneyin (reddedilmeli - kredili mevduat limitini aşar)
Savings transactions: XveTotal 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.0Kendin 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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı