Menu
Coddy logo textTech

Ödünç Alma Sistemi

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 79 / 87.

challenge icon

Görev

Kolay

Kitap ve kullanıcı koleksiyonunu yöneten bir Library sınıfı ile düzgün bir ödünç alma sistemi oluşturarak Kütüphane Yönetim Sistemi'ni oluşturmaya devam edelim. Burası, sisteminizin gerçek bir kütüphane gibi hissettirmeye başladığı yerdir; kimde ne olduğunu takip eder ve ödünç alma kurallarını uygular!

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Book.java: Önceki challenge'daki Book sınıfınızı tüm işlevleriyle (isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları) koruyun.
  • User.java: User sınıfınızı id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() metotlarıyla koruyun.
  • Library.java: Her şeyi yöneten merkezi Library sınıfını oluşturun. Kütüphaneniz iki ArrayList tutmalıdır; biri Book nesneleri için, diğeri User nesneleri için. Şu metotları ekleyin:

    addBook(Book book) - kütüphanenin koleksiyonuna bir kitap ekler.

    registerUser(User user) - kütüphanenin kayıtlı kullanıcılarına bir kullanıcı ekler.

    findBookByIsbn(String isbn) - kitaplar arasında arama yapar ve eşleşen ISBN'ye sahip Book nesnesini döndürür, bulunamazsa null döndürür.

    findUserById(String id) - kullanıcılar arasında arama yapar ve eşleşen ID'ye sahip User nesnesini döndürür, bulunamazsa null döndürür.

    borrowBook(String userId, String isbn) - kullanıcıyı ve kitabı bulur, eğer her ikisi de mevcutsa ve kitap müsaitse, kullanıcının kitabı ödünç almasını sağlar ve [userName] borrowed [bookTitle] yazdırır. Kitap müsait değilse, Book not available yazdırır. Kullanıcı veya kitap bulunamazsa, Invalid user or book yazdırır.

    returnBook(String userId, String isbn) - kullanıcıyı ve kitabı bulur, ardından kullanıcının kitabı iade etmesini sağlar ve [userName] returned [bookTitle] yazdırır. Kullanıcı veya kitap bulunamazsa, Invalid user or book yazdırır.

  • Main.java: Kütüphane sisteminizi bir araya getirin! İki kitap (her biri için ISBN, başlık, yazar), bir kullanıcı (ID, isim) ve ardından bir dizi işlem için girdiler alacaksınız.

    Bir Library oluşturun, her iki kitabı da ekleyin ve kullanıcıyı kaydedin. Ardından işlemleri işleyin; her işlemin borrow:userId:isbn veya return:userId:isbn şeklinde formatlandığı virgülle ayrılmış bir dize alacaksınız.

    Tüm işlemleri işledikten sonra, her kitabın durumunu [isbn]: [Available/Borrowed] formatında gösteren bir özet yazdırın.

Girdileri şu sırayla alacaksınız: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, user ID, user name ve son olarak işlemler dizesi.

Örneğin, ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice girdileri ve borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001 işlem dizesi ile çıktınız şöyle olacaktır:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

Bu challenge, uyumlu bir sistem oluşturmak için kompozisyon, kapsülleme (encapsulation) ve metot tasarımını bir araya getirir. Library sınıfı, genel koleksiyonu yönetirken asıl ödünç alma mantığını User ve Book sınıflarına devreden bir koordinatör görevi görür!

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Kitap 1 bilgilerini oku
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Kitap 2 bilgilerini oku
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Kullanıcı bilgilerini oku
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // İşlem dizisini oku (virgülle ayrılmış, format: borrow:userId:isbn veya return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: book1 ve book2 için Book nesneleri oluştur
        
        // TODO: Bir User nesnesi oluştur
        
        // TODO: Bir Library oluştur, her iki kitabı ekle ve kullanıcıyı kaydet
        
        // TODO: operationsStr'yi "," ile ayır ve her bir işlemi işle
        //       Her işlem için, action, userId, isbn bilgilerini almak için ":" ile ayır
        //       Duruma göre library.borrowBook() veya library.returnBook() çağır
        
        // TODO: Her kitap için "[isbn]: [Available/Borrowed]" formatında özet yazdır
    }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler