Menu
Coddy logo textTech

Descripción general y estructura del proyecto

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy. Lección 98 de 107.

challenge icon

Desafío

Fácil

¡Comencemos el proyecto del Sistema de Gestión de Bibliotecas configurando la estructura fundamental! En este primer paso, crearás la estructura básica que respaldará todas las funcionalidades que desarrollaremos en las próximas lecciones.

Organizarás tu código en tres archivos para establecer una separación clara de responsabilidades:

  • book.go: Define una estructura Book que represente un libro de la biblioteca. Cada libro debe tener un ID, Title, Author y un estado Available (booleano). Crea una función constructora NewBook que reciba el ID, el título y el autor como parámetros y devuelva un puntero a un nuevo Book con Available establecido en true de forma predeterminada. Añade también un método String() que devuelva la información del libro con el formato: [ID] Title by Author
  • user.go: Define una estructura User que represente a un miembro de la biblioteca con los campos ID, Name y Email. Crea una función constructora NewUser que reciba los tres valores y devuelva un puntero a un nuevo User. Añade un método String() que devuelva: User: Name (Email)
  • main.go: Une todos los elementos leyendo la entrada para crear libros y usuarios y, después, mostrar su información.

    Lee el número de libros que se crearán. Para cada libro, lee su ID, título y autor en líneas separadas. Después, lee el número de usuarios y, para cada usuario, lee su ID, nombre y correo electrónico en líneas separadas.

    Después de crear todos los elementos, imprime la representación en forma de cadena de cada libro en su propia línea, seguida de la representación en forma de cadena de cada usuario en su propia línea.

Se proporcionarán las siguientes entradas:

  • Número de libros
  • Para cada libro: ID, título y autor (cada uno en una línea separada)
  • Número de usuarios
  • Para cada usuario: ID, nombre y correo electrónico (cada uno en una línea separada)

Por ejemplo, dada la siguiente entrada:

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

Tu salida debería ser:

[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)

Y dada la siguiente entrada:

1
B100
Design Patterns
Gang of Four
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
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)

Esta base establece los modelos de datos principales que ampliarás a lo largo del proyecto. En la próxima lección, mejorarás estas estructuras y añadirás la funcionalidad de préstamo.

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

	// TODO: Leer la información de cada libro (ID, título, autor en líneas separadas)
	// y crear objetos Book usando NewBook
	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)

		// TODO: Crear un nuevo libro y añadirlo a tu slice
	}

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

	// TODO: Crear un slice para almacenar usuarios

	// TODO: Leer la información de cada usuario (ID, nombre, email en líneas separadas)
	// y crear objetos User usando NewUser
	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 y añadirlo a tu slice
	}

	// TODO: Imprimir la representación en cadena de cada libro

	// TODO: Imprimir la representación en cadena de cada usuario
	fmt.Println("TODO: Print output here")
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Go online