Menu
Coddy logo textTech

Visão Geral e Estrutura do Projeto

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy — lição 98 de 107.

challenge icon

Desafio

Fácil

Vamos dar o pontapé inicial no projeto do Sistema de Gerenciamento de Biblioteca configurando a estrutura fundamental! Nesta primeira etapa, você criará o esqueleto básico que suportará todos os recursos que construiremos nas próximas lições.

Você organizará seu código em três arquivos para estabelecer uma separação clara de responsabilidades:

  • book.go: Defina uma struct Book que representa um livro da biblioteca. Cada livro deve ter um ID, Title, Author e um status Available (booleano). Crie uma função construtora NewBook que recebe o ID, título e autor como parâmetros e retorna um ponteiro para um novo Book com Available definido como true por padrão. Adicione também um método String() que retorna as informações do livro no formato: [ID] Title by Author
  • user.go: Defina uma struct User representando um membro da biblioteca com os campos ID, Name e Email. Crie uma função construtora NewUser que recebe todos os três valores e retorna um ponteiro para um novo User. Adicione um método String() que retorna: User: Name (Email)
  • main.go: Reúna tudo lendo a entrada para criar livros e usuários, e então exiba suas informações.

    Leia o número de livros a serem criados. Para cada livro, leia seu ID, título e autor em linhas separadas. Em seguida, leia o número de usuários e, para cada usuário, leia seu ID, nome e e-mail em linhas separadas.

    Após criar todos os itens, imprima a representação em string de cada livro em sua própria linha, seguida pela representação em string de cada usuário em sua própria linha.

As seguintes entradas serão fornecidas:

  • Número de livros
  • Para cada livro: ID, título e autor (cada um em linhas separadas)
  • Número de usuários
  • Para cada usuário: ID, nome e e-mail (cada um em linhas separadas)

Por exemplo, dado:

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

Sua saída deve ser:

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

E dado:

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

Sua saída deve ser:

[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)

Esta base estabelece os modelos de dados principais que você expandirá ao longo do projeto. Na próxima lição, você aprimorará essas structs e adicionará a funcionalidade de empréstimo!

Experimente você mesmo

package main

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

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

	// Ler o número de livros
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Criar um slice para armazenar livros

	// TODO: Ler as informações de cada livro (ID, title, author em linhas separadas)
	// e criar 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: Criar um novo livro e adicioná-lo ao seu slice
	}

	// Ler o número de usuários
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Criar um slice para armazenar usuários

	// TODO: Ler as informações de cada usuário (ID, name, email em linhas separadas)
	// e criar 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: Criar um novo usuário e adicioná-lo ao seu slice
	}

	// TODO: Imprimir a representação em string de cada livro

	// TODO: Imprimir a representação em string de cada usuário
	fmt.Println("TODO: Print output here")
}

Todas as lições de Programação Orientada a Objetos