Menu
CoddyTech

Struct Buku dan Pengguna

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

challenge icon

Tantangan

Mudah

Mari kita bangun model data inti untuk Sistem Manajemen Perpustakaan kita! Kamu akan membuat struct dasar yang merepresentasikan buku dan anggota perpustakaan, lengkap dengan fungsi konstruktor yang menginisialisasinya dengan nilai default yang sesuai.

Kamu akan mengatur kodemu di tiga file:

  • book.go: Definisikan struct Book dengan field ID, Title, Author, ISBN, dan Available (boolean). Buat fungsi konstruktor NewBook yang menerima ID, judul, penulis, dan ISBN sebagai parameter, lalu mengembalikan pointer ke Book baru. Buku baru harus selalu dimulai dalam keadaan tersedia. Tambahkan method Info() yang mengembalikan detail buku dalam format: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Definisikan struct User dengan field ID, Name, Email, dan BorrowedBooks (slice string untuk menyimpan ID buku). Buat konstruktor NewUser yang menerima ID, nama, dan email, lalu mengembalikan pointer ke User baru dengan list buku pinjaman yang kosong. Tambahkan method Info() yang mengembalikan: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Gabungkan modelmu dengan membuat buku dan pengguna dari input, lalu tampilkan informasinya.

    Baca jumlah buku, lalu untuk setiap buku, baca ID, judul, penulis, dan ISBN masing-masing pada baris terpisah. Berikutnya, baca jumlah pengguna, lalu untuk setiap pengguna, baca ID, nama, dan email masing-masing pada baris terpisah.

    Cetak info setiap buku pada barisnya sendiri, lalu info setiap pengguna pada barisnya sendiri.

Input berikut akan diberikan:

  • Jumlah buku
  • Untuk setiap buku: ID, judul, penulis, ISBN (masing-masing pada baris terpisah)
  • Jumlah pengguna
  • Untuk setiap pengguna: ID, nama, email (masing-masing pada baris terpisah)

Contohnya, jika diberikan:

2
B001
The Go Programming Language
Alan Donovan
978-0134190440
B002
Clean Code
Robert Martin
978-0132350884
1
U001
Alice Smith
alice@library.com

Outputmu seharusnya:

[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0

Dan jika diberikan:

1
B100
Design Patterns
Gang of Four
978-0201633610
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.com

Outputmu seharusnya:

[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0

Perhatikan bagaimana konstruktor menangani nilai default: buku dimulai dalam keadaan tersedia dan pengguna dimulai dengan nol buku pinjaman. Pola penggunaan fungsi konstruktor untuk memastikan inisialisasi yang tepat merupakan hal mendasar dalam membangun sistem yang andal!

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Baca jumlah buku
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Buat slice untuk menyimpan buku

	// Baca detail setiap buku
	for i := 0; i < numBooks; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		title, _ := reader.ReadString('\n')
		title = strings.TrimSpace(title)
		author, _ := reader.ReadString('\n')
		author = strings.TrimSpace(author)
		isbn, _ := reader.ReadString('\n')
		isbn = strings.TrimSpace(isbn)

		// TODO: Buat buku baru menggunakan konstruktor NewBook lalu tambahkan ke slice
	}

	// Baca jumlah pengguna
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Buat slice untuk menyimpan pengguna

	// Baca detail setiap pengguna
	for i := 0; i < numUsers; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		name, _ := reader.ReadString('\n')
		name = strings.TrimSpace(name)
		email, _ := reader.ReadString('\n')
		email = strings.TrimSpace(email)

		// TODO: Buat pengguna baru menggunakan konstruktor NewUser lalu tambahkan ke slice
	}

	// TODO: Cetak informasi setiap buku menggunakan method Info()

	// TODO: Cetak informasi setiap pengguna menggunakan method Info()

	fmt.Println() // Penanda sementara, hapus saat mengimplementasikan
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online