bonjour ,
je n'arrive pas à trouver ce qui cause le problème de supprimer
j'ai crée une procédure pour supprimer un élément en utilisant le num_id dans mon programme mais la fonction supprimée ne fonctionne pas .
quelqu'un pourrait m'aider ?
merci d'avance

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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
 
program exercice2;
uses crt;
type date = record
          jj:integer;
          mm:integer;
          annee:integer;
     end;
 
    ouvrage = record
            num_isbn:integer;
            titre:string;
            annee:integer;
            paru:integer;
            maison_edition:string;
    end;
 
    personne = record
         num_id:integer;
         nom:string[20];
         prenom:string[15];
         nation:string[10];
         nombre_ouvrage : integer;
         list_ouvr:ouvrage;
    end;
 
    {Fichier d'enregistrements}
    fic =file of personne;
 
var reponse , choix_1 , i , j, n :integer;
    choix_2  : char;
    rep:fic;
 
    {Attente d'une touche au clavier}
    PROCEDURE pause;
    begin
     writeln;writeln('Presser une touche...');
     readkey;
     clrscr;
    end;
 
 
 
{ Verification du fichier de donnees f}
PROCEDURE creationfichier(var f: fic);
var choix: integer;
begin
     writeln;
     repeat
     write(' Detruire le fichier existant (1) ou Annuler (2) ? ');
     readln(choix);
     until (choix=1) or (choix=2);
     if choix=1 then
     begin
     rewrite(f);
     close(f);
     writeln;writeln(' Ok.');     pause;
 
     end;
end;
 
//procedure pour ajouter
procedure ajouter_auteur(var f:fic);
var
   nouveau : personne;
begin
 
     {Positionnement en fin de fichier}
     reset(f);
     seek(f,filesize(f));
 
     {Saisie}
     writeln;
     with nouveau do
          begin
          writeln(' #: ', filepos(f)+1);
          write('donner le numero d''identification de l''auteur  : '); 
                readln(num_id);
 
                write('donner son nom      : '); readln(nom);
                write('donner son prenom   :'); readln(prenom);
 
 
                writeln('entrez sa nationalit',chr(130),' ');
                readln(nation);
 
                writeln('entrez le nombre d''ouvrage produit ');
                readln(nombre_ouvrage);
 
 
                   for i:=1 to  nombre_ouvrage do
                       begin
                       writeln('entrez le numero ISBN de livre :  #',i);
                       readln(list_ouvr.num_isbn);
 
                       writeln('entrez le titre #',i);
                       readln(list_ouvr.titre);
 
                       writeln('entrez l''anne',chr(130),' de parution #',i);
                       readln(list_ouvr.paru);
 
                       writeln('entrez le nom de la maison d''edition ',i);
                       readln(list_ouvr.maison_edition);
 
                       writeln;writeln;
                       {Stockage}
                       write(f,nouveau);
                       end;
                end;
end;
 
 
{Suppression d'un enregistrement à partir du numero id de l'auteur}
PROCEDURE supprimer(var f: fic);
var num:integer;
      function trouve(num:integer;var f:fic):boolean;
      var r:personne;
          tr:boolean;
          begin
          tr:=false;
          seek(f,0);
                while (not eof(f)) and (not(tr)) do
                begin
                read(f,r);
                tr:= r.num_id = num;
                end;
          trouve:=tr;
          end;
 
        Procedure suppr(num:integer;var f:fic);
        var r:personne;
            f2:fic;
        begin
          assign(f2,'ftemp.dat');
          rewrite(f2);
          reset(f);
 
               while not eof(f) do
               begin
               read(f,r);
               if r.num_id <> num then write(f2,r);
               end;
               erase(f);
               rename(f2,'auteur.dat');
        end;
 
begin
      writeln('numéro ID de l''auteur');readln(num);
      reset(f);
      if trouve(num,f) then
      suppr(num,f)
      else
           begin
           writeln('numéro d''identification de cet auteur inexistant');
           readln;
           end;
     close(f);
end;
 
{Recherche dans le fichier f }
PROCEDURE recherche_annee(var f: fic);
var annee: integer;
 r: personne;
 c: integer;
begin
  writeln;
  write('Entrez l''anne',chr(130),' de l''auteur  : '); readln(annee);
  {Parcours de f avec affichage des auteurs}
  writeln;
  reset(f);
  c:=0;
 while not eof(f) do
       begin
        read(f,r);
             if (r.date_nais.annee = annee ) or (r.date_dec.annee = annee )  then
                         begin
                         writeln('======================================================================================');
                         writeln(filepos(f),')  NOM : ', r.nom,' PREONOM:  ', r.prenom,' NATIONALITE ', r.nation, ' NOMBRE D''OUVRAGES : ',r.nombre_ouvrage );
                         c:=c+1;
                         end;
             end;
        close(f);
     if c=0 then writeln('Pas de correspondance , Veuillez essayer un autre ...');
     pause;
end;
 
 
 
 
 
 
 
//pour l'affichage du sous menu 2
procedure affichage_sm_2();
begin
    clrscr;
 
    writeln('OPERATIONS SUR LA BASE***');
    writeln('a: liste des auteurs d''un etat donne');   
    writeln('e: supprimer un auteur ');
    writeln('QUE VOULEZ VOUS FAIRE ?');
 
 
    readln(choix_2);
          case choix_2 of
          'a':begin
              clrscr;
              recherche_annee(rep);
              end;
 
 
            'e':begin
                clrscr;
                supprimer(rep);
                end;
          end;
end;
 
 
 
{Programme principal}
begin
  { Initialisations}
     assign(rep,'auteur.dat');
    //menu
    repeat
    clrscr;
    writeln;
    gotoxy(13,03);  
       writeln('---------------------------------------------------------');
       for j:=4 to 22 do  
       begin  
         gotoxy(13,J);  
         writeln('-');  
         gotoxy(70,j);  
         writeln('-');  
       end;
    gotoxy(20,7);
    writeln('**Menu **************************** AUTEURS **');
    gotoxy(20,11);
    writeln('1:** Creation de la base    ');
    gotoxy(20,13);
    writeln('2:** Operations sur la base ');
    gotoxy(20,15);
 
    writeln(' **Que voulez vous faire ? (1,2) **');
    gotoxy(13,23);
    writeln('---------------------------------------------------------');
    gotoxy(17,19);
    readln(choix_1);
 
    case choix_1 of
                1:begin
                clrscr;
                creationfichier(rep);
                      writeln('entrez le nombre d''enregistrement a effectuer');
                      readln(n);
                      for i:= 1 to n do
                             begin
                             ajouter_auteur(rep);
                             end;
                      end;
 
                2:begin
                affichage_sm_2();
                end;
 
     end;
 
     until choix_1 = 0 ;
     readln;
end.