cours0708/P5B/cobol/exercices/insee.cbl
2008-11-25 22:11:16 +01:00

115 lines
3.7 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. insee.
AUTHOR. OD.
*---------------------------------------------------------------*
* PROGRAMME *
* CONTROLE VALIDITE NUMERO INSEE *
*---------------------------------------------------------------*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*--------------------------*
* DEFINITION DES VARIABLES *
*--------------------------*
01 CD-INSEE.
* Code Homme/Femme, 1 = homme, 2 = femme
05 CD-SX PICTURE 9 VALUE ZERO.
* Code année de naissance
05 CD-NSSNC PICTURE 99 VALUE ZERO.
* Code mois de naissance
05 CD-MS-NSSNC PICTURE 99 VALUE ZERO.
* Code département
* Enlever les départements non existants, et 2A pour Corse,
* ainsi que 2B
05 CD-DPRTMNT PICTURE XX.
* Code commune
05 CD-CMMNE PICTURE 999 VALUE ZERO.
* Code registre
05 CD-RGSTR PICTURE 999 VALUE ZERO.
* Clé de contrôle
05 CL-CTRL PICTURE 99 VALUE ZERO.
* ERREURS
* Booléen permettant de dire s'il y a erreur ou pas
* Initialisé à 0 pour l'instant
01 ERR-BLN PICTURE 9 VALUE LOW-VALUE.
* Nom erreur
01 ERR-NM PICTURE X(20) VALUE SPACE.
PROCEDURE DIVISION.
* Nom du programme, ici PROGRAMME
PROGRAMME SECTION.
* Demande du numéro
DEBUT.
DISPLAY "Tapez votre numéro INSEE : " WITH NO ADVANCING.
ACCEPT CD-INSEE.
* Affichage des valeurs entrées
AFFICHAGE.
DISPLAY "Sexe : " CD-SX.
DISPLAY "Année de naissance : " CD-NSSNC.
DISPLAY "Mois de naissance : " CD-MS-NSSNC.
DISPLAY "Département de naissance : " CD-DPRTMNT.
DISPLAY "Commune : " CD-CMMNE.
DISPLAY "Code registre : " CD-RGSTR.
DISPLAY "Clé de contrôle : " CL-CTRL.
* STOP RUN.
* Contrôles de validité
CONTROLE SECTION.
* Contrôle du sexe
SEXE.
IF NOT (CD-SX EQUAL TO 1 OR CD-SX EQUAL TO 2) THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE "sexe." TO ERR-NM.
* Contrôle sur type code sexe
SEXETYPE.
IF CD-SX IS NOT NUMERIC THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE "sexe non numérique." TO ERR-NM.
* Contrôle sur mois de naissance
MOISNAISSANCE.
IF (CD-MS-NSSNC EQUAL TO 0 OR CD-MS-NSSNC GREATER THAN 12)
THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE "mois de naissance." TO ERR-NM.
* Contrôle sur type code mois de naissance
MOISNAISSANCETYPE.
IF CD-MS-NSSNC IS NOT NUMERIC THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE "année de naissance non numérique." TO ERR-NM.
* Contrôle sur département
DEPARTEMENT.
IF CD-DPRTMNT EQUAL TO "2A" THEN
MOVE "19" TO CD-DPRTMNT
IF CD-DPRTMNT EQUAL TO "2B" THEN
MOVE "18" TO CD-DPRTMNT
IF (CD-DPRTMNT EQUAL TO "96" OR CD-DPRTMNT EQUAL TO 0)
THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE "mauvais département".
* Contrôle sur type code département
DEPARTEMENTTYPE.
IF CD-DPRTMNT IS NOT NUMERIC THEN
MOVE HIGH-VALUE TO ERR-BLN
MOVE
* Affichage du résultat
RESULTAT SECTION.
* Affichage de l'erreur
ERREUR.
IF ERR-BLN EQUAL TO HIGH-VALUE THEN
DISPLAY "Erreur sur : " ERR-NM
ELSE
DISPLAY "Aucune erreur.".
STOP RUN.