Menu
Coddy logo textTech

Test ve Entegrasyon

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

challenge icon

Görev

Kolay

Kütüphane Yönetim Sisteminizi oluşturduğunuz için tebrikler! Şimdi her şeyi bir araya getirme ve tüm bileşenlerin entegre bir sistem olarak doğru çalıştığını doğrulama zamanı. Bu proje boyunca oluşturduğunuz tüm özellikleri çalıştıran kapsamlı bir test senaryosu oluşturacaksınız.

Tamamlanmış sisteminizdeki yedi dosyanın tamamıyla çalışacaksınız:

  • Book.java: isbn, title, author, isAvailable, borrowedBy alanlarını ve getDetails() dahil tüm ilgili metotları içeren Book sınıfınız.
  • User.java: id, name, borrowedBooks listesini ve kitap ödünç alma/iade etme metotlarını içeren User sınıfınız.
  • LibraryException.java: Temel özel istisna (exception) sınıfınız.
  • BookNotAvailableException.java: Mevcut olmayan kitaplar için istisna sınıfınız.
  • LibraryAdmin.java: Yönetici arayüzünüz ve AdminService uygulamanız.
  • Library.java: Kitap ekleme/çıkarma, kullanıcı kaydetme, ödünç alma/iade etme, arama ve istisna yönetimi gibi tüm metotları içeren eksiksiz Library sınıfınız.
  • Main.java: Tüm sistemin birlikte çalıştığını gösterecek olan entegrasyon testiniz.

Main sınıfınızda, kütüphane sisteminizin her ana özelliğini test eden bir dizi komutu işleyeceksiniz. Komutlar, şu formatlarda virgülle ayrılmış tek bir dize olarak gelir:

  • ADD_BOOK:isbn:title:author - AdminService aracılığıyla kitap ekle
  • REGISTER_USER:id:name - AdminService aracılığıyla kullanıcı kaydet
  • BORROW:userId:isbn - Kitap ödünç al (istisna yönetimi ile)
  • RETURN:userId:isbn - Kitap iade et
  • SEARCH_TITLE:keyword - Başlığa göre kitap ara
  • SEARCH_AUTHOR:keyword - Yazara göre kitap ara
  • REMOVE_BOOK:isbn - AdminService aracılığıyla kitap çıkar

Her komutu işleyin ve uygun çıktıyı yazdırın:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: Başarı mesajını veya Error: [exception message] yazdırın
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Search '[keyword]': yazdırın, ardından eşleşen her kitabın detaylarını veya No results yazdırın
  • SEARCH_AUTHOR: Başlık aramasıyla aynı format
  • REMOVE_BOOK: Removed: [isbn] veya Cannot remove: [isbn]

Tüm komutlardan sonra final özetini yazdırın:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Her kullanıcı için şunu yazdırın: [name]: [borrowedCount] book(s)

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

Örneğin, ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001 girdisiyle çıktınız şöyle olacaktır:

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

Bu son görev; sınıflar, arayüzler, istisnalar ve kütüphane mantığı gibi tüm bileşenlerinizin sorunsuz bir şekilde birlikte çalıştığını doğrular. Eksiksiz ve sağlam bir Kütüphane Yönetim Sistemi oluşturdunuz!

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];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: RETURN komutu için işleme ekle
            // TODO: SEARCH_TITLE komutu için işleme ekle
            // TODO: SEARCH_AUTHOR komutu için işleme ekle
        }
        
        // TODO: Son durumu yazdır
        // --- Son Durum ---
        // Kitaplar: [count]
        // Kullanıcılar: [count]
        // Her kullanıcı için: [name]: [borrowedCount] kitap
        System.out.println("Operations completed");
    }
}

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