Menu
Coddy logo textTech

Récapitulatif - Dossiers étudiants

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy — leçon 51 sur 107.

challenge icon

Défi

Facile

Construisons un système de dossiers d'étudiants qui démontre une encapsulation appropriée. Vous allez créer une structure de gestion des étudiants où les données académiques sensibles sont protégées tout en offrant un accès contrôlé via des méthodes bien conçues.

Vous organiserez votre code sur deux fichiers :

  • student.go : Créez une structure Student qui protège les informations sensibles tout en exposant des données publiques sûres. Le Name de l'étudiant doit être exporté (accessible publiquement), mais sa grade (float64) et son studentID (string) doivent être non exportés pour protéger ces informations sensibles.

    Implémentez les éléments suivants :

    • Un constructeur NewStudent(name, id string, initialGrade float64) *Student qui crée un étudiant. La note initiale ne doit être définie que si elle est comprise entre 0 et 100 (inclus) ; sinon, elle est fixée à 0 par défaut.
    • Un getter Grade() float64 qui retourne la note actuelle.
    • Un getter StudentID() string qui retourne l'identifiant de l'étudiant.
    • Un setter SetGrade(newGrade float64) bool qui met à jour la note uniquement si la nouvelle valeur est comprise entre 0 et 100 (inclus). Retournez true si la note a été mise à jour, false sinon.
    • Une méthode Summary() string qui retourne le format : [Name] (ID: [studentID]) - Grade: [grade]
  • main.go : Lisez les informations de l'étudiant à partir de l'entrée, créez un étudiant en utilisant le constructeur, puis effectuez des opérations sur les notes. Affichez le résumé de l'étudiant après la création et après chaque tentative de mise à jour de la note.

Les entrées suivantes seront fournies :

  • Ligne 1 : Nom de l'étudiant
  • Ligne 2 : Identifiant de l'étudiant
  • Ligne 3 : Note initiale
  • Ligne 4 : Première nouvelle note à définir
  • Ligne 5 : Deuxième nouvelle note à définir

Après avoir créé l'étudiant, affichez son résumé. Ensuite, tentez chaque mise à jour de note — en cas de succès, affichez le résumé mis à jour ; en cas de rejet, affichez Invalid grade rejected. Formatez toutes les valeurs de notes avec deux décimales.

Par exemple, avec Emma Wilson, STU001, 85.5, 92.0 et 150, votre sortie devrait être :

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

La dernière mise à jour échoue car 150 est en dehors de la plage valide. Votre méthode setter applique cette règle, maintenant les données de l'étudiant valides. Remarquez comment le studentID et la grade ne sont jamais directement accessibles — le code externe doit utiliser vos méthodes getter et setter pour interagir avec ces données protégées.

Essayez vous-même

package main

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

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

	// Lire le nom de l'étudiant
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	// Lire l'ID de l'étudiant
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

	// Lire la note initiale
	initialGradeStr, _ := reader.ReadString('\n')
	initialGrade, _ := strconv.ParseFloat(strings.TrimSpace(initialGradeStr), 64)

	// Lire la première nouvelle note
	newGrade1Str, _ := reader.ReadString('\n')
	newGrade1, _ := strconv.ParseFloat(strings.TrimSpace(newGrade1Str), 64)

	// Lire la deuxième nouvelle note
	newGrade2Str, _ := reader.ReadString('\n')
	newGrade2, _ := strconv.ParseFloat(strings.TrimSpace(newGrade2Str), 64)

	// TODO: Créer un nouvel étudiant en utilisant le constructeur NewStudent

	// TODO: Afficher le résumé de l'étudiant après la création

	// TODO: Tenter la première mise à jour de la note
	// Si elle réussit, afficher le résumé mis à jour
	// Si elle est rejetée, afficher "Invalid grade rejected"

	// TODO: Tenter la deuxième mise à jour de la note
	// Si elle réussit, afficher le résumé mis à jour
	// Si elle est rejetée, afficher "Invalid grade rejected"

	// Hint: Utiliser fmt.Sprintf avec %.2f pour formater les notes dans Summary()
	_ = newGrade1 // Supprimer cette ligne lorsque vous utilisez la variable
	_ = newGrade2 // Supprimer cette ligne lorsque vous utilisez la variable
}

Toutes les leçons de Programmation Orientée Objet