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. |