Ver Mensaje Individual
  #1
Antiguo 3 de agosto de 2023, 21:09
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0
Predeterminado Como buscar por nombre en un registro indexado?
0 Inactivo Inactivo

Quiero implementar la funcion de buscar por nombre en un archivo indexado, no tengo claro como hacerlo

Codigo completo:
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.  
  3.        PROGRAM-ID.                 LIBRERIA.
  4.        AUTHOR.                     LUCAS GALEANO.
  5.        DATE-WRITTEN                9/7/2023.
  6.  
  7.        ENVIRONMENT DIVISION.
  8.        INPUT-OUTPUT SECTION.
  9.        FILE-CONTROL.
  10.            SELECT REG-LIBROS ASSIGN TO "REGISTRO-LIBROS.DAT"
  11.                                ORGANIZATION IS INDEXED
  12.                                RECORD KEY IS LIBRO-ID
  13.                                ALTERNATE RECORD KEY IS NOMBRE
  14.                                ALTERNATE RECORD KEY IS EDITORIAL
  15.                                ACCESS MODE IS DYNAMIC
  16.                                FILE STATUS FS-REGISTRO-LIBROS.
  17.  
  18.  
  19.        DATA DIVISION.
  20.        FILE SECTION.
  21.  
  22.        FD REG-LIBROS.
  23.  
  24.        01 DATOS-LIBRO.
  25.            05 LIBRO-ID PIC 999     VALUE ZEROS.
  26.            05 NOMBRE   PIC X(20)   VALUE SPACES.
  27.            05 EDITORIAL PIC X(20)  VALUE SPACES.
  28.            05 ESTADO   PIC X(12)   VALUE SPACES.
  29.      *05 FECHA-INGRESO.
  30.      *     10 DIA  PIC 99 VALUE ZEROS.
  31.      *     10 MES  PIC X(10) VALUE SPACES.
  32.      *     10 AÑO  PIC 9999 VALUE ZEROS.
  33.      * 05 FECHA-ALQUILER.
  34.      *     10 DDIA PIC 99 VALUE ZEROS.
  35.      *     10 MMES PIC X(10) VALUE SPACES.
  36.      *     10 AAÑO PIC 9999 VALUE ZEROS.
  37.  
  38.        WORKING-STORAGE SECTION.
  39.      *Codigos de error del archivo.
  40.        01 FS-REGISTRO-LIBROS PIC XX.
  41.            88 ESTA-REG         VALUE "00" "02".
  42.            88 N-ESTA-REG       VALUE "23".
  43.            88 F-NOEXISTE-REG   VALUE "35".
  44.            88 FIN-REG          VALUE "10".
  45.            88 F-ABIERTO        VALUE "12".
  46.      *Variables del programa.
  47.        77 CONTINUAR PIC X.
  48.        77 CONTINUAR-REG PIC X.
  49.        77 ELIMINAR-OPC  PIC X.
  50.        77 BUSCAR-OPC    PIC X.    
  51.        77 OPC       PIC X.
  52.        77 LIMPIAR   PIC X(80) VALUE SPACES.
  53.        77 LIMPIAR-LINEA PIC X(80) VALUE SPACES.
  54.        77 N         PIC 99.
  55.        77 AUX-ID    PIC 999.
  56.        77 AUX-NOMBRE PIC X(20).
  57.  
  58.        PROCEDURE DIVISION.
  59.        DECLARATIVES.
  60.      *Estados de error del archivo
  61.        FILE-ERROR SECTION.
  62.            USE AFTER STANDARD ERROR PROCEDURE ON REG-LIBROS.
  63.            IF FS-REGISTRO-LIBROS EQUALS "35" THEN
  64.                SET F-NOEXISTE-REG TO TRUE
  65.            END-IF.
  66.        END DECLARATIVES.
  67.      *LOGICA PRINCIPAL
  68.        MENU.
  69.            PERFORM UNTIL CONTINUAR = "N"
  70.            PERFORM LIMPIAR-PANTALLA
  71.            DISPLAY "ADMINISTRADOR DE CATALOGO" AT LINE 1 COL 1 WITH
  72.                                                            REVERSE-VIDEO
  73.            DISPLAY " "                         AT LINE 3 COL 1
  74.            DISPLAY "1.Registrar, Editar, Remplazar libro" AT LINE 4
  75.                                                            COL 1
  76.            DISPLAY "2.Eliminar libro"          AT LINE 5 COL 1
  77.            DISPLAY "3.Ver catalogo"            AT LINE 6 COL 1
  78.            DISPLAY "4.Crear nuevo registro"    AT LINE 7 COL 1
  79.            DISPLAY "5.Buscar libro"            AT LINE 8  
  80.            DISPLAY "0.Salir"                   AT LINE 9 COL 1
  81.            DISPLAY " "                         AT LINE 10 COL 1
  82.            DISPLAY "Ingrese tecla ( )"         AT LINE 11 COL 1 WITH
  83.                                                            REVERSE-VIDEO
  84.            ACCEPT OPC                          AT LINE 11 COL 16 WITH
  85.                                                PROMPT UNDERLINE
  86.            EVALUATE OPC
  87.            WHEN 1 PERFORM REGISTRAR-LIBRO
  88.            WHEN 2 PERFORM ELIMINAR-LIBRO
  89.            WHEN 3 PERFORM VER-LIBROS
  90.            WHEN 4 PERFORM CREAR-ARCHIVO
  91.            WHEN 5 PERFORM BUSCAR-LIBRO
  92.            WHEN 0 MOVE "N" TO CONTINUAR
  93.            END-EVALUATE
  94.            END-PERFORM.
  95.            CLOSE REG-LIBROS.
  96.            STOP RUN.
  97.  
  98.  
  99.        REGISTRAR-LIBRO.
  100.            MOVE SPACES TO DATOS-LIBRO.
  101.            PERFORM LIMPIAR-PANTALLA.
  102.            MOVE "S" TO CONTINUAR-REG.
  103.      *************************************************************************    
  104.      *INTERFAZ MENU DE INGRESO DE DATOS
  105.      *************************************************************************
  106.            DISPLAY "Numero de serie:" AT LINE 1 COL 1.
  107.            DISPLAY "Nombre:"       AT LINE 2 COL 1.
  108.            DISPLAY "Editorial:"    AT LINE 3 COL 1.
  109.            DISPLAY "Estado:"       AT LINE 4 COL 1.
  110.            DISPLAY
  111.            "presione ENTER sin ingresar datos para salir al menu"
  112.                                                AT LINE 7 COL 12
  113.                                                      WITH REVERSE-VIDEO.
  114.  
  115.  
  116.            DISPLAY "Numero de serie    :" AT LINE 1 COL 1 WITH
  117.                                                           REVERSE-VIDEO.
  118.            ACCEPT LIBRO-ID WITH PROMPT UNDERLINE UPDATE AT LINE 1
  119.                                                        COL 25.
  120.  
  121.            IF LIBRO-ID EQUALS 000 MOVE "N" TO CONTINUAR-REG END-IF.
  122.  
  123.  
  124.            IF CONTINUAR-REG EQUALS "S"
  125.            DISPLAY "Numero de serie    :" AT LINE 1 COL 1
  126.            DISPLAY LIBRO-ID            AT LINE 1 COL 25
  127.  
  128.            DISPLAY "Nombre    :"     AT LINE 2 COL 1 WITH REVERSE-VIDEO
  129.            ACCEPT NOMBRE               AT LINE 2 COL 25
  130.            DISPLAY "Nombre:    "       AT LINE 2 COL 1
  131.            DISPLAY NOMBRE              AT LINE 2 COL 25
  132.  
  133.            DISPLAY "Editorial    :"  AT LINE 3 COL 1 WITH REVERSE-VIDEO
  134.            ACCEPT EDITORIAL            AT LINE 3 COL 25
  135.            DISPLAY "Editorial    :"    AT LINE 3 COL 1
  136.            DISPLAY EDITORIAL           AT LINE 3 COL 25
  137.  
  138.            DISPLAY "Estado    :"     AT LINE 4 COL 1 WITH REVERSE-VIDEO
  139.            ACCEPT ESTADO               AT LINE 4 COL 25
  140.            DISPLAY "Estado    :"       AT LINE 4 COL 1
  141.            DISPLAY ESTADO              AT LINE 4 COL 25
  142.      *************************************************************************
  143.            PERFORM ABRIR-IO-ARCHIVO
  144.            WRITE DATOS-LIBRO INVALID KEY
  145.                REWRITE DATOS-LIBRO INVALID KEY
  146.                    PERFORM LIMPIAR-PANTALLA
  147.                    DISPLAY "ERROR AL REGISTRAR DATOS" AT LINE 1 COL 1
  148.                                            WITH BACKGROUND-COLOR 4
  149.            END-WRITE
  150.            PERFORM CERRAR-ARCHIVO
  151.            END-IF.
  152.  
  153.  
  154.        VER-LIBROS.
  155.            PERFORM ABRIR-ARCHIVO-INPUT.
  156.            IF F-NOEXISTE-REG THEN
  157.                PERFORM LIMPIAR-PANTALLA
  158.                DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS"
  159.                        WITH BACKGROUND-COLOR 4 AT LINE 1 COL 1
  160.  
  161.  
  162.  
  163.                DISPLAY "Presione ENTER para salir al menu"
  164.                                                AT LINE 7 COL 12 WITH
  165.                                                REVERSE-VIDEO
  166.                ACCEPT OPC AT LINE  10 COL 34
  167.            ELSE
  168.                PERFORM LIMPIAR-PANTALLA
  169.                INITIALIZE LIBRO-ID
  170.                START REG-LIBROS KEY IS >= LIBRO-ID END-START
  171.                READ REG-LIBROS NEXT RECORD END-READ
  172.                DISPLAY
  173.                "ID |TITULO            |EDITORIAL          |ESTADO     "
  174.                WITH REVERSE-VIDEO AT LINE 1 COL 1
  175.                PERFORM VARYING N FROM 02 BY 1 UNTIL FIN-REG
  176.                    DISPLAY DATOS-LIBRO AT LINE N COL 1
  177.                    READ REG-LIBROS NEXT RECORD END-READ
  178.                END-PERFORM
  179.                ADD 1 TO N
  180.                DISPLAY "Presione ENTER para salir al menu"
  181.                                                AT LINE N COL 1 WITH
  182.                                                REVERSE-VIDEO
  183.                ACCEPT OPC AT LINE N COL 34
  184.                PERFORM CERRAR-ARCHIVO
  185.            END-IF.
  186.  
  187.  
  188.        ELIMINAR-LIBRO.
  189.            PERFORM ABRIR-IO-ARCHIVO.
  190.            PERFORM LIMPIAR-PANTALLA.
  191.            MOVE SPACES TO DATOS-LIBRO
  192.  
  193.            DISPLAY "Indique por id el libro que desea eliminar:"
  194.            WITH REVERSE-VIDEO AT LINE 1 COL 1.
  195.            DISPLAY "Presione ENTER para salir al menu"
  196.            WITH REVERSE-VIDEO AT LINE 7 COL 12.
  197.                      
  198.            ACCEPT LIBRO-ID AT LINE 1 COL 46 WITH PROMPT UNDERLINE UPDATE.
  199.            
  200.            IF LIBRO-ID NOT EQUALS 000    
  201.            
  202.            PERFORM LIMPIAR-PANTALLA
  203.  
  204.            START REG-LIBROS KEY IS = LIBRO-ID
  205.            READ REG-LIBROS END-READ
  206.            IF ESTA-REG
  207.                DISPLAY
  208.                "ID |TITULO            |EDITORIAL         |ESTADO     "
  209.                                    WITH REVERSE-VIDEO AT LINE 1 COL 1
  210.                DISPLAY DATOS-LIBRO AT LINE 2 COL 1
  211.                DISPLAY "ELIMINAR(1)|VOLVER(0) :" AT LINE 5 COL 1
  212.                                                    WITH REVERSE-VIDEO
  213.                
  214.                ACCEPT ELIMINAR-OPC AT LINE 5 COL 25
  215.                EVALUATE ELIMINAR-OPC
  216.                    WHEN 1
  217.                    DISPLAY LIMPIAR-LINEA AT LINE 10 COL 1
  218.                    DELETE REG-LIBROS INVALID KEY
  219.                        DISPLAY "ERROR AL ELIMINAR" AT LINE 5 COL 1
  220.                    END-DELETE
  221.                    DISPLAY "REGISTRO ELIMINADO CON EXITO" AT LINE 5
  222.                                                 COL 1
  223.                                                 WITH BACKGROUND-COLOR 2
  224.                            ACCEPT OPC AT LINE 5 COL 29
  225.                    WHEN 0 PERFORM ELIMINAR-LIBRO
  226.            ELSE
  227.                DISPLAY "EL REGISTRO NO EXISTE" AT LINE 1 COL 1
  228.                                            WITH BACKGROUND-COLOR 4
  229.                            ACCEPT OPC AT LINE 1 COL 22
  230.            END-IF
  231.            
  232.            END-IF.
  233.            PERFORM CERRAR-ARCHIVO.
  234.            
  235.  
  236.        CREAR-ARCHIVO.
  237.            PERFORM ABRIR-IO-ARCHIVO
  238.            IF NOT F-NOEXISTE-REG THEN
  239.                PERFORM LIMPIAR-PANTALLA
  240.                DISPLAY "SE DETECTO UN ARCHIVO EXISTENTE, DE PROCEDER EL"
  241.                AT LINE 1 COL 1 WITH BACKGROUND-COLOR 6
  242.                " ARCHIVO ACTUAL SERA ELIMINADO" AT LINE 1 COL 48
  243.                                WITH BACKGROUND-COLOR 6
  244.                DISPLAY "ELIMINAR(1)|SALIR AL MENU(0) :" AT LINE 10 COL 1
  245.                                                    WITH REVERSE-VIDEO
  246.                ACCEPT ELIMINAR-OPC AT LINE 10 COL 31
  247.                EVALUATE ELIMINAR-OPC
  248.                    WHEN 1
  249.                    PERFORM CERRAR-ARCHIVO
  250.                    OPEN OUTPUT REG-LIBROS
  251.                    PERFORM CERRAR-ARCHIVO
  252.                    PERFORM LIMPIAR-PANTALLA
  253.                    DISPLAY "ARCHIVO CREADO CON EXITO."
  254.                                                WITH BACKGROUND-COLOR 2
  255.                    ACCEPT OPC AT LINE 1 COL 27
  256.                    WHEN 0 PERFORM CERRAR-ARCHIVO EXIT
  257.            ELSE
  258.                OPEN OUTPUT REG-LIBROS
  259.                CLOSE REG-LIBROS
  260.                PERFORM LIMPIAR-PANTALLA
  261.                DISPLAY "ARCHIVO CREADO CON EXITO."
  262.                                                WITH BACKGROUND-COLOR 2
  263.                ACCEPT OPC AT LINE 1 COL 27
  264.            END-IF.
  265.  
  266.        BUSCAR-LIBRO.
  267.            PERFORM LIMPIAR-PANTALLA.
  268.            PERFORM ABRIR-ARCHIVO-INPUT.
  269.            MOVE SPACES TO DATOS-LIBRO.
  270.            
  271.            IF ESTA-REG
  272.                DISPLAY "MENU DE BUSQUEDA" AT LINE 1 COL 1
  273.                                        WITH REVERSE-VIDEO
  274.                DISPLAY "(I)Busqueda por id" AT LINE 3 COL 1
  275.                DISPLAY "(N)Busqueda por nombre" AT LINE 4 COL 1
  276.                DISPLAY "(E)Busqueda por editorial" AT LINE 5 COL 1
  277.                DISPLAY "Ingrese opcion( )" AT LINE 7 COL 1
  278.                                        WITH REVERSE-VIDEO
  279.                ACCEPT BUSCAR-OPC AT LINE 7 COL 16
  280.                IF BUSCAR-OPC EQUALS "i" MOVE "I" TO BUSCAR-OPC END-IF
  281.                IF BUSCAR-OPC EQUALS "n" MOVE "N" TO BUSCAR-OPC END-IF
  282.                IF BUSCAR-OPC EQUALS "e" MOVE "E" TO BUSCAR-OPC END-IF
  283.                
  284.                EVALUATE BUSCAR-OPC
  285.                WHEN "I"
  286.                
  287.                WHEN "N"
  288.                
  289.                WHEN "E"
  290.                PERFORM BUSCAR-NOMBRE
  291.                END-EVALUATE
  292.                
  293.                
  294.                
  295.                
  296.                
  297.            ELSE
  298.                DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS"
  299.                                  AT LINE 1 COL 1 WITH BACKGROUND-COLOR 4
  300.                ACCEPT OPC AT LINE 1 COL 43
  301.            END-IF.
  302.      *************************************************************************        
  303.      *BLOQUE DE CODIGO DE BUSQUEDAS
  304.      *************************************************************************        
  305.        BUSCAR-NOMBRE.
  306.            PERFORM LIMPIAR-PANTALLA.
  307.            PERFORM ABRIR-ARCHIVO-INPUT.
  308.            MOVE SPACES TO DATOS-LIBRO.
  309.            DISPLAY "Titulo:   " AT LINE 2 COL 1 WITH REVERSE-VIDEO
  310.            DISPLAY "---------------------------------------------------"
  311.                                                AT LINE 3 COL 1.
  312.            
  313.            DISPLAY
  314.                "ID |TITULO            |EDITORIAL         |ESTADO     "
  315.                                    WITH REVERSE-VIDEO AT LINE 3 COL 1.
  316.            ACCEPT NOMBRE AT LINE 2 COL 14.
  317.            
  318.            
  319.            START REG-LIBROS KEY IS = NOMBRE.
  320.            READ REG-LIBROS END-READ
  321.            DISPLAY DATOS-LIBRO AT LINE 4 COL 1
  322.            ACCEPT OPC AT LINE 5  COL 1.
  323.          
  324.            
  325.       *************************************************************************
  326.        LIMPIAR-PANTALLA.
  327.            PERFORM VARYING N FROM 01 BY 1 UNTIL N>24
  328.                DISPLAY LIMPIAR AT LINE N COLUMN 1
  329.            END-PERFORM.
  330.                
  331.        ABRIR-ARCHIVO-INPUT.
  332.            OPEN INPUT REG-LIBROS.
  333.  
  334.        ABRIR-IO-ARCHIVO.
  335.            OPEN I-O REG-LIBROS.
  336.  
  337.        CERRAR-ARCHIVO.
  338.            CLOSE REG-LIBROS.

BLOQUE DE CODIGO ESPECIFICO:

Código COBOL:
  1.   BUSCAR-NOMBRE.
  2.            PERFORM LIMPIAR-PANTALLA.
  3.            PERFORM ABRIR-ARCHIVO-INPUT.
  4.            MOVE SPACES TO DATOS-LIBRO.
  5.            DISPLAY "Titulo:   " AT LINE 2 COL 1 WITH REVERSE-VIDEO
  6.            DISPLAY "---------------------------------------------------"
  7.                                                AT LINE 3 COL 1.
  8.            
  9.            DISPLAY
  10.                "ID |TITULO            |EDITORIAL         |ESTADO     "
  11.                                    WITH REVERSE-VIDEO AT LINE 3 COL 1.
  12.            ACCEPT NOMBRE AT LINE 2 COL 14.
  13.            
  14.            
  15.            START REG-LIBROS KEY IS = NOMBRE.
  16.            READ REG-LIBROS END-READ
  17.            DISPLAY DATOS-LIBRO AT LINE 4 COL 1
  18.            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
Marengo97 is offline   Responder Con Cita