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 getirmenin ve tüm bileşenlerin entegre bir sistem olarak doğru çalıştığını doğrulamanın zamanı geldi. Bu proje boyunca oluşturduğunuz tüm özellikleri çalıştıran kapsamlı bir test senaryosu oluşturacaksınız.

Tamamladığınız sistemdeki yedi dosyanın tamamıyla çalışacaksınız:

  • Book.java: isbn, title, author, isAvailable, borrowedBy alanlarına ve getDetails() dahil tüm ilgili metotlara sahip Book sınıfınız.
  • User.java: id, name, borrowedBooks listesine ve kitap ödünç alma/iadeye yönelik metotlara sahip User sınıfınız.
  • LibraryException.java: Temel özel istisna sınıfınız.
  • BookNotAvailableException.java: Kullanılamayan kitaplar için istisnanı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, arama ve istisna yönetimi dahil tüm metotlara sahip eksiksiz Library sınıfınız.
  • Main.java: Tüm sistemin birlikte çalışmasını gösterecek entegrasyon testiniz.

Main sınıfınızda, kütüphane sisteminizin tüm önemli özelliklerini test eden bir dizi komutu işleyeceksiniz. Komutlar, şu biçimlerde tek bir virgülle ayrılmış dize olarak gelir:

  • ADD_BOOK:isbn:title:author - AdminService aracılığıyla kitap ekleme
  • REGISTER_USER:id:name - AdminService aracılığıyla kullanıcı kaydetme
  • BORROW:userId:isbn - Kitap ödünç alma (istisna yönetimiyle)
  • RETURN:userId:isbn - Kitap iade etme
  • SEARCH_TITLE:keyword - Kitapları başlığa göre arama
  • SEARCH_AUTHOR:keyword - Kitapları yazara göre arama
  • REMOVE_BOOK:isbn - AdminService aracılığıyla kitap çıkarma

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]': ifadesini ve ardından eşleşen her kitabın ayrıntılarını yazdırın veya No results yazdırın
  • SEARCH_AUTHOR: Başlık aramasıyla aynı biçim
  • REMOVE_BOOK: Removed: [isbn] veya Cannot remove: [isbn]

Tüm komutlardan sonra son bir özet yazdırın:

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

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

Ö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 şu olurdu:

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, tüm bileşenlerinizin, sınıflarınızın, arayüzlerinizin, istisnalarınızın ve kütüphane mantığınızın 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
        // --- Final Status ---
        // 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

Kendi başına pratik yap: Online Java derleyicisi