Bu proje, Algoritma ve Programlama-1 dersi final ödevi kapsamında geliştirilmiş, katmanlı mimariye (Layered Architecture) sahip bir kütüphane yönetim sistemidir. C dilindeki pointer (işaretçi) ve struct (yapı) kullanımları ile bellek yönetimi optimize edilmiştir.
Projenin temel veri modelleri, nesne yönelimli programlamaya (OOP) benzer bir yaklaşımla tasarlanmıştır.
| Struct | Görevi |
|---|---|
book_t |
Kitabın ID, başlık, yazar, durum, tarih ve okuyucu bilgilerini tutar. |
student_t |
Öğrencinin ID, ad-soyad, kitap kotası, ceza puanı ve zimmetindeki kitapları tutar. |
date_t |
Gün, ay ve yıl bilgisini standartlaştırarak tarih işlemlerini kolaylaştırır. |
response_t |
Fonksiyonların işlem sonucunu (başarılı/başarısız) ve kullanıcı mesajlarını standart bir yapıda döndürür. |
data_response_t |
response_t yapısını genişleterek, işlem sonucunda bulunan verinin (nesnenin) bellek adresini de taşır. |
borrow_book_request_t |
Ödünç alma işlemi için gereken parametreleri (öğrenci/kitap pointerları ve tarih) tek bir pakette toplar. |
deliver_book_request_t |
İade işlemi sırasındaki veri transferini yönetir ve parametre karmaşasını önler. |
Proje, sorumlulukların ayrılması (Separation of Concerns) prensibi gereği katmanlara bölünmüştür.
İş mantığının ve kuralların (Business Logic) işlendiği ana katmandır.
add_student/add_book: Sisteme yeni öğrenci veya kitap ekleyerek Create (Oluşturma) işlemini yapar.delete_book: Belirtilen ID'ye sahip kitabı sistemden kaldırır (Delete işlemi).find_student_by_id/find_book_by_id: ID bazlı arama yaparak ilgili nesnenin bellekteki adresini döndürür (Read işlemi).borrow_book: Ödünç alma sürecini yönetir. Öğrencinin kotasını kontrol eder, kitabı öğrenciye atar ve durumunu günceller.deliver_book: İade sürecini yönetir. Gecikme varsa ceza hesaplatır ve kitabın durumunu "Müsait" olarak günceller.find_max_book_holders: Kütüphaneden en çok kitap almış öğrenciyi veya öğrencileri analiz ederek listeler.
Kullanıcı ile etkileşime geçen, verileri ekrana basan fonksiyonlardır.
print_main_menu: Kullanıcıya ana işlem seçeneklerini sunar.list_books: Kütüphanedeki tüm kitapların envanter dökümünü listeler.list_students: Kayıtlı tüm öğrencileri ve genel durumlarını listeler.list_books_by_student: Belirli bir öğrencinin o an elinde hangi kitapların olduğunu gösterir.list_top_students: En çok kitap okuyan/alan öğrencileri ekrana basar.print_borrow_book_menu/print_deliver_book_menu: Ödünç alma ve iade işlemleri için gerekli veri giriş ekranlarını yönetir.
Matematiksel ve genel amaçlı fonksiyonları barındırır.
get_days_between: İki tarih arasındaki farkı gün bazında hesaplar.calculate_penalty_point: Gecikme süresine göre (20, 30, 45 gün sınırları) öğrenciye yansıyacak ceza puanını (10, 25, 50 puan) belirler.handle_response_error: Fonksiyonlardan dönen sonuçları analiz eder; hata varsa sebebini, işlem başarılıysa onay mesajını kullanıcıya gösterir.
gcc main.c -o library_app
./library_app