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 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 birTransactionsınıfı oluştur. Her işlemdefinal(String - "deposit", "withdrawal" veya "transfer"),type(double) veamount(DateTime) içintimestampalanlar bulunur.toString()metodunu,[type] $amountdöndürecek şekilde geçersiz kıl.account.dart: Özel birAccount(double),_balancehesap numarası (final- String) ve işlem geçmişini depolamak için biraccountNumberiçeren soyut birList<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 setterset balance(double value), alt sınıfların uygulayacağı soyut birbool canWithdraw(double amount)metodu ve şu somut metotları ekle:deposit(double amount)- bakiyeye ekleme yapar, bir işlem kaydeder veDeposited $amount. Balance: $balanceyazdırırwithdraw(double amount)-canWithdraw()true döndürürse bakiyeden çıkarır, bir işlem kaydeder veWithdrew $amount. Balance: $balanceyazdırır. Aksi durumdaWithdrawal deniedyazdırır.getTransactionCount()- işlem sayısını döndürür
savings_account.dart:SavingsAccountsınıfını genişleten birAccountoluştur. Tasarruf hesaplarında bir para çekme limiti vardır; tek bir işlemde $500'dan fazla çekemezler. Bu kuralı uygulamak içincanWithdraw()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 birbalancemetodu ekle; ardındanInterest applied. Balance: $balanceyazdır.checking_account.dart:CheckingAccountsınıfını genişleten birAccountoluş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 şekildecanWithdraw()metodunu uygula.customer.dart: BirCustomer(String),id(String) ve müşterinin hesapları için birnameiçeren birList<Account>sınıfı oluştur. Hesap eklemek içinaddAccount(Account account)ve tüm hesap bakiyelerinin toplamını döndürengetTotalBalance()metotlarını ekle.toString()metodunuCustomer: 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. BirSavingsAccount(SAV001, başlangıç bakiyesi $1000) ve birCheckingAccount(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:- Tasarruf hesabına $200 yatır
- Tasarruf hesabından $300 çek (başarılı olmalı)
- Tasarruf hesabından $600 çekmeyi dene (reddedilmeli - limiti aşıyor)
- Tasarruf hesabına %5 faiz uygula
- Çek hesabından $550 çek (kredili mevduat kullanılarak başarılı olmalı)
- Çek hesabından $100 daha çekmeyi dene (reddedilmeli - kredili mevduat limitini aşar)
Savings transactions: XveTotal balance: $Yifadelerini 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.00Kendin 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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi