Menu
Coddy logo textTech

Structs de libros y usuarios

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy — lección 99 de 107.

challenge icon

Desafío

Fácil

¡Vamos a construir los modelos de datos principales para nuestro Sistema de Gestión de Bibliotecas! Crearás las estructuras fundamentales que representan libros y miembros de la biblioteca, junto con funciones constructoras que los inicializan con valores predeterminados lógicos.

Organizarás tu código en tres archivos:

  • book.go: Define tu estructura Book con campos para ID, Title, Author, ISBN y Available (booleano). Crea una función constructora NewBook que reciba el ID, title, author e ISBN como parámetros y devuelva un puntero a un nuevo Book. Los libros nuevos siempre deben comenzar como disponibles. Agrega un método Info() que devuelva los detalles del libro en el formato: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Define tu estructura User con campos para ID, Name, Email y BorrowedBooks (un slice de strings para almacenar los IDs de los libros). Crea un constructor NewUser que reciba ID, name y email, devolviendo un puntero a un nuevo User con una lista de libros prestados vacía. Agrega un método Info() que devuelva: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Une tus modelos creando libros y usuarios a partir de la entrada, y luego mostrando su información.

    Lee el número de libros, luego para cada libro lee su ID, title, author e ISBN en líneas separadas. A continuación, lee el número de usuarios, y para cada usuario lee su ID, name y email en líneas separadas.

    Imprime la información de cada libro en su propia línea, seguida de la información de cada usuario en su propia línea.

Se proporcionarán las siguientes entradas:

  • Número de libros
  • Para cada libro: ID, title, author, ISBN (cada uno en líneas separadas)
  • Número de usuarios
  • Para cada usuario: ID, name, email (cada uno en líneas separadas)

Por ejemplo, dado:

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

Tu salida debería ser:

[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

Y dado:

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

Tu salida debería ser:

[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

Observa cómo los constructores manejan los valores predeterminados: los libros comienzan disponibles y los usuarios comienzan con cero libros prestados. ¡Este patrón de usar funciones constructoras para asegurar una inicialización adecuada es fundamental para construir sistemas confiables!

Pruébalo tú mismo

package main

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

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

	// Leer el número de libros
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Crear un slice para almacenar libros

	// Leer los detalles de cada libro
	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: Crear un nuevo libro usando el constructor NewBook y añadirlo al slice
	}

	// Leer el número de usuarios
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Crear un slice para almacenar usuarios

	// Leer los detalles de cada usuario
	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: Crear un nuevo usuario usando el constructor NewUser y añadirlo al slice
	}

	// TODO: Imprimir la información de cada libro usando el método Info()

	// TODO: Imprimir la información de cada usuario usando el método Info()

	fmt.Println() // Marcador de posición - eliminar al implementar
}

Todas las lecciones de Programación Orientada a Objetos