Farklı ulaşım türlerini (
Başlarken • Özellikler • Görseller • Teknolojiler • Mimari • API • Ekip
CityGo, CENG106 Nesne Yönelimli Programlama dersi kapsamında geliştirilen bir akıllı ulaşım ve bilet rezervasyon sistemidir. Kullanıcılar bu platform üzerinden:
- 🔍 Farklı ulaşım türleri arasında sefer arayabilir ve filtreleyebilir
- 💺 Görsel koltuk haritası üzerinden koltuk seçimi yapabilir
- 🎫 Bilet satın alabilir, görüntüleyebilir ve iptal edebilir
- 📊 Yöneticiler seferleri, araçları ve rezervasyonları sistem üzerinden yönetebilir
Proje, OOP'nin beş temel prensibini (Kalıtım, Kapsülleme, Çok Biçimlilik, Soyutlama, Hata Yönetimi) gerçek dünya senaryolarına uygulayarak modüler ve sürdürülebilir bir yazılım mimarisi sunmayı amaçlamaktadır.
| Ad Soyad | Öğrenci No | Görevler |
|---|---|---|
| Mustafa Mert Çevik | 24118080086 | Ulaşım araçları modelleri, sefer arama API'si, seed data |
| Muhammed Köseoğlu | 24118080049 | Kullanıcı sistemi, auth API, admin paneli (backend), proje yönetimi |
| Ömer Faruk Kara | 24118080064 | React frontend geliştirme, UI/UX, koltuk seçim ekranı, export |
| Elif Feyza Şengül | 25118080004 | Bilet/rezervasyon sistemi, exception handling |
Ders: CENG106 — Nesne Yönelimli Programlama
Şube: 1. Şube
| Özellik | Açıklama |
|---|---|
| 🔐 Kayıt & Giriş | Email ve şifre ile güvenli kullanıcı kimlik doğrulama |
| 🔍 Sefer Arama | Kalkış/varış noktası, tarih ve araç tipi ile filtreleme |
| 💺 Koltuk Seçimi | Görsel koltuk haritası üzerinden interaktif seçim |
| 🎫 Bilet Yönetimi | Bilet satın alma, görüntüleme ve iptal etme |
| Özellik | Açıklama |
|---|---|
| 📋 Sefer Yönetimi | Sefer ekleme, güncelleme ve silme (CRUD) |
| 👥 Kullanıcı Listesi | Sistemdeki tüm kullanıcıları görüntüleme |
| 🎫 Bilet Yönetimi | Tüm rezervasyonları görüntüleme ve yönetme |
| 📈 İstatistikler | Dashboard üzerinden anlık istatistikler |
| 📤 Dışa Aktarma | Bilet verilerini JSON ve CSV formatında export etme |
Uygulamanın temel kullanıcı ve yönetici akışları aşağıdaki ekran görüntülerinde görülebilir.
Giriş Ekranı
|
Kayıt Ekranı
|
Sefer Arama
|
Arama Sonuçları
|
Koltuk Seçimi
|
Biletlerim
|
Admin Paneli
|
Sefer Yönetimi
|
| Teknoloji | Versiyon | Kullanım Amacı |
|---|---|---|
| Java | 17 | Backend programlama dili |
| Spring Boot | 3.2.5 | REST API geliştirme, bağımlılık yönetimi |
| Spring Data JPA (Hibernate) | — | Nesne-ilişkisel eşleme (ORM) |
| H2 Database | 2.x | Gömülü ilişkisel veritabanı (dosya tabanlı) |
| Maven | — | Bağımlılık ve derleme yönetimi |
| Spring Security Crypto | — | BCrypt ile şifre hashleme |
| Teknoloji | Versiyon | Kullanım Amacı |
|---|---|---|
| React | 19.2.x | Kullanıcı arayüzü geliştirme |
| MUI (Material UI) | 9.x | Hazır, profesyonel UI bileşenleri |
| Vite | 8.x | Geliştirme sunucusu ve derleme |
| Axios | 1.15.x | REST API istekleri |
| React Router | 7.x | Sayfa yönlendirme ve route guard yapısı |
| Araç | Kullanım Amacı |
|---|---|
| Git & GitHub | Versiyon kontrolü ve iş birliği |
| IntelliJ IDEA / VS Code | Kod geliştirme ortamı |
| Postman | API test etme |
| H2 Console | Gömülü veritabanı yönetim arayüzü |
Proje, katmanlı mimari (Layered Architecture) prensibiyle tasarlanmıştır. Frontend ve backend birbirinden bağımsız iki ayrı uygulama olarak geliştirilmiş olup, aralarındaki iletişim REST API üzerinden JSON formatında sağlanmaktadır.
┌──────────────────────────────────────────────────┐
│ KULLANICI (Tarayıcı) │
│ ┌───────────────────────────────────────────┐ │
│ │ React + MUI (Frontend) │ │
│ │ Sayfalar: Giriş, Kayıt, Ana Sayfa, │ │
│ │ Arama Sonuçları, Koltuk Seçimi, │ │
│ │ Biletlerim, Admin Paneli │ │
│ └─────────────────┬─────────────────────────┘ │
└────────────────────┼─────────────────────────────┘
│ REST API (HTTP/JSON)
┌────────────────────┼─────────────────────────────┐
│ ┌─────────────────▼─────────────────────────┐ │
│ │ Controller Katmanı (REST Endpoints) │ │
│ └─────────────────┬─────────────────────────┘ │
│ ┌─────────────────▼─────────────────────────┐ │
│ │ Service Katmanı (İş Mantığı) │ │
│ │ Interfaces: IRezervasyon, IAranabilir │ │
│ └─────────────────┬─────────────────────────┘ │
│ ┌─────────────────▼─────────────────────────┐ │
│ │ Repository Katmanı (Spring Data JPA) │ │
│ └─────────────────┬─────────────────────────┘ │
│ ┌─────────────────▼─────────────────────────┐ │
│ │ H2 Veritabanı (Dosya Tabanlı) │ │
│ └───────────────────────────────────────────┘ │
│ SUNUCU (Spring Boot) │
└──────────────────────────────────────────────────┘
Bu projede Nesne Yönelimli Programlamanın temel prensipleri şu şekilde uygulanmıştır:
UlasimAraciabstract sınıfındanUcak,Tren,Otobusalt sınıfları türetilmiştirKullaniciabstract sınıfındanYolcuveAdminsınıfları miras almaktadır
- Tüm sınıf alanları
privateerişim belirteci ile tanımlanmıştır - Dış erişim yalnızca
gettervesettermetotları üzerinden sağlanmaktadır
- Overriding: Her ulaşım aracı kendi fiyat hesaplama algoritmasını (
hesaplaToplamFiyat()) geçersiz kılmaktadır - Overloading: Sefer arama metodu farklı parametre kombinasyonlarıyla aşırı yüklenmiştir
UlasimAraciveKullaniciabstract sınıfları tanımlanmıştırIRezervasyon,IAranabilirveIExportableinterface'leri kullanılmıştır
- Özel exception sınıfları tanımlanmıştır (ör. geçersiz tarih, dolu kapasite)
- Merkezi
GlobalExceptionHandlerile tutarlı hata yönetimi sağlanmıştır
- Şifreler veritabanında düz metin tutulmaz; BCrypt ile hashlenir
- Eski SHA-256 formatındaki kayıtlar başarılı girişten sonra BCrypt formatına taşınır
- Auth endpointleri DTO ile çalışır ve response içinde şifre/hash bilgisi dönmez
- Admin endpointlerinde frontend guard'a ek olarak backend tarafında
X-User-Idile admin kontrolü yapılır
CityGo/
├── backend/ # Spring Boot Backend
│ ├── src/main/java/com/citygo/
│ │ ├── model/ # Entity sınıfları
│ │ │ ├── UlasimAraci.java # Abstract üst sınıf
│ │ │ ├── Ucak.java
│ │ │ ├── Tren.java
│ │ │ ├── Otobus.java
│ │ │ ├── Kullanici.java # Abstract üst sınıf
│ │ │ ├── Yolcu.java
│ │ │ ├── Admin.java
│ │ │ ├── Sefer.java
│ │ │ ├── Bilet.java
│ │ │ ├── Koltuk.java
│ │ │ ├── BiletDurumu.java # Enum
│ │ │ └── KoltukTipi.java # Enum
│ │ ├── controller/ # REST Controller'lar
│ │ │ ├── AuthController.java
│ │ │ ├── SeferController.java
│ │ │ ├── BiletController.java
│ │ │ ├── AdminController.java
│ │ │ └── ExportController.java
│ │ ├── dto/ # Request/response DTO sınıfları
│ │ │ ├── AuthResponse.java
│ │ │ ├── LoginRequest.java
│ │ │ ├── RegisterRequest.java
│ │ │ ├── CreateTicketRequest.java
│ │ │ └── TripRequest.java
│ │ ├── service/ # İş mantığı katmanı
│ │ │ ├── KullaniciService.java
│ │ │ ├── AramaService.java
│ │ │ ├── RezervasyonService.java
│ │ │ └── ExportService.java
│ │ ├── repository/ # Veri erişim katmanı
│ │ ├── interfaces/ # Interface tanımları
│ │ │ ├── IRezervasyon.java
│ │ │ ├── IAranabilir.java
│ │ │ └── IExportable.java
│ │ └── exception/ # Özel exception sınıfları
│ ├── src/main/resources/
│ │ └── application.properties # Uygulama konfigürasyonu
│ └── pom.xml # Maven bağımlılıkları
│
├── frontend/ # React Frontend
│ ├── src/
│ │ ├── components/ # Yeniden kullanılabilir bileşenler
│ │ ├── pages/ # Sayfa bileşenleri
│ │ │ ├── LoginPage.jsx
│ │ │ ├── RegisterPage.jsx
│ │ │ ├── HomePage.jsx
│ │ │ ├── SearchResultsPage.jsx
│ │ │ ├── SeatSelectionPage.jsx
│ │ │ ├── MyTicketsPage.jsx
│ │ │ ├── AdminPanel.jsx
│ │ │ └── NotFound.jsx
│ │ ├── services/ # API çağrıları
│ │ ├── App.jsx
│ │ └── main.jsx
│ ├── package.json
│ └── vite.config.js
│
├── docs/ # Raporlar, roadmap ve sunum dosyaları
│ └── screenshots/ # README için uygulama ekran görüntüleri
├── README.md # Bu dosya
└── LICENSE # MIT Lisansı
Aşağıdaki yazılımların sisteminizde kurulu olduğundan emin olun:
git clone https://github.com/<kullanici-adi>/CityGo.git
cd CityGocd backend
mvn clean install
mvn spring-boot:runBackend varsayılan olarak
http://localhost:8080adresinde çalışacaktır.
H2 Console:http://localhost:8080/h2-consoleVeritabanı dosyası aynı anda başka bir Java/H2 süreci tarafından tutuluyorsa o süreci kapatın.
Yeni bir terminal açın:
cd frontend
npm install
npm run devFrontend varsayılan olarak
http://localhost:5173adresinde çalışacaktır. API adresini değiştirmek içinfrontend/.env.exampledosyasını.envolarak kopyalayıpVITE_API_BASE_URLdeğerini güncelleyin.
Opsiyonel .env kurulumu:
cd frontend
cp .env.example .env| Rol | Şifre | |
|---|---|---|
| Admin | admin@citygo.com | admin123 |
| Yolcu | yolcu@citygo.com | yolcu123 |
⚠️ Seed data yalnızca ilgili tablolar boşsa eklenir; uygulama yeniden başladığında mevcut kullanıcı, bilet ve seferler silinmez.
| Metot | Endpoint | Açıklama |
|---|---|---|
POST |
/api/auth/register |
Yeni kullanıcı kaydı |
POST |
/api/auth/login |
Kullanıcı girişi |
POST |
/api/auth/logout |
Çıkış işlemi |
| Metot | Endpoint | Açıklama |
|---|---|---|
GET |
/api/seferler/ara |
Sefer arama (query parametreleri ile) |
GET |
/api/seferler/{id} |
Sefer detayı |
GET |
/api/seferler/{id}/koltuklar |
Sefere ait koltuklar |
| Metot | Endpoint | Açıklama |
|---|---|---|
POST |
/api/biletler |
Bilet satın alma |
GET |
/api/biletler/benim |
Kullanıcının biletleri |
PUT |
/api/biletler/{id}/iptal |
Bilet iptal etme |
| Metot | Endpoint | Açıklama |
|---|---|---|
GET |
/api/admin/seferler |
Tüm seferleri listele |
GET |
/api/admin/araclar |
Tüm ulaşım araçlarını listele |
POST |
/api/admin/seferler |
Yeni sefer ekle |
PUT |
/api/admin/seferler/{id} |
Sefer güncelle |
DELETE |
/api/admin/seferler/{id} |
Sefer sil |
GET |
/api/admin/kullanicilar |
Tüm kullanıcılar |
GET |
/api/admin/biletler |
Tüm biletler |
GET |
/api/admin/istatistikler |
Dashboard istatistikleri |
| Metot | Endpoint | Açıklama |
|---|---|---|
GET |
/api/export/biletler/json |
Bilet verilerini JSON olarak dışa aktar |
GET |
/api/export/biletler/csv |
Bilet verilerini CSV olarak dışa aktar |
H2 gömülü ilişkisel veritabanı, dosya tabanlı modda çalışmaktadır. Veriler proje dizininde .mv.db dosyası olarak saklanır. Kurulum gerektirmez — Spring Boot ile otomatik olarak başlar.
| Tablo | Açıklama |
|---|---|
kullanicilar |
Yolcu ve Admin bilgileri |
ulasimaraci |
Uçak, Tren, Otobüs bilgileri |
seferler |
Sefer bilgileri |
koltuklar |
Koltuk bilgileri ve durumları |
biletler |
Bilet/Rezervasyon bilgileri |
Uygulama çalışırken tarayıcınızdan şu adrese giderek veritabanını inceleyebilirsiniz:
URL: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:file:./data/citygo;AUTO_SERVER=TRUE
Username: sa
Password: (boş bırakın)
# Backend unit testlerini çalıştırma
cd backend
mvn test
# Frontend derlemesini kontrol etme
cd frontend
npm run buildFrontend bağımlılık güvenliği için
cd frontend && npm auditkomutu da kullanılabilir.
Bu proje MIT Lisansı kapsamında lisanslanmıştır.
CityGo ile yolculuğunuzu planlayın.
CENG106 Nesne Yönelimli Programlama — 2026







