Menu
CoddyTech

Pengujian dan Integrasi

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 83 dari 87.

challenge icon

Tantangan

Mudah

Selamat karena telah membangun Sistem Manajemen Perpustakaan! Saatnya menyatukan semuanya dan memastikan semua komponen berfungsi dengan benar sebagai sebuah sistem terpadu. Kamu akan membuat skenario pengujian menyeluruh yang menguji semua fitur yang telah kamu bangun selama proyek ini.

Kamu akan menggunakan ketujuh file dari sistem yang telah selesai kamu buat:

  • Book.java: class Book milikmu dengan isbn, title, author, isAvailable, borrowedBy, dan semua method terkait, termasuk getDetails().
  • User.java: class User milikmu dengan id, name, list borrowedBooks, serta method untuk meminjam dan mengembalikan buku.
  • LibraryException.java: class exception kustom dasar milikmu.
  • BookNotAvailableException.java: exception milikmu untuk buku yang tidak tersedia.
  • LibraryAdmin.java: interface admin dan implementasi AdminService milikmu.
  • Library.java: class Library lengkap milikmu dengan semua method: menambahkan dan menghapus buku, mendaftarkan pengguna, meminjam dan mengembalikan buku, mencari, serta menangani exception.
  • Main.java: tes integrasi milikmu yang akan menunjukkan seluruh sistem bekerja bersama.

Di class Main, kamu akan memproses serangkaian perintah yang menguji setiap fitur utama sistem perpustakaanmu. Perintah diberikan sebagai satu string yang dipisahkan koma dengan format berikut:

  • ADD_BOOK:isbn:title:author - Tambahkan buku melalui AdminService
  • REGISTER_USER:id:name - Daftarkan pengguna melalui AdminService
  • BORROW:userId:isbn - Pinjam buku (dengan penanganan exception)
  • RETURN:userId:isbn - Kembalikan buku
  • SEARCH_TITLE:keyword - Cari buku berdasarkan judul
  • SEARCH_AUTHOR:keyword - Cari buku berdasarkan penulis
  • REMOVE_BOOK:isbn - Hapus buku melalui AdminService

Proses setiap perintah dan cetak output yang sesuai:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: Cetak pesan sukses atau Error: [exception message]
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Cetak Search '[keyword]': diikuti detail setiap buku yang cocok, atau No results
  • SEARCH_AUTHOR: Formatnya sama dengan pencarian judul
  • REMOVE_BOOK: Removed: [isbn] atau Cannot remove: [isbn]

Setelah semua perintah diproses, cetak ringkasan akhir:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Untuk setiap pengguna, cetak [name]: [borrowedCount] book(s)

Kamu akan menerima satu input: string perintah yang dipisahkan koma.

Misalnya, dengan input 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, outputmu akan berupa:

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)

Tantangan terakhir ini memvalidasi bahwa semua komponen, class, interface, exception, dan logika perpustakaanmu bekerja bersama dengan lancar. Kamu telah membangun Sistem Manajemen Perpustakaan yang lengkap dan tangguh!

Coba sendiri

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca perintah yang dipisahkan koma
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Buat Library dan AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Proses setiap perintah
        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: Tambahkan penanganan untuk perintah RETURN
            // TODO: Tambahkan penanganan untuk perintah SEARCH_TITLE
            // TODO: Tambahkan penanganan untuk perintah SEARCH_AUTHOR
        }
        
        // TODO: Tampilkan status akhir
        // --- Final Status ---
        // Buku: [count]
        // Pengguna: [count]
        // Untuk setiap pengguna: [name]: [borrowedCount] buku
        System.out.println("Operations completed");
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online