Menu
Coddy logo textTech

Recapitulação - Registros de Alunos

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy. Lição 51 de 107.

challenge icon

Desafio

Fácil

Vamos criar um sistema de registros de estudantes que demonstre o encapsulamento adequado. Você criará uma estrutura de gerenciamento de estudantes na qual os dados acadêmicos confidenciais são protegidos, enquanto ainda oferece acesso controlado por meio de métodos bem projetados.

Você organizará seu código em dois arquivos:

  • student.go: crie uma struct Student que proteja informações confidenciais enquanto expõe dados públicos seguros. O Name do estudante deve ser exportado (acessível publicamente), mas seu grade (float64) e studentID (string) devem ser não exportados para proteger essas informações confidenciais.

    Implemente o seguinte:

    • Um construtor NewStudent(name, id string, initialGrade float64) *Student que cria um estudante. A nota inicial só deve ser definida se estiver entre 0 e 100 (inclusive); caso contrário, o padrão deve ser 0.
    • Um getter Grade() float64 que retorna a nota atual
    • Um getter StudentID() string que retorna o ID do estudante
    • Um setter SetGrade(newGrade float64) bool que atualiza a nota somente se o novo valor estiver entre 0 e 100 (inclusive). Retorne true se a nota for atualizada e false caso contrário.
    • Um método Summary() string que retorna o formato: [Name] (ID: [studentID]) - Grade: [grade]
  • main.go: leia as informações do estudante da entrada, crie um estudante usando o construtor e, em seguida, realize operações com a nota. Exiba o resumo do estudante após a criação e depois de cada tentativa de atualização da nota.

As seguintes entradas serão fornecidas:

  • Linha 1: Nome do estudante
  • Linha 2: ID do estudante
  • Linha 3: Nota inicial
  • Linha 4: Primeira nova nota a ser definida
  • Linha 5: Segunda nova nota a ser definida

Depois de criar o estudante, imprima seu resumo. Em seguida, tente cada atualização da nota; se for bem-sucedida, imprima o resumo atualizado; se for rejeitada, imprima Invalid grade rejected. Formate todos os valores de nota com duas casas decimais.

Por exemplo, considerando Emma Wilson, STU001, 85.5, 92.0 e 150, sua saída deve ser:

Emma Wilson (ID: STU001) - Grade: 85.50
Emma Wilson (ID: STU001) - Grade: 92.00
Invalid grade rejected

A última atualização falha porque 150 está fora do intervalo válido. Seu método setter aplica essa regra, mantendo os dados do estudante válidos. Observe como studentID e grade nunca são diretamente acessíveis: o código externo deve usar seus métodos getter e setter para interagir com esses dados protegidos.

Experimente você mesmo

package main

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

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

	// Ler o nome do aluno
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	// Ler o ID do aluno
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

	// Ler a nota inicial
	initialGradeStr, _ := reader.ReadString('\n')
	initialGrade, _ := strconv.ParseFloat(strings.TrimSpace(initialGradeStr), 64)

	// Ler a primeira nova nota
	newGrade1Str, _ := reader.ReadString('\n')
	newGrade1, _ := strconv.ParseFloat(strings.TrimSpace(newGrade1Str), 64)

	// Ler a segunda nova nota
	newGrade2Str, _ := reader.ReadString('\n')
	newGrade2, _ := strconv.ParseFloat(strings.TrimSpace(newGrade2Str), 64)

	// TODO: Criar um novo aluno usando o construtor NewStudent

	// TODO: Imprimir o resumo do aluno após a criação

	// TODO: Tentar a primeira atualização de nota
	// Se bem-sucedido, imprimir o resumo atualizado
	// If rejected, print "Invalid grade rejected"

	// TODO: Tentar a segunda atualização de nota
	// Se bem-sucedido, imprimir o resumo atualizado
	// If rejected, print "Invalid grade rejected"

	// Dica: Use fmt.Sprintf com %.2f para formatar as notas em Summary()
	_ = newGrade1 // Remova esta linha quando usar a variável
	_ = newGrade2 // Remova esta linha quando usar a variável
}

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

Pratique por conta própria: Compilador de Go online