Bankacılık Sistemi
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 62 / 64.
Görev
ZorBu meydan okumada, birden fazla hesap türü, işlem ve merkezi bir banka yöneticisi içeren bir bankacılık sistemi oluşturacaksınız.
Şu dosyalardaki TODO öğelerini tamamlayarak bankacılık sistemini uygulayın:
transaction.py- Finansal faaliyetleri kaydetmek için Transaction sınıfıaccount.py- Ortak işlevselliğe sahip soyut temel Account sınıfısavingsaccount.py- Faiz ve minimum bakiye içeren SavingsAccount uygulamasıcheckingaccount.py- Fazla çekim (overdraft) özelliklerine sahip CheckingAccount uygulamasıbank.py- Hesapları ve transferleri yönetmek için Bank sınıfı
Kopya kağıdı
Bu meydan okuma, aşağıdakiler de dahil olmak üzere nesne yönelimli programlama kavramlarıyla bir bankacılık sistemi oluşturmayı içerir:
- Transaction class - Finansal faaliyetleri kaydeder
- Abstract Account class - Ortak hesap işlevselliğine sahip temel sınıf
- SavingsAccount - Faiz hesaplama ve minimum bakiye gereksinimleri olan hesap türü
- CheckingAccount - Kredili mevduat koruma özelliklerine sahip hesap türü
- Bank class - Hesaplar ve para transferleri için merkezi yönetici
Temel kavramlar, modüler bir bankacılık sistemi mimarisi oluşturmak için kalıtım, soyutlama, kapsülleme ve çok biçimliliği içerir.
Kendin dene
from transaction import Transaction
from account import Account
from savingsaccount import SavingsAccount
from checkingaccount import CheckingAccount
from bank import Bank
# Tüm senaryoları ve uç durumları kapsayan kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "transaction_class":
# Transaction sınıfını test et
transaction = Transaction("deposit", 100.50, None)
print(str(transaction))
transaction = Transaction("withdrawal", 75.25, None)
print(str(transaction))
elif test_case == "account_deposit":
# Para yatırma işlevini test et
savings = SavingsAccount("S123", "John Doe", 500)
# Pozitif miktar
success, message = savings.deposit(200)
print(f"Success: {success}")
print(f"Message: {message}")
print(f"Balance: ${savings.get_balance():.2f}")
# Negatif miktar (başarısız olmalı)
success, message = savings.deposit(-50)
print(f"Success: {success}")
print(f"Message: {message}")
elif test_case == "savings_withdraw":
# Tasarruf hesabı para çekme işlemini test et
savings = SavingsAccount("S123", "John Doe", 500, min_balance=200)
# Geçerli para çekme
success, message = savings.withdraw(100)
print(f"Success: {success}")
print(f"Message: {message}")
# Geçersiz (minimum bakiyenin altında)
success, message = savings.withdraw(300)
print(f"Success: {success}")
print(f"Message: {message}")
# Negatif miktar
success, message = savings.withdraw(-50)
print(f"Success: {success}")
print(f"Message: {message}")
elif test_case == "checking_withdraw":
# Vadesiz hesap para çekme işlemini test et
checking = CheckingAccount("C123", "Jane Smith", 300, overdraft_limit=200)
# Normal para çekme
success, message = checking.withdraw(100)
print(f"Success: {success}")
print(f"Message: {message}")
# Kredili mevduat (overdraft) ile para çekme
success, message = checking.withdraw(300)
print(f"Success: {success}")
print(f"Message: {message}")
# Kredili mevduat limitini aşma
success, message = checking.withdraw(200)
print(f"Success: {success}")
print(f"Message: {message}")
elif test_case == "interest_application":
# Faiz uygulamasını test et
savings = SavingsAccount("S123", "John Doe", 1000, interest_rate=0.05)
success, message = savings.apply_interest()
print(f"Success: {success}")
print(f"Message: {message}")
print(f"New Balance: ${savings.get_balance():.2f}")
# İşlem geçmişini kontrol et
transactions = savings.get_transaction_history()
print(f"Transaction count: {len(transactions)}")
print(f"Last transaction: {transactions[-1]}")
elif test_case == "bank_create_account":
# Banka hesabı oluşturmayı test et
bank = Bank("Test Bank")
# Bir tasarruf hesabı oluştur
success, message = bank.create_account("savings", "S123", "John Doe", 1000, interest_rate=0.03)
print(f"Success: {success}")
print(f"Message: {message}")
# Bir vadesiz hesap oluştur
success, message = bank.create_account("checking", "C456", "Jane Smith", 500, overdraft_limit=300)
print(f"Success: {success}")
print(f"Message: {message}")
# Mükerrer hesap numarası ile oluştur
success, message = bank.create_account("savings", "S123", "Another Person", 200)
print(f"Success: {success}")
print(f"Message: {message}")
# Geçersiz tür ile oluştur
success, message = bank.create_account("invalid", "I789", "Test Person", 100)
print(f"Success: {success}")
print(f"Message: {message}")
elif test_case == "bank_transfer":
# Banka transfer işlevini test et
bank = Bank("Transfer Test Bank")
# İki hesap oluştur
bank.create_account("savings", "S123", "John Doe", 1000, min_balance=100)
bank.create_account("checking", "C456", "Jane Smith", 500)
# Geçerli transfer
success, message = bank.transfer("S123", "C456", 300)
print(f"Success: {success}")
print(f"Message: {message}")
print(f"Source balance: ${bank.get_account('S123').get_balance():.2f}")
print(f"Destination balance: ${bank.get_account('C456').get_balance():.2f}")
# Geçersiz transfer (minimum bakiyeyi aşıyor)
success, message = bank.transfer("S123", "C456", 700)
print(f"Success: {success}")
print(f"Message: {message}")
# Geçersiz hesap
success, message = bank.transfer("NONEXISTENT", "C456", 100)
print(f"Success: {success}")
print(f"Message: {message}")
elif test_case == "full_banking_workflow":
# Tam bir iş akışını test et
bank = Bank("Full Workflow Bank")
# Hesapları oluştur
bank.create_account("savings", "S123", "John Doe", 1000, interest_rate=0.05, min_balance=200)
bank.create_account("checking", "C456", "Jane Smith", 500, overdraft_limit=250)
# Para yatır
savings = bank.get_account("S123")
checking = bank.get_account("C456")
savings.deposit(300)
checking.deposit(200)
# Transfer yap
bank.transfer("S123", "C456", 400)
# Tasarruf hesabına faiz uygula
savings.apply_interest()
# Kredili mevduat ile vadesiz hesaptan para çek
checking.withdraw(900)
# Son durumu yazdır
print("Final Account States:")
print(f"Savings (S123): ${savings.get_balance():.2f}")
print(f"Checking (C456): ${checking.get_balance():.2f}")
print("\nTransaction History (Savings):")
for transaction in savings.get_transaction_history():
print(f"- {transaction}")
print("\nTransaction History (Checking):")
for transaction in checking.get_transaction_history():
print(f"- {transaction}")
elif test_case == "inheritance_validation_test":
# Kapsamlı kalıtım doğrulaması
objects = []
if 'Transaction' in locals():
objects.append(Transaction('test_param', 100, None))
if 'SavingsAccount' in locals():
objects.append(SavingsAccount('test_param', 'Test User'))
if 'CheckingAccount' in locals():
objects.append(CheckingAccount('test_param', 'Test User'))
if 'Bank' in locals():
objects.append(Bank('test_param'))
for obj in objects:
print(f'{type(obj).__name__}:')
print(f' MRO: {[cls.__name__ for cls in type(obj).__mro__]}')
print()
elif test_case == "method_overriding_test":
# Metot geçersiz kılma (overriding) davranışını test et
print('Testing method overriding...')
# Örnekler oluştur ve geçersiz kılınan metotları test et
if 'SavingsAccount' in locals():
obj = SavingsAccount('test', 'Test User')
print(f'SavingsAccount methods work correctly')
if 'CheckingAccount' in locals():
obj = CheckingAccount('test', 'Test User')
print(f'CheckingAccount methods work correctly')
elif test_case == "attribute_access_test":
# Öznitelik erişimini test et
print('Testing attribute access...')
if 'Transaction' in locals():
obj = Transaction('test', 100, None)
print(f'Transaction attributes accessible')
if 'SavingsAccount' in locals():
obj = SavingsAccount('test', 'Test User')
print(f'SavingsAccount attributes accessible')
if 'CheckingAccount' in locals():
obj = CheckingAccount('test', 'Test User')
print(f'CheckingAccount attributes accessible')
if 'Bank' in locals():
obj = Bank('test')
print(f'Bank attributes accessible')
elif test_case == "boundary_conditions_test":
# Sınır koşullarını ve uç değerleri test et
print('Running boundary_conditions_test test...')
print('Test completed successfully')
elif test_case == "error_handling_test":
# Hata yönetimi ve istisna senaryolarını test et
print('Running error_handling_test test...')
print('Test completed successfully')
elif test_case == "polymorphic_behavior_test":
# Karışık nesnelerle polimorfik davranışı test et
print('Running polymorphic_behavior_test test...')
print('Test completed successfully')
elif test_case == "stress_test":
# Birden fazla nesne ile stres testi
import time
start_time = time.time()
objects = []
for i in range(50):
try:
objects.append(Transaction(f'test_{i}', 100, None))
except:
pass # Oluşturma hatalarını nazikçe ele al
try:
objects.append(SavingsAccount(f'test_{i}', f'User_{i}'))
except:
pass # Oluşturma hatalarını nazikçe ele al
try:
objects.append(CheckingAccount(f'test_{i}', f'User_{i}'))
except:
pass # Oluşturma hatalarını nazikçe ele al
try:
objects.append(Bank(f'test_{i}'))
except:
pass # Oluşturma hatalarını nazikçe ele al
end_time = time.time()
print(f'Created {len(objects)} objects')
print(f'Time taken: {end_time - start_time:.4f} seconds')
print('Stress test completed')
elif test_case == "comprehensive_validation":
# Kapsamlı doğrulama testi
print('=== Comprehensive Validation Test ===')
# Test 1: Temel nesne oluşturma
print('1. Basic Object Creation:')
success_count = 0
classes = ['Transaction', 'SavingsAccount', 'CheckingAccount', 'Bank']
try:
obj = Transaction('test', 100, None)
success_count += 1
print(f' Transaction: Created successfully')
except Exception as e:
print(f' Transaction: Creation failed - {e}')
try:
obj = SavingsAccount('test', 'Test User')
success_count += 1
print(f' SavingsAccount: Created successfully')
except Exception as e:
print(f' SavingsAccount: Creation failed - {e}')
try:
obj = CheckingAccount('test', 'Test User')
success_count += 1
print(f' CheckingAccount: Created successfully')
except Exception as e:
print(f' CheckingAccount: Creation failed - {e}')
try:
obj = Bank('test')
success_count += 1
print(f' Bank: Created successfully')
except Exception as e:
print(f' Bank: Creation failed - {e}')
print(f' Successfully created {success_count}/{len(classes)} classes')
print('=== Validation Complete ===')Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarı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ı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarı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ı