Java 17 ile gelistirilmis, JSON tabanli veri saklama kullanan tam kapsamli bir banka yonetim sistemidir. Hem konsol (CLI) hem de JavaFX 21 masaustu GUI arayuzu sunarak musteri yonetimi, hesap islemleri, para transferi, islem gecmisi ve raporlama gibi temel bankacilik fonksiyonlarini gerceklestirir.
- Ozellikler
- Ekran Goruntusu
- Teknoloji Yigini
- Proje Yapisi
- Mimari
- Kurulum ve Calistirma
- Kullanim
- Veri Saklama
- Guvenlik
| Ozellik | Aciklama |
|---|---|
| Musteri Yonetimi | PIN ile kimlik dogrulama, musteri kaydi |
| Hesap Tipleri | Vadesiz (CHECKING), Birikim (SAVINGS), Vadeli (TERM) |
| Para Yatirma | Ucretsiz, limitsiz para yatirma |
| Para Cekme | Islem basi 1.00 TL ucret, gunluk 5.000 TL limit |
| Hesaplar Arasi Transfer | Islem basi 2.50 TL ucret, gunluk 10.000 TL limit |
| Eksi Bakiye (Overdraft) | Sadece CHECKING hesaplarda 1.000 TL eksi limit |
| Islem Gecmisi | Her hesapta tarih, tip, tutar, ucret ve bakiye kaydi |
| Raporlama | Gunluk ve aylik ozet raporlar |
| CSV Disari Aktarim | Raporlari data/exports/ klasorune CSV olarak kaydetme |
| Bildirim Logu | Tum islemler data/notifications.log dosyasina yazilir |
| Cift Arayuz | Ayni is mantigini kullanan konsol ve JavaFX GUI |
Uygulama koyu (dark) tema ile profesyonel bir bankacilik arayuzu sunar:
- Sol tarafta ikon tabanli navigasyon menüsü (9 sekme)
- Ortada form tabanli islem paneli
- Sag tarafta bilgi paneli
- Altta konsol ciktisi ve durum cubugu
| Teknoloji | Surum | Kullanim Alani |
|---|---|---|
| Java | 17+ | Ana programlama dili, tum is mantigi |
| Maven | 3.9+ | Proje yonetimi, bagimlilik yonetimi, build |
| Kutuphane | Surum | Kullanim Alani |
|---|---|---|
| JavaFX Controls | 21.0.5 | Masaustu GUI bilesenleri (Button, TextField, ComboBox, TabPane, GridPane, BorderPane, vb.) |
| Jackson Databind | 2.17.2 | Java nesnelerini JSON'a ve JSON'u Java nesnelerine donusturme (ObjectMapper) |
| Jackson JavaTime | 2.17.2 | LocalDateTime, LocalDate gibi Java 8+ zaman siniflarinin JSON serializasyonu |
| Paket / Sinif | Kullanim Alani |
|---|---|
java.math.BigDecimal |
Hassas para hesaplamalari (yuvarlatma hatasi olmadan) |
java.time.LocalDateTime |
Islem zaman damgalari |
java.time.LocalDate |
Gunluk limit sifirlama tarihi |
java.time.YearMonth |
Aylik rapor periyodu |
java.security.MessageDigest |
SHA-256 ile PIN hashleme |
java.security.SecureRandom |
Kriptografik guvenli rastgele salt uretimi |
java.util.Base64 |
Salt ve hash degerlerinin kodlanmasi |
java.util.UUID |
Benzersiz islem kimlikleri |
java.io.BufferedWriter |
CSV dosya ve log yazimi |
java.util.Scanner |
Konsol kullanici girdileri |
| Eklenti | Surum | Gorevi |
|---|---|---|
| maven-compiler-plugin | 3.13.0 | Java 17 derleme |
| exec-maven-plugin | 3.3.0 | mvn exec:java ile konsol calistirma |
| javafx-maven-plugin | 0.0.8 | mvn javafx:run ile GUI calistirma |
| maven-jar-plugin | 3.4.2 | Calistirilabilir JAR paketleme |
java_anlama_test/ +-- .github/ | +-- copilot-instructions.md # Copilot proje talimatlari +-- .vscode/ | +-- tasks.json # VS Code gorev tanimlari +-- data/ | +-- bank-data.json # JSON veri dosyasi (kalici) | +-- notifications.log # Islem log dosyasi | +-- exports/ # CSV rapor ciktilari +-- src/main/java/com/example/bank/ | +-- App.java # Konsol uygulamasi giris noktasi | +-- model/ | | +-- Account.java # Hesap modeli | | +-- AccountType.java # Hesap tipi enum (CHECKING/SAVINGS/TERM) | | +-- BankData.java # Kok veri modeli (tum veriler) | | +-- Customer.java # Musteri modeli | | +-- ReportSummary.java # Rapor ozet DTO | | +-- Transaction.java # Islem kaydi modeli | | +-- TransactionType.java # Islem tipi enum | +-- repo/ | | +-- BankRepository.java # JSON okuma/yazma katmani | +-- service/ | | +-- BankService.java # Is kurallarinin tamami | | +-- NotificationService.java # Log servisi | | +-- SecurityUtil.java # PIN hashleme ve dogrulama | +-- ui/ | +-- BankGuiApp.java # JavaFX GUI uygulamasi | +-- ConsoleUI.java # Konsol menu arayuzu +-- src/main/resources/styles/ | +-- bank-theme.css # JavaFX koyu tema stilleri +-- pom.xml # Maven yapilandirmasi +-- README.md
Uygulama katmanli mimari (Layered Architecture) prensibine uygun olarak tasarlanmistir:
+-------------------+ +-------------------+ | UI Katmani | | ConsoleUI | | (Sunum Katmani) | | BankGuiApp | +--------+----------+ +--------+----------+ | | v v +-------------------------------------------+ | Service Katmani | | BankService | SecurityUtil | | | NotificationService | +-------------------+-----------------------+ | v +-------------------------------------------+ | Repository Katmani | | BankRepository | | (Jackson ObjectMapper + JSON dosya) | +-------------------------------------------+ | v +-------------------------------------------+ | Model Katmani | | Account, Customer, Transaction, | | BankData, ReportSummary, | | AccountType, TransactionType | +-------------------------------------------+
| Desen | Nerede | Aciklama |
|---|---|---|
| Repository Pattern | BankRepository |
Veri erisimini soyutlar; JSON detaylari servis katmanindan gizlenir |
| Service Layer | BankService |
Tum is kurallari tek merkezde toplanir |
| DTO | ReportSummary |
Rapor verisi tasima nesnesi |
| Dependency Injection | App.java, BankGuiApp |
Servis ve repository bagimliliklari constructor ile enjekte edilir |
| MVC | UI + Service + Model | Arayuz yalnizca goruntuleme yapar, mantik servistedir |
| Type-Safe Enum | AccountType, TransactionType |
Tip guvenligi saglayan enum sabitleri |
| Utility Class | SecurityUtil |
Statik metodlar, private constructor |
- Java 17 veya ustu (JDK)
- Maven 3.9 veya ustu
- Windows isletim sistemi (JavaFX win classifier kullanilmaktadir)
�ash mvn -q -DskipTests package
�ash mvn -q exec:java
�ash mvn -q javafx:run
�ash java -jar target/bank-management-1.0.0.jar
VS Code icinde Ctrl+Shift+B ile "Run GUI (JavaFX)" gorevini calistirabilirsiniz.
Konsol arayuzu 9 islem secenegi sunar:
- Musteri Olustur — Ad ve 4-6 haneli PIN ile kayit
- Hesap Ac — Musteri ID, hesap tipi ve baslangic bakiyesi
- Para Yatir — Hesap numarasi ve tutar
- Para Cek — Hesap numarasi, tutar ve PIN dogrulama
- Bakiye Sorgula — Hesap bakiyesi goruntuleme
- Transfer — Kaynak hesap, hedef hesap, tutar ve PIN
- Islem Gecmisi — Bir hesabin tum islem kayitlari
- Hesap Listesi — Bir musterinin tum hesaplari
- Raporlar — Gunluk/aylik ozet ve CSV disari aktarim
- Cikis
- Sol navigasyon cubugunda 9 sekme butonu
- Her sekme icin ayri form sayfasi
- Altta konsol benzeri cikti alani
- Koyu tema ile profesyonel gorunum
Tum veriler data/bank-data.json dosyasinda JSON formatinda saklanir. Jackson ObjectMapper ile serializasyon yapilir.
json { "customers": [ { "customerId": 500001, "name": "Ornek Musteri", "pinHash": "sha256-hash", "pinSalt": "base64-salt", "createdAt": "2026-04-04T22:28:14" } ], "accounts": [ { "accountNumber": 1000001, "customerId": 500001, "type": "CHECKING", "balance": "25000.00", "transactions": [ ... ] } ], "nextCustomerId": 500002, "nextAccountNumber": 1000002 }
Onemli detaylar:
- Para tutarlari
BigDecimalstring olarak saklanir (hassasiyet icin) - Tarihler ISO-8601 formatindadir
- Musteri ID'leri 500.001'den, hesap numaralari 1.000.001'den baslar
- Islem gecmisi hesap nesnesine gomulu saklanir
- PIN'ler asla duz metin olarak saklanmaz. SHA-256 ile hashlenir.
- Her musteri icin
SecureRandomile 16 byte'lik benzersiz salt uretilir. - PIN dogrulama sabit zamanli (constant-time) karsilastirma kullanir.
- Rainbow table saldirilarina karsi korumalidir.
- GUI'de PIN alanlari
PasswordFieldile maskelenir.
Bu proje egitim amacli gelistirilmistir.