Problemas con File-Status
Publicado por Lucas (1 intervención) el 04/08/2023 22:14:54
Hola estoy teniendo problemas a la hora de utilizar condicionales con los estados de File-status, pueden ir directamente al bloque al parrrafo BUSCAR-NOMBRE. La idea es que si se ingresa un titulo que no existe en el registro tire un display de ERROR, devolviendo un codigo 23 pero no siempre cumple con esa condicion a pesar de poner cualquier titulo inexistente, a veces ingresas un titulo que no esta registrado y te muestra por display un registro que no tiene nada que ver, dando una salida de tipo "00" y no deberia ser así, ayuda.
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
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
IDENTIFICATION DIVISION.
PROGRAM-ID. LIBRERIA.
AUTHOR. LUCAS GALEANO.
DATE-WRITTEN 9/7/2023.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REG-LIBROS ASSIGN TO "REGISTRO-LIBROS.DAT"
ORGANIZATION IS INDEXED
RECORD KEY IS LIBRO-ID
ALTERNATE RECORD KEY IS NOMBRE
ALTERNATE RECORD KEY IS EDITORIAL
WITH DUPLICATES
ACCESS MODE IS DYNAMIC
FILE STATUS IS FS-REGISTRO-LIBROS.
DATA DIVISION.
FILE SECTION.
FD REG-LIBROS.
01 DATOS-LIBRO.
05 LIBRO-ID PIC 999 VALUE ZEROS.
05 NOMBRE PIC X(20) VALUE SPACES.
05 EDITORIAL PIC X(20) VALUE SPACES.
05 ESTADO PIC X(12) VALUE SPACES.
*05 FECHA-INGRESO.
* 10 DIA PIC 99 VALUE ZEROS.
* 10 MES PIC X(10) VALUE SPACES.
* 10 AÑO PIC 9999 VALUE ZEROS.
* 05 FECHA-ALQUILER.
* 10 DDIA PIC 99 VALUE ZEROS.
* 10 MMES PIC X(10) VALUE SPACES.
* 10 AAÑO PIC 9999 VALUE ZEROS.
WORKING-STORAGE SECTION.
*Codigos de error del archivo.
01 FS-REGISTRO-LIBROS PIC XX.
88 ESTA-REG VALUE "00" "02".
88 N-ESTA-REG VALUE "23".
88 F-NOEXISTE-REG VALUE "35".
88 FIN-REG VALUE "10".
88 F-ABIERTO VALUE "12".
88 A VALUE "98".
88 B VALUE "97" "49" "48" "47" "46" "44" "39".
*Variables del programa.
77 CONTINUAR PIC X.
77 CONTINUAR-REG PIC X.
77 ELIMINAR-OPC PIC X.
77 BUSCAR-OPC PIC X.
77 OPC PIC X.
77 LIMPIAR PIC X(80) VALUE SPACES.
77 LIMPIAR-LINEA PIC X(80) VALUE SPACES.
77 N PIC 99.
*77 nn PIC 99.
77 AUX-ID PIC 999.
77 DESDE PIC X(20).
77 HASTA PIC X(20).
77 EXISTE PIC 9 VALUE 0.
PROCEDURE DIVISION.
DECLARATIVES.
*Estados de error del archivo
FILE-ERROR SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON REG-LIBROS.
END DECLARATIVES.
*LOGICA PRINCIPAL
MENU.
PERFORM UNTIL CONTINUAR = "N"
PERFORM LIMPIAR-PANTALLA
DISPLAY "ADMINISTRADOR DE CATALOGO" AT LINE 1 COL 1 WITH
REVERSE-VIDEO
DISPLAY " " AT LINE 3 COL 1
DISPLAY "1.Registrar, Editar, Remplazar libro" AT LINE 4
COL 1
DISPLAY "2.Eliminar libro" AT LINE 5 COL 1
DISPLAY "3.Ver catalogo" AT LINE 6 COL 1
DISPLAY "4.Crear nuevo registro" AT LINE 7 COL 1
DISPLAY "5.Buscar libro" AT LINE 8
DISPLAY "0.Salir" AT LINE 9 COL 1
DISPLAY " " AT LINE 10 COL 1
DISPLAY "Ingrese tecla ( )" AT LINE 11 COL 1 WITH
REVERSE-VIDEO
ACCEPT OPC AT LINE 11 COL 16 WITH
PROMPT UNDERLINE
EVALUATE OPC
WHEN 1 PERFORM REGISTRAR-LIBRO
WHEN 2 PERFORM ELIMINAR-LIBRO
WHEN 3 PERFORM VER-LIBROS
WHEN 4 PERFORM CREAR-ARCHIVO
WHEN 5 PERFORM BUSCAR-LIBRO
WHEN 0 MOVE "N" TO CONTINUAR
END-EVALUATE
END-PERFORM.
CLOSE REG-LIBROS.
STOP RUN.
REGISTRAR-LIBRO.
MOVE SPACES TO DATOS-LIBRO.
PERFORM LIMPIAR-PANTALLA.
MOVE "S" TO CONTINUAR-REG.
*************************************************************************
*INTERFAZ MENU DE INGRESO DE DATOS
*************************************************************************
DISPLAY "Numero de serie:" AT LINE 1 COL 1.
DISPLAY "Nombre:" AT LINE 2 COL 1.
DISPLAY "Editorial:" AT LINE 3 COL 1.
DISPLAY "Estado:" AT LINE 4 COL 1.
DISPLAY
"presione ENTER sin ingresar datos para salir al menu"
AT LINE 7 COL 12
WITH REVERSE-VIDEO.
DISPLAY "Numero de serie :" AT LINE 1 COL 1 WITH
REVERSE-VIDEO.
ACCEPT LIBRO-ID WITH PROMPT UNDERLINE UPDATE AT LINE 1
COL 25.
IF LIBRO-ID EQUALS 000 MOVE "N" TO CONTINUAR-REG END-IF.
IF CONTINUAR-REG EQUALS "S"
PERFORM ABRIR-IO-ARCHIVO
READ REG-LIBROS END-READ
IF ESTA-REG THEN
DISPLAY NOMBRE AT LINE 2 COL 25
DISPLAY EDITORIAL AT LINE 3 COL 25
DISPLAY ESTADO AT LINE 4 COL 25
END-IF
DISPLAY "Numero de serie :" AT LINE 1 COL 1
DISPLAY LIBRO-ID AT LINE 1 COL 25
DISPLAY "Nombre :" AT LINE 2 COL 1 WITH REVERSE-VIDEO
ACCEPT NOMBRE AT LINE 2 COL 25
DISPLAY "Nombre: " AT LINE 2 COL 1
DISPLAY NOMBRE AT LINE 2 COL 25
DISPLAY "Editorial :" AT LINE 3 COL 1 WITH REVERSE-VIDEO
ACCEPT EDITORIAL AT LINE 3 COL 25
DISPLAY "Editorial :" AT LINE 3 COL 1
DISPLAY EDITORIAL AT LINE 3 COL 25
DISPLAY "Estado :" AT LINE 4 COL 1 WITH REVERSE-VIDEO
ACCEPT ESTADO AT LINE 4 COL 25
DISPLAY "Estado :" AT LINE 4 COL 1
DISPLAY ESTADO AT LINE 4 COL 25
*************************************************************************
IF N-ESTA-REG THEN
WRITE DATOS-LIBRO END-WRITE
ELSE
REWRITE DATOS-LIBRO END-REWRITE
END-IF
IF NOT ESTA-REG THEN
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR AL REGISTRAR DATOS" AT LINE 1 COL 1
WITH BACKGROUND-COLOR 4
PERFORM CERRAR-ARCHIVO
END-IF.
VER-LIBROS.
PERFORM ABRIR-ARCHIVO-INPUT.
IF F-NOEXISTE-REG THEN
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS"
WITH BACKGROUND-COLOR 4 AT LINE 1 COL 1
DISPLAY "Presione ENTER para salir al menu"
AT LINE 7 COL 12 WITH
REVERSE-VIDEO
ACCEPT OPC AT LINE 10 COL 34
ELSE
PERFORM LIMPIAR-PANTALLA
INITIALIZE LIBRO-ID
START REG-LIBROS KEY IS >= LIBRO-ID END-START
READ REG-LIBROS NEXT RECORD END-READ
DISPLAY
"ID |TITULO |EDITORIAL |ESTADO "
WITH REVERSE-VIDEO AT LINE 1 COL 1
PERFORM VARYING N FROM 02 BY 1 UNTIL FIN-REG
DISPLAY DATOS-LIBRO AT LINE N COL 1
READ REG-LIBROS NEXT RECORD END-READ
END-PERFORM
ADD 1 TO N
DISPLAY "Presione ENTER para salir al menu"
AT LINE N COL 1 WITH
REVERSE-VIDEO
ACCEPT OPC AT LINE N COL 34
END-IF.
PERFORM CERRAR-ARCHIVO.
ELIMINAR-LIBRO.
PERFORM ABRIR-IO-ARCHIVO.
PERFORM LIMPIAR-PANTALLA.
MOVE SPACES TO DATOS-LIBRO
DISPLAY "Indique por id el libro que desea eliminar:"
WITH REVERSE-VIDEO AT LINE 1 COL 1.
DISPLAY "Presione ENTER para salir al menu"
WITH REVERSE-VIDEO AT LINE 7 COL 12.
ACCEPT LIBRO-ID AT LINE 1 COL 46 WITH PROMPT UNDERLINE UPDATE.
IF LIBRO-ID NOT EQUALS 000
PERFORM LIMPIAR-PANTALLA
START REG-LIBROS KEY IS >= LIBRO-ID
READ REG-LIBROS END-READ
IF ESTA-REG
DISPLAY
"ID |TITULO |EDITORIAL |ESTADO "
WITH REVERSE-VIDEO AT LINE 1 COL 1
DISPLAY DATOS-LIBRO AT LINE 2 COL 1
DISPLAY "ELIMINAR(1)|VOLVER(0) :" AT LINE 5 COL 1
WITH REVERSE-VIDEO
ACCEPT ELIMINAR-OPC AT LINE 5 COL 25
EVALUATE ELIMINAR-OPC
WHEN 1
DISPLAY LIMPIAR-LINEA AT LINE 10 COL 1
DELETE REG-LIBROS INVALID KEY
DISPLAY "ERROR AL ELIMINAR" AT LINE 5 COL 1
END-DELETE
DISPLAY "REGISTRO ELIMINADO CON EXITO" AT LINE 5
COL 1
WITH BACKGROUND-COLOR 2
ACCEPT OPC AT LINE 5 COL 29
WHEN 0 PERFORM ELIMINAR-LIBRO
ELSE
DISPLAY "EL REGISTRO NO EXISTE" AT LINE 1 COL 1
WITH BACKGROUND-COLOR 4
ACCEPT OPC AT LINE 1 COL 22
END-IF
END-IF.
PERFORM CERRAR-ARCHIVO.
CREAR-ARCHIVO.
PERFORM ABRIR-IO-ARCHIVO
IF NOT F-NOEXISTE-REG THEN
PERFORM LIMPIAR-PANTALLA
DISPLAY "SE DETECTO UN ARCHIVO EXISTENTE, DE PROCEDER EL"
AT LINE 1 COL 1 WITH BACKGROUND-COLOR 6
" ARCHIVO ACTUAL SERA ELIMINADO" AT LINE 1 COL 48
WITH BACKGROUND-COLOR 6
DISPLAY "ELIMINAR(1)|SALIR AL MENU(0) :" AT LINE 10 COL 1
WITH REVERSE-VIDEO
ACCEPT ELIMINAR-OPC AT LINE 10 COL 31
EVALUATE ELIMINAR-OPC
WHEN 1
PERFORM CERRAR-ARCHIVO
OPEN OUTPUT REG-LIBROS
PERFORM CERRAR-ARCHIVO
PERFORM LIMPIAR-PANTALLA
DISPLAY "ARCHIVO CREADO CON EXITO."
WITH BACKGROUND-COLOR 2
ACCEPT OPC AT LINE 1 COL 27
WHEN 0 PERFORM CERRAR-ARCHIVO EXIT
ELSE
OPEN OUTPUT REG-LIBROS
CLOSE REG-LIBROS
PERFORM LIMPIAR-PANTALLA
DISPLAY "ARCHIVO CREADO CON EXITO."
WITH BACKGROUND-COLOR 2
ACCEPT OPC AT LINE 1 COL 27
END-IF.
BUSCAR-LIBRO.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT
IF NOT F-NOEXISTE-REG
DISPLAY "MENU DE BUSQUEDA" AT LINE 1 COL 1
WITH REVERSE-VIDEO
DISPLAY "(I)Busqueda por id" AT LINE 3 COL 1
DISPLAY "(N)Busqueda por nombre" AT LINE 4 COL 1
DISPLAY "(E)Busqueda por editorial" AT LINE 5 COL 1
DISPLAY "Ingrese opcion( )" AT LINE 7 COL 1
WITH REVERSE-VIDEO
ACCEPT BUSCAR-OPC AT LINE 7 COL 16
IF BUSCAR-OPC EQUALS "i" MOVE "I" TO BUSCAR-OPC END-IF
IF BUSCAR-OPC EQUALS "n" MOVE "N" TO BUSCAR-OPC END-IF
IF BUSCAR-OPC EQUALS "e" MOVE "E" TO BUSCAR-OPC END-IF
PERFORM CERRAR-ARCHIVO
EVALUATE BUSCAR-OPC
WHEN "I"
PERFORM BUSCAR-ID
WHEN "N"
PERFORM BUSCAR-NOMBRE
WHEN "E"
PERFORM BUSCAR-EDITORIAL
END-EVALUATE
ELSE
DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS"
AT LINE 1 COL 1 WITH BACKGROUND-COLOR 4
ACCEPT OPC AT LINE 1 COL 43
END-IF.
*************************************************************************
*BLOQUE DE CODIGO DE BUSQUEDAS
*************************************************************************
BUSCAR-ID.
PERFORM LIMPIAR-PANTALLA.
MOVE SPACES TO DATOS-LIBRO
DISPLAY "Codigo: " AT LINE 2 COL 1 WITH REVERSE-VIDEO
DISPLAY
"-----------------------------------------------------"
AT LINE 3 COL 1.
DISPLAY
"ID |TITULO |EDITORIAL |ESTADO "
WITH REVERSE-VIDEO AT LINE 4 COL 1
ACCEPT LIBRO-ID AT LINE 2 COL 13 WITH PROMPT UNDERLINE UPDATE
MOVE LIBRO-ID TO AUX-ID
START REG-LIBROS KEY IS >= LIBRO-ID
READ REG-LIBROS END-READ
IF ESTA-REG
PERFORM VARYING N FROM 01 BY 1 UNTIL FIN-REG OR
LIBRO-ID > AUX-ID
DISPLAY DATOS-LIBRO AT LINE 5 COL 1
READ REG-LIBROS NEXT RECORD END-READ
END-PERFORM
ELSE
DISPLAY "EL REGISTRO NO EXISTE" AT LINE 5 COL 1
WITH BACKGROUND-COLOR 4
END-IF.
ACCEPT OPC AT LINE 6 COL 1.
PERFORM CERRAR-ARCHIVO.
*13
BUSCAR-NOMBRE.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT.
DISPLAY "Titulo: " AT LINE 2 COL 1 WITH REVERSE-VIDEO
DISPLAY
"-----------------------------------------------------"
AT LINE 3 COL 1.
DISPLAY
"ID |TITULO |EDITORIAL |ESTADO "
WITH REVERSE-VIDEO AT LINE 4 COL 1.
ACCEPT DESDE AT LINE 2 COL 14.
MOVE DESDE TO NOMBRE.
MOVE NOMBRE TO HASTA.
* DISPLAY HASTA AT LINE 1 COL 1
START REG-LIBROS KEY IS >= NOMBRE END-START.
READ REG-LIBROS NEXT RECORD END-READ.
DISPLAY FS-REGISTRO-LIBROS AT LINE 1 COL 1.
IF N-ESTA-REG
DISPLAY "EL REGISTRO NO EXISTE" AT LINE 5 COL 1
WITH BACKGROUND-COLOR 4
ACCEPT OPC AT LINE 5 COL 22
ELSE
PERFORM VARYING N FROM 01 BY 1 UNTIL FIN-REG OR
NOMBRE > HASTA
DISPLAY DATOS-LIBRO AT LINE 5 COL 1
READ REG-LIBROS NEXT RECORD END-READ
END-PERFORM
ADD 1 TO N
ACCEPT OPC AT LINE 6 COL 1
END-IF.
PERFORM CERRAR-ARCHIVO.
BUSCAR-EDITORIAL.
PERFORM LIMPIAR-PANTALLA.
MOVE SPACES TO DATOS-LIBRO
DISPLAY "Editorial: " AT LINE 2 COL 1 WITH REVERSE-VIDEO
DISPLAY
"-----------------------------------------------------"
AT LINE 3 COL 1.
DISPLAY
"ID |TITULO |EDITORIAL |ESTADO "
WITH REVERSE-VIDEO AT LINE 4 COL 1.
ACCEPT DESDE AT LINE 2 COL 16.
MOVE DESDE TO EDITORIAL.
START REG-LIBROS KEY IS >= EDITORIAL END-START.
READ REG-LIBROS NEXT RECORD END-READ.
PERFORM VARYING N FROM 05 BY 1 UNTIL FIN-REG OR
EDITORIAL > DESDE
IF EDITORIAL EQUALS DESDE
MOVE 1 TO EXISTE
ELSE
MOVE 0 TO EXISTE
END-IF
* add 1 to nn
DISPLAY DATOS-LIBRO AT LINE N COL 1
READ REG-LIBROS NEXT RECORD END-READ
END-PERFORM.
* display nn at line 10 col 1.
* accept opc at line 11 col 1.
IF EXISTE EQUALS 0
DISPLAY "EL REGISTRO NO EXISTE" WITH BACKGROUND-COLOR 4
AT LINE 5 COL 1
MOVE 5 TO N
END-IF.
ACCEPT OPC AT LINE N COL 1
PERFORM CERRAR-ARCHIVO.
*************************************************************************
LIMPIAR-PANTALLA.
PERFORM VARYING N FROM 01 BY 1 UNTIL N>24
DISPLAY LIMPIAR AT LINE N COLUMN 1
END-PERFORM.
ABRIR-ARCHIVO-INPUT.
OPEN INPUT REG-LIBROS.
ABRIR-IO-ARCHIVO.
OPEN I-O REG-LIBROS.
CERRAR-ARCHIVO.
CLOSE REG-LIBROS.
Valora esta pregunta


0