Menu
Coddy logo textTech

Récapitulatif – Fiches d’é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 gestion des dossiers étudiants qui démontre un 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 fournissant un accès contrôlé grâce à 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 les données publiques sûres. Le Name de l'étudiant doit être exporté (accessible publiquement), tandis que son grade (float64) et son studentID (string) doivent être non exportés afin de 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, la valeur par défaut doit être 0.
    • Un accesseur Grade() float64 qui renvoie la note actuelle
    • Un accesseur StudentID() string qui renvoie l'identifiant de l'étudiant
    • Un mutateur SetGrade(newGrade float64) bool qui met à jour la note uniquement si la nouvelle valeur est comprise entre 0 et 100 (inclus). Renvoyez true si la note a été mise à jour, et false dans le cas contraire.
    • Une méthode Summary() string qui renvoie le format suivant : [Name] (ID: [studentID]) - Grade: [grade]
  • main.go : lisez les informations de l'étudiant depuis l'entrée, créez un étudiant à l'aide du constructeur, puis effectuez les opérations sur la note. Affichez le résumé de l'étudiant après sa 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é. Tentez ensuite chaque mise à jour de la note : si elle réussit, affichez le résumé mis à jour ; si elle est rejetée, affichez Invalid grade rejected. Formatez toutes les notes avec deux décimales.

Par exemple, avec Emma Wilson, STU001, 85.5, 92.0 et 150, votre sortie doit ê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 mutateur applique cette règle, ce qui maintient les données de l'étudiant valides. Remarquez que studentID et grade ne sont jamais directement accessibles : le code externe doit utiliser vos méthodes d'accès et de modification 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 réussie, afficher le résumé mis à jour
	// If rejected, print "Invalid grade rejected"

	// TODO: Tenter la deuxième mise à jour de la note
	// Si réussie, afficher le résumé mis à jour
	// If rejected, print "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

Entraînez-vous par vous-même : Compilateur Go en ligne