Menu
CoddyTech

Interface CLI Admin

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 103 dari 107.

challenge icon

Tantangan

Mudah

Mari bangun antarmuka baris perintah untuk Sistem Manajemen Perpustakaan kita menggunakan Command Pattern! Kamu akan membuat CLI yang memproses perintah admin seperti menambahkan buku, mendaftarkan pengguna, dan mengelola peminjaman, semuanya melalui arsitektur yang rapi dan mudah dikembangkan.

Kamu akan mengatur kodemu dalam enam file:

  • book.go: Struct Book-mu dengan tag JSON untuk ID, Title, Author, ISBN, dan Available. Sertakan constructor NewBook.
  • user.go: Struct User-mu dengan tag JSON untuk ID, Name, Email, dan BorrowedBooks. Sertakan constructor NewUser.
  • library.go: Struct Library-mu dengan map untuk buku dan pengguna, beserta method AddBook, AddUser, Borrow, dan Return dari pelajaran sebelumnya.
  • commands.go: Di sinilah Command Pattern mulai digunakan! Definisikan interface Command dengan method Execute yang menerima *Library dan argumen []string, lalu mengembalikan hasil berupa string. Kemudian, implementasikan struct perintah berikut:
    • AddBookCommand: menerima 4 argumen: id, title, author, isbn. Menambahkan buku dan mengembalikan Book added: [title]
    • AddUserCommand: menerima 3 argumen: id, name, email. Menambahkan pengguna dan mengembalikan User added: [name]
    • BorrowCommand: menerima 2 argumen: userID, bookID. Mengembalikan Borrowed: [bookID] jika berhasil, atau Error: [message] jika gagal
    • ReturnCommand: menerima 2 argumen: userID, bookID. Mengembalikan Returned: [bookID] jika berhasil, atau Error: [message] jika gagal
    • ListBooksCommand: tidak menerima argumen. Mengembalikan ID dan judul setiap buku pada baris terpisah dengan format [id]: [title], atau No books jika kosong (urutkan daftar buku berdasarkan ID)

    Jika perintah menerima argumen yang tidak mencukupi, kembalikan Error: insufficient arguments

  • cli.go: Buat struct CLI yang menyimpan pointer ke Library dan map yang memetakan nama perintah ke implementasi Command. Buat:
    • Constructor NewCLI yang menginisialisasi CLI dengan library dan mendaftarkan semua perintah: addbook, adduser, borrow, return, listbooks
    • Method Run yang menerima string input, menguraikannya menggunakan strings.Fields, mencari perintah, lalu menjalankannya. Kembalikan No command provided untuk input kosong, atau Unknown command: [name] untuk perintah yang tidak dikenali
  • main.go: Buat library dan CLI, lalu proses perintah dari input. Baca jumlah perintah, lalu baca setiap string perintah pada baris terpisah. Untuk setiap perintah, panggil Run dan cetak hasilnya.

Input berikut akan diberikan:

  • Jumlah perintah
  • Setiap perintah sebagai string lengkap pada barisnya sendiri

Contohnya, jika diberikan:

6
addbook B001 Go-Programming Alan-Donovan 978-0134190440
addbook B002 Clean-Code Robert-Martin 978-0132350884
adduser U001 Alice alice@test.com
borrow U001 B001
listbooks
borrow U001 B001

Output-mu seharusnya:

Book added: Go-Programming
Book added: Clean-Code
User added: Alice
Borrowed: B001
B001: Go-Programming
B002: Clean-Code
Error: book not available

Dan jika diberikan:

4
listbooks
addbook B100 Design-Patterns Gang-of-Four 978-0201633610
listbooks
invalidcmd test

Output-mu seharusnya:

No books
Book added: Design-Patterns
B100: Design-Patterns
Unknown command: invalidcmd

Dan jika diberikan:

5
adduser U001 Bob bob@email.com
borrow U001 B001
addbook B001 Golang-Guide John-Smith 123-456
borrow U001 B001
return U001 B001

Output-mu seharusnya:

User added: Bob
Error: book not found
Book added: Golang-Guide
Borrowed: B001
Returned: B001

Perhatikan bahwa CLI tidak perlu mengetahui detail setiap operasi. CLI cukup mencari perintah dan menyerahkan pelaksanaannya. Dengan begitu, menambahkan perintah baru cukup dengan membuat struct baru yang mengimplementasikan interface Command dan mendaftarkannya di CLI!

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	// Baca jumlah perintah
	var n int
	fmt.Scanln(&n)

	// Buat scanner untuk membaca baris lengkap
	scanner := bufio.NewScanner(os.Stdin)

	// TODO: Buat Library baru

	// TODO: Buat CLI baru dengan library

	// TODO: Proses setiap perintah
	// Untuk setiap perintah dari n perintah:
	// - Baca baris perintah menggunakan scanner.Scan() dan scanner.Text()
	// - Jalankan perintah melalui CLI
	// - Cetak hasilnya

	_ = scanner // Hapus baris ini saat kamu menggunakan scanner
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online