Skip to content
Ercan Labs
← Tüm işlerDESKTOP · PRIVATE · in-development

Otobüs Rotasyon Planlayıcı

Şehir içi otobüs filosu için haftalık görev ve rotasyon planı; kural denetimi ve Excel çıktısı.

326
test
7
ekran
209
C# dosyası
25.798
satır kod

Bu nasıl ölçüldü: Test sayısı dotnet test çıktısından, ekranlar view model dosyalarından, satır sayısı izlenen .cs dosyalarında wc ile alındı.

Mimari326 tests
  1. DESKTOP
    • Avalonia7 ekran
  2. RULES
    • kural tablosu
    • kısıt denetimi
  3. ENGINE
    • rotasyon planlayıcı
  4. OUT
    • SQLite
    • Excel
Kurallar veri, planlayıcı ayrı katman. Yeni kural algoritmaya dokunmadan ekleniyor.

Problem

Şehir içi otobüs filosu her hafta kâğıt üstünde planlanıyor: hangi şoför hangi gün hangi otobüste, kim dinlenecek, kimin hafta sonu alacağı var. Kurallar planlamacının kafasında, hiçbir yerde yazılı değil. Plan da o kişi kadar iyi.

İş, kuralları koda yazmak, hiçbirini çiğnemeyen haftalık plan üretmek ve bunu ofisin zaten kullandığı biçimde teslim etmekti.

Kısıtlar

  • Aynı ofiste Windows ve Linux: web uygulaması değil, platformdan bağımsız masaüstü.
  • Planlamacının kuralları değişiyor; yeni kısıt eklemek planlayıcıyı yeniden yazmak demek olmamalı.
  • Çıktı Excel'de dönüştürmeden açılmalı; ofis yeni araç benimsemiyor.

Mimari kararlar

01

Tarayıcı uygulaması yerine Avalonia

Ofiste sunucu yok, tarayıcı sekmesi alışkanlığı yok. Bir saniyede açılan yerel pencere vardiya değişimi gerçeğine uyuyor.

Bedeli: CSS yerine XAML yerleşimi; platformlar arası paketleme de cabası.

02

Kurallar veri, planlayıcı ayrı katman

Rotasyon kısıtları kendi tablosunda duruyor ve plan yazılmadan önce değerlendiriliyor. Yeni kural bir satır ve bir kontrol; algoritmaya dokunulmuyor.

Bedeli: Sabit kodlanmış döngüden daha fazla dolaylılık.

03

Planlayıcıyı test et, pencereyi değil

326 test, örnek filolar üzerinden planlama motoruna koşuyor. Arayüz bilerek ince tutuldu; kurallar ekran açmadan doğrulanabiliyor.

Bedeli: Arayüz hataları ancak elle yakalanıyor.

04

Teslim biçimi Excel

ClosedXML, ofisin zaten bildiği çalışma kitabını aynı sütun adlarıyla yazıyor. Benimseme maliyeti sıfır.

Bedeli: Ofis şablonuna uymak zorunda olan bir biçimlendirme adaptörü.

Kanıt

  • Test326 yeşil (Windows + Linux CI)
  • Ekran7 (filo, hatlar, sefer saatleri, haftalık plan, kurallar, raporlar, Excel)
  • C# dosyası209
  • Satır kod25.798

Bilinen sınırlar

  • Plan kurallarla doğrulanıyor; şoför memnuniyeti ölçülmüyor, hafta sonu geri bildirimi kaydedilmiyor.
  • Tek ofis, tek filo; çok depolu planlama yok.
  • Gerçek kullanım süresi kısa; vaka test sayısını yazıyor, kazanılan saati değil.

Ne öğrendim

Planlayıcı, takvim eklenmiş bir kural motoru. Kurallar yazıya geçtiği an planı üretebilen tek kişi planlamacı olmaktan çıkıyor. Asıl teslim bu; Excel dosyası sadece makbuz.

Stack

.NET 10AvaloniaC#SQLiteClosedXML