IFT1166 – TRAVAIL PRATIQUE #1 – 24 Septembre 1999

Gestion d’une base de données à partir d’une liste

Mohamed Lokbani

 

LA DATE LIMITE EST LE 17 OCTOBRE 1999 MINUIT, avec une pénalité de 2 points par jours de retard.

À faire seul ou en équipe de deux.

BUT

Ce TP a pour but de vous faire pratiquer les matières suivantes :

 

  1. Description du problème

Nous aimerions gérer les dossiers de résultats des étudiants inscrits au cours IFT1166.

Le dossier d’un étudiant comporte son identité (nom et prénom), le programme auquel il est inscrit, son code permanent, les notes recueillies pour les travaux pratiques (tp1, tp2 et tp3), et pour les examens (intra et final) ; sa note finale (sur 100) et l’état de son passage au cours IFT1666 (succès ou échec).

Un dossier a l’allure suivante :

PAUL ALAIN LIBRE PAUA12106601 8 11.5 10.5 12 15 42 ECHEC

Ainsi PAUL (nom) ALAIN (prénom) est inscrit au programme LIBRE. Son code permanent est PAUA12106601. Ses notes sont : au tp1 8 (sur 10), au tp2 11.5 (sur 15) au tp3 12 (sur 15), la note d’intra 12 (sur 20) et le final 15 (sur 40). Sa note totale est de 42/100. Il a donc échoué à ce cours d’où ECHEC.

On suppose qu'un nom est composé d'un seul mot, de même pour le prénom.

Sur cette base de données, il vous est demandé d'implanter les fonctionnalités suivantes::

Le calcul de la note totale d’un étudiant est effectué comme suit :

Si (intra + final) ³ 30 alors

note = intra + final + tp1 + tp2 + tp3

sinon

note = intra + final + (tp1+tp2+tp3)/2

Un étudiant réussit le cours s’il arrive à obtenir plus de 50 dans la valeur totale de la note, et dans ce cas le champ "etat" sera " SUCCES " sinon il contiendra " ECHEC "

Le nouveau est inséré dans la liste selon l'ordre d'arriver.

La moyenne du cours est la somme du champ "note" calculé pour chaque étudiant divisée par le nombre d’étudiants inscrits au cours.

Si la liste ne contient aucune élément, affichez "la liste est vide".

  1. Travail demandé

Vous avez à écrire un programme en C++, permettant la gestion des dossiers du cours IFT1166.

Vous devez remettre deux fichiers :

(s) dénote ce que le système va afficher comme réponse à votre requête.

(e) dénote les informations que vous entrez au clavier, pour être pris en compte par le programme.

Le programme démarre avec le menu suivant :

bdd cours ift1166

1 - ajouter un etudiant a la liste

2 - enlever un etudiant de la liste

3 - afficher le dossier d'un etudiant donne

4 - afficher la liste des recus, triee par noms

5 - afficher la liste des recales, triee par noms

6 - afficher des statistiques sur le cours

7 - afficher la liste des inscrits triee par noms

8 - afficher la liste des inscrits triee par notes

9 - afficher la liste originale

10 - quitter ce menu

Entrez votre choix:

Les fonctionnalités sont comme suit :

1 - ajouter un etudiant a la liste

(e) 1

(s)

(s) vous allez ouvrir un nouveau dossier et introduire les informations necessaires :

(s)

(s) nom de l'etudiant & son prenom

(e) LEPAPE BERNARD

(s) programme d’etude

(e) LIBRE

(s) code permanent

(e) LEPB12052345

(s) note tp1 (sur 10), tp2 (sur 15) & tp3 (sur 15)

(e) 4 7 10

(s) note intra (sur 20) & note finale (sur 40)

(e) 10 20

(s) dossier LEPAPE BERNARD a ete cree

Remarquez que les entrées sont en majuscules. Le programme calcule lui-même la note finale et actualise le champ "etat" (ECHEC ou SUCCES) de l’étudiant.

Puis le système réaffiche le menu.

2 - enlever un etudiant de la liste

Deux cas peuvent se présenter:

(e) 2

(s)

(s) entrez le nom a retirer de la base

(e) PAUL

(s) dossier PAUL a ete retire

Puis le système réaffiche le menu.

Sinon

(e) 2

(s)

(s) entrez le nom a retirer de la base

(e) PAUL

(s) dossier de PAUL est inexistant

Puis le système réaffiche le menu.

3 - afficher le dossier d'un etudiant donné

Deux cas peuvent se présenter:

(e) 3

(s)

(s) entrez le nom a rechercher

(e) PAUL

(s) dossier de PAUL est inexistant

Puis le système réaffiche le menu

(e) 3

(s)

(s) entrez le nom a rechercher

(e) LEPAPE

(s)

(s) dossier de LEPAPE

(s)

(s) NOM PRENOM PROGRAMME CODE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) LEPAPE BERNARD LIBRE LEPB12052345 4 7 10 10 20 51 SUCCES

entre chaque champ, il a été inséré une tabulation

Puis le système réaffiche le menu.

4 - afficher la liste des recus, triee par noms

(e) 4

(s)

(s) Etudiant(s) ayant reussi au cours

(s)

(s) NOM PRENOM PROGRAMME CODE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) LEPAPE BERNARD LIBRE LEPB12052345 4 7 10 10 20 51 SUCCES

(s) LORI MARC PHYSIQUE LORM03059876 10 15 15 15 25 80 SUCCES

(s) MICHEL NATHALIE MATHEMATIQUE MICN22610897 9 12.5 12.5 10 20 64 SUCCES

entre chaque champ, il a été inséré une tabulation

Puis le système réaffiche le menu.

5 - afficher la liste des recales, triee par noms

(e) 5

(s)

(s) Etudiant(s) ayant coule au cours

(s)

(s) NOM PRENOM PROGRAMME MATRICULE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) ABEL SOPHIE BIOLOGIE ABEN07553675 3 4 5 6 7 19 ECHEC

entre chaque champ, il a été inséré une tabulation

Puis le système réaffiche le menu.

6 - afficher des statistiques sur le cours

(e) 6

(s)

(s) Les statistiques recueillies sur ce cours sont comme suit …

(s)

(s) Nombre d’inscrits : 50

(s) Taux de Reussite : 85%

(s) Taux d’Echec : 15%

(s) Moyenne du groupe : 75/100

Puis le système réaffiche le menu.

Les chiffres de ces statistiques sont cités à titre d'exemple.

7 - afficher la liste des inscrits triee par noms

(e) 7

(s)

(s) NOM PRENOM PROGRAMME MATRICULE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) ABEL SOPHIE BIOLOGIE ABES25578432 3 4 5 6 7 19 ECHEC

(s) LEPAPE BERNARD LIBRE LEPB12052345 4 7 10 10 20 51 SUCCES

(s) LORI MARC PHYSIQUE LORM03059876 10 15 15 15 25 80 SUCCES

(s) MICHEL NATHALIE MATHEMATIQUE MICN22610897 9 12.5 12.5 10 20 64 SUCCES

entre chaque champ, il a été inséré une tabulation.

Puis le système réaffiche le menu.

8 - afficher la liste des inscrits triee par notes

 

(e) 8

(s)

(s) NOM PRENOM PROGRAMME MATRICULE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) LORI MARC PHYSIQUE LORM03059876 10 15 15 15 25 80 SUCCES

(s) MICHEL NATHALIE MATHEMATIQUE MICN22610897 9 12.5 12.5 10 20 64 SUCCES

(s) LEPAPE BERNARD LIBRE LEPB12052345 4 7 10 10 20 51 SUCCES

(s) ABEL SOPHIE BIOLOGIE ABES25578432 3 4 5 6 7 19 ECHEC

 

entre chaque champ, il a été inséré une tabulation.

Puis le système réaffiche le menu.

9 - afficher la liste originale

(e) 9

(s)

(s) NOM PRENOM PROGRAMME MATRICULE TP1 TP2 TP3 INTRA FINAL TOTAL ETAT

(s)

(s) MICHEL NATHALIE MATHEMATIQUE MICN22610897 9 12.5 12.5 10 20 64 SUCCES

(s) LORI MARC PHYSIQUE LORM03059876 10 15 15 15 25 80 SUCCES

(s) ABEL SOPHIE BIOLOGIE ABES25578432 3 4 5 6 7 19 ECHEC

(s) LEPAPE BERNARD LIBRE LEPB12052345 4 7 10 10 20 51 SUCCES

 

entre chaque champ, il a été inséré une tabulation.

Puis le système réaffiche le menu.

 

10 - quitter ce menu

quitter complètement le programme.

 

  1. Fichiers mis à votre disposition
  2. En plus des deux fichiers que vous devez remettre, vous devez utiliser les fichiers suivants pour compléter la compilation de votre programme :

     

    /u/dift1166/Sujet/tp1/libtp1.h

    contient

    la déclaration de la structure "eleve" et la définition de ses champs. Votre programme doit utiliser cette structure pour représenter un dossier d'étudiant.

    Un prototype de fonction utilisée dans le fichier libtp1.o et permettant de lire des données et les recopier vers les champs d’une structure de données.

     

    /u/dift1166/Sujet/tp1/libtp1.o

    Un fichier objet, compilé sous Linux (ne fonctionnera que sur Linux).

     

    Ce fichier contient une fonction permettant d’initialiser un tableau où chaque élément est du type "eleve" (structure). L'initialisation du tableau, vous permettra de réaliser la tache de saisie des données initiales de manière simple. D'un autre côté, elle va nous permettre de connecter à votre programme les données de test, lors de la correction de votre TP.

    Cette fonction a le prototype suivant :

    void load_data (eleve Etudiant[],int& numlistref);

    Etudiant est un tableau où chaque élément est une structure du type "eleve"

    "numlistref" est une référence à la taille du tableau après remplissage.

    Notez bien que le tableau "Etudiant" a une taille maximale de 100 éléments (ne peut contenir plus de 100 éléments du type "eleve"). A vous de vérifier que la liste ne déborde pas de la taille préalablement fixée. Il est à noter que les champs "note" et "etat" doivent être mis à jour après le chargement des données i.e voir les explications "1. description du problème: ouvrir un nouveau dossier" au début de cet énoncé.

     

    /u/dift1166/Sujet/tp1/resultat.txt

    Un fichier texte montrant le fonctionnement du système, i.e les entrées/sorties, que devrait avoir votre programme.

    Pour copier ces fichiers dans votre répertoire racine, faites comme suit:

    cp /u/dift1166/Sujet/tp1/* ~

     

  3. Compilation
  4.  

    -1- Avant de compiler votre programme inclure les lignes suivantes :

    Dans votre fichier gliste.h

    Dans la section des "include" :

    #include "libtp1.h"

     

    Dans votre fichier gliste.cpp

     

    Un commentaire au début du fichier indiquant : vos noms, prénoms & login.

    Dans la fonction "main", faites un appel de la fonction:

    load_data (Etudiant,numlistref);

    afin de remplir le tableau avec les données préparées pour vos tests.

     

    -2-

    Pour compiler, utilisez la commande:

    g++ -Wall –o gliste gliste.cpp libtp1.o

     

    les fichiers "libtp1.h" et "gliste.h" doivent se trouver dans le même répertoire que les fichiers "gliste.cpp" et "libtp1.o"

     

  5. Remise
  6. Vous devez faire deux types de remise :

    - Papier ( à glisser sous la porte de mon bureau, Pavillon André-Aisenstadt, local 2249)

    bien identifier sur le listing le cours et vos noms.

    - Électronique : dans le répertoire où est votre programme, tapez:

    remise ift1166 tp1 gliste.h gliste.cpp

    LA DATE LIMITE EST LE 17 OCTOBRE 1999 MINUIT. On enlèvera 2 points par jours de retard.

  7. Barème

Ce premier tp1 est noté sur 10 points. Nous vous conseillons de lire le contenu du fichier "resultat.txt"; sa lecture vous donnera une idée sur le fonctionnement réel du système.

 

Les points seront répartis comme suit :

Exactitude : 5 points

un programme qui ne compile pas 0/5

un programme avec des avertissements ("warnings") et qui donne les résultats escomptés 3.5

un programme avec des avertissements "warnings" mais qui fait des choses non prévues dans la spécification 0/5

Modularité : 2 points

structure de votre programme, décomposition entre .h et .cpp, décomposition en fonctions etc.

Efficience : 2 points

La manière avec laquelle vous allez coder votre programme. Comment vous allez manipuler le tableau de données? L'espace mémoire utilisé etc.

Style : 1 point

le code doit être lisible, bien indenté et commenté.

 

NOTE: L'utilisation de la fonction qsort de la librairie standard pour effectuer les tris, n'est pas permise.