Bu uygulamada baz alacağımız şey, kendi banka hesabımız olacaktır. Bu hesaba para yatırabiliyor, bu hesaptan para çekebiliyor ve başka bir hesaba para yollayabiliyor olmamız gerekir. İşte, şimdi bu uygulamayı yapmaya çalışacağız. Oldukça basit olacak ama isterseniz kendiniz daha da geliştirebilirsiniz. Başlayalım.
Bunun için her şeyden önce time kütüphanesini import ediyorum çünkü işlemler arası bekleme süresi belirleyeceğim. Hemen sonrasında User isimli bir class oluşturuyorum.

Direkt olarak __init__ metodunu veriyorum ve içerisine ad, soyad, yaş, cinsiyet olmak üzere 4 adet özellik tanımladım. Sonrasında self.firstName = firstName şeklinde atamalarını gerçekleştirdim.

Genel bilgileri döndürmesi adına __str__ metodu tanımlayıp az önce tanımladığımız özellikleri return ediyorum.
User sınıfını oluşturduğumuza göre artık banka hesabımıza odaklanabiliriz. Bunun için Bank isimli bir sınıf daha oluşturuyorum ve User isimli sınıftan miras alıyorum.

Hemen sonrasında yine bir __init__ tanımlayıp address isimli yeni bir özellik tanımlıyorum. Bildiğiniz gibi super() metodunu da kullanarak User isimli sınıftaki özellikleri çekiyorum.
Bu noktada self.address = address diyorum, bunu zaten biliyorsunuz. Referans olması bakımından da banka hesabındaki para miktarını self.balance = 0 diyerek direkt olarak tanımlıyorum; bunu özellik olarak vermedim.
Madem balance değerimiz referans olacak ve işlemler sonucunda değişecek o zaman bunu bir metot ile yazdırabiliriz. Şöyle yapalım:

Bu sayede bu değeri her çektiğimizde güncel bakiyemiz görünecek. Şimdi, para yatırma işlemini ayarlamamız lazım. Para yatırdığımızda hesaptaki paramızın üzerine eklenir, öyle değil mi? Bakalım.

Bunun için deposit isimli bir metot oluşturuyorum ve ona hem self hem de amount parametrelerini veriyorum. Buradaki self parametresinin, o an baz alınan nesne olduğunu biliyorsunuz. amount ise yatırılacak miktarı belirtiyor.
Sonrasında self.amount = amount diyerek amount özelliğinin atamasını gerçekleştiriyorum. self.balance = self.balance + amount diyerek hâlihazırda var olan paranın üzerine yatırılan parayı ekliyorum. Dilerseniz bu satırı şu şekilde de yazabilirsiniz: self.balance += amount.
Sonrasında bu işlemin gerçekleştiğini belirtiyorum ve time.sleep(3) diyerek 3 saniye bekliyorum. 3 saniye dolduğunda ise bir return gerçekleştiriyorum. Burada şu tarz bir çıktı gelecektir: "Cyber Worm adına 1200₺ değerinde para girişi gerçekleşti. [INFO] Günce Bakiye: 1200₺".
En sonda, biraz önce tanımladığımız showBalance(self): metodunu koyuyorum ve bunun güncel kalmasını sağlıyorum. Ayrıca bunu yaparak oldukça esnek bir hareket alanım oluyor. Çünkü metodun içini istediğim şekilde düzenleyebilirim.
Aynı şekilde, para çekme işlemini de ayarlamamız lazım. Hemen bakalım.

Bunun için withdraw isimli bir metot oluşturup içerisine self ve amount argümanlarını veriyorum. Hemen sonrasında işlemin gerçekleşebilmesi için gereken şartı koyuyorum. Bu noktada para çekebilmek için hesapta, çekilmek istenen tutar kadar bir para olması gerekiyor. Bu yüzden oraya if self.balance < amount: şeklinde bir koşul verdim ve içerisine "Başarısız" tarzında bir return koydum. Çünkü eğer balance değeri yani hesaptaki para, amount değerinden yani çekilecek olan tutardan daha az ise para çekemeyiz.
else: bloğu ile kalan son ihtimali değerlendiriyoruz. Bu noktada eğer balance değeri amount değerinden büyükse else: kısmı çalışacak ve para çekme işlemi başarılı olacaktır.
Elbette, para çektikten sonra çekilen tutarı ana bakiyeden çıkarmamız gerekiyor. Bu yüzden para çekilmesi durumunda else kısmı çalışacağı için oraya self.balance = self.balance - amount dedim. Bunu, self.balance -= amount şeklinde de yazabilirsiniz.
Bunu yaptıktan sonra self.showBalance() ile yine bakiyeyi gösteriyoruz.
Şimdi, bir instance oluşturalım ve yazdıklarımızı deneyelim. Bu noktada instance olarak kendimizi tanımlayacağız. Çünkü bu hesap şu an bizimmiş gibi düşünüyoruz. O yüzden mainUser isimli bir nesne tanımlıyorum.

mainUser = Bank(...) şeklinde bir nesne tanımladım ve en sona bir adres koydum. Bu adresi birazdan kullanacağız. Elbette, normal bir IBAN yerine örnek bir kripto para cüzdan adresi koydum.
Sonrasında print(mainUser.deposit(1200)) kodunu yazdım. Bu noktada deposit yani para yatırma metodunu mainUser için çalıştırıyorum. İçerisine verdiğim 1200 değeri ise, metodu tanımlarken verdiğimiz amount argümanından kaynaklanıyor. Bu kod ile ben, hesabıma 1200₺ yatırdım.
Aynı şey, bir alt satırdaki kod için de geçerli. Tek fark, withdraw metodunun çağırılması ve bu satırın para çekme işlemiyle alakalı olmasıdır. Gördüğünüz üzere 476₺ değerinde para çektim.
Peki, bakiyeden daha yüksek bir miktar çekmek istersek ne olur?

1200₺ değerinde para yatırdım ama 1476₺ değerinde para çekmeye çalıştığım için buna izin vermedi.
Şimdi, para transferi işini çözmemiz lazım. Elbette, bu gerçek bir transfer olmayacak; sadece basit bir mesaj döndüreceğiz. Burada sadece neyin nasıl kullanıldığını, neyin ne ile etkileşimde bulunduğunu görmeniz için yapıyorum.

def transfer(self, receiver, amount): şeklinde, self dışında iki argüman alan bir metot tanımladım. Bu metotlardan receiver, alıcı kişiyi ifade ederken amount, yollanacak parayı ifade ediyor. Sonrasında bunları self.receiver = receiver şeklinde tanımlıyorum ve aşağı iniyorum.
Bunun bir işlem olmasından dolayı oraya 3 saniye bekleme süresi ekliyorum ve yine bakiye kontrolü sağlıyorum. Biraz önceki gibi; eğer hesabınızda transfer edeceğiniz paradan daha az para varsa bunu yapamazsınız. Sonrasını zaten biliyorsunuz.
Şimdi, bir instance daha oluşturalım ve sırasıyla para yatırma, para çekme ve para transferi işlemlerini gerçekleştirelim.

user2 isimli bir instance daha tanımladım. İstediğiniz kadar instance yaratabilirsiniz. Bunu, kayıtlı kişiler olarak düşünün. Sonrasında deposit ve withdraw işlemlerini gerçekleştirdim.
Son olarak print(mainUser.transfer()) derken mainUser yani self için transfer metodunu çağırmasını istedik. print(mainUser.transfer(user2.address, 100)) derken ise, user2 isimli nesnenin address isimli özelliğini kastederek ona 100 birim para yolluyoruz. Burada user2 dediğimiz şey aslında transfer metodundaki receiver, 100 sayısı ise amount oluyor.
Kodu çalıştıralım.

Kodumuz gayet başarılı bir şekilde çalışıyor. Bu noktada dikkat edeceğiniz şey, kullandığım metotlar ve mantıklardır. Gerçek bir banka sistemi olmadığını bilmenizi istiyorum. Ayrıca sitede henüz veri tabanı işlemlerini anlatmadığım için bu kadar kısıtlı bir proje oldu. Kodun aynısını yazıp çalıştırabilir, dilediğiniz güncellemeleri yapabilirsiniz. Sevgiler.


Yayınlanma Tarihi: 2022-12-29 14:49:28
Son Düzenleme Tarihi: 2022-12-31 13:45:22