Menu
Coddy logo textTech

Yönetici Arayüzü

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

challenge icon

Görev

Kolay

Kütüphane Yönetim Sisteminizi bir Yönetici Arayüzü (Admin Interface) ile genişletelim! Gerçek bir kütüphanenin idari yeteneklere ihtiyacı vardır; koleksiyona yeni kitaplar eklemek, güncelliğini yitirmiş olanları çıkarmak ve yeni üyeler kaydetmek. Bu idari işlemleri tanımlayan bir arayüz oluşturacak ve bunları özel bir yönetici sınıfında uygulayacaksınız.

Mevcut kodunuzu beş dosya üzerinde oluşturmaya devam edeceksiniz:

  • Book.java: Book sınıfınızı tüm mevcut 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, borrowBook(), returnBook(), getBorrowedCount() ve toString() ile değiştirmeden koruyun.
  • Library.java: Library sınıfınızı tüm mevcut metotlarıyla koruyun. Koleksiyondan ISBN numarasına göre bir kitabı bulan ve silen yeni bir removeBook(String isbn) metodu ekleyin. Metot, kitap bulunup silindiyse true, aksi takdirde false döndürmelidir. Bir kitap yalnızca şu anda mevcutsa (ödünç alınmamışsa) silinebilir.
  • LibraryAdmin.java: İdari işlemler için sözleşmeyi tanımlayan LibraryAdmin adında bir arayüz (interface) oluşturun. Arayüzünüz üç metot bildirmelidir:
    • addBook(String isbn, String title, String author) - başarısını belirten bir boolean döndürür
    • removeBook(String isbn) - başarısını belirten bir boolean döndürür
    • registerUser(String id, String name) - başarısını belirten bir boolean döndürür

    Ardından bu arayüzü uygulayan AdminService adında bir sınıf oluşturun. AdminService, bir Library referansı tutmalı (constructor aracılığıyla iletilir) ve uygun geri bildirimleri eklerken işlemleri Library sınıfına devrederek (delegating) üç metodu da uygulamalıdır. Bir kitap eklerken yeni bir Book oluşturun ve kütüphaneye ekleyin. Bir kullanıcı kaydederken yeni bir User oluşturun ve kaydedin.

  • Main.java: Yönetici sisteminizi gösterin! Tek bir virgülle ayrılmış dize olarak bir dizi yönetici komutu alacaksınız. Her komut şu formatlardan birini izler:
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Bir Library ve bir AdminService oluşturun. Her komutu işleyin ve sonucu yazdırın:

    • ADD_BOOK için: başarı durumunda Added: [title] yazdırın
    • REMOVE_BOOK için: başarı durumunda Removed: [isbn], kitap yoksa veya ödünç alınmışsa Cannot remove: [isbn] yazdırın
    • REGISTER_USER için: Registered: [name] yazdırın
    • BORROW için: mevcut kütüphane ödünç alma işlevini kullanın

    Tüm komutları işledikten sonra, Library status: yazdırın ve ardından her kitabın ayrıntılarını ve kullanılabilirlik durumunu [details] - [Available/Borrowed] formatında yazdırın.

Bir girdi alacaksınız: virgülle ayrılmış komutlar dizisi.

Örneğin, REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002 girdisiyle çıktınız şöyle olacaktır:

Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - Borrowed

Yönetici arayüzünün idari işlemler için nasıl temiz bir sözleşme sağladığına, AdminService uygulamasının ise asıl mantığı nasıl yönettiğine dikkat edin. Sistem, ödünç alınan bir kitabın silinmesini doğru bir şekilde engellerken, mevcut olanların silinmesine izin verir. Arayüz ve uygulamanın bu şekilde ayrılması, kodunuzu daha bakımı kolay ve test edilebilir kılan temel bir OOP prensibidir!

Kendin dene

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Virgülle ayrılmış komutları oku
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Library ve AdminService oluştur
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Her bir komutu işle
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Kütüphane durumunu yazdır
        System.out.println("Library status:");
        ArrayList<Book> allBooks = library.getAllBooks();
        for (Book book : allBooks) {
            String status = book.isAvailable() ? "Available" : "Borrowed";
            System.out.println(book.getDetails() + " - " + status);
        }
    }
}

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