Le langage COBOL


COBOL est le langage de programmation le plus utilisé depuis l'invention des ordinateurs. Il a été créé au début des années 60 pour les besoins de l'administration américaine, qui avait besoin d'un langage standardisé pour la programmation des applications de gestion.

Ses qualités intrinsèques (accent mis sur la lisibilité et la portabilité des programmes, facilité d'emploi des divers types de fichiers, traitement uniforme des données), et sa disponibilité sur toutes les machines commercialisées, en font un outil toujours très apprécié dans l'industrie. On évalue le stock de programmes COBOL en activité à plus de 7 milliards de lignes !

Le langage Cobol est défini par des normes internationales qui suivent, à chaque révision, l'évolution des techniques de programmation, tout en restant aussi compatible que possible avec la norme précédente. La norme actuelle (COBOL 85) intègre notamment les acquis de la programmation structurée, et de la modularité. La prochaine version, prévue pour 1996, permettra la programmation par objets.

Pour plus de détails, nous conseillons au lecteur de lire les informations extraites du groupe de nouvelles comp.lang.cobol

Un exemple de programme COBOL

    IDENTIFICATION DIVISION.

    program-id. Parking.
    author. M Billaud.

*****************************************************************
*   gestion d'un parking prive
*****************************************************************

    ENVIRONMENT DIVISION.
    input-output section.
    file-control.
        select F-PARKING assign to "f-parking"
        organization is indexed
        access is dynamic
        record key PLAQUE
        alternate record key PROPRIETAIRE
            with duplicates.

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

    DATA DIVISION.

        FILE SECTION.

    fd F-PARKING.
    01 ENR-PARKING.
      02 PLAQUE     pic x(8).
      02 PROPRIETAIRE pic x(20).
      02 VEHICULE   pic x(20).
      02 PRESENT    pic x(1).


    WORKING-STORAGE SECTION.

* Constantes utiles ...

    77 VRAI     pic x   value "T".
    77 FAUX     pic x   value "F".
    77 CHOIX    pic x.

* variables et indicateurs ...

    77 PROPRIETAIRE-CHERCHE pic x(20).
    77 FF-PARKING   pic x.
    77 FIN-TRAVAIL  pic x.
    77 VEHICULE-EXISTE pic x.
    77 LIBELLE-QUESTION pic x(30).
    77 LIGNE-PARAMETRES pic x(80).

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

    PROCEDURE DIVISION.
    PRINCIPALE SECTION.

    TRAITEMENT.
*       ouverture, boucle principale, fermeture et fin.
*
        accept LIGNE-PARAMETRES.
        open i-o F-PARKING.
        move FAUX to FIN-TRAVAIL.
        perform MENU-PRINCIPAL
          until FIN-TRAVAIL = VRAI.
        close F-PARKING.
        stop run.       


    MENU-PRINCIPAL. 
*       affichage du menu principal
*       et aiguillage vers les differentes actions

        display "Entree, Sortie, Inscriptions, Listes, Fin".
        accept CHOIX.
        evaluate choix 
        when "E" perform entree-vehicule
        when "S" perform sortie-vehicule
        when "I" perform inscriptions
        when "L" perform listes
        when "F" move VRAI to FIN-TRAVAIL
        when other display "Commande non comprise" CHOIX
        end-evaluate.
    
    ENTREE-VEHICULE.
*       demande la plaque du vehicule qui entre,
*       verifie qu'il est dans le fichier et change l'indicateur
*       de presence.

        move  "Immatriculation du vehicule qui entre ? "
            to LIBELLE-QUESTION.
        perform CHERCHER-VEHICULE.
        if VEHICULE-EXISTE = VRAI
          then if PRESENT = VRAI
            then display "Il est deja rentre au parking !"
            else move VRAI to PRESENT
                 rewrite ENR-PARKING
                 display "Entree enregistree:"
                 perform AFFICHAGE
            end-if
          else display "Ce vehicule n'est pas enregistre"  
        end-if.


    SORTIE-VEHICULE.
*       idem pour les vehicules qui sortent.

        move "Immatriculation du vehicule qui sort ? "
            to LIBELLE-QUESTION.
        perform CHERCHER-VEHICULE.
        if VEHICULE-EXISTE = VRAI
          then if PRESENT = FAUX
            then display "Il est deja sorti du parking !"
            else move FAUX to PRESENT
                 rewrite ENR-PARKING
                 display "Sortie enregistree:"
                 perform AFFICHAGE
            end-if
          else display "Ce vehicule n'est pas enregistre"  
        end-if.

            
    CHERCHER-VEHICULE.
*       demande la plaque d'un vehicule, et lit 
*       l'enregistrement correspondant
*       positionne l'indicateur VEHICULE-EXISTE

        display LIBELLE-QUESTION.
        accept PLAQUE.
        read F-PARKING key is PLAQUE
        invalid key     move FAUX to VEHICULE-EXISTE
        not invalid key move VRAI to  VEHICULE-EXISTE
        end-read.

    INSCRIPTIONS.
*       Sous-menu des insriptions

        display "Inscrire, Supprimer, Rien".
        accept CHOIX.
        evaluate CHOIX
        when "I" perform INSCRIRE
        when "S" perform SUPPRIMER
        when "R" display "Ok"
        when other
           display "Choix non compris, retour menu principal"
        end-evaluate.

    INSCRIRE.
*       saisie et enregistrement d'une inscription

        display "Immatriculation du vehicule a inscrire".
        accept PLAQUE.
        display "Nom du proprietaire ?".
        accept PROPRIETAIRE.
        display "Description du vehicule ?".
        accept VEHICULE.
        move FAUX to PRESENT.

        write ENR-PARKING
        invalid key
            display "Vehicule deja enregistre !"
        not invalid key 
            display "Vehicule enregistre: "
            perform AFFICHAGE
        end-write.

    SUPPRIMER.
*       saisie plaque du vehicule a supprimer,
*       puis suppression effective

        move  "Immatriculation du vehicule a supprimer ?"
            to LIBELLE-QUESTION.
        perform CHERCHER-VEHICULE.
        if VEHICULE-EXISTE = VRAI
        then display "Suppression de :"
            perform AFFICHAGE
            delete F-PARKING record
        else
             display "Je n'ai pas ce vehicule"
        end-if.

    LISTES.
*       sous menu des listes: par plaque ou par proprietaire

        display "Vehicule, Proprietaire ?".
        accept CHOIX.
        evaluate CHOIX
        when "V" perform liste-vehicule
        when "P" perform liste-proprietaire
        end-evaluate.

    LISTE-VEHICULE.
*       recherche d'un vehicule

        move "Immatriculation du vehicule ? "
             to LIBELLE-QUESTION.
        perform CHERCHER-VEHICULE.
        if VEHICULE-EXISTE = VRAI
           display "Vehicule recherche:"
           perform AFFICHAGE
        else
           display "Pas trouve"
        end-if.

    LISTE-PROPRIETAIRE.
*       saisie du nom du proprietaire
*       et affichage de tous ses vehicules

        display "Nom du Proprietaire ?"
        accept Proprietaire.
        move proprietaire to proprietaire-cherche.
        start F-parking key is = proprietaire
        invalid key 
          display PROPRIETAIRE-CHERCHE "sans vehicule ici"
        not invalid key
            perform boucle-proprietaire
        end-start.


    BOUCLE-PROPRIETAIRE.
*       boucle de lecture et affichage.

        move FAUX to FF-PARKING.
        move PROPRIETAIRE to PROPRIETAIRE-CHERCHE.
        Display "Vehicules appartenant a " PROPRIETAIRE ":"
        perform until FF-PARKING = VRAI
            read F-PARKING next record into ENR-PARKING
            at end move VRAI to FF-PARKING
            not at end 
                if PROPRIETAIRE = PROPRIETAIRE-CHERCHE
                  then perform AFFICHAGE
                  else move VRAI to FF-PARKING
                end-if
            end-read
        end-perform.
        display "* fin de liste".

    AFFICHAGE.
*       affichage de l'enregistrement 

        display "Vehicule " PLAQUE
            " appartenant a " PROPRIETAIRE.
        display "description: " VEHICULE.
        if PRESENT = VRAI
            display "Present au parking"
        else
            display "Sorti du Parking"
        end-if.

Références principales :


Michel Billaud