Menu
Coddy logo textTech

Struct per libri e utenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 99 di 107.

challenge icon

Sfida

Facile

Costruiamo i modelli di dati fondamentali per il nostro sistema di gestione della biblioteca! Creerai le struct di base che rappresentano i libri e i membri della biblioteca, complete di funzioni costruttrici che li inizializzano con valori predefiniti sensati.

Organizzerai il codice in tre file:

  • book.go: Definisci la struct Book con i campi ID, Title, Author, ISBN e Available (booleano). Crea una funzione costruttrice NewBook che accetta ID, titolo, autore e ISBN come parametri e restituisce un puntatore a un nuovo Book. I nuovi libri devono essere sempre inizialmente disponibili. Aggiungi un metodo Info() che restituisce i dettagli del libro nel formato: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Definisci la struct User con i campi ID, Name, Email e BorrowedBooks (una slice di stringhe in cui memorizzare gli ID dei libri). Crea una funzione costruttrice NewUser che accetta ID, nome ed email e restituisce un puntatore a un nuovo User con una lista vuota di libri presi in prestito. Aggiungi un metodo Info() che restituisce: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Metti insieme i modelli creando libri e utenti a partire dall'input, quindi visualizzandone le informazioni.

    Leggi il numero di libri, poi per ciascun libro leggi il suo ID, titolo, autore e ISBN su righe separate. Poi leggi il numero di utenti e, per ciascun utente, leggi ID, nome ed email su righe separate.

    Stampa le informazioni di ogni libro su una riga, seguite dalle informazioni di ogni utente, ciascuna sulla propria riga.

Verranno forniti i seguenti input:

  • Numero di libri
  • Per ogni libro: ID, titolo, autore, ISBN (ciascuno su una riga separata)
  • Numero di utenti
  • Per ogni utente: ID, nome, email (ciascuno su una riga separata)

Per esempio, dato:

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

Il tuo output dovrebbe essere:

[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

E dato:

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

Il tuo output dovrebbe essere:

[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

Nota come i costruttori gestiscono i valori predefiniti: i libri iniziano come disponibili e gli utenti iniziano con zero libri presi in prestito. Questo modello, che usa funzioni costruttrici per garantire una corretta inizializzazione, è fondamentale per creare sistemi affidabili!

Provalo tu

package main

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

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

	// Leggi il numero di libri
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Crea una slice per memorizzare i libri

	// Leggi i dettagli di ogni 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: Crea un nuovo libro usando il costruttore NewBook e aggiungilo alla slice
	}

	// Leggi il numero di utenti
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Crea una slice per memorizzare gli utenti

	// Leggi i dettagli di ogni utente
	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: Crea un nuovo utente usando il costruttore NewUser e aggiungilo alla slice
	}

	// TODO: Stampa le informazioni di ogni libro usando il metodo Info()

	// TODO: Stampa le informazioni di ogni utente usando il metodo Info()

	fmt.Println() // Segnaposto - rimuovi durante l'implementazione
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online