Skip to content

Mini Projet Scripts

Ce projet vise à développer vos compétences en script shell pour manipuler, analyser, et présenter des données. Vous allez travailler sur un système de gestion des notes des élèves pour une classe donnée, en intégrant les résultats de deux semestres.

Introduction :

On vous fourni le programme prog qui permet de génèrer aléatoirement des notes pour toutes les matières pour chaque élève de la classe sur la sortie standard sous le format suivant :

Nom_Elève Matière_1 Note_Controle Note_examen Matière_2 Note_Controle Note_examen

Les matières et leurs coefficients sont :

  • Mathématiques (4),
  • Physique (4),
  • Français (2),
  • Anglais (2),
  • SVT (3),
  • Sport (2).

Pour chaque matière, il y a deux notes : Note de contrôle et Note d’examen.

Partie 1 : Calcul des Moyennes

Q1 : Calculer la moyenne par matière pour un élève

  • Executer deux fois le programme ./prog en redirigeant les sorties vers les fichiers notes_S1.txt et notes_S2.txt pour obtenir des notes différents pour les deux semestres.
  • Écrire un script shell calcul_moyennes_eleve.sh qui prends en entrée le nom d’un élève et qui :
    • Affiche les notes de cet élève,
    • Calcule la moyenne pour chaque matière de cet élève pour les deux semestres suivant la formule
\[ Moyenne (matière) = Note\_Examen \times 0.6 + Note\_Contrôle \times 0.4 \]

Indication

pour récupérer les notes de contrôle et d’examen vous pouvez utiliser :

math1=$(grep "$Nom" "$input_file" | cut -d' ' -f3)
math2=$(grep "$Nom" "$input_file" | cut -d' ' -f4)

  • Proposer un script calcul_moyennes_Semestre.sh pour calculer la moyenne pour chaque matière de tous les élèves.

Indication

Exemple de script pour Parcourir chaque ligne du fichier

#!/bin/bash
# Fichier contenant les données des élèves
input_file="notes.txt"
# Parcourir chaque ligne du fichier
while read -r line; do
name=$(echo "$line" | cut -d' ' -f1)
# Afficher la ligne
echo "Ligne lue : $line"
done < "$input_file"

  • Sauvegarde les résultats dans deux fichiers :

    • moyenne_par_matiere_S1.txt (pour le premier semestre).
    • moyenne_par_matiere_S2.txt (pour le deuxième semestre).

Q2 : Calculer la moyenne semestrielle pour chaque élève

  • Écrire le script calcul_semestrielles_eleve.sh qui prends en entrée le nom d’un élève et le semestre et qui calcule la moyenne générale de cet élève pour le premier semestre ou le deuxième semestre selon les paramètres entrées (en tenant compte des coefficients des matières).
  • Proposer le script calcul_semestrielles.sh pour calculer la moyenne semestrielle pour tous les élèves.
  • Sauvegarder les moyennes semestrielles dans deux fichiers :
    • moyenne_semestrielle_S1.txt
    • moyenne_semestrielle_S2.txt.

Q3 : Calculer la moyenne annuelle pour chaque élève

  • Écrire le script calcul_annuelle_eleve.sh qui prends en entrée le nom d’un élève et calcule la moyenne annuelle en donnant un poids égal aux deux semestres.
\[ Moyenne\_Annuelle = \frac{(Moyenne\_S1 + Moyenne\_S2)}{2} \]
  • Écrire le script calcul_annuelle.sh qui calcule la moyenne annuelle de tous les élèves.
  • Sauvegarder les résultats dans un fichier moyenne_annuelle.txt.

Partie II : Analyse statistique des résultats des élèves

L'objectif de cette deuxième partie du projet est d'effectuer une analyse statistique approfondie des résultats des élèves. Au-delà des simples calculs de moyennes, cette analyse se concentrera sur la recherche des meilleures performances dans différentes catégories (par matière, par semestre, par élève), ainsi que sur le classement des élèves en fonction de leurs moyennes.

Q1 : Calcul de la meilleure note

Écrire un script meilleur_note.sh qui détermine :

  • L'élève ayant obtenu la meilleure moyenne pour le premier semestre,
  • L'élève ayant obtenu la meilleure moyenne pour le deuxième semestre,
  • L'élève ayant obtenu la meilleure moyenne annuelle (moyenne des deux semestres).

Indication

Vous pouvez utiliser les commandes sort et head. Utilisez man ou help pour obtenir plus d'informations.

Q2 : Affichage des élèves ayant une moyenne supérieure à 10

Écrire un script admis.sh qui affiche les noms des élèves ayant une moyenne annuelle supérieure ou égale à 10.

Q3 : Stats selon les notes

Écrire un script stat.sh qui effectue les calculs suivants :

  • Déterminer le nombre d'élèves ayant une moyenne annuelle supérieure strictement à 14.
  • Déterminer le nombre d'élèves ayant une moyenne annuelle comprise entre 10 et 14 (inclus).
  • Déterminer le nombre d'élèves ayant une moyenne annuelle strictement inférieure à 10.

Consignes Supplémentaires

  • Veillez à commenter vos scripts pour expliquer chaque étape.
  • Assurez-vous de gérer correctement les erreurs, par exemple :
    • Si un fichier attendu (ex. notes_S1.txt) est manquant, afficher un message d’erreur approprié.

Organisation de vos scripts et fichiers :

graph LR
  A[Projet]:::dir
  A --> B[scripts]:::dir
  B --> C[calcul_moyennes_eleve.sh]:::file
  B --> D[calcul_moyennes_semestre.sh]:::file
  B --> E[calcul_semestrielles_eleve.sh]:::file
  B --> F[calcul_semestrielles.sh]:::file
  B --> G[calcul_annuelle_eleve.sh]:::file
  B --> H[calcul_annuelle.sh]:::file
  B --> I[meilleur_note.sh]:::file
  B --> J[admis.sh]:::file
  B --> K[stat.sh]:::file
  A --> L[data]:::dir
  L --> M[notes_S1.txt]:::file
  L --> N[notes_S2.txt]:::file
  L --> O[moyenne_par_matiere_S1.txt]:::file
  L --> P[moyenne_par_matiere_S2.txt]:::file
  L --> Q[moyenne_semestrielle_S1.txt]:::file
  L --> R[moyenne_semestrielle_S2.txt]:::file
  L --> S[moyenne_annuelle.txt]:::file
classDef dir fill:#4a90e2,stroke:#2c3e50,stroke-width:1px,color:#fff,font-weight:bold;
classDef file fill:#e1e1e1,stroke:#555,stroke-width:1px,color:#000;