Ver Mensaje Individual
  #1
Antiguo 1 de febrero de 2023, 22:38
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0
Predeterminado (AYUDA) Problema en codigo COBOL
0 Inactivo Inactivo

Hola soy nuevo en el foro como tambien un principiante en COBOL.
Estoy estudiando el lenguaje hace ya casi un mes y estoy intentando desarrollar este programita como forma de práctica y me he encontrado con varios problemas.

Lo que tiene que hacer el programa:

"Una compania de seguros tiene contratados a n vendedores. Cada vendedor realiza
multiples ventas a la semana. La politica de pagos de la compania es que cada vendedor
recibe un sueldo base más un 10% extra por comisiones de sus ventas. El gerente de la
compania desea saber, por un lado, cuanto dinero deber¡a pagar en la semana a cada
vendedor por concepto de comisiones de las ventas realizadas, y por otro lado, cua¡nto
deberia pagar a cada vendedor como sueldo total (sueldo base + comisiones). Para cada
vendedor ingresar cuanto es su sueldo base, cuantas ventas realizó y cuanto cobró por
cada venta."

Mi código (incompleto):

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                PROG-PAGOS-F.
  3.        AUTHOR.                    LUCAS GALEANO.
  4.        DATE-WRITTEN.              1/2/2023.
  5.  
  6.        ENVIRONMENT DIVISION.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.            SELECT REG-VENDEDORES ASSIGN TO "REG-MAESTRO.DAT"
  10.                ORGANIZATION IS LINE SEQUENTIAL.
  11.  
  12.            SELECT REG-VENTAS     ASSIGN TO "REG-VENTAS-MAESTRO.DAT"
  13.                ORGANIZATION IS LINE SEQUENTIAL.
  14.  
  15.        DATA DIVISION.
  16.        FILE SECTION.
  17.        FD REG-VENDEDORES.
  18.        01 VENDEDORES              PIC 9(14).
  19.  
  20.        FD REG-VENTAS.
  21.        01 COB-VENTAS              PIC 9(5).
  22.  
  23.  
  24.        WORKING-STORAGE SECTION.
  25.        01 WS-VENDEDORES.
  26.            05 WS-EMPLEADO            PIC 999.
  27.            05 WS-SUELDO-BASE         PIC 9(5).
  28.            05 WS-CANTIDAD-VENTAS     PIC 999.
  29.            05 WS-TOTAL-EMPLEADOS     PIC 999.
  30.            05 WS-COBRO-VENTAS        PIC 9(5).
  31.        01 WS-TABLAS.
  32.            05 WS-REGISTRO-COBROS     PIC 9(5)
  33.                                      OCCURS 100 TIMES.
  34.        77 CONTADOR                   PIC 99 VALUE ZEROS.
  35.  
  36.        PROCEDURE DIVISION.
  37.        BEGIN-OUTPUT.
  38.            OPEN OUTPUT REG-VENDEDORES.
  39.            DISPLAY "INGRESE DATOS SOLICITADOS".
  40.            DISPLAY "INGRESE CANTIDAD TOTAL DE EMPLEADOS:".
  41.            ACCEPT WS-TOTAL-EMPLEADOS.
  42.            PERFORM INGRESO-DATOS-EMPLEADOS.
  43.            PERFORM VARYING CONTADOR FROM 1 BY 1
  44.                            UNTIL CONTADOR = WS-TOTAL-EMPLEADOS
  45.            WRITE VENDEDORES FROM WS-VENDEDORES
  46.            PERFORM INGRESO-DATOS-EMPLEADOS
  47.            END-PERFORM.
  48.            CLOSE  REG-VENDEDORES.
  49.            STOP RUN.
  50.  
  51.        INGRESO-DATOS-EMPLEADOS.
  52.          
  53.            DISPLAY "INGRESE NUMERO DE EMPLEADO:".
  54.            ACCEPT WS-EMPLEADO.
  55.            DISPLAY "INGRESE SUELDO BASE:".
  56.            ACCEPT WS-SUELDO-BASE.
  57.            DISPLAY "INGRESE CANTIDAD DE VENTAS REALIZADAS:".
  58.            ACCEPT WS-CANTIDAD-VENTAS.
  59.            PERFORM VARYING WS-CANTIDAD-VENTAS FROM 1 BY 1
  60.                            UNTIL WS-CANTIDAD-VENTAS = 3
  61.            DISPLAY "INGRESE COBRO DE CADA VENTA:"
  62.            ACCEPT WS-COBRO-VENTAS
  63.            MOVE WS-COBRO-VENTAS TO WS-REGISTRO-COBROS(1)
  64.            END-PERFORM.
El problema que es no saber como terminar el perform del parrafo BEGIN-OUTPUT en este caso especial ya que no me escribe los datos de cada empleado solo de uno, probe con contador, con "=Spaces" y el mismo comportamiento.
Solo funciona si ingreso todos los datos de una tira "e.j nnnnMMMMEEEVV, y abajo un accept para ingresar tooodo el registro" y en perform lo condiciono con un "UNTIL...= SPACES", en ese caso si me registra cada empleado pero no tengo claro el por que esto sucede, no puedo entenderlo , capaz no entiendo los detalles de como escribe cobol en un archivo..
Y bueno ese es mi problema, tambien estaria muy agradecido si podrian darme algun consejo de como realizar el programa, Graciasss

Edit: Asi es como se lee el archivo .dat : 00120000003002 en vez de varios registros.
Marengo97 is offline   Responder Con Cita