IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Gestion des notes d'étudiants


Sujet :

Turbo Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Gestion des notes d'étudiants
    Bonjour ! Je suis débutant en Pascal et je voudrais créer un programme qui gère les notes et les étudiants. Voici le programme en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
     
    program gestion_des_notes;
    uses Crt;
    label 1;
    type matiere=record
           nom_m:string[20];
           coef:integer;
           note_cc:real;
           note_sn:real;
           note_fin:real;
         end;
    type Tdate=record
           jour: 1..31;
           mois: 1..12;
           annee:1980..1998;
         end;
    type etudiant=record
            nom:string[20];
            prenom:string[20];
            sexe:char;
            naissance:Tdate;
            matricule:string[7];
            note:array[1..7] of matiere;
          end;
     
     
    var
        etud: array[1..60] of etudiant;
        ok : boolean;
        s : string;
        n,g,H,a,err,nbre_etud_a_traiter,i,j,y,u :integer;
        fichier1: FILE OF etudiant;
        fichier2: FILE OF etudiant;
        fichier3: FILE OF etudiant;
     
    procedure AfficheMenu;
            begin
               1: TextColor(11);
                writeln('-----------------------------------| MENU |------------------------------------');
                TextColor(10);
                writeln('                   15- Enregistrer un etudiant');
                writeln('                   16- Entrer le nom d''une matiere pour vos operations');
                writeln('                   17- Lister les etudiants par ordre alphabatique');
                writeln('                   18- Lister les etudiants par ordre de merite');
                writeln('                   19- Ajouter 1 aux etudiants dont les notes sont ');
                writeln('                   comprisent entre 3 et 9');
                writeln('                   20- Ajouter 1.5 aux etudiants dont les notes sont ');
                writeln('                   comprisent entre 10 et 14');
                writeln('                   21- Ajouter 2 aux etudiants dont les notes sont ');
                writeln('                   superieures ou egales a 15');
                writeln('');
                writeln('Faites votre choix: ');
                   repeat
                   writeln('Vous devez faire un choix compris entre 15 et 21: ');
                   readln(s);
                   val(s,n,err);
                   if ((err=0) and (n>=15) and (n<=21)) then ok:=true;
                   until ok ;
     
                   CLrScr;
            end;
     
    procedure AfficheEntete;
            begin
                  TextColor(11);
                  writeln('-------------------GESTION DES NOTES D''ETUDIANTS DE LA GL1B--------------------');
                  TextColor(9);
                  writeln('------------------------------LISTE DES MATIERES--------------------------------');
                  TextColor(9);
                  writeln('                   1- PASCAL                       8-  CHINOIS          ');
                  writeln('                   2- ALGORITHMIQUE                9-  CISCO ');
                  writeln('                   3- ANALYSE                      10- C. LOGIQUE');
                  writeln('                   4- ALGEBRE                      11- E. ECRITE');
                  writeln('                   5- ANGLAIS                      12- SPORT');
                  writeln('                   6- COMPTABILITE                 13- ARITHMETIQUE');
                  writeln('                   7- E. ECONOMIQUE                14- A. DES ORDINATEURS');
            end;
     
    procedure creerEtudiant(var fichier1dup: file of etudiant);
     
         begin
           assign(fichier1dup,'F:\etudiants.txt');
           rewrite(fichier1dup);
           writeln('Entrer le nombre d''etudiants a enregistrer (60 maxi)');
           readln(nbre_etud_a_traiter);
            a:=0;
           for i:= 1 to nbre_etud_a_traiter do
               begin
                   writeln('Entrez le nom de l''etudiant N° ',i,' : ');
                   readln(etud[i].nom);
                   writeln('Entrez le prenom de ',etud[i].nom,' : ');
                   readln(etud[i].prenom);
                   writeln('Entrez le sexe de ',etud[i].nom,' (M pour masculin, F pour feminin) : ');
                   readln(etud[i].sexe);
                   writeln('Entrez la date de naissance : ');
                   writeln('Jour : ');
                   readln(etud[i].naissance.jour);
                   writeln('Mois : ');
                   readln(etud[i].naissance.mois);
                   writeln('Annee : ');
                   readln(etud[i].naissance.annee);
                   writeln('Entrez son matricule : ');
                   readln(etud[i].matricule);
                   writeln('A present veuillez entrez les notes de ',etud[i].nom,' dans les differentes matieres : ');
                   for j:=1 to 2 do
                     begin
                         writeln('Nom de la',j,'eme matiere  : ');
                         readln(etud[i].note[j].nom_m);
                         writeln('Coefficient de la matiere : ');
                         readln(etud[i].note[j].coef);
                         writeln('Note de controle continu : ');
                         readln(etud[i].note[j].note_cc);
                         writeln('Note de session normale : ');
                         readln(etud[i].note[j].note_sn);
                     end;
                     seek(fichier1dup,a);
                     write(fichier1dup,etud[i]);
                     a:=a+1;
               end;
           close(fichier1dup);
         end;
     
     
    procedure afficheEtudiant(var fichier1dup : file of etudiant);
     
            begin
                 reset(fichier1dup);
     
                 writeln('Liste des etudiants pre-enregistres : ');
                 y:=1;
     
                 while not (eof (fichier1dup)) do
                     begin
                         read(fichier1dup, etud[i]);
                         y:=y+1;
                     end;
               u:=y-1;
               for y:=1 to u do
                           begin
                               write(etud[i].nom,' ',etud[i].prenom,' ');
                               write(etud[i].nom);
                               readln();
                               goto 1;
                           end;
              close(fichier1dup);
           end;
     
     
    BEGIN
     
         ok:=false;
     
          AfficheEntete();
          AfficheMenu();
          CASE n OF
          15: creerEtudiant(fichier1);
          16: AfficheEtudiant(fichier1);
          ELSE writeln('Choix inexistant');
          END;
     
         readln();
    END.
    Il s'exécute mais le problème est que lorsque je fais le choix 16, la fenêtre de la console disparaît instantanément. Un autre problème c'est que le fichier etudiant.txt est créé mais rien n'est affiché à l'intérieur. Je ne sais donc pas si les données saisies sont effectivement enregistrées. Merci de votre aide.

  2. #2
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Le "goto 1;" dans la procedure afficheEtudiant me parait hautement suspect (de toute façon les "goto" en Pascal ne sont pas vraiment les bienvenus).

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 939
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 939
    Points : 5 648
    Points
    5 648
    Par défaut
    Bojour,
    Citation Envoyé par FChrisF Voir le message
    Le "goto 1;" dans la procedure afficheEtudiant me parait hautement suspect (de toute façon les "goto" en Pascal ne sont pas vraiment les bienvenus).
    C'est vrai dans TOUS les langages,

    la remarque est justifiée, avec un label qui entre direct dans une procédure, ce qui entraîne son exécution sans avoir créé ce qu'il faut dans la pile

    Pour itngaba Relis bien ton code (ce que tu as écrit, pas ce que tu penses qu'il fait), et tu verras, ton code est assez monstrueux !

    Entre autres, apprends qu'il est très déconseillé d'utiliser des variables globales, alors que tu n'as que de ça !!
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réactions déjà. Pour le label, je l'ai retiré. Et depuis lors j'ai de nouvelles erreurs de ce type qui s'affichent: "Error: parameters or result types cannot contain local type definitions. Uses a separate type definition in a type bloc " je ne sais donc pas si c'est dû à ce problème de variables globales qui sont beaucoup utilisées. Droggo, je ne comprends pas quand tu dis "monstrueux", est-ce qu'il y a des codes qui ne devraient pas figurés ? Merci encore de m'aider

  5. #5
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Citation Envoyé par itngaba Voir le message
    Et depuis lors j'ai de nouvelles erreurs de ce type qui s'affichent: "Error: parameters or result types cannot contain local type definitions. Uses a separate type definition in a type bloc "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    type etudiant_file = FILE OF etudiant;			
    ...
        fichier1: etudiant_file;
        fichier2: etudiant_file;
        fichier3: etudiant_file;
    ...
    procedure creerEtudiant(var fichier1dup: etudiant_file);
    ...
    procedure afficheEtudiant(var fichier1dup : etudiant_file);
    ...
    De toute façon, ça va planter à l'exécution dans "afficheEtudiant" (intéressez-vous particulièrement à la variable 'i' et à l'assignation du fichier).


    Question subsidiaire : comment avez-vous pu exécuter ce programme (cf. votre premier post), si vous ne pouvez pas le compiler ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ok je revérifie les procédures dès demain matin et vous tiens au courant. Je suis moi même perdu déjà sur le pourquoi ça ne compile plus. Je me dis le label y était pour quelque chose

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour ! J'ai à nouveau testé le programme et il compile sans problème. Reste ce soucis d'enregistrement effectif dans les fichiers crées et aussi de sélection d'un autre choix que le "15" dans le CASE.

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 929
    Points : 59 395
    Points
    59 395
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    La variable a n'a aucune utilité dans la procédure creerEtudiant : l'écriture dans le fichier se fait séquentiellement, et le pointeur de fichier est automatiquement déplacé après l'écriture d'un enregistrement, ce qui rend inutile l'utilisation de seek.
    Les variables i et j doivent être déclarées localement, et non comme variables globales.
    Pour terminer, éviter de donner l'extension ".txt" à un fichier d'enregistrements, ce qui pourrait à tort donner à penser qu'il s'agit d'un fichier texte.

    Si tu assignes le nom du fichier à ta variable fichier1dup à l'intérieur de la procédure creerEtudiant, comment ce nom pourrait-il être connu par la procédure afficheEtudiant ? Mets plutôt assign(fichier1,'F:\etudiants.dat'); dans ton programme principal.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut je reviens avec un autre code sur le même sujet. J'ai du abandonner les fichiers parce que je rencontrais beaucoup de petit soucis avec eux.

    Sur ce nouveau code (que vous pouvez tester pour mieux comprendre), je voudrais créer déjà certains étudiants donc le programme pourra afficher les informations dès son exécution. Ce qu'il fait en ce moment, c'est de permettre à l'utilisateur de pouvoir entrer des étudiants et de faire des traitements avec eux. Biensûr a la fin (dès que le fenêtre console est fermée), toutes ces informations sont perdues.

    Ainsi je voudrais que dès le lancement de mon programme, certains étudiants soient déjà affichés au sous menu "lister les étudiants" et que par la suite on soit capable de faire tous les traitements nécessaires, au même titre que les étudiants entrés par l'utilisateur. Merci de votre aide...


Discussions similaires

  1. [MCD] gestion des notes de scolarite
    Par lilia_dream dans le forum Schéma
    Réponses: 60
    Dernier message: 21/04/2017, 11h39
  2. [Turbo Pascal] [Débutant] Gestion des notes des élèves d'une classe
    Par bigamine5 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/02/2009, 12h26
  3. [Modèle Relationnel] Faire la gestion des notes des elèves sous access
    Par xfabi dans le forum Schéma
    Réponses: 9
    Dernier message: 01/01/2009, 09h44
  4. gestion des notes
    Par info_sara dans le forum Langage
    Réponses: 5
    Dernier message: 26/12/2008, 13h48
  5. Formulaire de gestion des notes
    Par info_sara dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2008, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo