Skip to content

Code2Work/fullstack-backend-project-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Banka Hesap Yönetimi

Amaç

Java ile bir banka hesap yönetim sistemi yazacaksın. İki sınıfı (Account ve Bank) tamamlayarak encapsulation, static alanlar, dizi yönetimi ve nesne kullanımı konularını pekiştireceksin. (Main hazır verildi — sınıflarını bitirince çalıştırıp sonucu görürsün.) Tahmini süre: 4–6 saat.

Öğrenme Hedefleri

  • private alanları getter/metod ile kontrollü açmak (encapsulation)
  • static alan ve sabitleri kullanmak
  • String karşılaştırmasında .equals() ile == farkını kavramak
  • Sabit boyutlu dizi (Account[]) ile veri yönetmek
  • Constructor'da doğrulama (guard clause)
  • toString ile nesneyi okunabilir metne çevirmek

Başlamadan Önce

  • Java 17 veya üzeri kurulu olmalı (java -version).
  • IDE: IntelliJ IDEA (Community ücretsiz) veya VS Code + Java Extension Pack.
  • src/Account.java ve src/Bank.java içindeki her // TODO'yu sırayla çöz.
  • Main'i çalıştırarak sınıflarını deneyebilirsin (hazır demo, değiştirme gerekmez).

Adım Adım Görevler

1. Account Sınıfı (src/Account.java)

  1. Constructor doğrulaması (TODO 1–3): accountNumber, ownerName, pin boş olamaz; initialBalance negatif olamaz. Hatalıysa ekrana mesaj yaz + return. Doğruysa alanları ata, totalAccountsCreated'ı artır.
  2. deposit (TODO 4–7): Negatif/sıfır miktarı reddet. Geçerliyse balance'ı ve totalTransactionCount'u artır.
  3. withdraw (TODO 8–13): Sırayla PIN → miktar → MIN_BALANCE kontrol et. Başarısızlıkta false. Başarılıysa bakiyeyi düşür, sayacı artır, true.
  4. getBalance (TODO 14–15): Yanlış PIN'de -1, doğruysa balance.
  5. changePin (TODO 16–19): Eski PIN doğru + yeni PIN boş değilse güncelle, true.
  6. getAccountNumber (TODO 20): accountNumber döndür.
  7. toString (TODO 21): accountNumber, ownerName, balance içeren satır. PIN gösterilmez.

💡 String karşılaştırmasında her zaman .equals() kullan (== referans karşılaştırır). MIN_BALANCE gibi sabit değerleri tek yerde tanımla, koda dağıtma. Her metod tek iş yapsın.

2. Bank Sınıfı (src/Bank.java)

  1. addAccount (TODO 1–4): null ya da dizi doluysa reddet; değilse accounts[size]'a ata, size'ı artır.
  2. findByNumber (TODO 5–6): 0'dan size'a dön, getAccountNumber().equals() ile karşılaştır; bulamazsan null.
  3. listAll (TODO 7–8): Boşsa bilgi mesajı; değilse her hesabı yazdır.

💡 Dizinin kapasitesi (accounts.length) ile içindeki eleman sayısı (size) farklı şeylerdir.

Main (hazır)

src/Main.java hazır bir demo — birkaç hesap oluşturup işlem yapar ve sonuçları ekrana yazar. Sen bir şey yazmazsın; Account ve Bank'ı bitirince Main'i çalıştır, sınıflarının çalıştığını gör.

Örnek Çalışma

Main'i çalıştırınca (sınıflar tamamlandığında) şuna benzer bir çıktı görürsün:

=== Banka Hesap Yönetim Sistemi (Demo) ===

Açılan hesaplar:
Hesap[TR001 | Ali Veli | 1000.0 TL]
Hesap[TR002 | Ayşe Kaya | 2500.0 TL]

TR001'e 500 TL yatırılıyor...
TR001 güncel bakiye: 1500.0

TR002'den 1000 TL çekiliyor...
TR002 güncel bakiye: 1500.0

TR002'den yanlış PIN ile çekme denemesi:
Hatalı PIN.

=== İstatistikler ===
Toplam açılan hesap : 2
Toplam işlem sayısı : 2

Testler ve Skor

Projede 24 JUnit testi var (tests/ klasöründe). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir — ayrı bir "tamamladım" adımı yok.

1. Öğrenci numaranı gir. student_id.txt dosyasını aç, 123456'yı sil, Kaizu'daki öğrenci numaranı yaz, kaydet. (Bir kez yaparsın.)

2. Testleri çalıştır.

  • macOS / Linux: ./run-tests.sh
  • Windows: .\run-tests.ps1

İlk çalıştırmada JUnit kütüphanesi (~6 MB) lib/'e otomatik iner. Başlangıçta testler kırmızıdır; TODO'ları çözdükçe yeşile döner.

3. Skor otomatik gider. Testler bitince çıktının sonunda görürsün:

[Kaizu] ✅ Skorun (100/100) kaydedildi. Panelde tik birazdan görünür.

Tüm testler geçince (100/100) panelde yeşil tik gelir.

Skor için testleri run-tests.sh ile çalıştır (tüm testleri koşar). IDE'de tek bir testi çalıştırmak geliştirme/hata ayıklama içindir, panele işlemez.

Bonus (Opsiyonel)

  • Para transferi: Bank'a transfer(fromNumber, toNumber, amount, pin) ekle.
  • İşlem geçmişi: Account içinde son 10 işlemi tutan String[].
  • PIN uzunluğu: changePin'de yeni PIN tam 4 hane değilse reddet.

Çözüm

Takılırsan proje sayfasındaki "Çözümü Göster" butonunu kullan (proje verildikten 3 gün sonra açılır). Ama önce en az 1 saat kendin uğraş — tests/ içindeki testler ve hata mesajları en iyi ipucu.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors