Skip to content

Code2Work/fullstack-backend-project-6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Öğrenci Kayıt Sistemi

Amaç

Java Collections Framework'ün dört temel yapısını — List, Set, Map, TreeSet — tek bir domain'de bir arada kullanacaksın. Öğrencileri tekil tutmak (Set), derslere göre gruplamak (Map), başarıya göre sıralamak (TreeSet) ve ekleme sırasını korumak (List) bir arada. Süre: ~4-6 saat.

Öğrenme Hedefleri

  • List<Student> (ArrayList) ile sıralı koleksiyon
  • Set<String> (HashSet) ile tekillik (aynı öğrenci numarası iki kez eklenemez)
  • Map<String, List<Student>> (HashMap) ile gruplama indeksi
  • TreeSet<Student> + Comparable ile otomatik sıralı koleksiyon
  • Comparable.compareTo() çok kriterli sıralama (GPA azalan, eşitse id artan)
  • equals/hashCode business key (id) üzerinden — Set/Map doğru çalışsın
  • enum (Course) tip güvenliği
  • Kapsülleme: koleksiyonların KOPYASINI döndürmek

Tutulan Koleksiyonlar

List<Student> students       → tüm öğrenciler, ekleme sırasıyla
Set<String>   uniqueIds      → tekil öğrenci numaraları
Map<String, List<Student>>   → ders kodu → o derse kayıtlı öğrenciler
TreeSet<Student> byGpa       → GPA-sıralı (topN için)

Başlamadan Önce

  • Java 17+ kurulu (java -version).
  • IDE: IntelliJ IDEA Community veya VS Code + Java Extension Pack.
  • Course.java hazır verildi — dokunma. Student.java ve StudentRegistry.java'daki // TODO N: yorumlarını çöz. Main.java demo amaçlı hazır.

Adım Adım Görevler

  1. Student.java (TODO 1-5): compareTo (GPA azalan, eşitse id artan), equals/hashCode (id üzerinden), toString.
  2. StudentRegistry.java (TODO 6-16):
    • enroll (TODO 6-9): yeni öğrenciyi List+TreeSet+Set'e ekle, dersi byCourse Map'ine yaz, çift kaydı engelle.
    • dropCourse (TODO 10-12): dersten çıkar, boşalan ders kaydını temizle.
    • topNStudents (TODO 13-14): TreeSet'ten ilk n.
    • coursesOf (TODO 15): öğrencinin derslerinin kopyası.
    • studentsInCourse (TODO 16): derse kayıtlı öğrencilerin kopyası.
    • allStudents/allIds/count zaten hazır.

💡 Best Practice İpuçları

  • Program to interface: List<Student> x = new ArrayList<>() — değişkeni interface tipiyle tanımla.
  • Generics her zaman: Map<String, List<Student>>, raw type (Map) kullanma.
  • equals override edince hashCode'u da et — yoksa HashSet/HashMap bozulur.
  • TreeSet'te compareTo 0 dönen iki eleman "eşit" sayılır ve biri ATILIR — bu yüzden GPA eşitliğinde id ile ikincil sıralama şart.
  • Koleksiyon döndüren metodlarda iç koleksiyonu DOĞRUDAN verme — kopya döndür (kapsülleme).
  • Map'e gruplarken: get ile listeyi al, null ise yeni ArrayList oluştur ve put et, sonra ekle.

Test Senaryoları (Kendini test et)

  1. Aynı id'li öğrenciyi iki kez enroll et → count() 1 kalmalı.
  2. Bir öğrenciyi aynı derse iki kez kaydet → ikincisi false dönmeli.
  3. 4 farklı GPA'lı öğrenci ekle, topNStudents(2) → en yüksek 2 GPA sıralı gelmeli.
  4. Bir dersi bırak → coursesOf o dersi içermemeli.
  5. coursesOf(...) sonucunu clear() et → registry bozulmamalı (kopya döndürüyorsun).

Testler ve Skor

Projede 19 JUnit testi var (tests/StudentRegistryTest.java). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir.

1. Öğrenci numaranı gir. student_id.txt dosyasına Kaizu öğrenci numaranı yaz. (Bir kez.)

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 iner. Başlangıçta testler kırmızı; TODO'ları çözdükçe yeşile döner.

3. Skor otomatik gider. Tüm testler geçince (19/19) panelde yeşil tik gelir.

Bonus (Opsiyonel)

  • averageGpaOf(Course course) — bir dersin ortalama GPA'sını döngüyle hesapla.
  • mostPopularCourse() — en çok öğrencisi olan ders.
  • studentCount(Course course) — bir derse kayıtlı öğrenci sayısı.

Çözüm

Takılırsan proje sayfasındaki "Çözümü Göster" butonunu kullan (proje verildikten 3 gün sonra açılır). Önce en az 1 saat kendin uğraş.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors