Bankacılık Sistemi
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 63 / 65.
Görev
Zorİki tür hesaba sahip bir banka oluştur. Her işlem bir sonuç sözlüğü {"ok": bool, "message": String} döndürür; sağlanan kod bunu OK: MESSAGE veya Failed: MESSAGE olarak yazdırır. Tüm tutarlar float türündedir ve bir mesajdaki her tutar, $ işaretinden sonra iki ondalık basamakla gösterilir.
transaction.gd içindeki Transaction: kurucu kind ("deposit", "withdrawal" veya "interest") ve amount parametrelerini alır. _to_string(), türü ilk harfi büyük olacak şekilde ve ardından tutarı döndürür: Deposit - $200.00. Bir işlem, hesabını saklamaz.
account.gd içindeki Account, bir @abstract sınıfıdır:
- Kurucu
account_number,owner_nameveinitial_balanceparametrelerini alır. Para, özel_balanceiçinde tutulur;balance, alıcısı_balancedöndüren salt okunur bir özelliktir._history, birArray[Transaction]dizisidir veget_history()bu diziyi döndürür. - İki soyut yöntem:
account_type() -> Stringve para çekme işleminin neden reddedildiğini, ya da""değerini döndürenwithdrawal_error(amount: float) -> String. deposit(amount):0veya daha düşük bir tutar,Deposit amount must be positivemesajıyla başarısız olur. Aksi takdirde parayı ekler, birdepositişlemi kaydeder veDeposited $A. New balance: $Bdöndürür.withdraw(amount):0veya daha düşük bir tutar,Withdrawal amount must be positivemesajıyla başarısız olur; boş olmayan birwithdrawal_error()değeri de bu metinle başarısız olur. Aksi takdirde parayı çeker, birwithdrawalişlemi kaydeder ve bakiye artık0değerinin altındaysa sonuna(Overdraft)ekleyerekWithdrew $A. New balance: $Bdöndürür._to_string(),TYPE NUMBER (OWNER): $BALANCEdöndürür.
savings_account.gd içindeki SavingsAccount, Account sınıfını genişletir ve INTEREST_RATE = 0.02 ile MIN_BALANCE = 100.0 sabitlerine sahiptir. Türü Savings değeridir. Bakiyeyi MIN_BALANCE değerinin altına düşürecek bir para çekme işlemi Cannot withdraw below minimum balance of $100.00 mesajıyla reddedilir. apply_interest(), balance * INTEREST_RATE değerini ekler, bir interest işlemi kaydeder ve Applied interest: $I. New balance: $B döndürür.
checking_account.gd içindeki CheckingAccount, Account sınıfını genişletir ve OVERDRAFT_LIMIT = 200.0 sabitine sahiptir. Türü Checking değeridir. Bakiye -200.00 değerine kadar düşebilir; daha da düşmesine neden olacak bir para çekme işlemi Cannot exceed overdraft limit of $200.00 mesajıyla reddedilir.
bank.gd içindeki Bank, hesapları hesap numarasına göre anahtarlanan özel bir sözlükte tutar:
- Kurucu
bank_nameparametresini alır. create_account(kind, account_number, owner_name, initial_balance)bir fabrika yöntemidir:kind, harf büyüklüğü fark etmeksizinsavingsveyacheckingdeğeridir.Account number already existsveyaInvalid account typemesajıyla başarısız olur; aksi takdirdeSavings account created successfully(veyaChecking) döndürür.get_account(account_number) -> Accounthesabı veyanulldeğerini döndürür.transfer(from_number, to_number, amount):One or both accounts not foundmesajıyla başarısız olur; ilk hesaptan para çeker ve bu işlem başarısız olursaTransfer failed:metnini, para çekme işleminin mesajıyla birleştirerek döndürür. Aksi takdirde ikinci hesaba para yatırır veTransferred $A from FROM to TOdöndürür.total_holdings() -> floattüm bakiyelerin toplamını döndürür.
Sağlanan kod, banka adını ve ardından komutları okur. Bu girdi için:
First Bank
open savings|S1|Alice|1000
open checking|C1|Bob|50
withdraw S1|950
transfer S1|C1|300
withdraw C1|400
history C1
totalçıktı şöyledir:
OK: Savings account created successfully
OK: Checking account created successfully
Failed: Cannot withdraw below minimum balance of $100.00
OK: Transferred $300.00 from S1 to C1
OK: Withdrew $400.00. New balance: $-50.00 (Overdraft)
History of C1:
1. Deposit - $300.00
2. Withdrawal - $400.00
Total held by First Bank: $650.00Kodunu transaction.gd, account.gd, savings_account.gd, checking_account.gd ve bank.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var bank := Bank.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var f: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"open":
show_result(bank.create_account(f[0], f[1], f[2], float(f[3])))
"deposit":
show_result(bank.get_account(f[0]).deposit(float(f[1])))
"withdraw":
show_result(bank.get_account(f[0]).withdraw(float(f[1])))
"interest":
var account: Account = bank.get_account(f[0])
if account is SavingsAccount:
var savings := account as SavingsAccount
show_result(savings.apply_interest())
else:
print("Failed: ", f[0], " is not a savings account")
"transfer":
show_result(bank.transfer(f[0], f[1], float(f[2])))
"history":
var history: Array = bank.get_account(f[0]).get_history()
print("History of ", f[0], ":")
for i in history.size():
print(i + 1, ". ", history[i])
"account":
print(bank.get_account(f[0]))
"total":
print("Total held by %s: $%.2f" % [bank.bank_name, bank.total_holdings()])
line = OS.read_string_from_stdin()
func show_result(result: Dictionary) -> void:
print(("OK: " if result["ok"] else "Failed: ") + result["message"])
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi