Bonjour à tous,
Actuellement étudiant, je dois faire un programme Cobol qui gère un aérodrome pour pour mon projet.
Le but du code suivant est la gestion des pilotes (ajout/suppression/modification).
J'ai un problème lors de l'ajout des pilotes.
Une fois un pilote créé, il faut lui assigné un type d'appareil.
Si le type existe, alors on met a jour le fichier de correspondance.
S'il n'existe pas, on ajoute le type dans le fichier gérant les types, et on fait la mise à jour de la table.
Mon problème vient au moment ou je vérifie l'existence du type dans le fichier ftyp.dat. (dans le paragraphe AJOUTYPE)
Dans tous les cas l'enregistrement est trouvé, et ce, même si le fichier n'exite pas.
Voici le code du sous programme qui gère la gestion des pilotes :
Voici le code du programme principale :
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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. F3. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FPILOT ASSIGN TO "fpilot.dat" ORGANIZATION INDEXED ACCESS MODE IS RANDOM RECORD KEY F-PIL-NUMPIL. SELECT FVISIT ASSIGN TO "fvisit.dat" ORGANIZATION INDEXED ACCESS MODE IS RANDOM RECORD KEY F-VIS-NUMVISIT. SELECT FTYP ASSIGN TO "ftyp.dat" ORGANIZATION INDEXED ACCESS MODE IS RANDOM RECORD KEY F-TYP-NUMTYP. SELECT FTABL ASSIGN TO "ftabl.dat" ORGANIZATION INDEXED ACCESS MODE IS RANDOM RECORD KEY TABL ALTERNATE RECORD KEY F-TAB-CODPIL WITH DUPLICATES ALTERNATE RECORD KEY F-TAB-CODTYP WITH DUPLICATES. DATA DIVISION. FILE SECTION. FD FPILOT. 01 PILOTE. 02 F-PIL-NUMPIL PIC 999. 02 F-PIL-NOM PIC X(20). 02 F-PIL-PRENOM PIC X(10). 02 F-PIL-ADRESSE PIC X(50). 02 F-PIL-NBHVOL PIC 9(6). 02 F-PIL-ETATPIL PIC AAA. FD FVISIT. 01 VISITE. 02 F-VIS-NUMVISIT PIC 999. 02 F-VIS-DATEVISIT PIC X(10). 02 F-VIS-RESULTAT PIC A. 02 F-VIS-TYPVISIT PIC A. 02 F-VIS-CODOBJ PIC 999. FD FTYP. 01 TYPAVION. 02 F-TYP-NUMTYP PIC XX. 02 F-TYP-DESIGN PIC X(20). 02 F-TYP-TARIF PIC 9(3)V99. FD FTABL. 01 TABL. 02 F-TAB-CODPIL PIC 999. 02 F-TAB-CODTYP PIC XX. WORKING-STORAGE SECTION. * Variables générales 77 W-ENDPROG PIC X. 77 W-VALID PIC X. 77 W-CHOICE PIC X. 77 W-TEST PIC X. 77 W-I PIC 99. 77 W-ATTENTE PIC X. * Variables liées à l'ajout de pilotes 77 W-REP PIC X. 77 W-VALIDREP PIC X. 77 W-CPTESSAISREP PIC 9. 77 W-EXIT PIC X. 77 W-ENDFPIL PIC X. 77 W-DERNUMVISIT PIC 999. 77 W-TYPAPP PIC XX. 77 W-TYPETROUVE PIC X. * Variables définissant les paramètres d'affichage de la fenêtre 77 W-LIGNEERREUR PIC 99 VALUE 21. 77 W-LIGNEINVITE PIC 99 VALUE 22. 77 W-LIGNECHOIX PIC 99 VALUE 23. PROCEDURE DIVISION. INIT. * ouverture des fichiers OPEN INPUT-OUTPUT FPILOT OPEN INPUT-OUTPUT FVISIT OPEN INPUT-OUTPUT FTYP OPEN INPUT-OUTPUT FTABL * Il est nécessaire de faire l'initialisation dans le INIT * en effet, en cas de nouvelle appel du programme, les varables * garde la valeur qu'elles avaient à la fin de l'appel précédent MOVE "F" TO W-ENDPROG MOVE "U" TO W-VALID MOVE "0" TO W-CHOICE PERFORM UNTIL W-ENDPROG = "V" CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" MOVE "U" TO W-VALID PERFORM AFF-MENU UNTIL W-VALID = "V" EVALUATE W-CHOICE WHEN "1" PERFORM AJOUTPIL WHEN "2" PERFORM MODIFPIL WHEN "3" PERFORM SUPPRPIL WHEN "Q" MOVE "V" TO W-ENDPROG WHEN OTHER DISPLAY " Comportement anormal ! 011 " AT 0502 WITH BLANK SCREEN END-EVALUATE END-PERFORM * fermeture des fichiers CLOSE FPILOT CLOSE FVISIT CLOSE FTYP CLOSE FTABL EXIT PROGRAM. * ------------------------------------ * * PROCEDURES DE LA GESTION DES PILOTES * * ------------------------------------ * AJOUTPIL. MOVE "N" TO W-REP MOVE 0 TO W-CPTESSAISREP MOVE "F" TO W-EXIT PERFORM UNTIL W-REP = "O" OR W-EXIT = "V" MOVE "U" TO W-VALIDREP CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" DISPLAY "--- AJOUT D'UN PILOTE ---" AT 0624 PERFORM AJOUTSAISIE PERFORM UNTIL W-VALIDREP = "V" OR W-EXIT = "V" DISPLAY "Valider ? (O/N)" AT LINE W-LIGNEINVITE AT COLUMN 02 IF W-VALIDREP = "F" THEN DISPLAY "Le choix est incorrect" AT LINE W-LIGNEERREUR AT COLUMN 02 END-IF * Saisie et vérification de la validité du choix DISPLAY "Choix : " AT LINE W-LIGNECHOIX AT COLUMN 02 ACCEPT W-REP AT LINE W-LIGNECHOIX AT COLUMN 10 IF W-REP = "O" OR W-REP = "N" THEN MOVE "V" TO W-VALIDREP ELSE COMPUTE W-CPTESSAISREP = W-CPTESSAISREP + 1 MOVE "F" TO W-VALIDREP IF W-CPTESSAISREP = 3 THEN MOVE 0 TO W-CPTESSAISREP MOVE "V" TO W-EXIT END-IF END-IF END-PERFORM END-PERFORM * Traitement de l'ajout IF W-REP = "O" THEN REWRITE PILOTE MOVE "ARL" TO F-PIL-ETATPIL PERFORM AJOUTVISIT PERFORM AJOUTYPE END-IF. * gerer la table des correspondances AJOUTSAISIE. DISPLAY "NUMERO :" AT 0810 DISPLAY "NOM : " AT 0910 DISPLAY "PRENOM : " AT 1010 DISPLAY "ADRESSE :" AT 1110 DISPLAY "NOMBRE HEURE VOL : " AT 1210 ACCEPT F-PIL-NUMPIL AT 0830 ACCEPT F-PIL-NOM AT 0930 ACCEPT F-PIL-PRENOM AT 1030 ACCEPT F-PIL-ADRESSE AT 1130 ACCEPT F-PIL-NBHVOL AT 1230. AJOUTVISIT. MOVE "F" TO W-ENDFPIL READ FVISIT NEXT AT END MOVE "V" TO W-ENDFPIL END-READ IF W-ENDFPIL = "V" THEN MOVE F-VIS-NUMVISIT TO W-DERNUMVISIT COMPUTE W-DERNUMVISIT = W-DERNUMVISIT + 1 END-IF MOVE W-DERNUMVISIT TO F-VIS-NUMVISIT MOVE FUNCTION Current-Date(1:8) TO F-VIS-DATEVISIT MOVE 1 TO F-VIS-RESULTAT MOVE "P" TO F-VIS-TYPVISIT MOVE F-PIL-NUMPIL TO F-VIS-CODOBJ WRITE VISITE. AJOUTYPE. CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" DISPLAY "--- AJOUT D'UN PILOTE ---" AT 0624 DISPLAY "--- -> gestion des type ---" AT 0724 DISPLAY "Entrer un type d'appareil SVP : " AT 1020 ACCEPT W-TYPAPP AT 1060 * recherche si W-TYPAPP existe MOVE "U" TO W-TYPETROUVE MOVE W-TYPAPP TO F-TYP-NUMTYP READ FTYP INVALID KEY MOVE "F" TO W-TYPETROUVE NOT INVALID KEY MOVE "V" TO W-TYPETROUVE END-READ DISPLAY "w-typetrouve : " W-TYPETROUVE IF W-TYPETROUVE = "V" THEN MOVE F-PIL-NUMPIL TO F-TAB-CODPIL MOVE W-TYPAPP TO F-TAB-CODTYP WRITE TABL DISPLAY "Mise à jour de la table" " de correspondance effectuée" AT 1220 ELSE DISPLAY "Ce type n'existe pas, il sera créé" AT 1220 PERFORM CREATYPE END-IF DISPLAY "Appuyez sur entrer pour continuer" AT LINE W-LIGNECHOIX AT COLUMN 02 ACCEPT W-REP AT LINE W-LIGNECHOIX AT COLUMN 10. CREATYPE. CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" DISPLAY "--- AJOUT D'UN PILOTE ---" AT 0624 DISPLAY "--- -> gestion des type ---" AT 0724 DISPLAY "--- ajout d'un type ---" AT 0824 MODIFPIL. CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" DISPLAY "--- MODIFIER D'UN PILOTE ---" AT 0624 ACCEPT W-REP SUPPRPIL. CALL "AFF-FENETRE" USING "Mise à jour pilotes" CANCEL "AFF-FENETRE" DISPLAY "--- SUPPRESSION D'UN PILOTE ---" AT 0624 ACCEPT W-REP AFF-MENU. DISPLAY "MENU" AT 0638 DISPLAY "Ajouter un pilote 1" AT 0824 DISPLAY "Modifier un pilote 2" AT 0924 DISPLAY "Supprimer un pilote 3" AT 1024 DISPLAY "Revenir au menu principal Q" AT 1624 DISPLAY "Que voulez-vous faire ?" AT LINE W-LIGNEINVITE AT COLUMN 02 IF W-VALID = "F" THEN DISPLAY "Le choix est incorrect" AT LINE W-LIGNEERREUR AT COLUMN 02 END-IF DISPLAY "Choix : " AT LINE W-LIGNECHOIX AT COLUMN 02 ACCEPT W-CHOICE AT LINE W-LIGNECHOIX AT COLUMN 10 IF W-CHOICE = "1" OR W-CHOICE = "2" OR W-CHOICE = "3" OR W-CHOICE = "Q" THEN MOVE "V" TO W-VALID ELSE MOVE "F" TO W-VALID END-IF
et enfin, le code de la procèdure d'affichage AFF-FENETRE, qui ne sert qu'à faire joli :
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 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. Principal. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. WORKING-STORAGE SECTION. *Variables 77 W-FINPROG PIC X VALUE "F". 77 W-VALIDE PIC X VALUE "U". 77 W-CHOIX PIC X VALUE "0". 77 W-TEST PIC X. 77 W-CPTESSAIS PIC 9. *Variable contenant une date AAMMJJ 01 W-DATEJOUR. 03 AA PIC 99. 03 MM PIC 99. 03 JJ PIC 99. *Variables définissant les paramètres d'affichage de la fenêtre 77 W-LIGNEERREUR PIC 99 VALUE 21. 77 W-LIGNEINVITE PIC 99 VALUE 22. 77 W-LIGNECHOIX PIC 99 VALUE 23. PROCEDURE DIVISION. *Paragraphe principal du logiciel de gestion de l'aéroclub. MAIN. PERFORM UNTIL W-FINPROG = "V" MOVE "U" TO W-VALIDE MOVE 0 TO W-CPTESSAIS PERFORM AFF-MENU UNTIL W-VALIDE = "V" OR W-CPTESSAIS > 2 EVALUATE W-CHOIX WHEN "0" CALL "F0" WHEN "1" CALL "F1" WHEN "2" CALL "F2" WHEN "3" CALL "F3" WHEN "4" CALL "F4" WHEN "5" CALL "F5" WHEN "6" CALL "F6" WHEN "7" CALL "F7" WHEN "Q" MOVE "V" TO W-FINPROG WHEN OTHER DISPLAY " Fin du programme : Le choix a été " "incorrect 3 fois de suite " AT 0502 WITH BLANK SCREEN MOVE "V" TO W-FINPROG END-EVALUATE END-PERFORM STOP RUN. *Application de la charte graphique déterminée dans le sujet AFF-MENU. CALL "AFF-FENETRE" USING "Fonction principale". DISPLAY "MENU" AT 0638 DISPLAY "Liste visites à faire 0" AT 0824 DISPLAY "Dépôt de plan de vol 1" AT 0924 DISPLAY "Enregistrement vols 2" AT 1024 DISPLAY "Mise à jour pilotes 3" AT 1124 DISPLAY "Mise à jour avions 4" AT 1224 DISPLAY "Récapitulatifs avions 5" AT 1324 DISPLAY "Récapitulatifs pilotes 6" AT 1424 DISPLAY "Facturation pilotes 7" AT 1524 DISPLAY "Quitter Q" AT 1624 DISPLAY "Que voulez-vous faire ?" AT LINE W-LIGNEINVITE AT COLUMN 02 IF W-VALIDE = "F" THEN DISPLAY "Le choix est incorrect" AT LINE W-LIGNEERREUR AT COLUMN 02 END-IF *Saisie et vérification de la validité du choix DISPLAY "Choix : " AT LINE W-LIGNECHOIX AT COLUMN 02. ACCEPT W-CHOIX AT LINE W-LIGNECHOIX AT COLUMN 10. IF (W-CHOIX >= 0 AND W-CHOIX <=7) OR W-CHOIX = "Q" THEN MOVE "V" TO W-VALIDE ELSE COMPUTE W-CPTESSAIS = W-CPTESSAIS + 1 MOVE "F" TO W-VALIDE END-IF.
Merci d'avance pour votre aide.
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 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. AFF-FENETRE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. WORKING-STORAGE SECTION. *Variable contenant une date AAMMJJ 01 W-DATEJOUR. 03 AA PIC 99. 03 MM PIC 99. 03 JJ PIC 99. 77 W-NOMFONCTION PIC X(30). LINKAGE SECTION. *Paramètre du sous programme : le nom de la fonction à afficher en haut à droite 01 P-NOMFONCTION PIC X(30). PROCEDURE DIVISION USING P-NOMFONCTION. INIT. *Pour éviter de voir des morceaux d'ancien paramètres, on fait subir *un prétraitement au paramètre. Sans ces lignes, on pourrait avoir *comme affichage : "Plan de volest" pour "Plan de vol". MOVE SPACES TO W-NOMFONCTION. MOVE P-NOMFONCTION TO W-NOMFONCTION. MOVE SPACES TO P-NOMFONCTION. *Récupération de date sous la forme JJ/MM/AAAA ACCEPT W-DATEJOUR FROM DATE. *Barre de titre DISPLAY "------------------------------------------------------", "--------------------------" AT 0101 WITH BLANK SCREEN DISPLAY "Aujourd'hui : ",JJ,"/",MM,"/",AA AT 0306 DISPLAY "AEROCLUB" AT 0336 DISPLAY W-NOMFONCTION AT 0355 DISPLAY "------------------------------------------------------", "--------------------------" AT 0401 *Délimitation de la dernière zone : erreur, invite et choix DISPLAY "------------------------------------------------------", "--------------------------" AT 1901 EXIT PROGRAM. END PROGRAM AFF-FENETRE.
Partager