COBOL

Programa en COBOL que produce un informe de comisiones.

El formato del reporte debe ser como sigue:

 

 

Informe de comisión por empleado

No. de empleado

Nombre

Venta

Comisión

999

XXXXXXXXXXXXXXXXXXXX

$9,999.99

$999.99

999

XXXXXXXXXXXXXXXXXXXX

$9,999.99

$999.99

 

 

El cálculo de la comisión dependerá de los años de servicio.

 

Años de servicio

Comisión

menos de 5

10 %  (0.10) de las ventas

5 o más

15 %  (0.15) de las ventas

 

Los campos de ventas y de comisión en el reporte deben tener signo de dólar ($), coma (si aplica), punto decimal y no debe mostrar los ceros no significativos.

 

El programa se llamará COMISION. El archivo de entrada se llamará Ventas y tendrá el siguiente formato:

 

 

Campo

Tamaño

Tipo

Lugares decimales

num-empleado

3

X

 

nombre

20

X

 

venta

6

9

2

años-servicio

2

9

0

 

 

Los datos de entrada son los siguientes:

200DALILA RAMOS        29405013

234MARINELVA ROMAN     21094510

350EDDIE HERNANDEZ     19104508

385FRANCISCO LOPEZ     09005005

426ARMANDO GONZALEZ    08909503

455JUAN VALENZUELA     07332401

 


 

Ejemplo:

000001 IDENTIFICATION DIVISION.

000002 PROGRAM-ID. EJEMPLO.

000003 AUTHOR. NOMBRE DEL ESTUDIANTE.

      *DATE. FECHA DE ENTREGA.

 

      **********************************************

      **   Este programa crea un informe de        *

      **   comisiones por empleados                *

      **********************************************

 

000004 ENVIRONMENT DIVISION.

000005 INPUT-OUTPUT SECTION.

000006 FILE-CONTROL.

000007     SELECT SALES-IN ASSIGN TO "A:VENTAS.TXT"

           ORGANIZATION IS LINE SEQUENTIAL.

000008     SELECT PRINT-OUT ASSIGN TO PRINT, "PRINTER".

 

      ********************

000009 DATA DIVISION.

000010 FILE SECTION.

000011 FD SALES-IN

           LABEL RECORDS ARE STANDARD.

       01 SALES-REC-IN.

           05 NUM-EMP-IN          PIC X(03).

           05 NOMBRE-IN           PIC X(20).

           05 VENTA-IN            PIC 9(4)V99.

           05 SERVICIO-IN         PIC 9(2).

 

       FD PRINT-OUT

           LABEL RECORDS ARE OMITTED

           RECORD CONTAINS 80 CHARACTERS.

       01 PRINT-REC               PIC X(80).

 

      ********************

       WORKING-STORAGE SECTION.

       01 WS-AREAS.

           05 HAY-MAS-RECORDS     PIC X(2)    VALUE 'SI'.

           05 EL-PRIMER-RECORD    PIC X(2)    VALUE 'SI'.

           05 WS-CUENTA-LINEA     PIC 9(2)    VALUE ZERO.

           05 WS-COMISION         PIC 9(3)V99 VALUE ZERO.

 

      *** Primera línea de encabezado

       01 HD-1.

           05 FILLER              PIC X(29) VALUE SPACES.

           05 FILLER              PIC X(34)

              VALUE 'INFORME DE COMISIONES POR EMPLEADO'.

           05 FILLER              PIC X(17) VALUE SPACES.

      *** Segunda línea de encabezado

       01 HD-2.

           05 FILLER              PIC X(20)

              VALUE 'NO. DE EMPLEADO     '.

 

           05 FILLER              PIC X(06)

              VALUE 'NOMBRE'.

           05 FILLER              PIC X(19) VALUE SPACES.

           05 FILLER              PIC X(05)

              VALUE 'VENTA'.

           05 FILLER              PIC X(11) VALUE SPACES.

           05 FILLER              PIC X(08)

              VALUE 'COMISION'.

           05 FILLER              PIC X(11).

          

      *** Línea de detalle

       01 DTL.

           05                     PIC X(08) VALUE SPACES.

           05 NUM-EMP-RPT         PIC X(03).

           05                     PIC X(09) VALUE SPACES.

           05 NOMBRE-RPT          PIC X(20).

           05                     PIC X(05) VALUE SPACES.

           05 VENTA-RPT           PIC $$,$$9.99.

           05                     PIC X(08) VALUE SPACES.

           05 COMISION-RPT        PIC $999.99.

           05                     PIC X(11) VALUE SPACES.

          

 

      ********************

       PROCEDURE DIVISION.

       100-MAIN-MODULE.

           PERFORM 200-INICIALIZAR

           PERFORM 300-IMPRIMIR-TITULOS

           PERFORM UNTIL HAY-MAS-RECORDS = 'NO'

               READ SALES-IN

                   AT END MOVE 'NO' TO HAY-MAS-RECORDS

                   NOT AT END PERFORM 400-PROCESO

               END-READ

           END-PERFORM

           PERFORM 500-TERMINAR

           STOP RUN.

 

      ***

       200-INICIALIZAR.

           OPEN INPUT SALES-IN

                OUTPUT PRINT-OUT.

 

      ***

       300-IMPRIMIR-TITULOS.

           IF EL-PRIMER-RECORD = 'SI'

               WRITE PRINT-REC FROM HD-1

               MOVE 'NO' TO EL-PRIMER-RECORD

           ELSE

               WRITE PRINT-REC FROM HD-1 AFTER ADVANCING PAGE

           END-IF

           WRITE PRINT-REC FROM HD-2 AFTER ADVANCING 2

           MOVE ZEROS TO WS-CUENTA-LINEA.

      ***

       400-PROCESO.

           IF WS-CUENTA-LINEA > 25

               PERFORM 300-IMPRIMIR-TITULOS

           END-IF

           IF SERVICIO-IN < 5

               MULTIPLY VENTA-IN BY 0.15 GIVING WS-COMISION

           ELSE

               MULTIPLY VENTA-IN BY 0.20 GIVING WS-COMISION

           END-IF

           MOVE NUM-EMP-IN TO NUM-EMP-RPT

           MOVE NOMBRE-IN TO NOMBRE-RPT

           MOVE VENTA-IN TO VENTA-RPT

           MOVE WS-COMISION TO COMISION-RPT

           WRITE PRINT-REC FROM DTL AFTER ADVANCING 2 LINES

           ADD 1 TO WS-CUENTA-LINEA.

 

      ***

       500-TERMINAR.

           CLOSE SALES-IN

                 PRINT-OUT.