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ü ile genişletelim! Gerçek bir kütüphanenin yönetim özelliklerine ihtiyacı vardır: koleksiyona yeni kitaplar eklemek, güncelliğini yitirmiş kitapları kaldırmak ve yeni üyeleri kaydetmek. Bu yönetim işlemlerini tanımlayan bir arayüz oluşturacak ve bunları özel bir yönetici sınıfında uygulayacaksınız.

Mevcut kodunuzu beş dosya üzerinden geliştirmeye devam edeceksiniz:

  • Book.java: Mevcut tüm işlevleriyle Book sınıfınızı koruyun: isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları.
  • User.java: id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() ile User sınıfınızı değiştirmeden koruyun.
  • Library.java: Mevcut tüm metotlarıyla Library sınıfınızı koruyun. Koleksiyondan ISBN değerine göre bir kitabı bulan ve kaldıran yeni bir removeBook(String isbn) metodu ekleyin. Kitap bulunup kaldırıldıysa metot true, aksi takdirde false döndürmelidir. Bir kitap yalnızca o anda mevcutsa (ödünç alınmamışsa) kaldırılabilir.
  • LibraryAdmin.java: Yönetim işlemleri için sözleşmeyi tanımlayan LibraryAdmin adlı bir arayüz oluşturun. Arayüzünüz üç metot bildirmelidir:
    • addBook(String isbn, String title, String author) - başarıyı belirten bir boolean döndürür
    • removeBook(String isbn) - başarıyı belirten bir boolean döndürür
    • registerUser(String id, String name) - başarıyı belirten bir boolean döndürür

    Ardından bu arayüzü uygulayan AdminService adlı bir sınıf oluşturun. AdminService, bir Library referansı tutmalı (yapıcısı aracılığıyla iletilir) ve uygun geri bildirimler eklerken üç metodun tümünü Library'ye yönlendirerek 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 onu 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 aşağıdaki biçimlerden 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 mevcut değilse 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: ifadesini ve ardından her kitabın ayrıntılarını ve bulunabilirlik durumunu [details] - [Available/Borrowed] biçiminde yazdırın.

Bir girdi alacaksınız: virgülle ayrılmış bir komut dizesi.

Ö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 olur:

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 yönetim işlemleri için temiz bir sözleşme sağlarken AdminService uygulamasının gerçek mantığı ele aldığına dikkat edin. Sistem, ödünç alınmış bir kitabın kaldırılmasını doğru şekilde engellerken mevcut kitapların kaldırılmasına izin verir. Arayüz ile uygulamanın bu şekilde ayrılması, kodunuzu daha sürdürülebilir ve test edilebilir hâle getiren temel bir OOP ilkesidir!

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 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);
            }
        }
        
        // Print library status
        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

Kendi başına pratik yap: Online Java derleyicisi