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

Pascal Discussion :

Gestion des enregistrements


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Gestion des enregistrements
    Salut, SVP je dois faire un programme qui gère les étudiants d'une école dans un tableau à N enregistrements. Mais le problème est que je n'arrive pas à ajouter des enregistrements, et par conséquent je ne peux pas les modifier ou les supprimer. Voici les procedures que j'ai fait :
    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
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    type TAdresse = record
                    No_Rue:integer;
                    Rue:ch30;
                    Code_postal:ch5;
                    Ville:ch30;
                    end;
     
    type TREC = record
                Nom:ch30;
                Prenom:ch30;
                No_Ins:ch14;
                Age:integer;
                Adresse:TAdresse;
                No_Tel:ch8;
                end;
     
    type TFiches = array[1..n] of TREC;
    type TFile = File of TRec;
     
    {---------------------------------------------------------------------------}
     
    procedure Saisir_Rechercher(var Nom:ch30; var Prenom:ch20);
    begin
         write('Entrer le nom de l''etudiant: ');
         readln(Nom);
         readln;
         write('Entrer le prenom de l''etudiant: ');
         readln(Prenom);
         readln;
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Rechercher(Nom:ch30; Prenom:ch20; var Fiches:TFiches; var Enr:TRec; var place:integer; NBFiches:integer);
    var i:integer;
        trouver:boolean;
    begin
         trouver:=false;
         i:=1;
         place:=0;
         while(i<=NBFiches) and (not trouver) do
         if (Fiches[i].Nom=Nom) And (Fiches[i].Prenom=Prenom)
            then
                begin
                    trouver:=True;
                    place:=i;
                    writeln(Fiches[i].Nom);
                    writeln(Fiches[i].Prenom);
                    writeln(Fiches[i].No_Ins);
                    writeln(Fiches[i].Age);
                    writeln(Fiches[i].Adresse.No_Rue);
                    writeln(Fiches[i].Adresse.Rue);
                    writeln(Fiches[i].Adresse.code_postal);
                    writeln(Fiches[i].Adresse.ville);
                    writeln(Fiches[i].No_Tel);
                end
            else
                begin
                     i:=i+1;
                end;
         if(place=0) then begin
                               writeln('Cet etudiant ne se trouve pas sur la liste');
                          end
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Saisir_Modifier(var Nom:ch30; var Prenom:ch20);
    begin
         write('Entrer le nom de l''etudiant: ');
         readln(Nom);
         readln;
         write('Entrer son prenom: ');
         readln(Prenom);
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Modifier(Nom:ch30; Prenom:ch20; Var Fiches:TFiches; var NBFiches:integer);
    var place,i:integer;
    begin
         Rechercher(Nom, Prenom, Fiches, Enr, Place, NBFiches);
         if place <> 0 then begin
                               writeln('Ancien enregistrement:');
                               write('Nom: ');
                               writeln(Fiches[i].nom);
                               readln;
                               write('Prenom: ');
                               writeln(Fiches[i].prenom);
                               readln;
                               write('Nø d''inscription: ');
                               writeln(Fiches[i].No_Ins);
                               readln;
                               write('Age: ');
                               writeln(Fiches[i].Age);
                               readln;
                               writeln('Adresse:');
                               write(' > Nø de la rue: ');
                               writeln(Fiches[i].Adresse.No_Rue);
                               readln;
                               write(' > Rue: ');
                               writeln(Fiches[i].Adresse.Rue);
                               readln;
                               write(' > Code postal: ');
                               writeln(Fiches[i].Adresse.Code_postal);
                               readln;
                               write('Nø de telephone: ');
                               writeln(Fiches[i].No_Tel);
                               readln;
                            end
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Saisir_Ajouter(var Enr:TRec);
    begin
         Write('Nom: ');
         Readln(Enr.Nom);
         readln;
         Write('Prénom: ');
         Readln(Enr.Prenom);
         Write('Num‚ro d''inscription: ');
         Readln(Enr.No_Ins);
         Write('Age: ');
         Readln(Enr.Age);
         Writeln('Adresse: ');
         Write('> Num‚ro de rue: ');
         Readln(Enr.Adresse.No_Rue);
         Write('> Rue: ');
         Readln(Enr.Adresse.Rue);
         Write('> Code postal: ');
         Readln(Enr.Adresse.Code_postal);
         Write('> Ville: ');
         Readln(Enr.Adresse.Ville);
         write('Numero de telephone:  ');
         Readln(Enr.No_Tel);
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Ajouter(Enr:TRec; var Fiches:TFiches;var NBFiches:integer);
    var i:integer;
    begin
         if NBFiches=0 then begin
                                 i:=1;
                            end
                       else i:=NBFiches+1;
     
         Fiches[i].nom:=Enr.nom;
         Fiches[i].prenom:=Enr.prenom;
         Fiches[i].No_Ins:=Enr.No_Ins;
         Fiches[i].Age:=Enr.Age;
         Fiches[i].Adresse.No_Rue:=Enr.Adresse.No_Rue;
         Fiches[i].Adresse.Rue:=Enr.Adresse.Rue;
         Fiches[i].Adresse.Code_postal:=Enr.Adresse.Code_postal;
         Fiches[i].Adresse.Ville:=Enr.Adresse.Ville;
         Fiches[i].No_Tel:=Enr.No_Tel;
         writeln(Fiches[i].Nom);
         NBFiches:=NBFiches+1;
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Saisir_Supprimer(var Nom:ch30; var Prenom:ch20);
    begin
         write('Donner le nom de l''etudiant a supprimer: ');
         readln(Nom);
         readln;
         write('Donner son prenom: ');
         readln(Prenom);
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Supprimer(Enr:TRec; var Fiches:TFiches; var NBFiches:integer);
    var place,i:integer;
        Rec:TRec;
    begin
         Rechercher(Nom,Prenom,Fiches,Rec,place,NBFiches);
         if(place<>0) then begin
                                for i:=place to NBFiches-1 do
                                begin
                                     Fiches[i]:=Fiches[i+1];
                                end;
                                NBFiches:=NBFiches-1;
                           end
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Permuter(var Fiches1:TRec;var Fiches2:TRec);
    var Fiches3:TRec;
    begin
         Fiches3:=Fiches1;
         Fiches1:=Fiches2;
         Fiches2:=Fiches3;
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Trier(var Fiches:TFiches; NBFiches:integer);
    var i,j:integer;
        permutation:boolean;
    begin
         permutation:=true;
         i:=1;
         while(i<=(n-1)) and (permutation) do
         begin
              permutation:=false;
              for j:=NBFiches to (i+1) do
              begin
                   if (Fiches[j].Nom<Fiches[j-1].Nom) then begin
                                                      permuter(Fiches[j], Fiches[j-1]);
                                                      permutation:=true;
                                                 end
              end;
              i:=i+1;
         end;
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Afficher_Menu_Lister;
    begin
         writeln('Liste des enregistrements');
         writeln('================================');
         writeln;
    end;
     
    {---------------------------------------------------------------------------}
     
    Procedure Lister(var Fiches:TFiches; var Enr:TRec; var NBFiches:integer);
    var i:integer;
    begin
         for i:=1 to NBFiches do
         begin
              writeln('Nom: ',Fiches[i].Nom);
              writeln('Prenom: ',Fiches[i].prenom);
              writeln('Nø d''inscription: ',Fiches[i].No_Ins);
              writeln('Age: ',Fiches[i].Age);
              writeln('Adresse:');
              writeln(' > Nø de la rue: ',Fiches[i].Adresse.No_Rue);
              writeln(' > Rue: ',Fiches[i].Adresse.Rue);
              writeln(' > Code postal: ',Fiches[i].Adresse.Code_postal);
              writeln('Nø de telephone: ',Fiches[i].No_Tel);
         end;
    end;

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    Soit dit en passant, dans ta procédure Ajouter, tu peux avantageusement remplacer le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if NBFiches=0 then begin
                                 i:=1;
                            end
                       else i:=NBFiches+1;
    par un simple
    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]

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Oui t'as raison mais c'est pas ca le probleme, le probleme c que lorsque j'ajoute un enregistrement et que je revienne au menu principal et je recherche cette enregistrement, je ne le trouve plus, il est perdu. Je sais pas est ce que le probleme se trouve dans la procedure ajouter ou dans un autre endroit.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Il y a de petites incoherences dans ton code
    -Tu pourrais nous montrer tes appels de procedure et tes declarations de variables? parce que vu comme on dirait qu'il y a trop l'utilisation de variables globales( peut etre mal gerées)
    -Pour de l'utlisation d'une seule instruction pas la peine d'utilser un bloc begin end comme ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                begin
                     i:=i+1;
                end;
    -Dans ta procédure Rechercher() je ne vois pas l'utilité de passer Fiches par adresse vu que tu n'effectues qu'une lecture sur lui et de plus tu n'utilise pas Enr;Et pour optimisation tu pourrais penser aussi à traiter le cas ou deux personnes differentes auraient le meme nom et prenom et forcement pas de meme numero d'Inscription , et veiller a verifier si le nombre de fiches ne depasse pas la taille du tableau Fiches
    Et pour finir Ecrire plutot une fonction Rechercher booléen qui renvoie true si 'etudiant trouvé et false sinon

    -Les procedures Saisir_Rechercher Saisir_Supprimer Saisir_Modifier font tous la même chose sauf que tu leurs donnes juste differents noms ,alors tu peux juste en faire une par exemple saisirReference() que tu appelles au moment venu

    -Dans la procédure Modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Procedure Modifier(Nom:ch30; Prenom:ch20; Var Fiches:TFiches; var NBFiches:integer);
    var place,i:integer;
    begin
         Rechercher(Nom, Prenom, Fiches, Enr, Place, NBFiches);
         if place <> 0 then begin
                               writeln('Ancien enregistrement:');
                               write('Nom: ');
                               writeln(Fiches[i].nom);
                               ..........
                            end
    end;
    Quand tu appelles la procedure Rechercher la variable Enr sort d'ou?Et apres tu fais un "writeln(Fiches[i].nom);" et le i n'etant initialiser a rien
    En plus tu fais aucune modification dans cette procedure comparé au nom que tu as donné a cette procedure
    -Au passage il faut aussi utiliser les fonctions quand c'est plus adapté à la situation

    Bon bref pour repondre à ta question ,si tu n'obtiens pas ce que tu desires c'est tout simplement lié a la façon dont tu gères la variable qui joue le role de NBFiches dans tout le code et vu comment tu l'utilses dans le differentes procedures s'il vaut 0 alors tu te retrouvera a ajouter toujours qu'un seul etudiant et ne pas le retrouver pas la suite puisque la fiche est vide

    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

Discussions similaires

  1. Gestion des enregistrements sur crystal reports
    Par abdelkifa dans le forum Débuter
    Réponses: 2
    Dernier message: 03/01/2009, 14h55
  2. Gestion internet des enregistrements d'une base sur un serveur
    Par Monbasinstinct dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/07/2007, 00h28
  3. [ADO][PostError] gestion des erreurs d'enregistrement
    Par aityahia dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/05/2006, 01h11
  4. Dbase4 : Gestion des enregistrements
    Par alainvh dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2006, 14h23
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

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