ch7 résumé

Chapitre VIII: D'autres programmes indéxés







Et maintenant la même chose avec ICREER.


Programme ICREER

Programme IVOIR

Programme IMODIFIER

Programme ISUPPRIMER

Programme ILISTER

Que font ces programmes indéxés ?




Programme ICREER (avec des doublons)



IDENTIFICATION DIVISION.
PROGRAMM-ID.ICREER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-ALL-FORMATS OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE OUTPUT FPERSONNEL.
TQ.
        INITIALIZE PERSONNE1.
        WRITE EGRILLE FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR PERSONNE1 TO ENRPERS.
        WRITE EPERSONNEL INVALID KEY DISPLAY "ERREUR".
        GO TO TQ.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        STOP RUN.



WITH DUPLICATES


Nous allons traiter tous les programmes avec des indexes identiques (doublons).

Retour au programme ICREER.




Programme IVOIR




IDENTIFICATION DIVISION.
PROGRAMM-ID.IVOIR.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
        SELECT FIMPR ASSIGN TO PRINTER-QSYSORT
                ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
        02 FILLER PIC X(56) VALUE SPACES.
        02 FILLER PIC X(20) VALUE " VERY GOOD SANCHEZ. ".
        02 FILLER PIC X(56) VALUE SPACES.
01 L2.
        02 FILLER PIC X(5) VALUE "NOM: ".
        02 NOM PIC X(32).
        02 FILLER PIC X(95) VALUE SPACES.
01 L3.
        02 FILLER PIC X(8) VALUE "PRENOM: ".
        02 PRENOM PIC X(32).
        02 FILLER PIC X(92) VALUE SPACES.
01 L4.
        02 FILLER PIC X(9) VALUE "ADRESSE: ".
        02 ADRESSE PIC X(96).
        02 FILLER PIC X(27) VALUE SPACES.
01 L5.
        02 FILLER PIC X(4) VALUE "CP: ".
        02 CP PIC X(5).
        02 FILLER PIC X(5) VALUE SPACES.
        02 FILLER PIC X(7) VALUE "VILLE: ".
        02 VILLE PIC X(27).
        02 FILLER PIC X(84) VALUE SPACES.
01 L6.
        02 FILLER PIC X(5) VALUE "TEL: ".
        02 TEL PIC X(20).
        02 FILLER PIC X(107) VALUE SPACES.
01 L7.
        02 FILLER PIC X(14) VALUE "SALAIRE BRUT: ".
        02 SALAIRE PIC 9(7)V,99.
        02 FILLER PIC X(103) VALUE SPACES.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F5 VALUE "05".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE INPUT FPERSONNEL OUTPUT FIMPR.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL FIMPR.
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
        IF F5 GO TO IMPRIME.
FALTERNATIVES.
        GO TO DEB.
IMPRIME.
        MOVE L1 TO LIGNE.
        WRITE LIGNE.
        MOVE CORR PERSONNE1 TO L2.
        WRITE LIGNE FROM L2 AFTER 3.
        MOVE CORR PERSONNE1 TO L3.
        WRITE LIGNE FROM L3 AFTER 1.
        MOVE CORR PERSONNE1 TO L4.
        WRITE LIGNE FROM L4 AFTER 1.
        MOVE CORR PERSONNE1 TO L5.
        WRITE LIGNE FROM L5 AFTER 1.
        MOVE CORR PERSONNE1 TO L6.
        WRITE LIGNE FROM L6 AFTER 1.
        MOVE CORR PERSONNE1 TO L7.
        WRITE LIGNE FROM L7 AFTER 1.
FIMPRIME.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.


PERFORM


Un GO TO nous envoie à une étiquette comme en assembleur, un PERFORM appelle une fonction à la fin de laquelle il faut mettre un EXIT pour reprendre le programme principale là où il s'est arrêter.

Retour au programme IVOIR.


READ FPERSONNEL NEXT AT END GO TO NONTROUVE.


La particularité de l'indéxé avec des doublons c'est que l'on cherche le premier indexe de façon normal et les autres de façon séquentiel. De ce fait, on a un NEXT AT END qui permet, si le fichier est terminé, d'effectuer une action.

Retour au programme IVOIR.


IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.


Ce IF permet quand à lui de repérer si l'indexe correspond toujours dans notre recherche séquentiel. En effet, si nous avons 3 DUPONT dans le fichier, la recherche indéxée nous amène sur le premier. La recherche séquentielle nous amène sur le second et le troisième. Une fois que l'on a passé ces trois là, on se retrouve sur un autre nom qui ne correspond plus à l'indexe (par exemple TRUCMUCHE). De ce fait, le IF exclu cette possibilitée et nous évite le parcour du fichier entier quoique de toute façon, en appuyant sur F3, on quitte le programme.

Retour au programme IVOIR.


WRITE LIGNE FROM L2 AFTER 3.


Comme je l'ai déjà expliqué, les grilles, les impressions et les fichiers fonctionnent de la même façon. Par conséquent, on envoi vers l'imprimante la ligne à imprimer par la commande WRITE. Celui-ci prendra les informations contenues dans L2 grace à la commande FROM. Le AFTER précise que l'on passe 3 lignes avant d'imprimer. On peut aussi utiliser BEFORE.

Retour au programme IVOIR.



Programme IMODIFIER




IDENTIFICATION DIVISION.
PROGRAMM-ID.IMODIFIER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE I-O FPERSONNEL.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL .
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
FALTERNATIVES.
        MOVE CORR PERSONNE1 TO ENRPERS.
        REWRITE EPERSONNEL FORMAT "PERSONNEL".
        GO TO DEB.


REWRITE EPERSONNEL FORMAT "PERSONNEL".


Cela réécrit les modifications sur l'emplacement dans l'ancien enregistrement. Cette manipulation est plus communément appellée Mise A Jour ou plus simplement modification.

Retour au programme IMODIFIER




Programme ISUPPRIMER




IDENTIFICATION DIVISION.
PROGRAMM-ID.ISUPPRIMER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F6 VALUE "06".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE I-O FPERSONNEL.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL .
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
        IF F6 GO TO SUPPRIME.
FALTERNATIVES.
        GO TO DEB.
SUPPRIME.
        DELETE FPERSONNEL RECORD INVALID KEY GO TO NONTROUVE.
        MOVE "EMPLOYE LOURDE, TAPER LE CLAVIER" TO MESS.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
FSUPPRIME.
        CLOSE FGRILLE FPERSONNEL.
        GO TO DEBUT.


DELETE FPERSONNEL RECORD INVALID KEY GO TO NONTROUVE.


L'anglais est une langue bien faite tout de même. En regardant le nom du programme est la première commande de cette ligne, on en déduit en un clin d'oeil qu'il sagit de l'effacement d'un enregistrement avec vérification de la clé (index).

Retour au programme ISUPPRIMER




Programme ILISTER




IDENTIFICATION DIVISION.
PROGRAMM-ID.ILISTER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE SEQUENTIAL.
        SELECT FIMPR ASSIGN TO PRINTER-QSYSORT
                ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
        02 FILLER PIC X(56) VALUE SPACES.
        02 FILLER PIC X(20) VALUE " VERY GOOD SANCHEZ. ".
        02 FILLER PIC X(56) VALUE SPACES.
01 L2.
        02 FILLER PIC X(5) VALUE "NOM: ".
        02 NOM PIC X(32).
        02 FILLER PIC X(95) VALUE SPACES.
01 L3.
        02 FILLER PIC X(8) VALUE "PRENOM: ".
        02 PRENOM PIC X(32).
        02 FILLER PIC X(92) VALUE SPACES.
01 L4.
        02 FILLER PIC X(9) VALUE "ADRESSE: ".
        02 ADRESSE PIC X(96).
        02 FILLER PIC X(27) VALUE SPACES.
01 L5.
        02 FILLER PIC X(4) VALUE "CP: ".
        02 CP PIC X(5).
        02 FILLER PIC X(5) VALUE SPACES.
        02 FILLER PIC X(7) VALUE "VILLE: ".
        02 VILLE PIC X(27).
        02 FILLER PIC X(84) VALUE SPACES.
01 L6.
        02 FILLER PIC X(5) VALUE "TEL: ".
        02 TEL PIC X(20).
        02 FILLER PIC X(107) VALUE SPACES.
01 L7.
        02 FILLER PIC X(14) VALUE "SALAIRE BRUT: ".
        02 SALAIRE PIC 9(7)V,99.
        02 FILLER PIC X(103) VALUE SPACES.
PROCEDURE DIVISION.
DEBUT.
        OPEN INPUT FPERSONNEL OUTPUT FIMPR.
        MOVE L1 TO LIGNE.
        WRITE LIGNE.
TQ.
        READ FPERSONNEL AT END GO TO FIN.
        MOVE CORR PERSONNE1 TO L2.
        WRITE LIGNE FROM L2 AFTER 3.
        MOVE CORR PERSONNE1 TO L3.
        WRITE LIGNE FROM L3 AFTER 1.
        MOVE CORR PERSONNE1 TO L4.
        WRITE LIGNE FROM L4 AFTER 1.
        MOVE CORR PERSONNE1 TO L5.
        WRITE LIGNE FROM L5 AFTER 1.
        MOVE CORR PERSONNE1 TO L6.
        WRITE LIGNE FROM L6 AFTER 1.
        MOVE CORR PERSONNE1 TO L7.
        WRITE LIGNE FROM L7 AFTER 1.
FTQ.
        GO TO TQ.
FIN.
        CLOSE FPERSONNEL FIMPR.
        GOBACK.


ACCESS MODE SEQUENTIAL.


Le fichier est indéxé mais pour imprimer tous les enregistrements du premier au dernier, le mieux est de l'ouvrir en sequentiel.

Retour au programme ILISTER




Que font ces programmes indéxés ?


Le programme ICREER est le même que celui vu dans le chapître VI à part qu'il permet d'avoir des index indentiques (doublons). De plus, comme je l'ai déjà expliqué, en indéxé, les programmes de création et d'ajout sont les mêmes.

Le programme IVOIR permet de visualiser un employé. On saisie sont nom dans une grille et le programme affiche l'employé correspondant. On peut aussi l'imprimer.

Le programme IMODIFIER sert à modifier les données d'un employé comme son adresse ou son numéro de téléphone. Il utilise la commande REWRITE. Tout ce que contient ce programme et les suivants a été vu dans les chapitres précédents. Et vu que vous n'êtes pas tous idiots, comme tout informaticien qui se respecte, le code est évident...

Le programme ISUPPRIMER efface un enregistrement et le programme ILISTER imprime tous les enregistrements. Ce programme à la particularité d'être déclaré en ACCESS MODE SEQUENTIAL afin de préciser que exeptionnellement on y accède en séquentiel.

Enfin, comme dans les programmes précédents:

Tout cela doit ce trouver sur les grilles d'écran.

La grille d'écran PERSONNE1 contient toutes les infos du fichier PERSONNEL. Chaque zone de données a le même nom et la même taille que dans le fichier PERSONNEL sans oublier que ces zones sont définies en +B. La grille PERSONNE2 possède une zone NEMPLOYE définie en +I et une zone MESS définie en +O. La grille PERSONNE3 est le menu avec une zone CHOIX définie en +I et la grille PERSONNE4 une zone MESSA définie en +O.

Vous avez remarqué que nous n'avons pas fait de programme IMENU. C'est tout simplement que ce programme est le même que SMENU avec un programme en plus et les noms de programmes différents; donc étant donné que maintenant vous êtes grands, vous arriverez sûrement à le créer vous même sinon, laissez tomber l'informatique, c'est pas pour vous!!!



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE