Menu
CoddyTech

Antarmuka Admin

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

challenge icon

Tantangan

Mudah

Mari kembangkan Sistem Manajemen Perpustakaanmu dengan Antarmuka Admin! Perpustakaan sungguhan membutuhkan kemampuan administratif: menambahkan buku baru ke koleksi, menghapus buku yang sudah usang, dan mendaftarkan anggota baru. Kamu akan membuat antarmuka yang mendefinisikan operasi administratif ini dan mengimplementasikannya dalam class admin khusus.

Kamu akan melanjutkan pengembangan kodemu yang sudah ada dalam lima file:

  • Book.java: Pertahankan class Book dengan semua fungsionalitas yang sudah ada: isbn, title, author, isAvailable, borrowedBy, getDetails(), serta getter/setter yang sesuai.
  • User.java: Pertahankan class User tanpa perubahan, dengan id, name, ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), dan toString().
  • Library.java: Pertahankan class Library dengan semua method yang sudah ada. Tambahkan method baru removeBook(String isbn) yang mencari dan menghapus buku dari koleksi berdasarkan ISBN-nya. Method ini harus mengembalikan true jika buku ditemukan dan dihapus, atau false jika tidak. Buku hanya dapat dihapus jika saat ini tersedia (tidak sedang dipinjam).
  • LibraryAdmin.java: Buat interface bernama LibraryAdmin yang mendefinisikan kontrak untuk operasi administratif. Interface-mu harus mendeklarasikan tiga method:
    • addBook(String isbn, String title, String author) - mengembalikan boolean yang menunjukkan keberhasilan
    • removeBook(String isbn) - mengembalikan boolean yang menunjukkan keberhasilan
    • registerUser(String id, String name) - mengembalikan boolean yang menunjukkan keberhasilan

    Lalu, buat class bernama AdminService yang mengimplementasikan interface ini. AdminService harus menyimpan referensi ke Library (yang diberikan melalui konstruktornya) dan mengimplementasikan ketiga method dengan mendelegasikan operasi ke Library, sekaligus memberikan informasi yang sesuai. Saat menambahkan buku, buat Book baru dan tambahkan ke library. Saat mendaftarkan pengguna, buat User baru dan daftarkan.

  • Main.java: Tunjukkan cara kerja sistem adminmu! Kamu akan menerima serangkaian perintah admin sebagai satu string yang dipisahkan koma. Setiap perintah mengikuti salah satu format berikut:
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Buat Library dan AdminService. Proses setiap perintah dan cetak hasilnya:

    • Untuk ADD_BOOK: cetak Added: [title] jika berhasil
    • Untuk REMOVE_BOOK: cetak Removed: [isbn] jika berhasil, atau Cannot remove: [isbn] jika buku tidak ada atau sedang dipinjam
    • Untuk REGISTER_USER: cetak Registered: [name]
    • Untuk BORROW: gunakan fungsionalitas peminjaman yang sudah ada di library

    Setelah memproses semua perintah, cetak Library status:, lalu detail setiap buku dan status ketersediaannya dengan format [details] - [Available/Borrowed].

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

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

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

Perhatikan bagaimana antarmuka admin menyediakan kontrak yang jelas untuk operasi administratif, sementara implementasi AdminService menangani logika sebenarnya. Sistem ini dengan benar mencegah penghapusan buku yang sedang dipinjam, sekaligus mengizinkan penghapusan buku yang tersedia. Pemisahan antara antarmuka dan implementasi ini adalah prinsip OOP penting yang membuat kodemu lebih mudah dipelihara dan diuji!

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];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Tampilkan status library
        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);
        }
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online