Problem
Aynı derslik iki farklı etkinliğe ayrıldığında ya da bir öğretim elemanına çakışan saatler atandığında, programın geri kalanı da etkileniyor. Bu projede ders, sınav ve derslik planlamasını tek sistemde topladık. İki kişilik ekiple geliştirdiğimiz uygulamada bölüm başkanı, sekreter ve öğretim elemanı için farklı işlem akışları bulunuyor.
Veri modeli ve uygulama yapısı
React, Tailwind CSS ve Axios ile geliştirilen arayüz, FastAPI servisleriyle haberleşiyor. Oturum bilgisi Context API üzerinden paylaşılıyor; JWT tabanlı giriş ve role göre arayüz yönlendirmeleri kullanılıyor. Backend’de Pydantic istek/yanıt şemaları ve SQLAlchemy modelleri ayrı sorumluluklar taşıyor.
Öğrenci-ders ilişkisi StudentCourse, bir sınavın birden fazla derslikte yapılması ExamClassroom modeliyle kuruluyor. ExamSeating, öğrencinin sınav, derslik ve sıra bilgisini saklıyor. Ders tanımı oluşturmak ile öğretim elemanı ve programa atamak ayrı işlemler.
Planlama kuralları
Ders atamasında aynı dersliğin veya öğretim elemanının çakışan saat aralığında kullanılıp kullanılmadığı kontrol ediliyor. Sınav oluştururken tarih/saat, derslik kullanımı ve kapasite değerlendiriliyor. Tekli oturma düzeninde kullanılabilir kapasite capacity // 2 olarak hesaplanıyor.
Öğretim elemanı sınav için değişiklik talebi gönderebiliyor. Talep sınavı yeniden onay bekleyen duruma getiriyor; bölüm başkanı onaylayabiliyor. Program ve takvimler PDF olarak alınabiliyor.
Oturma planı
Algoritma ilgili derse kayıtlı öğrencileri alıyor, toplam kapasiteyi kontrol ediyor ve listeyi random.shuffle ile karıştırıyor. Öğrenciler derslik kapasitelerine göre bölünüp sıra numaralarıyla kaydediliyor. Bu yöntem rastgele dağıtım sağlıyor; sınav programının tamamını optimize eden bir solver kullanılmıyor.
Teknik sınırlar
İlk sürümde bazı işlemler backend’de rol kontrolü taşırken bazıları yalnızca arayüzden sınırlandırılmış. Sonraki adım, yetki kontrollerini bütün endpoint’lere taşımak ve rol bazlı API testleri eklemek. Oturma planını silip yeniden üretme işlemi de tek transaction içinde yapılmalı.
Sonuç
Proje; derslik yönetimi, zaman çakışması kontrolü, sınav onayı, rastgele oturma planı ve PDF raporlamayı tek full-stack uygulamada birleştirdi. Ders programı kullanıcı tarafından hazırlanıyor; sistem atamaları iş kurallarına göre kontrol ediyor.
