Marengo97
3 de agosto de 2023, 21:09
Quiero implementar la funcion de buscar por nombre en un archivo indexado, no tengo claro como hacerlo
Codigo completo:
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
ACCESS MODE IS DYNAMIC
FILE STATUS 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".
*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 AUX-ID PIC 999.
77 AUX-NOMBRE PIC X(20).
PROCEDURE DIVISION.
DECLARATIVES.
*Estados de error del archivo
FILE-ERROR SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON REG-LIBROS.
IF FS-REGISTRO-LIBROS EQUALS "35" THEN
SET F-NOEXISTE-REG TO TRUE
END-IF.
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"
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
************************************************** ***********************
PERFORM ABRIR-IO-ARCHIVO
WRITE DATOS-LIBRO INVALID KEY
REWRITE DATOS-LIBRO INVALID KEY
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR AL REGISTRAR DATOS" AT LINE 1 COL 1
WITH BACKGROUND-COLOR 4
END-WRITE
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
PERFORM CERRAR-ARCHIVO
END-IF.
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.
MOVE SPACES TO DATOS-LIBRO.
IF ESTA-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
EVALUATE BUSCAR-OPC
WHEN "I"
WHEN "N"
WHEN "E"
PERFORM BUSCAR-NOMBRE
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-NOMBRE.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT.
MOVE SPACES TO DATOS-LIBRO.
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 3 COL 1.
ACCEPT NOMBRE AT LINE 2 COL 14.
START REG-LIBROS KEY IS = NOMBRE.
READ REG-LIBROS END-READ
DISPLAY DATOS-LIBRO AT LINE 4 COL 1
ACCEPT OPC AT LINE 5 COL 1.
************************************************** ***********************
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.
BLOQUE DE CODIGO ESPECIFICO:
BUSCAR-NOMBRE.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT.
MOVE SPACES TO DATOS-LIBRO.
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 3 COL 1.
ACCEPT NOMBRE AT LINE 2 COL 14.
START REG-LIBROS KEY IS = NOMBRE.
READ REG-LIBROS END-READ
DISPLAY DATOS-LIBRO AT LINE 4 COL 1
ACCEPT OPC AT LINE 5 COL 1.
Utilizé la misma logica para buscar por una key numerica, que funciona perfecto pero no con la secondary key NOMBRE
Codigo completo:
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
ACCESS MODE IS DYNAMIC
FILE STATUS 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".
*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 AUX-ID PIC 999.
77 AUX-NOMBRE PIC X(20).
PROCEDURE DIVISION.
DECLARATIVES.
*Estados de error del archivo
FILE-ERROR SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON REG-LIBROS.
IF FS-REGISTRO-LIBROS EQUALS "35" THEN
SET F-NOEXISTE-REG TO TRUE
END-IF.
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"
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
************************************************** ***********************
PERFORM ABRIR-IO-ARCHIVO
WRITE DATOS-LIBRO INVALID KEY
REWRITE DATOS-LIBRO INVALID KEY
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR AL REGISTRAR DATOS" AT LINE 1 COL 1
WITH BACKGROUND-COLOR 4
END-WRITE
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
PERFORM CERRAR-ARCHIVO
END-IF.
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.
MOVE SPACES TO DATOS-LIBRO.
IF ESTA-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
EVALUATE BUSCAR-OPC
WHEN "I"
WHEN "N"
WHEN "E"
PERFORM BUSCAR-NOMBRE
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-NOMBRE.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT.
MOVE SPACES TO DATOS-LIBRO.
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 3 COL 1.
ACCEPT NOMBRE AT LINE 2 COL 14.
START REG-LIBROS KEY IS = NOMBRE.
READ REG-LIBROS END-READ
DISPLAY DATOS-LIBRO AT LINE 4 COL 1
ACCEPT OPC AT LINE 5 COL 1.
************************************************** ***********************
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.
BLOQUE DE CODIGO ESPECIFICO:
BUSCAR-NOMBRE.
PERFORM LIMPIAR-PANTALLA.
PERFORM ABRIR-ARCHIVO-INPUT.
MOVE SPACES TO DATOS-LIBRO.
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 3 COL 1.
ACCEPT NOMBRE AT LINE 2 COL 14.
START REG-LIBROS KEY IS = NOMBRE.
READ REG-LIBROS END-READ
DISPLAY DATOS-LIBRO AT LINE 4 COL 1
ACCEPT OPC AT LINE 5 COL 1.
Utilizé la misma logica para buscar por una key numerica, que funciona perfecto pero no con la secondary key NOMBRE