Vous êtes sur la page 1sur 6

IDENTIFICATION DIVISION. PROGRAM-IDTP1. ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F1 ASSIGN TO "PAIE.DON" ORGANIZATION LINE SEQUENTIAL. SELECT FERROR ASSIGN TO DISK. SELECT FIMP ASSIGN TO DISK.

DATA DIVISION.
FILE SECTION. FD F1 LABEL RECORD IS STANDARD DATA RECORD EMPLOYE. 01 EMPLOYE. 02 NUM-EMPL PIC 99. 02 ZNUM-EMPL REDEFINES NUM-EMPL PIC XX. 02 CATEGORI PIC X. 02 ANNEE-EMBAUCHE PIC 99. 02 ZANNEE-EMBAUCHE REDEFINES ANNEE-EMBAUCHE PIC XX. 02 SALAIRE PIC 9999V99. 02 ZSALAIRE REDEFINES SALAIRE PIC X(6). FD FERROR VALUE OF FILE-ID "FERROR.TXT" LABEL RECORD IS STANDARD DATA RECORD ENR-ERREUR. 01 ENR-ERREUR. 02 NOM-ERREUR PIC X(77). 02 NUM-ENREGISTREMENT PIC 999. FD FIMP VALUE OF FILE-ID "IMPRIMANTE.DOC" LABEL RECORD IS STANDARD DATA RECORD LIGNE. 01 LIGNE PIC X(80). WORKING-STORAGE SECTION. 77 EOF1 PIC 9 VALUE 0. 77 I PIC 9. 77 J PIC 9. 77 ERREUR1 PIC 9 VALUE 0. 77 ERREUR2 PIC 9 VALUE 0. 77 ERREUR3 PIC 9 VALUE 0. 77 ERREUR4 PIC 9 VALUE 0. 77 ANNEE PIC 9(2) VALUE 11. 77 ANCIENNETEE PIC 99. 01 TABL. 02 VECTEUR OCCURS 5 TIMES. 03 TABLEAU PIC 99999V99 OCCURS 4 TIMES.

01 T. 02 T-1 PIC X(80). 02 T0 PIC X(80). 02 T1 PIC X(80). 02 T2 PIC X(80). 02 T3 PIC X(80). 02 T4 PIC X(80). 02 T5 PIC X(80). 02 T6 PIC X(80). 02 T7 PIC X(80). 02 T8 PIC X(80). 02 T9 PIC X(80). 02 T10 PIC X(80). 02 T11 PIC X(80). 02 T12 PIC X(80). 02 T13 PIC X(80). 02 T14 PIC X(80). 02 T15 PIC X(80). 02 T16 PIC X(80). 02 T17 PIC X(80). 02 T18 PIC X(80). 01 L0. 02 FILLER PIC X(80) VALUE SPACE. 01 L1. 02 FILLER PIC X(63) VALUE " ENTREPRISE :". 02 FILLER PIC X(3) VALUE "LE:". 01 L2. 02 FILLER PIC X(11) VALUE SPACE. 02 FILLER PIC X(69) VALUE " CUMUL DES REMUNERATIONS PAR CATEGORIE ET ANCIENNETE". 01 L3. 02 FILLER PIC X(4) VALUE SPACE. 02 FILLER PIC X(71) VALUE ALL "-". 02 FILLER PIC X(5) VALUE SPACE. 01 L4. 02 FILLER PIC X(5) VALUE " |". 02 FILLER PIC X(18) VALUE " ". 02 FILLER PIC X(12) VALUE "|". 02 FILLER PIC X(12) VALUE "|". 02 FILLER PIC X(12) VALUE "|". 02 FILLER PIC X(15) VALUE "|". 02 FILLER PIC X(5) VALUE "|". 01 ANC. 02 FILLER PIC X(80) VALUE " | Anciennete | | | | | ". 01 MOITIE. 02 FILLER PIC X(80) VALUE " | | <2 | 2 A 6 | 6 ET + | TOTAL | 01 CATEGORIE. 02 FILLER PIC X(80) VALUE " | Categorie | | | | | ". 01 SAISIE. 02 FILLER PIC X(5) VALUE " |". 02 FILLER PIC X(6) VALUE SPACE. 02 CATEG PIC X(8). 02 FILLER PIC X(4) VALUE SPACE. 02 FILLER PIC X(3) VALUE "| ".

On a utilis cette variable pour ne pas avoir trop d espace entre les lignes du tableau. Avant d utiliser cette variable on avait trop d espace entre chaque niveau 01, donc on a pens regrouper toutes ces lignes en une variable ; donc un seul niveau 01 .

".

On avai prfr d utiliser une expression ecritecomplet ement au lieu des FILLER et JUSTIFIED RIGHT, pour bien voir le dessin du tableau

02 INF2 PIC 9(5)V,99. 02 FILLER PIC X(3) VALUE " |". 02 FILLER PIC X(2) VALUE " ". 02 DEUXSIX PIC 9(5)V,99. 02 FILLER PIC X(3) VALUE " |". 02 FILLER PIC X(2) VALUE " ". 02 SIXPLUS PIC 9(5)V,99. 02 FILLER PIC X(3) VALUE " |". 02 FILLER PIC X(3) VALUE " ". 02 TOTAL PIC 9(6)V,99. 02 FILLER PIC X(9) VALUE " | ". 01 COMPTEUR-ENR PIC 999. 01 GETCH PIC X.

Ici on a prfr utiliser une ligne qui contient une variablecateg qui prendra les valeurs (A,B,C,D,ENSEMBLE) au lieu d crire chaque ligne indpendamment

PROCEDURE DIVISION.
DEBUT. MOVE 0 TO TABL. OPEN INPUT F1 OUTPUT FERROR FIMP. READ F1 AT END MOVE 1 TO EOF1. PERFORM TRAITEMENT UNTIL EOF1 = 1. PERFORM AFFICHAGE. ACCEPT GETCH. CLOSE F1 FIMP FERROR. STOP RUN. Afficher le tableau

Traiter tout le tableau

TRAITEMENT. MOVE 0 TO ERREUR1. MOVE 0 TO ERREUR2. MOVE 0 TO ERREUR3. MOVE 0 TO ERREUR4. MOVE 1 TO I. MOVE 1 TO J. ADD 1 TO COMPTEUR-ENR. PERFORM TESTE-ERREUR. READ F1 AT END MOVE 1 TO EOF1.

Avant tout, aprs chaque lecture d un enregistrement, on teste s il y a erreur ou pas. On recommence cette procedurejusqua la fin du fichier PAIE.DON.

On affecte 1 a l erreur correspondante et on excute le paragraphe ERREUR, sinon, s il n y a pas d erreur on excute le paragraphe TESTE TESTE-ERREUR. IF ZNUM-EMPL IS NOT NUMERIC MOVE 1 TO ERREUR1. IF CATEGORI is NOT = "A" AND CATEGORI IS NOT = "B" AND CATEGORI is NOT = "C" AND CATEGORI is NOT = "D" MOVE 1 TO ERREUR2. IF ZANNEE-EMBAUCHE IS NOT NUMERIC MOVE 1 TO ERREUR3. IF ZSALAIRE IS NOT NUMERIC MOVE 1 TO ERREUR4. IF ERREUR1 = 0 AND ERREUR2 = 0 AND ERREUR3 = 0 AND ERREUR4 = 0 PERFORM TESTE ELSE PERFORM ERREUR.

TESTE. On teste et on remplit le TABLEAU SUBTRACT ANNEE-EMBAUCHE FROM ANNEE GIVING ANCIENNETEE. a l aide des variables I et J . IF ANCIENNETEE < 2 AND CATEGORI = "A" MOVE 1 TO I MOVE 1 TO J. IF ANCIENNETEE < 2 AND CATEGORI = "B" MOVE 2 TO I MOVE 1 TO J. IF ANCIENNETEE < 2 AND CATEGORI = "C" MOVE 3 TO I MOVE 1 TO J. IF ANCIENNETEE < 2 AND CATEGORI = "D" MOVE 4 TO I MOVE 1 TO J. IF ANCIENNETEE IS NOT LESS THAN 2 AND ANCIENNETEE < 5 AND CATEGORI = "A" MOVE 1 TO I MOVE 2 TO J. IF ANCIENNETEE IS NOT LESS THAN 2 AND ANCIENNETEE < 5 AND CATEGORI = "B" MOVE 2 TO I MOVE 2 TO J. IF ANCIENNETEE IS NOT LESS THAN 2 AND ANCIENNETEE < 5 AND CATEGORI = "C" MOVE 3 TO I MOVE 2 TO J. IF ANCIENNETEE IS NOT LESS THAN 2 AND ANCIENNETEE < 5 AND CATEGORI = "D" MOVE 4 TO I MOVE 2 TO J. IF ANCIENNETEE IS NOT LESS THAN 5 AND CATEGORI = "A" MOVE 1 TO I MOVE 3 TO J. IF ANCIENNETEE IS NOT LESS THAN 5 AND CATEGORI = "B" MOVE 2 TO I MOVE 3 TO J. IF ANCIENNETEE IS NOT LESS THAN 5 AND CATEGORI = "C" MOVE 3 TO I MOVE 3 TO J. IF ANCIENNETEE IS NOT LESS THAN 5 AND CATEGORI = "D" MOVE 4 TO I MOVE 3 TO J. PERFORM REMPLIR-TABLEAU. REMPLIR-TABLEAU. Ici si on a une erreur dans ADD SALAIRE TO TABLEAU (I , J). l enregistrement, on affecte ADD SALAIRE TO TABLEAU (5 , J). ADD SALAIRE TO TABLEAU (I , 4). le bon msg a la ligne qu on va ADD SALAIRE TO TABLEAU (5 , 4). afficher et le numero de l enregistrement correspondent ERREUR. IF ERREUR1 = 1 MOVE "NUMERO D'EMPLOYE INVALIDE ==> ENREGISTREMENT NUM:" TO NOM-ERREUR MOVE COMPTEUR-ENR TO NUM-ENREGISTREMENT PERFORM AFFICHER-ERREUR. IF ERREUR2 = 1 MOVE "CATEGORIE INVALIDE==>ENREGISTREMENT NUM:" TO NOM-ERREUR MOVE COMPTEUR-ENR TO NUM-ENREGISTREMENT PERFORM AFFICHER-ERREUR. IF ERREUR3 = 1 MOVE "ANNEE D'EMBAUCHE INVALIDE==>ENREGISTREMENT NUM:" TO NOM-ERREUR MOVE COMPTEUR-ENR TO NUM-ENREGISTREMENT PERFORM AFFICHER-ERREUR. IF ERREUR4 = 1 MOVE "SALAIRE INVALIDE==>ENREGISTREMENT NUM:" TO NOM-ERREUR MOVE COMPTEUR-ENR TO NUM-ENREGISTREMENT PERFORM AFFICHER-ERREUR. AFFICHER-ERREUR. WRITE ENR-ERREUR. MOVE " " TO ENR-ERREUR. WRITE ENR-ERREUR. AFFICHAGE. DISPLAY L1. WRITE LIGNE FROM L1. DISPLAY L0. Pour l affichage , on affecte chaque case du tableau WRITE LIGNE FROM L0. TABLEAU a la variable correspondante et on affecte la DISPLAY L2. WRITE LIGNE FROM L2. ligne remplie au niveaux 2 de la variable T , avec MOVE L3 TO T-1. l ordre qu on veut afficher . PERFORM BLOCK-TITRE. PERFORM BLOCK-A. PERFORM BLOCK-B. PERFORM BLOCK-C. PERFORM BLOCK-D.

PERFORM BLOCK-ENSEMBLE. DISPLAY T. WRITE LIGNE FROM T. BLOCK-TITRE. MOVE ANC TO T0. MOVE MOITIE TO T1. MOVE CATEGORIE TO T2. MOVE L3 TO T3. BLOCK-A. MOVE L4 TO T4. MOVE " A" TO CATEG. MOVE TABLEAU (1 , 1) TO INF2. MOVE TABLEAU (1 , 2) TO DEUXSIX. MOVE TABLEAU (1 , 3) TO SIXPLUS. MOVE TABLEAU (1 , 4) TO TOTAL. MOVE SAISIE TO T5. MOVE L3 TO T6. BLOCK-B. MOVE L4 TO T7. MOVE " B" TO CATEG. MOVE TABLEAU (2 , 1) TO INF2. MOVE TABLEAU (2 , 2) TO DEUXSIX. MOVE TABLEAU (2 , 3) TO SIXPLUS. MOVE TABLEAU (2 , 4) TO TOTAL. MOVE SAISIE TO T8. MOVE L3 TO T9. BLOCK-C. MOVE L4 TO T10. MOVE " C" TO CATEG. MOVE TABLEAU (3 , 1) TO INF2. MOVE TABLEAU (3 , 2) TO DEUXSIX. MOVE TABLEAU (3 , 3) TO SIXPLUS. MOVE TABLEAU (3 , 4) TO TOTAL. MOVE SAISIE TO T11. MOVE L3 TO T12. BLOCK-D. MOVE L4 TO T13. MOVE " D" TO CATEG. MOVE TABLEAU (4 , 1) TO INF2. MOVE TABLEAU (4 , 2) TO DEUXSIX. MOVE TABLEAU (4 , 3) TO SIXPLUS. MOVE TABLEAU (4 , 4) TO TOTAL. MOVE SAISIE TO T14. MOVE L3 TO T15. BLOCK-ENSEMBLE. MOVE L4 TO T16. MOVE "ENSEMBLE" TO CATEG. MOVE TABLEAU (5 , 1) TO INF2. MOVE TABLEAU (5 , 2) TO DEUXSIX. MOVE TABLEAU (5 , 3) TO SIXPLUS.

MOVE TABLEAU (5 , 4) TO TOTAL. MOVE SAISIE TO T17. MOVE L3 TO T18.

BIDON. EXIT.

Vous aimerez peut-être aussi