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
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".
*Variables del programa.
77 CONTINUAR PIC X.
77 CONTINUAR-REG PIC X.
77 OPC PIC X VALUE SPACES.
77 LIMPIAR PIC X(80) VALUE SPACES.
77 N PIC 99.
PROCEDURE DIVISION.
DECLARATIVES.
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.
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 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 "0.Salir" AT LINE 8 COL 1
DISPLAY " " AT LINE 9 COL 1
DISPLAY "Ingrese tecla ( )" AT LINE 10 COL 1 WITH
REVERSE-VIDEO
ACCEPT OPC AT LINE 10 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 0 MOVE "N" TO CONTINUAR
END-EVALUATE
END-PERFORM.
CLOSE REG-LIBROS.
STOP RUN.
REGISTRAR-LIBRO.
MOVE "S" TO CONTINUAR-REG.
INITIALIZE DATOS-LIBRO.
PERFORM LIMPIAR-PANTALLA.
*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
DISPLAY "ERROR AL REGISTRAR DATOS"
END-WRITE
PERFORM CERRAR-ARCHIVO
END-IF.
VER-LIBROS.
PERFORM LIMPIAR-PANTALLA
PERFORM ABRIR-IO-ARCHIVO
IF F-NOEXISTE-REG THEN
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS" AT LINE 1
COL 1
DISPLAY "PRESIONE ENTER PARA VOLVER AL MENU()" AT LINE 10
COL 1
ACCEPT OPC AT LINE 11 COL 36
ELSE
PERFORM LIMPIAR-PANTALLA
READ REG-LIBROS KEY IS LIBRO-ID
AT END MOVE HIGH-VALUE TO DATOS-LIBRO
PERFORM VARYING N FROM 1 BY 1 UNTIL DATOS-LIBRO = HIGH-VALUE
DISPLAY DATOS-LIBRO AT LINE N COL 1
READ REG-LIBROS KEY IS LIBRO-ID
AT END MOVE HIGH-VALUE TO DATOS-LIBRO
END-PERFORM
ADD 1 TO N
DISPLAY "PRESIONE ENTER PARA REGRESAR AL MENU" AT LINE N
COL 1
ACCEPT OPC AT LINE 15
PERFORM CERRAR-ARCHIVO
END-IF.
LIMPIAR-PANTALLA.
PERFORM VARYING N FROM 1 BY 1 UNTIL N>24
DISPLAY LIMPIAR AT LINE N COLUMN 1
END-PERFORM.
CREAR-ARCHIVO.
OPEN OUTPUT REG-LIBROS.
CERRAR-ARCHIVO.
CLOSE REG-LIBROS.
ABRIR-IO-ARCHIVO.
OPEN I-O REG-LIBROS.