Module A206 Programmation fichiers – COBOL Chapitre 6 COBOL

Transcription

Module A206 Programmation fichiers – COBOL Chapitre 6 COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
COBOL par la pratique
1. Introduction
1.1 Organisation
Ce chapitre est entièrement dédié à la pratique, exercices, tests... qu'il s'agisse de petits exercices spécifiques ou
de séries de devoirs en temps limité, en passant par des sujets de travaux pratiques (TP par la suite), courts ou
longs. Il est organisé de la façon suivante :
Module A206
•
(version V3)
•
Programmation fichiers – COBOL
•
•
Chapitre 6
une première partie regroupe un ensemble d'exercices, souvent très courts, d'application immédiate des
notions vues dans les chapitres précédents. Elle est elle-même structurée en fonction des différents
chapitres sur lesquels portent les divers énoncés. Les exercices sont, dans la plupart des cas, des bouts
de programmes.
une deuxième partie regroupe une série de travaux dirigés (TD par la suite), chacun abordant diverses
notions de manipulation de fichiers. Il s'agit d'exercices généraux de mise en application de tout ce qui a
été vu dans le cours, du langage aux algorithmes de cinématique de fichiers en passant par la
manipulation de bases de données. Chaque TD est calibré pour correspondre au travail à réaliser en
deux heures de temps. Beaucoup de sujets sont toutefois extensibles, des questions complémentaires
permettant à ceux qui le souhaitent d'approfondir leurs connaissances. Ces extensions n'ont pas été
prises en compte dans le calcul de la durée "normale" d'une séance de TD.
une troisième partie regroupe des sujets de ce que nous appelons à Nantes des "gros" TP. Véritables
mini-études de cas, elles occupent des équipes de 4 ou 5 étudiants pour une dizaine d'heures. Le travail
de chacun étant précisé, il est possible de tout réaliser seul, moyennant quatre ou cinq fois plus de
temps, bien sûr !
une quatrième partie regroupe des épreuves en temps limité. Véritable annale d'examens, elle comprend
des sujets de devoirs sur table (prévus pour 90 minutes) et des sujets d'examens (également prévus pour
durer 90 minutes). Il s'agit de sujets réellement posés à nos étudiants, au fil des années.
1.2 Corrigés et icones
COBOL par la pratique
Des corrigés existent pour la quasi-totalité de ces éléments (y compris pour les corrigés d'examens ou les gros
TP). Certains sont accessibles en ligne ; d'autres sont fournis à la demande. Ces corrigés sont doubles, algorithme
d'un côté, programme de l'autre. Le tout est signalé selon le code iconographique suivant :
solutions disponibles
solutions à la demande
Alain Vailly
Pour certains, des aides sont proposées. Elles permettront à un apprenant bloqué de reprendre ses esprits et de
[email protected]
repartir vers la solution. Elles sont signalées par l'icone "traditionnelle" : un clic sur
l'aide correspondante.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 1 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
donne accès à
Page 2 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
1.3 Compilateurs (à propos de)
COBOL par la pratique
Les réponses aux problèmes ont été compilées en langage PERCobol de la société Legacy. Elles ont été
exécutées sur la même machine. Il est donc possible que l'on obtienne des résultats différents selon les
configurations matérielles et logicielles employées.
Nous avons prévu, plus tard, d'utiliser un compilateur "libre". Ceci sera fait dès que possible. Les diverses
solutions proposées ici doivent donc être considérées comme provisoires... exactes, mais provisoires.
Module A206 : Programmation fichiers - COBOL
2- Exercices d'application
Les exercices recensés ici sont destinés à illustrer certains points précis des différents chapitres de ce module. Ils
sont classés en fonction des chapitres dont ils permettent la maîtrise. On trouvera ainsi :
16/10/12
•
•
•
dans la section 1, les exercices relatifs au chapitre COBOL, un langage de programmation,
dans la section 2, ceux relatifs au chapitre COBOL et la cinématique de fichiers,
dans la section 3, ceux relatifs au chapitre COBOL et la manipulation des bases de données,
Il n'y a pas, pour l'instant, d'exercices relatifs au chapitre 5, COBOL et le génie logiciel. Cette situation n'est que
provisoire.
2.1- Exercices sur le langage lui-même
Les exercices recensés ici sont destinés à illustrer certains points précis du chapitre COBOL, un langage de
programmation de ce module. Ils sont classés en fonction des notions dont ils permettent la maîtrise. On trouvera
ainsi :
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Fiche 1 : IDENTIFICATION et ENVIRONMENT DIVISION
Fiche 2 : définition de variables de travail
Fiche 3 : définition de fichiers
Fiche 4 : ordres de calcul
Fiche 5 : déplacements de variables (ordre MOVE)
Fiche 6 : entrées / sorties
Fiche 7 : structures de contrôle
Fiche 8 : formats d'impression
Fiche 9 : affichage et saisie d'écrans
Fiche 10 : définition d'écrans
Fiche 11 : définition d'états
Fiche 12 : tris de fichiers
Fiche 13 : sous-programmes
Fiche 14 : tableaux
Tous ces exercices sont corrigés. Les solutions sont toutefois masquées et accessibles uniquement à la demande.
Pour les visualiser, il suffit de cliquer sur l'icone suivante :
La solution apparaît alors dans une fenêtre que l'on peut déplacer pour visualiser question et réponse en même
temps.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 3 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 4 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.1 Fiche 1 : IDENTIFICATION et ENVIRONMENT
DIVISION
Campus International e-mi@ge
PRENOM
ADRESSE
Module A206 : Programmation fichiers - COBOL
prénom de l'emprunteur
adresse de l'emprunteur
2) enregistrement du fichier EXEMPLAIRE (nom système : fexempli.dat)
DATEMP
NBJ
COTE
NOEXPL
NOID
date, 8 chiffres entier 3 chiffres entier 3 chiffres entier 2 chiffres entier 3 chiffres entier
Exercice 1 :
9 (8)
Écrire le morceau de programme COBOL qui permet d'identifier les programmes suivants :
1.
2.
3.
nom du programme : ESSAI1
nom du programme : ESSAI2
nom du programme : 2EMEESSAI
9 (3)
9 (3)
9 (2)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des rubriques COTE et
NOEXPL. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné cidessous :
nom de l'auteur : Jean DUPOND
nom de l'auteur : Pierre BONTE
DATEMP
NBJ
COTE
NOEXPL
NOID
Exercice 2 :
date d'emprunt (sous la forme AAAAMMJJ) s'il y a prêt ; 0 sinon
nombre de jours prévus pour le prêt ; 0 sinon
identifiant de l'ouvrage
numéro de l'exemplaire
identifiant de l'emprunteur, si l'exemplaire est en prêt ; 0 sinon
3) enregistrement du fichier OUVRAGE (nom système fouvri.dat) :
Écrire le morceau de programme COBOL qui permet de décrire les environnements de travail suivants :
COTE
1.
2.
3.
4.
5.
ordinateur servant à la compilation : PC6, partie entière et partie décimale séparées par un
point
partie entière et parties décimale séparées par une virgule, symbole monétaire : euro, deux
fichiers, F1 (nom système f1.dat) et F2 (nom système f2.dat), tous deux séquentiels
trois fichiers, F1 (nom système f1.dat) en séquentiel indexé, accès séquentiel, clé ZONEA ; F2
(nom système f2.dat) en séquentiel ; F3 (nom système f3.dat) en séquentiel indexé, accès
séquentiel, clé (ZONEB, ZONEC)
trois fichiers, F1 (nom système f1.dat) en séquentiel indexé, accès direct, clé principale
ZONEA, clé secondaire ZONEB -pas de doublons- ; F2 (nom système f2.dat) en séquentiel
indexé, clé principale ZONEC, accès dynamique ; F3 (nom système f3.dat) en séquentiel
deux fichiers, F1 (nom système f1.dat) en séquentiel indexé, accès dynamique, clé principale
FZONEA, clé secondaire avec doublons FZONEB ; F2 (nom système f2.dat) en relatif, clé
FZONEC
TITRE
CATEGORIE
entier 3 chiffres 40 alpha. num. 25 alpha. num.
9 (3)
X (40)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
TITRE
CATEGORIE
identifiant de l'ouvrage
titre de l'ouvrage
genre dans lequel est classé l'ouvrage
4) enregistrement du fichier STATISTIQUES (nom système fstati.dat) :
NBRFOIS
COTE
NOID
entier 2 chiffres entier 3 chiffres entier 3 chiffres
9 (2)
Exercice 3 :
Soient les quatre fichiers suivants : EMPRUNTEUR, EXEMPLAIRE, OUVRAGE et STATISTIQUES.
1) enregistrement du fichier EMPRUNTEUR (nom système fempri.dat) :
NOID
NOM
PRENOM
ADRESSE
9 (3)
X (20)
X (20)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques COTE et
NOID. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné ci-dessous :
NBRFOIS
COTE
NOID
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
nombre de fois qu'un ouvrage a été emprunté par la personne désignée par NOID
identifiant de l'ouvrage
identifiant de l'emprunteur
Écrire le morceau de programme correspondant à cet environnement de travail. Seule la division
ENVIRONMENT est demandée. Tous les fichiers sont supposés utilisés en accès direct et en accès séquentiel.
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NOID. Le sens de chaque
rubrique est donné ci-dessous :
NOID
NOM
identifiant de l'emprunteur
nom de l'emprunteur
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 5 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 6 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
4) enregistrement du fichier A-FAIRE (nom système fprog.dat) :
CODCOUR
Exercice 4 :
9 (3)
Soient les cinq fichiers suivants : COUREUR, ENTRAINEUR, SEMAINE, A-FAIRE et FAIT.
1) enregistrement du fichier COUREUR (nom système fcour.dat) :
CODCOUR
NOM
PRENOM
ADRESSE
TOTAL-KM-FAITS ENTRAINEUR
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODCOUR. Il dispose d'une clé
secondaire, ENTRAINEUR. Le sens de chaque rubrique est donné ci-dessous :
CODCOUR
NOM
PRENOM
ADRESSE
TOTAL-KM-FAITS
ENTRAINEUR
KM-A-FAIRE
CODENTR
NOM
PRENOM
X (20)
CODCOUR
CODSEM
KM-A-FAIRE
numéro du coureur
numéro de la semaine
nombre de kilomètres prévus pour le coureur cette semaine
5) enregistrement du fichier FAIT (nom système freal.dat) :
9 (3)
CODSEM
KM-FAITS
99
9 (4)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOURS
CODSEM
KM-FAITS
DIPLOME
X (20)
9 (4)
entier 3 chiffres entier 2 chiffres entier 4 chiffres
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
99
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOUR
identifiant du coureur
nom du coureur
du coureur
adresse du coureur
nb total de kilomètres parcourus depuis le début de l'année
numéro de l'entraîneur
2) enregistrement du fichier ENTRAINEUR (nom système fentr.dat) :
numéro du coureur
numéro de la semaine
nombre de kilomètres réalisés par le coureur dans la semaine
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro d'entraîneur (CODENTR). Le
sens de chaque rubrique est donné ci-dessous :
CODENTR
NOM
PRENOM
DIPLOME
CODSEM
entier 3 chiffres entier 2 chiffres entier 4 chiffres
Écrire le morceau de programme correspondant à cet environnement de travail. Seule la division
ENVIRONMENT est demandée. Tous les fichiers SAUF SEMAINE sont supposés utilisés en accès direct et en
accès séquentiel. Le fichier SEMAINE est utilisé uniquement en accès direct.
numéro de l'entraîneur
nom de l'entraîneur
prénom de l'entraîneur
plus haut diplôme possédé par l'entraîneur
3) enregistrement du fichier SEMAINE (nom système fsem.dat) :
CODSEM
GRANDTOUR
entier 2 chiffres
10 alpha.
9 (2)
X (10)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro de semaine CODSEM. Le sens de
chaque rubrique est donné ci-dessous :
CODSEM
numéro de la semaine (de 1 à 52)
GRANDTOUR nom du grand tour se déroulant pendant la semaine
La variable GRANDTOUR peut prendre les valeurs suivantes : FRANCE, GIRO, VUELTA, NULL, selon que
la semaine est une semaine de grand tour ou non.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 7 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 8 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
DATEMP
NBJ
COTE
NOEXPL
NOID
.1.2 Fiche 2 : définition des variables de travail
Module A206 : Programmation fichiers - COBOL
date d'emprunt (sous la forme AAAAMMJJ) s'il y a prêt ; 0 sinon
nombre de jours prévus pour le prêt ; 0 sinon
identifiant de l'ouvrage
numéro de l'exemplaire
identifiant de l'emprunteur, si l'exemplaire est en prêt ; 0 sinon
3) enregistrement du fichier OUVRAGE (nom système fouvri.dat) :
Exercice 1 :
COTE
Écrire les déclarations COBOL des variables suivantes :
1.
2.
3.
4.
5.
6.
TITRE
CATEGORIE
entier 3 chiffres 40 alpha. num. 25 alpha. num.
booléen WTROUVE pouvant prendre les valeurs A et B, celles-ci étant nommées VRAI (pour A) et
FAUX (pour B),
indice WI servant à parcourir un tableau de dix éléments,
variable WCHOIX qui peut prendre cinq valeurs (0, 1, 2, 3 et 4), les deux premières étant associées à un
traitement PROC1, la troisième à un traitement PROC2, les deux dernières (3 et 4) l'étant au traitement
PROC3,
variable WRESU de 10 caractères alphanumériques, initialisée avec des espaces,
variable WTOTAL, nombre réel de 5 chiffres dont 2 décimales, initialisée à 19.6 (notation américaine)
et servant à cumuler des montants,
variable WREP servant à recueillir la réponse à une question, celle-ci pouvant être erronée (n'importe
quoi, y compris des lettres) ou correcte (ie. prenant une valeur 1 ou 2).
9 (3)
X (40)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
TITRE
CATEGORIE
identifiant de l'ouvrage
titre de l'ouvrage
genre dans lequel est classé l'ouvrage
4) enregistrement du fichier STATISTIQUES (nom système fstati.dat) :
NBRFOIS
COTE
NOID
entier 2 chiffres entier 3 chiffres entier 3 chiffres
9 (2)
9 (3)
9 (3)
Exercice 2 :
Soient les quatre fichiers suivants : EMPRUNTEUR, EXEMPLAIRE, OUVRAGE et STATISTIQUES.
NBRFOIS
COTE
NOID
1) enregistrement du fichier EMPRUNTEUR (nom système fempri.dat) :
NOID
NOM
PRENOM
ADRESSE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques COTE et
NOID. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné ci-dessous :
nombre de fois qu'un ouvrage a été emprunté par la personne désignée par NOID
identifiant de l'ouvrage
identifiant de l'emprunteur
Écrire le morceau de programme permettant de décrire les structures correspondant aux enregistrements des
fichiers.
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NOID. Le sens de chaque
rubrique est donné ci-dessous :
NOID
NOM
PRENOM
ADRESSE
Exercice 3 :
identifiant de l'emprunteur
nom de l'emprunteur
prénom de l'emprunteur
adresse de l'emprunteur
Soient les cinq fichiers suivants : COUREUR, ENTRAINEUR, SEMAINE, A-FAIRE et FAIT.
1) enregistrement du fichier COUREUR (nom système fcour.dat) :
2) enregistrement du fichier EXEMPLAIRE (nom système : fexempli.dat)
DATEMP
NBJ
COTE
NOEXPL
CODCOUR
NOID
date, 8 chiffres entier 3 chiffres entier 3 chiffres entier 2 chiffres entier 3 chiffres entier
9 (8)
9 (3)
9 (3)
9 (2)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des rubriques COTE et
NOEXPL. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné cidessous :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 9 / 97
NOM
PRENOM
ADRESSE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
TOTAL-KM-FAITS ENTRAINEUR
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODCOUR. Il dispose d'une clé
secondaire, ENTRAINEUR. Le sens de chaque rubrique est donné ci-dessous :
CODCOUR
identifiant du coureur
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 10 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
NOM
nom du coureur
PRENOM
prénom du coureur
ADRESSE
adresse du coureur
TOTAL-KM-FAITS
nombre total de kilomètres parcourus depuis le début de l'année
ENTRAINEUR numéro de l'entraîneur
2) enregistrement du fichier ENTRAINEUR (nom système fentr.dat) :
CODENTR
NOM
PRENOM
X (20)
X (20)
Module A206 : Programmation fichiers - COBOL
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
99
9 (4)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOURS
CODSEM
KM-FAITS
DIPLOME
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
Campus International e-mi@ge
numéro du coureur
numéro de la semaine
nombre de kilomètres réalisés par le coureur dans la semaine
X (25)
Écrire le morceau de programme permettant de décrire les structures de ces fichiers.
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro d'entraîneur (CODENTR). Le
sens de chaque rubrique est donné ci-dessous :
CODENTR
NOM
PRENOM
DIPLOME
numéro de l'entraîneur
nom de l'entraîneur
prénom de l'entraîneur
plus haut diplôme possédé par l'entraîneur
3) enregistrement du fichier SEMAINE (nom système fsem.dat) :
CODSEM
GRANDTOUR
entier 2 chiffres
10 alpha.
9 (2)
X (10)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro de semaine CODSEM. Le sens de
chaque rubrique est donné ci-dessous :
CODSEM
numéro de la semaine (de 1 à 52)
GRANDTOUR nom du grand tour se déroulant pendant la semaine
La variable GRANDTOUR peut prendre les valeurs suivantes : FRANCE, GIRO, VUELTA, NULL, selon que
la semaine est une semaine de grand tour ou non.
4) enregistrement du fichier A-FAIRE (nom système fprog.dat) :
CODCOUR
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
99
9 (4)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOUR
CODSEM
KM-A-FAIRE
numéro du coureur
numéro de la semaine
nombre de kilomètres prévus pour le coureur cette semaine
5) enregistrement du fichier FAIT (nom système freal.dat) :
CODCOUR
CODSEM
KM-FAITS
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 11 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 12 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
ADRESSE
adresse du coureur
TOTAL-KM-FAITS
nombre total de kilomètres parcourus depuis le début de l'année
ENTRAINEUR numéro de l'entraîneur
2.1.3 Fiche 3 : définitions de fichiers
2) enregistrement du fichier ENTRAINEUR (nom système fentr.dat) :
Exercice 1 :
CODENTR
Soit le fichier séquentiel ETUDIANT (nom système fetud.dat) suivant :
NUM
NOM
PRENOM
9 (3)
ADR
ANAISS
X (20)
X (20)
PRENOM
DIPLOME
X (25)
X (20)
X (20)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro d'entraîneur (CODENTR). Le
sens de chaque rubrique est donné ci-dessous :
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num. entier 4 chiffres
9 (3)
NOM
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (4)
CODENTR
NOM
PRENOM
DIPLOME
a) Donner la partie du programme COBOL décrivant la clause SELECT.
b) Donner la partie du programme COBOL correspondant à la section des fichiers.
numéro de l'entraîneur
nom de l'entraîneur
prénom de l'entraîneur
plus haut diplôme possédé par l'entraîneur
3) enregistrement du fichier SEMAINE (nom système fsem.dat) :
Exercice 2 :
Soient deux fichiers FCLIENT (nom système fclient.dat) et FFOURNISSEUR (nom système ffour.dat). Les
enregistrements de ces deux fichiers séquentiels sont identiques. Ils correspondent à ceci :
NOM
ADRESSE
PRODUIT
PRIXTTC
X (25)
X (20)
GRANDTOUR
10 alpha.
9 (2)
X (10)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro de semaine CODSEM. Le sens de
chaque rubrique est donné ci-dessous :
QUANTITE
CODSEM
numéro de la semaine (de 1 à 52)
GRANDTOUR nom du grand tour se déroulant pendant la semaine
20 alpha. num. 25 alpha. num. 20 alpha. num. entier 4 chiffres entier 4 chiffres
X (20)
CODSEM
entier 2 chiffres
9 (4)
9 (4)
La variable GRANDTOUR peut prendre les valeurs suivantes : FRANCE, GIRO, VUELTA, NULL, selon que
la semaine est une semaine de grand tour ou non.
Décrire en COBOL l'environnement de travail, les fichiers et leurs enregistrements.
4) enregistrement du fichier A-FAIRE (nom système fprog.dat) :
CODCOUR
Exercice 3 :
9 (3)
Soient les cinq fichiers suivants : COUREUR, ENTRAINEUR, SEMAINE, A-FAIRE et FAIT.
1) enregistrement du fichier COUREUR (nom système fcour.dat) :
CODCOUR
NOM
PRENOM
ADRESSE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
TOTAL-KM-FAITS ENTRAINEUR
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODCOUR. Il dispose d'une clé
secondaire, ENTRAINEUR. Le sens de chaque rubrique est donné ci-dessous :
CODCOUR
NOM
PRENOM
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
9 (4)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOUR
CODSEM
KM-A-FAIRE
numéro du coureur
numéro de la semaine
nombre de kilomètres prévus pour le coureur cette semaine
5) enregistrement du fichier FAIT (nom système freal.dat) :
CODCOUR
identifiant du coureur
nom du coureur
prénom du coureur
99
CODSEM
KM-FAITS
entier 3 chiffres entier 2 chiffres entier 4 chiffres
Page 13 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 14 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
9 (3)
99
Campus International e-mi@ge
9 (4)
Module A206 : Programmation fichiers - COBOL
COTE
TITRE
CATEGORIE
entier 3 chiffres 40 alpha. num. 25 alpha. num.
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOURS
CODSEM
KM-FAITS
numéro du coureur
numéro de la semaine
nombre de kilomètres réalisés par le coureur dans la semaine
9 (3)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
TITRE
CATEGORIE
Décrire en COBOL l'environnement de travail, les fichiers et leurs enregistrements.
X (40)
identifiant de l'ouvrage
titre de l'ouvrage
genre dans lequel est classé l'ouvrage
4) enregistrement du fichier STATISTIQUES (nom système fstati.dat) :
NBRFOIS
Exercice 4 :
COTE
NOID
entier 2 chiffres entier 3 chiffres entier 3 chiffres
9 (2)
On dispose de quatre fichiers : EMPRUNTEUR, EXEMPLAIRE, OUVRAGE et STATISTIQUES. Leur structure
est la suivante :
1) enregistrement du fichier EMPRUNTEUR (nom système fempri.dat) :
NOID
NOM
PRENOM
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques COTE et
NOID. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné ci-dessous :
NBRFOIS
COTE
NOID
ADRESSE
9 (3)
nombre de fois qu'un ouvrage a été emprunté par la personne désignée par NOID
identifiant de l'ouvrage
identifiant de l'emprunteur
Décrire en COBOL l'environnement de travail, les fichiers et leurs enregistrements.
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NOID. Le sens de chaque
rubrique est donné ci-dessous :
NOID
NOM
PRENOM
ADRESSE
identifiant de l'emprunteur
nom de l'emprunteur
prénom de l'emprunteur
adresse de l'emprunteur
2) enregistrement du fichier EXEMPLAIRE (nom système : fexempli.dat)
DATEMP
NBJ
COTE
NOEXPL
NOID
date, 8 chiffres entier 3 chiffres entier 3 chiffres entier 2 chiffres entier 3 chiffres entier
9 (8)
9 (3)
9 (3)
9 (2)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des rubriques COTE et
NOEXPL. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné cidessous :
DATEMP
NBJ
COTE
NOEXPL
NOID
date d'emprunt (sous la forme AAAAMMJJ) s'il y a prêt ; 0 sinon
nombre de jours prévus pour le prêt ; 0 sinon
identifiant de l'ouvrage
numéro de l'exemplaire
identifiant de l'emprunteur, si l'exemplaire est en prêt ; 0 sinon
3) enregistrement du fichier OUVRAGE (nom système fouvri.dat) :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 15 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 16 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.4 Fiche 4 : ordres de calcul
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.5 Fiche 5 : déplacements de variables (ordre MOVE)
NB : un certain nombre d'exercices proches sont disponibles sur la fiche traitant des formats d'impression.
Exercice 1 :
Donner les instructions COBOL permettant de calculer le salaire brut d'une employé à partir de deux variables
NBH-REELLES et TAUX-HORAIRE. Les heures au delà de la trente-cinquième et en deça de la quarantième sont
payées avec une majoration de 25 %, celles entre 40 et 48 avec une majoration de 50 %. Le cas où NBHREELLES est supérieur à 48 correspond à un cas d'erreur. Le salaire brut, dans ce cas particulier, est égal à 0. Par
hypothèse, NBH-REELLES a une valeur supérieure ou égale à 0.
Exercice 2 :
Soient les cinq formats suivants de la variable WZONE :
•
•
•
•
•
a) PIC XX / XX / XX
b) PIC X(8) JUSTIFIED RIGHT
c) PIC X(8)
d) PIC X(6) JUSTIFIED RIGHT
e) PIC X(6)
Donner le résultat de l'exécution des instructions MOVE ZEROES TO WZONE et MOVE "BONJOUR" TO
WZONE.
Donner les instructions COBOL permettant de calculer les expressions suivantes :
•
•
•
Exercice 1 :
X = (B / C) + B - (C x D)
Y = ((B + C) / D) - (C / (E + F))
Z = (((A + B) ** 2) / (A - B)) + A - (B + C)
Exercice 2 :
Les différents opérandes seront exprimés par des variables A, B...
Soient les cinq formats suivants de la variable WZONE :
•
•
•
•
•
•
Exercice 3 :
Soit l'instruction COBOL suivante :
1
7 A
B
COMPUTE X = (Y - 20) * Z * 2 + 20 * Z.
a) PIC 9(4)
b) PIC S9(4)
c) PIC S9(2)V99
d) PIC A(4)
e) PIC XXX/XX
f) PIC Z99.99
Donner le résultat de l'exécution des instructions MOVE ZEROES TO WZONE, MOVE 17 TO WZONE et
MOVE SPACES TO WZONE.
Exprimer la même chose sans l'ordre COMPUTE, uniquement avec ADD, DIVIDE, MULTIPLY et
SUBTRACT.
Exercice 3 :
Donner le résultat de l'instruction MOVE appliquée aux situations suivantes :
Valeur variable de départ
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 17 / 97
Format variable arrivée
O1
074.38
S9(4)V99
O2
074.38
S9(4)V9(3)
O3
-074.38
999V999
O4
-074.38
$99V999
O5
-074.38
$$$.999
O6
-074.38
$$$.99DB
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 18 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
O7
HIGH-VALUES
99999
O8
HIGH-VALUES
X(7)
O9
SPACES
9(5)
10
"******"
X(3)
11
"******"
A(3)
12
"BONJOUR"
X(4)
13
"BONJOUR"
X(4) JUSTIFIED RIGHT
14
"OK"
X(4)
15
"OK"
X(4) JUSTIFIED RIGHT
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.6 Fiche 6 : entrées - sorties
REMARQUE : la manipulation de fichiers constitue l'essence même d'un programme COBOL. Il y a donc de
très nombreux exercices nécessitant l'emploi de ces ordres d'entrées - sorties. En plus des exercices ci-après, on
pourra consulter les autres parties de ce chapitre consacré à la pratique, notamment les fiches de TD ou les sujets
de TP.
Exercice 1 :
Soient les quatre fichiers suivants : COUREUR, ENTRAINEUR, A-FAIRE et FAIT.
1) enregistrement du fichier COUREUR (nom système fcour.dat) :
Exercice 4 :
CODCOUR
Donner le format approprié des variables accueillant :
•
•
•
•
•
NOM
PRENOM
ADRESSE
TOTAL-KM-FAITS ENTRAINEUR
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
un numéro de sécurité sociale (sans espace, ni tiret),
un numéro de sécurité sociale, avec tirets,
le prénom d'une personne (maximum 20 caractères),
un taux de TVA (cette variable devant permettre de calculer le montant TTC d'une commande),
un taux de TVA imprimé sur une facture.
9 (3)
X (20)
X (20)
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODCOUR. Il dispose d'une clé
secondaire, ENTRAINEUR. Le sens de chaque rubrique est donné ci-dessous :
CODCOUR
identifiant du coureur
NOM
nom du coureur
PRENOM
prénom du coureur
ADRESSE
adresse du coureur
TOTAL-KM-FAITS
nombre total de kilomètres parcourus depuis le début de l'année
ENTRAINEUR numéro de l'entraîneur
Exercice 5 :
Écrire les instructions COBOL permettant, après récupération d'une date sous la forme AAMMJJ, de la
transformer en JJ-MM-AAAA. Les deux premiers chiffres de l'année seront supposés égaux à 20.
2) enregistrement du fichier ENTRAINEUR (nom système fentr.dat) :
CODENTR
NOM
PRENOM
DIPLOME
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro d'entraîneur (CODENTR). Le
sens de chaque rubrique est donné ci-dessous :
CODENTR
NOM
PRENOM
DIPLOME
numéro de l'entraîneur
nom de l'entraîneur
prénom de l'entraîneur
plus haut diplôme possédé par l'entraîneur
3) enregistrement du fichier A-FAIRE (nom système fprog.dat) :
CODCOUR
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 19 / 97
99
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
9 (4)
Page 20 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOUR
CODSEM
KM-A-FAIRE
READ F.
MOVE X TO F-ENR.
série C :
7 A B
READ F.
MOVE F-ENR TO X.
•
série D :
1
KM-FAITS
7 A B
READ F INTO X.
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
99
Module A206 : Programmation fichiers - COBOL
7 A B
1
4) enregistrement du fichier FAIT (nom système freal.dat) :
CODSEM
1
•
numéro du coureur
numéro de la semaine
nombre de kilomètres prévus pour le coureur cette semaine
CODCOUR
Campus International e-mi@ge
9 (4)
F-ENR est le nom de l'enregistrement du fichier F, X une variable de travail ayant le même format que F-ENR.
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOURS
CODSEM
KM-FAITS
Exercice 4 :
numéro du coureur
numéro de la semaine
nombre de kilomètres réalisés par le coureur dans la semaine
Expliquer la différence entre les quatre séries d'instructions suivantes :
Donner les instructions qui permettent d'ouvrir ces fichiers sachant qu'il faut consulter COUREUR et
ENTRAINEUR et mettre à jour A-FAIRE et FAIT.
•
série A :
1
7 A B
MOVE X TO F-ENR.
WRITE F-ENR.
•
série B :
1
Exercice 2 :
7 A B
WRITE F-ENR.
MOVE X TO F-ENR.
Soit le fichier COUREUR (nom système fcour.dat) suivant :
•
CODCOUR
NOM
PRENOM
ADRESSE
TOTAL-KM-FAITS ENTRAINEUR
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
Le numéro de coureur est calculé par le système, à partir du dernier attribué. Donner la combinaison d'ordres
d'ouvertures de fichiers qui permet de calculer le numéro à attribuer à un nouveau coureur. Le fichier, par
hypothèse, est trié sur les numéros de coureurs croissants. Il est en organisation séquentielle.
série C :
1
7 A B
WRITE F-ENR.
MOVE F-ENR TO X.
•
série D :
1
7 A B
WRITE F-ENR FROM X.
F-ENR est le nom de l'enregistrement du fichier F, X une variable de travail ayant le même format que F-ENR.
Exercice 3 :
Exercice 5 :
Expliquer la différence entre les quatre séries d'instructions suivantes :
•
Soit le fichier CLIENT (nom système fclient.dat) suivant :
série A :
1
7 A B
NOMCLIENT ANCIENNETE
MOVE X TO F-ENR.
READ F.
•
20 alpha. num. entier 2 chiffres
X (20)
série B :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 21 / 97
9 (2)
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 22 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Le sens de chaque rubrique est donné ci-dessous :
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.7 Fiche 7 : structures de contrôle
NOMCLIENT nom sous lequel le client est connu
ANCIENNETE nombre d'années passées depuis la première commande du client
Donner les instructions COBOL qui permettent de modifier, pour chaque client, son ancienneté (en ajoutant 1 à
l'ancienne). Le nombre d'enregistrements du fichier n'est pas modifié (il y a autant de clients avant et après le
traitement). Le fichier est en organisation SÉQUENTIELLE.
Exercice 1 :
Donner DEUX traductions COBOL différentes de l'algorithme suivant :
Exercice 6 :
a) Reprendre l'exercice précédent en supprimant tous les clients ayant plus de 20 ans d'ancienneté.
b) Que se passe-t-il si le fichier CLIENT est en organisation séquentielle indexée ?
Exercice 2 :
En supposant que les appels de procédure sont traduits par un ordre CALL et en exprimant les différentes
structures Gi.tamp par des variables TAMPI, traduire les algorithmes suivants en COBOL :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 23 / 97
•
algorithme 1 :
•
algorithme 2 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 24 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Exercice 3 :
Écrire le morceau de programme qui récupère (par un ordre ACCEPT) le choix de l'utilisateur et appelle le sousprogramme correspondant (par un ordre CALL), selon la "logique" décrite dans l'écran principal MENU :
Exercice 5 :
Écrire en COBOL le morceau de programme qui permet de calculer la somme des éléments d'un tableau de 10
éléments entiers. La déclaration suivante sera utilisée :
1
7 A
01
B
WTABLEAU1.
02 ELEMENT OCCURS 10 PIC 9(5).
Exercice 4 :
Donner DEUX traductions COBOL des algorithmes suivants :
•
algorithme 1 :
•
algorithme 2 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 25 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 26 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
2.1.8 Fiche 8 : formats d'impression
NB : un certain nombre d'exercices proches sont disponibles sur la fiche traitant des déplacements de variables
(ordre MOVE).
Module A206 : Programmation fichiers - COBOL
O3
S99
12
O4
S99
-12
O5
99
+12
O6
XXX
-12
O7
XXX
+12
O8
XXX
12
Exercice 1 :
Donner le résultat de l'exécution de l'instruction MOVE ZERO to B, avec B défini comme suit :
•
•
•
•
•
•
•
•
•
a) PIC X(5)
b) PIC A(5)
c) PIC ZZ.ZZ
d) PIC ZZ,ZZ.99
e) PIC ZZ,ZZ.Z9
f) PIC S9(3)V9(2)
g) PIC S**,***.**
h) PIC XX-XX-XX
i) PIC XXBXXBXX
Exercice 4 :
Compléter le tableau ci-après :
Format variable départ Valeur variable départ Format variable d'arrivée Valeur variable d'arrivée
Exercice 2 :
O1
9(5)
03785
X(5)
O2
X(6)
"CHELAS"
X(6)
O3
X(6)
123456
X(6)
O4
9(3)
007
9(3)
O5
S9(4)
0123
9(4)
O6
999V99
16789
999V99
O7
999V99
16789
999.99
O8
S99
+12
99+
Indiquer pour chaque format ci-après s'il s'agit de variables alphanumériques, numériques, numériques éditées ou
alphabétiques.
•
•
•
•
•
•
•
•
•
•
•
a) 9(3)V99
b) Z99
c) A(15)
d) X(7)
e) S99V
f) 99P9
g) $$.$9
h) S9(4).9
i) 99/99
j) AA/AAA
k) AABAAA
Exercice 5 :
Compléter le tableau ci-après :
Format variable départ Valeur variable départ Format variable d'arrivée Valeur variable d'arrivée
Exercice 3 :
O1
9(3)
489
O2
9(4)
4891
9(4)
9(3)
O3
9(5)V99
12345^67
9(4)V9
O4
X(5)
"HELAS"
BBX(4)
O5
S9(5)
-11223
+9(4)
O6
S9(5)
-11223
-9(4)
Le caractère "^" a été mis pour signaler la présence d'une virgule. Celle-ci n'occupe toutefois pas de place en
mémoire.
Indiquer, en fonction du format et de la valeur, la nature des variables suivantes :
Format variable Valeur variable
O1
XXX
" "
O2
XXX
"ABC"
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 27 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 28 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.9 Fiche 9 : affichage et saisie d'écrans
Reprendre l'exercice précédent en utilisant une SCREEN SECTION. N'utiliser que le strict minimum au niveau
des effets vidéo (BLANK LINE, BLANK SCREEN, REQUIRED).
Exercice 1 :
Exercice 3 :
Soit le fichier ETUDIANT (nom système fetud.dat) suivant :
Soit le fichier OUVRAGE (nom système fouvri.dat) suivant :
NOID
NOM
PRENOM
ADRESSE
COTE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NOID. Le sens de chaque
rubrique est donné ci-dessous :
NOID
NOM
PRENOM
ADRESSE
TITRE
CATEGORIE
entier 3 chiffres 40 alpha. num. 25 alpha. num.
identifiant de l'étudiant
nom de l'étudiant
prénom de l'étudiant
adresse de l'étudiant
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
TITRE
CATEGORIE
Écrire les instructions COBOL permettant d'en saisir le contenu, selon le modèle suivant, tant que l'utilisateur le
veut :
X (40)
identifiant de l'ouvrage
titre de l'ouvrage
genre dans lequel est classé l'ouvrage
Écrire les instructions COBOL permettant d'en saisir le contenu, selon le modèle suivant, tant que l'utilisateur le
veut :
La saisie s'arrête lorsque la côte saisie est égale à 000. Dans ce cas, ni le titre, ni la catégorie ne sont demandées.
Par hypothèse, il n'y a que six ouvrages par écran, la saisie pouvant en concerner plus.
Exercice 2 :
Exercice 4 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 29 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 30 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Reprendre l'exercice précédent en utilisant une SCREEN SECTION. N'utiliser que le strict minimum au niveau
des effets vidéo (BLANK LINE, BLANK SCREEN, REQUIRED).
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.10 Fiche 10 : définition d'écrans
Exercice 1 :
Soit l'écran suivant :
Écrire le morceau de programme permettant de définir les lignes correspondant à cet écran de saisie. Les
variables présentes dans cet état ont les formats suivants :
Date jour
AAAAMMJJ
Nom applicatif Nom fonction
25 caractères
alphabétiques
15 caractères
alphabétiques
Message
Liste
Choix
60 caractères 60 caractères 1 caractère
quelconques quelconques quelconque
Le nom de l'applicatif peut faire jusqu'à 20 caractères, celui de la fonction jusqu'à 2. Le message d'erreur
correspond à 40 caractères, la liste des invites à 20. La zone de recueil du choix, enfin, a un format PIC 9.
Exercice 2 :
Soit l'écran suivant :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 31 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 32 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Soit l'écran suivant :
Écrire le morceau de programme permettant de définir les lignes correspondant à l'écran de saisie MENU.
Écrire le morceau de programme permettant de définir les lignes correspondant à cet écran de saisie. Le
positionnement des différents champs dans l'écran est laissé à la discrétion du concepteur.
Exercice 3 :
Soit l'écran suivant :
Écrire le morceau de programme permettant de définir les lignes correspondant à l'écran de saisie MENU.
Exercice 4 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 33 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 34 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.11 Fiche 11 : définition d'états
Exercice 1 :
Soit l'état suivant :
Écrire le morceau de programme permettant de définir les lignes correspondant à cet état. Les différentes
variables mentionnées dans l'état ont les formats suivants :
Nom coureur
20 caractères
alphabétiques
Écrire le morceau de programme permettant de définir les lignes correspondant à cet état. Les différentes
variables mentionnées dans l'état ont les formats suivants :
Nom coureur
20 caractères
alphabétiques
Prénom coureur Adresse coureur Numéro semaine
10 caractères
alphabétiques
25 caractères
quelconques
entier, 2 chiffres
Kms prévus
Kms réalisés
Prénom coureur Adresse coureur Numéro semaine
10 caractères
alphabétiques
25 caractères
quelconques
entier, 2 chiffres
Kms prévus
Kms réalisés
entier, 4 chiffres entier, 4 chiffres
Exercice 4 :
Reprendre l'exercice précédent en utilisant une REPORT SECTION. Les éléments chiffrés de la page sont les
suivants :
entier, 4 chiffres entier, 4 chiffres
•
•
•
•
Le fichier dans lequel cet état sera imprimé fait 81 caractères par ligne.
pas plus de 65 lignes par page,
une entête en ligne 5 (de 5 à 11 inclus),
un bas de page flottant (situé après la dernière ligne),
une seule page par coureur.
A chaque coureur, on changera donc de page.
Exercice 2 :
Reprendre l'exercice précédent en utilisant une REPORT SECTION. Les éléments chiffrés de la page sont les
suivants :
•
•
•
•
pas plus de 65 lignes par page,
une entête en ligne 5 (de 5 à 9 inclus),
un bas de page flottant (situé après la dernière ligne),
un maximum de 50 coureurs par page, pour une même semaine.
A chaque nouvelle semaine, on changera de page.
Exercice 3 :
Soit l'état suivant :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 35 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 36 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Reprendre le programme précédent et remplacer l'impression préalable par la partie de saisie - contrôle évoquée
dans l'exercice 3.
2.1.12 Fiche 12 : tris de fichiers
Exercice 1 :
Soit le fichier FETUD (nom système fetud.dat) suivant :
NUMERO
NOM
PRENOM
ADR
ANAISS
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num. entier 4 chiffres
9 (3)
X (20)
X (20)
X (25)
9 (4)
Donner les éléments du programme COBOL qui trie le fichier selon l'ordre croissant des numéros (déclarations
de fichiers, instructions d'ouverture, ordre de tri). Le fichier après tri sera mémorisé "dans" le fichier non trié (ie.
à sa place).
Exercice 2 :
Écrire le programme qui trie le fichier FETUD décrit dans l'exercice précédent sur l'année de naissance en
majeur (en ordre décroissant), sur le nom et le prénom en mineur (en ordre alphabétique croissant).
Exercice 3 :
Reprendre le programme de l'exercice 1 en ajoutant, avant le tri, une procédure de saisie à l'écran des
informations et de vérification de l'année de naissance et du numéro. Les enregistrements erronés ne seront pas
stockés dans le fichier ; ils ne figureront donc pas dans le fichier trié. Cette partie exécutée avant le tri sera
traduite sous forme d'une INPUT PROCEDURE.
Exercice 4 :
a) Reprendre le programme de l'exercice 1 en ajoutant, après le tri, une procédure qui permet d'imprimer le
contenu du fichier trié. Cette partie exécutée après le tri sera traduite sous forme d'une OUTPUT PROCEDURE.
b) Indiquer ce qu'il faut modifier dans le programme pour pouvoir imprimer le fichier avant le tri. Cette
impression préalable ne sera pas traduite sous forme d'une INPUT PROCEDURE.
Exercice 5 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 37 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 38 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.13 Fiche 13 : sous-programmes
Exercice 1 :
Le problème de la permutation de deux variables est un des premiers exercices que l'on donne à faire aux
étudiants d'informatique.
a) Écrire les instructions COBOL d'un sous-programme SP qui reçoit en entrée deux paramètres A et B (ils sont
au formatX(10) tous les deux) et qui rend ces deux paramètres inversés :
Sachant que la fonction de réapprovisionnement est codée sous forme d'un sous-programme REAPRO et que
celle de pré-commande l'est sous forme d'un sous-programme PRECOM, définir les structures du fichier
PRODUIT dans le programme principal et les deux sous-programmes. Préciser l'usage qui est fait de ce fichier
dans ces trois programmes.
Exercice 4 :
Soit l'architecture d'écrans suivante :
Le sous-programme ne doit avoir que deux paramètres. Donner également les définitions des paramètres.
b) Donner les instructions COBOL correspondant à l'appel de ce sous-programme, ainsi que les définitions des
paramètres.
Exercice 2 :
Soit une date fournie sous la forme AAMMJJ. Donner le sous-programme COBOL SP qui transforme cette date
en JJ-MM-20AA. Donner les instructions COBOL du programme appelant.
Chacune des feuilles correspond à un sous-programme. Tous se comportent de la même façon. Ils sont lancés par
le menu principal, exécutent une série d'instruction (celle-ci est matérialisée dans le schéma précédent par le nom
de la fonction) puis demandent à l'utilisateur ce qu'il veut faire. Celui-ci n'a que deux choix : M (pour afficher le
menu) ou Q (pour quitter l'application).
Exercice 3 :
Un fichier PRODUIT (nom système prod.dat) décrit chaque article disponible. Sa structure est la suivante :
CODE PRODUIT
LIBELLE
CODE FOURNISSEUR
5 alpha. num.
20 alpha. num.
entier 4 chiffres
X (5)
X (20)
9 (4)
QUANTITE
PRIX HORS TAXE
entier 5 chiffres réel 5 chiffres, 2 décimales
9 (5)
999V99
Cette étape de saisie du choix se fait dans chaque sous-programme. Le choix lui-même est retourné au
programme principal qui, selon la valeur, affiche le menu (et rappelle le sous-programme demandé) ou met fin à
l'application.
a) Écrire les instructions COBOL qui, dans chaque sous-programme, se chargent de la saisie du choix.
b) Écrire les instructions COBOL du programme principal.
Ce fichier sert dans une application de gestion des commandes clients et notamment dans :
•
•
une fonction de réapprovisionnement, qui met à jour le stock ;
une fonction de pré-commande, dans laquelle les clients consultent le stock pour savoir de ce qui est
disponible.
L'architecture de cette application peut se schématiser ainsi :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 39 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 40 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.1.14 Fiche 14 : tableaux
Exercice 6 :
Soient M (i, j) une matrice de 10 x 20 éléments entiers de 2 chiffres et V (k) un vecteur de 10 éléments entiers de
2 chiffres. Écrire le programme COBOL qui calcule le produit M x V.
Exercice 1 :
a) Écrire les instructions COBOL qui définissent un tableau ANNUAIRE comprenant une série de 50 références
ayant la structure suivante :
16/10/12
b) Écrire les instructions COBOL définissant un tableau OPERATEUR de dix éléments, chacun comprenant un
chiffre (de 0 à 9) et le nom de l'opérateur téléphonique associé à cet indicatif.
c) Ne peut-on pas simplifier ce dernier tableau ?
Exercice 2 :
Initialiser le tableau ANNUAIRE en mettant tous les noms et prénoms à blanc (en chargeant SPACES dans les
cases) et les numéros de téléphone à 0.
Exercice 3 :
Initialiser le tableau OPERATEUR en saisissant à l'écran les différents indicatifs utilisables. Le tableau aura au
préalable été initialisé avec des espaces et des zéros.
Exercice 4 :
Écrire le programme COBOL qui saisit le nom et le prénom d'une personne et qui fournit le numéro de téléphone
de celle-ci si elle est connue. Dans le cas contraire, le message INCONNU sera affiché.
Exercice 5 :
Écrire le programme qui trie le tableau ANNUAIRE sur les personnes, en ordre croissant.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 41 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 42 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
•
•
2.2- Exercices de cinématique de fichiers
Les exercices recensés ici sont destinés à illustrer certains points précis du chapitre COBOL et la cinématique de
fichiers de ce module. Ils sont classés en fonction des notions dont ils permettent la maîtrise. On trouvera ainsi :
•
•
•
•
•
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
le code du département (de 01 à 98, bornes incluses),
la marque du véhicule, codée sur 2 caractères.
Le fichier est trié, en ordre croissant et en majeur, sur le code de département, en mineur sur la marque. On
souhaite connaître le nombre total de véhicules de chaque marque pour le département XX fourni à l'écran.
Donner la succession des procédures de base qui, à la suite d'une ouverture du fichier, permet de produire ce
résultat.
Fiche 1 : algorithmes de base (1)
Fiche 2 : algorithmes de base (2)
Fiche 3 : traitements multi-fichiers (1)
Fiche 4 : choix du fichier appelant
Fiche 5 : optimisations
Tous ces exercices sont corrigés. Certaines solutions sont masquées et accessibles uniquement à la "demande".
Pour les visualiser, il suffit de cliquer sur l'une des icones suivantes :
Exercice 2 :
Objectif : appréhender les concepts sous-jacents des algorithmes de base de la cinématique de fichiers
séquentiels
Le résultat demandé dans l'exercice précédent porte maintenant sur tous les départements sauf XX. Modifier
l'exercice précédent de façon à prendre en compte cette modification.
La solution apparaît alors dans une fenêtre que l'on peut déplacer pour visualiser question et réponse en même
temps.
Exercice 3 :
D'autres ne sont pas accessibles via le net, du moins pas directement. Il faut contacter les tuteurs qui disposent
d'une solution électronique et qui sont habilités à la fournir. Ces solutions distantes se reconnaissent par l'une des
icones suivantes :
Objectif : traduire en langage COBOL les algorithmes de base de la cinématique de fichiers séquentiels
Un fichier de nomenclatures fournit, pour chaque appareil fabriqué, les différentes pièces qui entrent dans sa
composition et la quantité de chacune nécessaire à sa fabrication. Le fichier est séquentiel, trié en ordre croissant
et en majeur sur le numéro d'appareil, en mineur sur le numéro de pièce.
Étant donné un appareil (on récupère son numéro à l'écran), écrire le programme COBOL qui permet de
connaître le nombre total de pièces entrant dans sa fabrication.
Ce dispositif a été adopté volontairement pour obliger les apprenants en distancé à travailler sans avoir la
solution sous les yeux. Ils ne tomberont pas dans la facilité qui consiste, lorsque l'on "sèche", à jeter un
coup d'oeil sur la solution... juste pour redémarrer. Au "Pay for View", nous préferons le "Work for
View".
Exercice 4 :
Objectif : utiliser sur un problème réel, les algorithmes de base de la cinématique de fichiers séquentiels
2.2.1 Fiche 1 : algorithmes de base (1)
Dans une banque, le fichier des mouvements du mois contient, sur chaque enregistrement, les renseignements
suivants :
•
•
Exercice 1 :
Objectif : appréhender les concepts sous-jacents des algorithmes de base de la cinématique de fichiers
séquentiels
À des fins de statistiques, on a relevé divers renseignements sur les véhicules au franchissement d'un péage
autoroutier. Chaque enregistrement du fichier séquentiel contient en particulier :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 43 / 97
le numéro du client,
le montant en centimes d'euros de chaque mouvement.
Le fichier est trié en ordre croissant selon le numéro du client. On souhaite obtenir un état dans lequel, pour
chaque client, on trouve :
•
•
•
son numéro de client,
la liste de ses mouvements,
le montant total des mouvements du client.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 44 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
On souhaite également disposer, à la fin, du montant total des mouvements effectués dans le mois, tous clients
confondus. Rédiger l'algorithme permettant de produire cet état. La forme de celui-ci pourrait être le suivant :
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.2.2 Fiche 2 : algorithmes de base (2)
Exercice 1 :
Objectif : revoir, sur un cas réel, tous les algorithmes de base de la cinématique de fichiers séquentiels
Un magasin dispose d'un fichier Produits contenant pour chaque enregistrement le code produit, le rayon où est
localisé le produit, la couleur, la quantité en stock pour la couleur considérée. Ce fichier est trié sur le code rayon
en majeur, sur le code produit en mineur.
On souhaite produire l'état suivant :
Exercice 5 :
Objectif : utiliser sur un problème réel, les algorithmes de base de la cinématique de fichiers séquentiels
Chaque enregistrement d'un fichier séquentiel contient le code INSEE, le nom, le prénom et l'adresse d'une
personne. Le fichier est trié sur le code INSEE, en ordre croissant. On souhaite vérifier que ce code INSEE
constitue bien un identifiant, c'est à dire qu'il n'est attribué qu'à une seule personne au plus. Écrire l'algorithme
qui détecte tout code multiple en affichant un message d'avertissement.
Écrire le programme COBOL correspondant.
Exercice 2 :
Objectif : revoir, sur un cas réel, tous les algorithmes de base de la cinématique de fichiers séquentiels
Refaire l'exercice précédent en considérant que l'on ne veut plus le détail par couleurs. L'état souhaité, au niveau
des produits, est modifié comme suit :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 45 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 46 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.2.3 Fiche 3 : traitements multi-fichiers (1)
Exercice 1 :
Objectif : mettre en pratique les notions vues dans le cours sur des problèmes impliquant plusieurs fichiers
séquentiels
Une société de production cinématographique dispose de deux fichiers séquentiels, le fichier des westerns et le
fichier des films noir et blanc. Chaque film est codé par un numéro international unique.
Il n'y a plus qu'une seule ligne par produit.
Pour chaque western, il y a autant d'enregistrements dans le fichier que d'acteurs ayant tourné dans le film.
Chaque enregistrement comprend le code du film et le nom de l'acteur. Le fichier des films noir et blanc contient,
pour chaque film, les informations suivantes : code du film, titre français du film.
Écrire le programme COBOL qui fournit la liste des westerns noir et blanc et, pour chacun de ces films, la liste
des acteurs y participant. Donner deux solutions, en prenant alternativement chaque fichier comme fichier
appelant.
Exercice 3 :
NB : les deux fichiers sont supposés triés sur le code film en ordre croissant.
Objectif : revoir, sur un cas réel, tous les algorithmes de base de la cinématique de fichiers séquentiels
Reprendre l'exercice précédent (ie. celui de l'exercice 2) en ajoutant dans le fichier résultat les éléments
suivants :
•
•
•
•
Il y a un maximum de 50 lignes par page, titres non compris.
Chaque page commence par le numéro de la page et un rappel (seulement si nécessaire) du numéro de
rayon.
Un changement de rayon entraîne toujours un changement de page.
Le titre de l'état (INVENTAIRE MAGASIN) est imprimé sur la première page de l'état uniquement, en
ligne 1. Son édition entraîne un saut de page.
Exercice 2 :
Objectif : mettre en pratique les notions vues dans le cours sur des problèmes impliquant plusieurs fichiers
séquentiels
Reprendre le cadre de l'exercice précédent et écrire le programme qui fournit la liste des westerns noir et blanc.
Donner deux solutions, en prenant alternativement chaque fichier comme fichier appelant.
Exercice 3 :
Objectif : mettre en pratique les notions vues dans le cours sur des problèmes impliquant plusieurs fichiers
séquentiels
Reprendre le cadre de l'exercice précédent et produire la liste des westerns noir et blanc, puis la liste de tous les
acteurs ayant participé à au moins un de ces films. Donner deux solutions en prenant alternativement chaque
fichier comme fichier appelant.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 47 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 48 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.2.5 Fiche 4 : choix du fichier appelant
Exercice 4 :
Exercice 1 :
Objectif : traiter le cas où les algorithmes standard ne s'appliquent pas
Objectif : savoir analyser un diagramme de Venn et en déduire le fichier appelant
Soient A, B et C trois fichiers séquentiels triés et X, Y et Z les trois intersections suivantes :
Donner, pour chacun des cas ci-après, toutes les solutions possibles, en indiquant à chaque fois le nom du fichier
appelant et les partitions I et J.
•
cas A :
•
cas B :
Selon le cours, il n'est pas possible de produire en une seule fois X, Y et Z.
a) Donner la solution qui commence par construire le fichier correspondant à l'union des trois fichiers, A, B et C.
b) Donner la solution qui produit d'abord X, puis ensuite Y et enfin Z.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 49 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 50 / 97
Campus International e-mi@ge
•
Module A206 : Programmation fichiers - COBOL
cas C :
Campus International e-mi@ge
•
Module A206 : Programmation fichiers - COBOL
ENFANTS :
o n° famille de l'enfant
o prénom de l'enfant
o année de naissance de l'enfant
Numéro de famille et prénom de l'enfant constituent la clé de ce fichier.
•
•
•
cas D :
FAMILLES :
o n° de la famille (c'est la clé)
o nom de la famille
o adresse de la famille
MALADIES :
o n° de famille
o prénom de l'enfant malade
o code maladie
o date de début de la maladie
Numéro de famille, prénom de l'enfant et code maladie forment la clé du fichier.
•
VACCINS :
o n° de famille
o prénom de l'enfant
o code vaccination
o date de dernier rappel
Numéro de famille, prénom de l'enfant et code vaccination constituent la clé du fichier.
ENFANTS et FAMILLES sont triés sur la clé, MALADIES et VACCINS sur le couple (numéro de famille, prénom
de l'enfant). Tous ces fichiers sont supposés sans erreur.
•
cas E :
Écrire le programme qui fournit le nom, le prénom et l'adresse des enfants n'ayant eu ni vaccination ni maladie.
Exercice 3 :
Objectif : savoir analyser un diagramme de Venn et en déduire le fichier appelant
Avec les fichiers de l'exercice précédent, écrire le programme qui fournit le nom des familles d'un ou plusieurs
enfants, aucun d'entre eux n'ayant eu de maladie.
Exercice 2 :
Objectif : savoir analyser un diagramme de Venn et en déduire le fichier appelant
Considérons une application où interviennent quatre fichiers séquentiels, ENFANTS, FAMILLES, VACCINS et
MALADIES. Ces fichiers comprennent les attributs suivants :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 51 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 52 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
2.2.6 Fiche 5 : optimisations des traitements
Exercice 2 :
Objectif : mettre en application les simplifications par factorisation
Exercice 1 :
Soient F, G1, G2, G3 des fichiers séquentiels compatibles triés sur un critère de tri de degré 1, 2, 2, 2
(respectivement). Les critères de tri sont des identifiants. La projection des fichiers sur leur souche correspond au
diagramme suivant :
Objectif : mettre en application les simplifications sémantiques
En supposant que F est le fichier appelant, indiquer quels sont les cas qu'il est inutile d'envisager pour chacun des
diagrammes de Venn ci-après.
•
cas A :
a) Donner l'algorithme non simplifié qui produit les deux résultats a1 et a2.
b) Simplifier l'algorithme.
•
cas B :
•
cas C :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 53 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 54 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
2.2- Exercices de manipulation de bases de données
Module A206 : Programmation fichiers - COBOL
COBOL par la pratique
CETTE PARTIE EST EN TRAVAUX.
3- Travaux dirigés
16/10/12
Cinq fiches de travaux dirigés (TD par la suite) ont été rédigées. Ces fiches sont classées par thèmes. L'objectif
général est de faire appel à toutes les notions vues dans les différentes sections de ce cours. Les fiches ne peuvent
donc pas être rattachées à un chapitre en particulier, mais à tous. Chacune (sauf la première) correspond grossomodo à ce qu'un étudiant "moyen" peut effectuer en deux heures. La première fiche, quant à elle, est prévue pour
durer quatre heures. Sont disponibles :
•
•
•
•
•
Fiche 1 : manipulation de fichiers séquentiels
Fiche 2 : manipulation de fichiers séquentiels (2)
Fiche 3 : manipulation de fichiers séquentiels (3)
Fiche 4 : manipulation de fichiers séquentiels-indexés
Fiche 5 : sous-programmes
Tous ces exercices sont corrigés. Certaines solutions sont masquées et accessibles uniquement à la "demande".
Pour les visualiser, il suffit de cliquer sur l'une des icones suivantes :
La solution apparaît alors dans une fenêtre que l'on peut déplacer pour visualiser question et réponse en même
temps.
D'autres ne sont pas accessibles via le net, du moins pas directement. Il faut contacter les tuteurs qui disposent
d'une solution électronique et qui sont habilités à la fournir. Ces solutions distantes se reconnaissent par l'une des
icones suivantes :
Ce dispositif a été adopté volontairement pour obliger les apprenants en distancé à travailler sans avoir la
solution sous les yeux. Ils ne tomberont pas dans la facilité qui consiste, lorsque l'on "sèche", à jeter un
coup d'oeil sur la solution... juste pour redémarrer. Au "Pay for View", nous préferons le "Work for
View".
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 55 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 56 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
3.1 Fiche 1 : manipulation de fichiers séquentiels
Exercice 3 : Programme P3
Objectif : exploitation séquentielle du fichier créé dans le programme P1.
Exercice 1 : Programme P1
Fournir la liste des 19 étudiants de fetud par paquet de 1 à 3 par écran. Le nombre d'étudiants à afficher par
paquet devra être saisi en début du programme (vérifier qu'il est compris entre 1 et 3, bornes incluses). Après
affichage des caractéristiques des étudiants d'un paquet, affichage d'une invite sur la ligne 22 et saisie de la
réponse en ligne 23, selon le modèle de l'exercice précédent.
Objectif : création d'un fichier séquentiel à partir d'une suite d'éléments saisis.
L'enregistrement du fichier fetud (nom système fetud.dat) est le suivant :
NUM
NOM
PRENOM
ADR
Attention, après affichage du dernier paquet (complet ou incomplet), seule l'invite Q)uitter doit être affichée.
Tester DEUX fois ce programme, une fois avec 1 étudiant par écran, une fois avec 2 ou 3 étudiants par paquet
(ce nombre étant fixé par vous lors du test).
ANAISS
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num. entier 4 chiffres
9 (3)
X (20)
X (20)
X (25)
9 (4)
Le numéro d'étudiant (num) devra être généré en ordre croissant (de 2 en 2 ou de 3 en 3). Le fichier devra
comporter 19 enregistrements :
5 étudiants de même nom, en MAJUSCULES ;
5 étudiants de même année de naissance ;
étudiants de même nom, en MAJUSCULES, et de même année de naissance ;
4 étudiants différents entre eux (nom, année naissance) et différents des 15 précédents.
Un écran de saisie succinct, ressemblant à celui ci-dessous, sera mis en place :
Ligne 5 (L05) NUMERO : nnn
généré
L08
NOM : XXXX---XX
saisi
L10
PRENOM : XXXX---XX
saisi
L12
ADRESSE : XXXX---XX
saisie
L14
ANNEE NAISSANCE : nnnn
saisie
L22
Valider création (répondre par O/N) : X
Exemple de mise en "page" :
L05 numéro nom prénom naissance
L06 adresse
L08 numéro nom prénom naissance
L09 adresse
L10 numéro nom prénom naissance
L11 adresse
L22 Q)uitter S)uivant ou seulement Q)uitter
L23 Votre choix (réponse Q, q, S, s) : X ou rien du tout
L23
Autre étudiant ? (répondre par O/N) : X
Si la création n'est pas validée, le numéro généré reste affiché, les zones saisies sont effacées.
Exercice 2 : Programme P2
Objectif : exploitation séquentielle du fichier créé dans le programme précédent.
Fournir la liste des 19 étudiants enregistrés dans fetud, un par écran. Après affichage des caractéristiques d'un
étudiant, affichage d'une "invite" sur la ligne 22 et saisie de la réponse en dessous, selon le modèle suivant :
L22 Q)uitter S)uivant
L23 Votre choix (réponse Q, q, S, s) : X
Attention, l'écran du dernier étudiant affiché ne doit comporter que l'invite Q)uitter. L'écran d'affichage est le
même que celui du programme P1 (à l'exception des lignes 22 et 23).
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 57 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 58 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
3.2 Fiche 2 : manipulation de fichiers séquentiels (2)
Exercice 3 : Programme P4
Objectif : écriture d'un programme intégrant les fonctionnalités des programmes précédents.
Exercice 1 : Algorithme A1
a) mise en place de la structure globale : selon le choix de l'utilisateur, les options du menu feront appel à des
procédures internes, quand elles existent. Si elles n'existent pas, le message procédure XXXX---XX pas encore
disponible sera affichée en ligne 10. L'invite suivante sera ensuite affichée :
Objectif : écriture d'un algorithme de recherche dans un fichier, le résultat pouvant être multiple.
Ecrire l'algorithme de recherche d'un ou de plusieurs étudiants dont le nom est saisi en MAJUSCULES ou non
(la fonction UPPER-CASE de mise en majuscules existe et est disponible).
Si le nom est inexistant, produire l'affichage suivant :
L10 Le nom XXXX---XX n'existe pas.
L22 Q)uitter
L23 Votre choix (réponse Q, q) : X
NB : cette invite sert uniquement à "freiner" l'ordinateur. Sans elle, l'affichage du message d'erreur serait
immédiatement (ie. à la vitesse de l'ordinateur) suivie de l'arrêt du programme et de la fermeture de la fenêtre.
L22 M)enu Q)uitter
L23 Votre choix (réponse M, m, Q, q) : X
b) mise en place des procédures internes : reprendre une grande partie (PROCEDURE DIVISION) des sources
des programmes P1, P2 et P3, en remplaçant les invites Q)uitter par M)enu Q)uitter et les intégrer dans P4. Les
réponses M ou m réaffichent le menu. Reprendre les algorithmes A1 et A2 et procéder de même. Coder en
COBOL ces algorithmes. L'écran menu est composé à partir des lignes suivantes :
Si le nom existe, en un ou plusieurs exemplaire(s), les afficher un par écran, selon la disposition suivante :
L10 numéro nom prénom naissance
L11 adresse
L22 Q)uitter C)ontinuer
L23 Votre choix ? (réponse Q, q, C, c) : X
Si tout le fichier est parcouru (si, donc, on n'a pas interrompu l'affichage de la suite d'étudiants homonymes), on
affichera les lignes suivantes :
L21 Il n'y a plus d'étudiants ayant ce nom
L22 Q)uitter
L23 Votre choix ? (réponse Q, q) : X
NB : cette dernière invite sert, comme dans l'exercice précédent, à freiner l'exécution.
Exercice 2 : Algorithme A2
Objectif : écriture d'un algorithme de recherche dans un fichier, le résultat étant unique.
Ecrire l'algorithme de recherche d'un étudiant après saisie de son numéro. Si ce numéro n'existe pas, l'algorithme
réagira de la même façon que dans l'exercice précédent (avec un message d'erreur modifié). S'il existe, il y aura
affichage des caractéristiques de l'étudiant sur les lignes L10 et L11, puis de l'invite suivante :
Une ligne analogue à la première (et à la troisième) sera imprimée en bas de l'écran (ligne L24). La ligne 22 sera
consacrée à l'affichage d'un message d'erreur (quand le choix de l'utilisateur n'est pas bon). Les lignes
intermédiaires, non représentées sur le dessin précédent, seront décrites de façon à ce que le cadre soit figuré.
L22 Q)uitter
L23 Votre choix (réponse Q, q) : X
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 59 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 60 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
3.3 Fiche 3 : manipulation de fichiers séquentiels (3)
3.4 Fiche 4 : manipulation de fichiers séquentiels-indexés
Exercice 1 : Algorithme A1bis
Exercice 1 : Programme P5
Objectif : création d'un fichier séquentiel à partir de deux fichiers séquentiels.
Objectif : création d'un fichier séquentiel-indexé à partir d'un fichier séquentiel.
Soient deux fichiers, fclient (nom système fclient.dat) et ffournisseur (nom système ffour.dat). Les
enregistrements des deux fichiers sont identiques. Ils correspondent à ceci :
Ecrire un programme de création d'un fichier séquentiel-indexé de nom fetudind (nom système fetudind.dat)
ayant une clé primaire, le numéro d'étudiant, et deux clés secondaires redondantes, le nom et l'année de naissance
de l'étudiant. La création se fera à partir du fichier fetud (nom système fetud.dat) créé par le programme P1.
NOM
ADRESSE
PRODUIT
PRIXTTC
QUANTITE
20 alpha. num. 25 alpha. num. 20 alpha. num. entier 4 chiffres entier 4 chiffres
X (20)
X (25)
X (20)
9 (4)
9 (4)
Les fichiers sont ordonnés sur le nom du client ou du fournisseur. Dans un premier temps, on suppose que
chaque nom n'apparaît qu'une seule fois (au plus) dans chaque fichier, mais peut bien évidemment apparaître
dans les deux fichiers.
a) Écrire l'algorithme permettant de créer un troisième fichier ne contenant que les noms et adresses de chaque
client et/ou fournisseur, ordonné selon leur nom et sans répétition. On s'appliquera à regrouper d'un côté toutes
les instructions relatives à l'écriture dans le fichier, et de l'autre côté celles relatives à la lecture du ou des
enregistrements suivants.
Exercice 2 : Programme P6
Objectif : exploitation séquentielle d'un fichier séquentiel-indexé.
Reprendre le programme P2 en l'adaptant (fichier indexé, liste étudiant un/écran) afin de vérifier si les 19
étudiants ont bien été créés.
b) Même question en supposant qu'un même client ou fournisseur peut apparaître plusieurs fois dans les fichiers,
pour des produits différents.
Exercice 3 : Algorithme A3
Objectif : recherche dans un fichier séquentiel-indexé à partir d'une clé secondaire.
Ecrire un algorithme de recherche d'un ou de plusieurs étudiants dont le nom est saisi à la console. Les
enregistrements correspondants seront recherchés dans un fichier indexé, en utilisant une clé secondaire. Mêmes
affichages que dans l'algorithme A1 (la proposition "si tout le fichier est parcouru" doit toutefois être remplacée
par "si toute la suite est parcourue").
Exercice 2 : Algorithme A2bis
Objectif : adaptation de l'algorithme précédent à une nouvelle problématique.
On se replace dans le contexte de l'algorithme A1bis en s'intéressant aux fournisseurs qui sont également clients.
a) Écrire l'algorithme qui produit un fichier contenant le nom des fournisseurs-clients, ainsi que les différents
produits qu'ils vendent. On recopiera plusieurs fois dans le fichier de destination le nom du fournisseur s'il
propose plusieurs produits.
Exercice 4 : Algorithme A4
b) Interrogez-vous sur l'intérêt qu'apporte une organisation indexée des fichiers clients et fournisseurs.
Demandez-vous ce qui pourrait être utilisé comme clé primaire ou secondaire, et ce que cela pourrait améliorer
dans l'algorithme A2bis.
Objectif : recherche dans un fichier séquentiel-indexé à partir de la clé primaire.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 61 / 97
Ecrire un algorithme de recherche d'un étudiant dont le numéro est saisi à la console. Les enregistrements
correspondants seront recherchés dans un fichier séquentiel-indexé, en utilisant la clé primaire. Mêmes
affichages que dans l'algorithme A2.
Page 62 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
3.5 Fiche 5 : sous-programmes
Exercice 5 : Programme P7
Objectif : intégration
Reprendre le programme P4 en utilisant le fichier séquentiel-indexé, mais avec un menu à quatre choix :
•
•
•
•
•
Exercice 1 : Programme P8
Objectif : utilisation de sous-programmes.
1 : Liste des étudiants (un par page)
2 : Recherche par nom
3 : Recherche par numéro
Q : Quitter
Votre choix : X
Reprendre le programme P4 et l'adapter afin de disposer d'un programme principal dans lequel le menu à 5
choix, avec saisie du choix, sera présenté et de quatre sous-programmes externes avec paramètres, un par choix
du menu (sauf Q). Dans le programme principal, on fera appel à chaque sous-programme par une instruction :
CALL "nomsous-prog" USING --L'architecture de l'applicatif sera la suivante :
NB : pour plus d'informations sur cette instruction CALL en particulier et sur le fonctionnement des sousprogrammes en COBOL, on se reportera au paragraphe consacré aux sous-programmes.
16/10/12
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 63 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 64 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
DATEMP
COBOL par la pratique
NBJ
COTE
NOEXPL
NOID
date, 8 chiffres entier 3 chiffres entier 3 chiffres entier 2 chiffres entier 3 chiffres entier
9 (8)
9 (3)
9 (3)
9 (2)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des rubriques COTE et
NOEXPL. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné cidessous :
4- Travaux pratiques
Les "gros TP" sont de véritables petites applications, offrant plusieurs fonctions, prévues pour être réalisées par
des équipes de 4 ou 5 personnes. Leur mission est de terminer la programmation en 10h (cinq séances de 2h
chacune). Le travail de chacun est bien défini. Ces travaux peuvent, bien entendu, être entrepris par une seule
personne. Celle-ci mettra un peu (!) plus de temps à "livrer" l'application. Sont à ce jour disponibles :
•
•
•
Module A206 : Programmation fichiers - COBOL
Cas Bibliothèque
Cas Cyclistes
Cas Aéroclub
DATEMP
NBJ
COTE
NOEXPL
NOID
date d'emprunt (sous la forme AAAAMMJJ) s'il y a prêt ; 0 sinon
nombre de jours prévus pour le prêt ; 0 sinon
identifiant de l'ouvrage
numéro de l'exemplaire
identifiant de l'emprunteur, si l'exemplaire est en prêt ; 0 sinon
3) enregistrement du fichier OUVRAGE (nom système fouvri.dat) :
COTE
Des corrigés existent. Ils sont, c'est facile à comprendre pourquoi, volumineux. Véritables dossiers, ils
comprennent une présentation du cas, une copie des écrans de saisie, les algorithmes de chacune des fonctions,
tous les programmes et, souvent, les jeux d'essai. Du fait de leur volume et aussi par principe pédagogique, ils ne
sont pas disponibles en ligne. Pour les obtenir, le plus simple est d'envoyer un message à vos tuteurs.
TITRE
CATEGORIE
entier 3 chiffres 40 alpha. num. 25 alpha. num.
9 (3)
X (40)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
TITRE
CATEGORIE
4.1 Cas Bibliothèque
Objectif : mise en place d'un mini-logiciel de gestion d'une bibliothèque, constitué d'un programme principal et
de sous-programmes.
identifiant de l'ouvrage
titre de l'ouvrage
genre dans lequel est classé l'ouvrage
4) enregistrement du fichier STATISTIQUES (nom système fstati.dat) :
NBRFOIS
!"#$%&'()*+),-#.%#/0#&+(1'+1(%#.%#.,--2%&#
9 (2)
On dispose de quatre fichiers : EMPRUNTEUR, EXEMPLAIRE, OUVRAGE et STATISTIQUES. Leur structure
est la suivante :
1) enregistrement du fichier EMPRUNTEUR (nom système fempri.dat) :
NOID
NOM
PRENOM
X (20)
X (20)
X (25)
9 (3)
9 (3)
nombre de fois qu'un ouvrage a été emprunté par la personne désignée par NOID
identifiant de l'ouvrage
identifiant de l'emprunteur
3"#4+(1'+1(0+),-#.1#/,5)')%/#
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NOID. Le sens de chaque
rubrique est donné ci-dessous :
NOID
NOM
PRENOM
ADRESSE
NOID
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques COTE et
NOID. Il dispose de deux clés secondaires, COTE et NOID. Le sens de chaque rubrique est donné ci-dessous :
NBRFOIS
COTE
NOID
ADRESSE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
COTE
entier 2 chiffres entier 3 chiffres entier 3 chiffres
L'architecture fonctionnelle du logiciel à développer est une arborescence :
identifiant de l'emprunteur
nom de l'emprunteur
prénom de l'emprunteur
adresse de l'emprunteur
2) enregistrement du fichier EXEMPLAIRE (nom système : fexempli.dat)
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 65 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 66 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
9"#40)&)%&#
Les données saisies sont supposées pleines d'erreurs. Toutes les données saisies devront donc être vérifiées. Les
données erronées donneront lieu à affichage de messages d'erreurs appropriés (dans la partie inférieure de
l'écran), effacement des données erronées (afin de permettre une re-saisie) et, après la nouvelle saisie, effacement
du message d'erreur précédent. Le nombre d'essais sera limité à trois pour chaque saisie. Le choix de la partie du
logiciel à exécuter (menu) fourni par l'utilisateur sera vérifié AVANT de lancer l'exécution.
:"#;(0<0)/#=#80)(%#
5.1) Organisation
Le travail est exécuté par des équipes de quatre (exceptionnellement cinq, et uniquement en cas de groupes ayant
un nombre impair d'étudiants). Chaque équipe désignera, dès le début, un chef de projet.
Chaque fin d'exécution d'une feuille de cet arbre doit permettre à l'utilisateur de choisir soit de revenir au menu,
soit de quitter l'application.
6"#7-+%(80'%#.1#/,5)')%/#
Tous les écrans seront standardisés. Ils seront tous composés de trois parties, selon le modèle ci-joint :
5.2) Travail de l'équipe
Tous les membres de l'équipe devront analyser et programmer le logiciel. Une organisation avec un programme
principal (pour l'affichage du menu) et des sous-programmes externes, un par module, sera mise en place. Le
programme principal devra être programmé en premier. Il fera "normalement" appel aux divers sousprogrammes externes, un par fonction, selon le principe développé en TD (cf. TD n° 4, programme P4). Même si
une fonction n'est pas encore prête, le sous-programme externe correspondant devra donc être présent dès le
début. Il comportera AU DEBUT un écran "par défaut" qui affichera, en partie médiane, un message indiquant
que la fonction n'est pas encore disponible. Le "vrai" sous-programme une fois testé, ce sous-programme par
défaut disparaîtra au profit du "vrai". Chaque équipe devra analyser et programmer les trois fonctions ci-après :
•
•
PRET : prêt d'un ou de plusieurs exemplaires d'un ou de plusieurs ouvrages par un emprunteur.
RETOUR : retour de prêt d'un ou de plusieurs exemplaires d'un ou de plusieurs ouvrages.
NB : pour ces deux fonctions, la liste des emprunts en cours de l'emprunteur (avant la prise en compte
du prêt ou du retour) sera affichée. Cette liste sera affichée écran par écran, avec gestion correcte des
entêtes et bas de page. Si l'emprunteur n'a aucun emprunt en cours, un message adéquat, affiché dans le
corps, l'indiquera.
•
LISTE : liste, ouvrage par ouvrage, de tous les ouvrages de la bibliothèque, avec, pour chacun, la liste
des éventuels emprunteurs actuels (avec le nombre d'exemplaires en cours d'emprunt par cette
personne) et celle des emprunteurs ayant retourné des exemplaires de cet ouvrage (avec le nombre
d'exemplaires empruntés déjà enregistrés, ainsi que le nombre d'exemplaires retournés. Pour un
ouvrage, quatre possibilités :
o Cas n° 1 : une personne emprunte actuellement 3 exemplaires et en a déjà emprunté et retourné
5 : Mr DUPOND exemplaires empruntés : 3 exemplaires
retournés : 5
o
Les différentes parties jouent des rôles différents :
•
•
•
empruntés : 1
o
entête (partie supérieure) : 4 à 6 lignes
désignation de l'application, fonction en cours, date du jour et ligne de séparation
corps (partie médiane) : 13 à 15 lignes
affichage de résultats, saisies autres que les invites...
bas de page (partie inférieure) : 4 lignes
ligne 20 : ligne de séparation
ligne 21 : ligne pour les messages provenant d'erreurs de saisie, de manipulation...
ligne 22 : ligne d'invite indiquant les différents choix de poursuite
ligne 23 : ligne pour saisir le caractère représentant le choix.
Cas n° 3 : une personne n'a pas actuellement d'emprunt en cours de cet ouvrage, mais a déjà
emprunté et retourné 7 exemplaires : Mr DUPOND exemplaires retournés
: 7
o
Cet ouvrage
n'a fait l'objet d'aucun emprunt passé. Il n'est pas
non plus en prêt actuellement.
Cas n° 4 : il n'y a aucun emprunt en cours, ni d'emprunts-retours passés :
Les équipes de cinq étudiants devront analyser et programmer la fonction supplémentaire suivante :
L'écran de présentation du menu sera structuré différemment des autres : présentation des différents choix et
saisie du choix dans la partie médiane, partie inférieure ne contenant que le message d'erreur de saisie.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Cas n° 2 : une personne emprunte actuellement 1 exemplaire et n'a ni emprunté ni retourné des
exemplaires de cet ouvrage auparavant :
Mr DUPOND exemplaires
Page 67 / 97
•
RETARD : édition de la liste des emprunts ayant dépassé, à la date de consultation, la date prévue de
rendu. Le nom des emprunteurs sera fourni. Les retards seront présentés emprunteur par emprunteur.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 68 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
5.3) Rôle du chef de projet
Le chef de projet est chargé, plus spécifiquement, de l'intégration des sous-programmes "dans" le logiciel. C'est
lui qui crée le programme principal, teste son fonctionnement, remplace les sous-programmes "par défaut" par
les "vrais", dès que possible. Le chef de projet doit aussi piloter l'équipe, en surveillant l'avancement du travail,
en aidant, éventuellement, un co-équipier.
C'est, enfin, le chef de projet qui crée un répertoire GROSTP (avec les droits nécessaires pour que chaque
membre de l'équipe puisse y accéder), y place les jeux d'essais, y remet éventuellement ces jeux d'essais s'ils sont
altérés -en allant les chercher sur l'Intranet). L'intégration des sous-programmes dans ce répertoire sera effectué
sous la responsabilité du chef de projet. Les tests de non régression (i.e. globaux) seront réalisés par lui.
5.4) Répartition des tâches au sein de l'équipe
Soit une équipe quelconque, composée de cinq étudiants, appelés A, B, C, D et E. A est le chef d'équipe. La
répartition des tâches peut être la suivante :
•
•
•
•
•
4.2 Cas Cyclistes
Objectif : mise en place d'un mini-logiciel de gestion d'une équipe de coureurs cyclistes, composé d'un
programme principal et de sous-programmes.
!"#$%&'()*+),-#.%#/0#&+(1'+1(%#.%#.,--2%&#
On se situe dans le cadre du développement d'une application de gestion de programmes d'entraînement de
coureurs cyclistes. Chaque coureur dispose d'un programme adapté à sa morphologie, sa forme du moment et ses
objectifs, exprimé en termes de kilométrage à réaliser. Chaque coureur dispose d'un entraîneur. Chaque
entraîneur a au moins un coureur. Il peut en avoir plusieurs. Le système d'information de cette application peut
être décrit par le modèle entités associations propriétés suivant :
A : (chef de projet) création du programme principal, intégration, tests de non régression, analyse et
programmation LISTE
B : analyse et programmation LISTE, tests unitaires, import dans GROSTP
C : analyse et programmation PRET, tests unitaires, import dans GROSTP
D : analyse et programmation RETOUR, tests unitaires, import dans GROSTP
E : analyse et programmation RETARD, tests unitaires, import dans GROSTP
D'autres organisations sont possibles. Elles sont toutefois déconseillées. Le "KIFEKOUA" sera défini dès le
début du TP et fourni aux enseignants.
NB : la fonction LISTE est la plus difficile des quatre. Il serait prudent de la confier à un bon. (B stands for
"bon").
>"#?$,'1@%-+&?#=#(%-.(%#
Chaque équipe rendra un seul dossier. Il devra comporter une partie analyse algorithmique (une douzaine de
pages au maximum) et une partie jeux d'essais (avec une description des essais prévus par l'équipe, avec les
résultats escomptés, rédigée sur un maximum de 4 pages).
Le listing de chaque programme (programme principal, sous-programmes externes), le "chemin" Linux indiquant
où sont situées les sources, ainsi que la ligne de compilation seront fournis en annexe. Les listings seront
imprimés sur du papier perforé, sur une des imprimantes à aiguilles du Centre Informatique d'Enseignement de
la Faculté des Sciences et des Techniques.
Un bref commentaire sur la structure de données, observée sous l'oeil critique des enseignements de Conception
de Systèmes d'Information et de Bases de données sera le bienvenu (maximum une page).
Les coureurs enregistrés n'ont pas forcément de programme d'entraînement mémorisé. Il est également possible
d'avoir dans la base des coureurs qui n'ont encore parcouru aucun kilomètre. Par contre, tous ceux qui en ont
parcouru avaient un programme (la contrainte d'inclusion garantit que chaque coureur ne s'entraîne que les
semaines durant lesquelles il doit le faire).
La contrainte C1 permet de vérifier que les coureurs ne dépassent pas leur programme. Elle exprime le fait que le
nombre de kilomètres parcourus par un coureur pour chaque semaine est inférieur ou égal au nombre de
kilomètres à faire.
La propriété Total-Km-faits correspond à la somme des kilomètres faits par le coureur. Elle ne devrait en théorie
pas figurer dans ce schéma, car elle est calculable. Nous la maintenons par souci de simplification de ce sujet.
Cette structure de données peut être matérialisée par cinq fichiers : COUREUR, ENTRAINEUR, SEMAINE, AFAIRE et FAIT. Leur structure est la suivante :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 69 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 70 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
1) enregistrement du fichier COUREUR (nom système fcour.dat) :
CODCOUR
NOM
PRENOM
ADRESSE
TOTAL-KM-FAITS ENTRAINEUR
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
X (25)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODCOUR. Il dispose d'une clé
secondaire, ENTRAINEUR. Le sens de chaque rubrique est donné ci-dessous :
CODCOUR
identifiant du coureur
NOM
nom du coureur
PRENOM
prénom du coureur
ADRESSE
adresse du coureur
TOTAL-KM-FAITS
nombre total de kilomètres parcourus depuis le début de l'année
ENTRAINEUR numéro de l'entraîneur
2) enregistrement du fichier ENTRAINEUR (nom système fentr.dat) :
CODENTR
NOM
PRENOM
Campus International e-mi@ge
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOUR
CODSEM
KM-A-FAIRE
X (20)
CODCOUR
9 (3)
CODENTR
numéro de l'entraîneur
NOM nom de l'entraîneur
PRENOM
prénom de l'entraîneur
DIPLO ME
plus haut diplôme possédé par l'entraîneur
GRANDTOUR
10 alpha.
9 (2)
X (10)
9 (4)
numéro du coureur
numéro de la semaine
nombre de kilomètres réalisés par le coureur dans la semaine
L'application comprend les fonctionnalités suivantes :
•
•
•
•
•
•
•
•
3) enregistrement du fichier SEMAINE (nom système fsem.dat) :
CODSEM
99
3"#4+(1'+1(0+),-#.1#/,5)')%/#
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro d'entraîneur (CODENTR). Le
sens de chaque rubrique est donné ci-dessous :
entier 2 chiffres
KM-FAITS
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODCOUR
et CODSEM. Il dispose, en outre, de deux clés secondaires, CODCOUR et CODSEM. Le sens de chaque
rubrique est donné ci-dessous :
CODCOURS
CODSEM
KM-FAITS
X (25)
CODSEM
entier 3 chiffres entier 2 chiffres entier 4 chiffres
DIPLOME
X (20)
numéro du coureur
numéro de la semaine
nombre de kilomètres prévus pour le coureur cette semaine
5) enregistrement du fichier FAIT (nom système freal.dat) :
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
Module A206 : Programmation fichiers - COBOL
F0 : affichage des coureurs n'ayant pas de programme d'entraînement pendant les grands tours
F1 : mise à jour du fichier des coureurs (ajout, suppression, modification)
F2 : enregistrement des programmes en début de saison (association A FAIRE)
F3 : enregistrement des entraînements effectués (association FAIT)
F4 : mise à jour des entraîneurs (ajout, suppression, modification)
F5 : édition de l'état d'avancement des entraînements (par coureur, par semaine)
F6 : classement des coureurs
F7 : mise à zéro des programmes associés à une semaine donnée
L'architecture fonctionnelle du logiciel à développer est une arborescence :
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro de semaine CODSEM. Le sens de
chaque rubrique est donné ci-dessous :
CODSEM
numéro de la semaine (de 1 à 52)
GRANDTOUR nom du grand tour se déroulant pendant la semaine
La variable GRANDTOUR peut prendre les valeurs suivantes : FRANCE, GIRO, VUELTA, NULL, selon que
la semaine est une semaine de grand tour ou non.
4) enregistrement du fichier A-FAIRE (nom système fprog.dat) :
CODCOUR
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
99
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
9 (4)
Page 71 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 72 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
ligne 22 : ligne d'invite indiquant les différents choix de poursuite
ligne 23 : ligne pour saisir le caractère représentant le choix.
L'écran de présentation du menu sera structuré différemment des autres : présentation des différents choix et
saisie du choix dans la partie médiane, partie inférieure ne contenant que le message d'erreur de saisie.
9"#40)&)%&#
Les données saisies sont supposées pleines d'erreurs. Toutes les données saisies devront donc être vérifiées. Les
données erronées donneront lieu à affichage de messages d'erreurs appropriés (dans la partie inférieure de
l'écran), effacement des données erronées (afin de permettre une re-saisie) et, après la nouvelle saisie, effacement
du message d'erreur précédent. Le nombre d'essais sera limité à trois pour chaque saisie. Le choix de la partie du
logiciel à exécuter (menu) fourni par l'utilisateur sera vérifié AVANT de lancer l'exécution.
:"#;(0<0)/#=#80)(%#
5.1) Organisation
Le travail est exécuté par des équipes de quatre (exceptionnellement cinq, et uniquement en cas de groupes ayant
un nombre impair d'étudiants). Chaque équipe désignera, dès le début, un chef de projet.
Chaque fin d'exécution d'une feuille de cet arbre doit permettre à l'utilisateur de choisir soit de revenir au menu,
soit de quitter l'application.
6"#7-+%(80'%#.1#/,5)')%/#
Tous les écrans seront standardisés. Ils seront tous composés de trois parties, selon le modèle ci-joint :
5.2) Travail de l'équipe
Tous les membres de l'équipe devront analyser et programmer le logiciel. Une organisation avec un programme
principal (pour l'affichage du menu) et des sous-programmes externes, un par module, sera mise en place. Le
programme principal devra être programmé en premier. Il fera "normalement" appel aux divers sousprogrammes externes, un par fonction, selon le principe développé en TD (cf. TD n° 4, programme P4). Même si
une fonction n'est pas encore prête, le sous-programme externe correspondant devra donc être présent dès le
début. Il comportera AU DEBUT un écran "par défaut" qui affichera, en partie médiane, un message indiquant
que la fonction n'est pas encore disponible. Le "vrai" sous-programme une fois testé, ce sous-programme par
défaut disparaîtra au profit du "vrai". Chaque équipe devra analyser et programmer les trois fonctions ci-après :
•
•
F0 : affichage des coureurs n'ayant pas de programme à faire pendant les grands tours. L'utilisateur aura
le choix entre faire un affichage ciblé sur UN grand tour précis (saisi à l'écran) ou TOUS les grands
tours. Si cette dernière option est choisie, un coureur sera considéré comme oisif s'il n'a aucun
programme à faire pendant toutes les semaines de tous les tours. Si l'option UN est choisie, le coureur
devra, pour être affiché, n'avoir aucun programme durant toutes les semaines du tour en question.
F1 : mise à jour des coureurs, comprenant l'enregistrement d'un coureur, la prise en compte des
modifications et la suppression d'un coureur. Les modifications à enregistrer concernent toutes les
propriétés SAUF le numéro de coureur (un coureur change de numéro en perdant l'ancien -il s'agit donc
d'une suppression de coureur- et gagnant le nouveau -il s'agit donc ensuite d'enregistrer un nouveau
coureur-) et le numéro d'entraîneur. Ces modifications seront acceptées uniquement si le coureur existe.
Les programmes à faire ou faits ne sont pas concernés par cette opération.
L'enregistrement d'un coureur se fait en fournissant tous les attributs nécessaires, ainsi que le numéro de
son entraîneur. Si cet entraîneur n'existe pas, il sera créé (par appel au sous-programme de création
contenu dans la fonction F4). Le nouveau coureur n'a pas de programme d'entraînement à faire, ni a
fortiori de programme fait.
Les différentes parties jouent des rôles différents :
•
•
•
La suppression d'un coureur ne peut se faire que si ses programmes sont déjà supprimés. Si son
entraîneur ne s'occupait que de lui, il sera également supprimé.
entête (partie supérieure) : 4 à 6 lignes
désignation de l'application, fonction en cours, date du jour et ligne de séparation
corps (partie médiane) : 13 à 15 lignes
affichage de résultats, saisies autres que les invites...
bas de page (partie inférieure) : 4 lignes
ligne 20 : ligne de séparation
ligne 21 : ligne pour les messages provenant d'erreurs de saisie, de manipulation...
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
•
•
Page 73 / 97
F2 : enregistrement des programmes à faire. Cet enregistrement ne peut être accepté que si le coureur
existe.
F3 : enregistrement des programmes faits. Cet enregistrement ne peut être accepté que si le coureur
existe et si les contraintes (celle qui est nommée C1 sur le schéma et la contrainte d'inclusion) sont
vérifiées. Le nombre total de kilomètres parcourus par le coureur est mis à jour.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 74 / 97
Campus International e-mi@ge
•
Module A206 : Programmation fichiers - COBOL
F4 : mise à jour des entraîneurs, comprenant l'enregistrement d'un entraîneur, la prise en compte des
modifications et la suppression d'un entraîneur. L'enregistrement d'un entraîneur ne peut se faire que s'il
s'occupe d'un coureur. Seront donc saisies les informations suivantes : numéro d'entraîneur, nom,
prénom, diplôme. Le (ou les) numéro(s) de coureurs dont il s'occupe sera (seront) ensuite fourni(s). Si
ces coureurs n'existent pas, ils seront créés (par appel du sous-programme de création contenu dans F1).
Tous les attributs de l'entraîneur sont modifiables, à l'exception du numéro.
La suppression d'un entraîneur s'accompagnera de celle de ses coureurs. Elle ne pourra toutefois se faire
que si les programmes de ces derniers (qu'il s'agisse de ceux à faire ou de ceux faits) n'existent plus.
•
•
F6 : classement des coureurs, selon le kilométrage réalisé. Les coureurs seront classés en ordre
décroissant des valeurs prises par l'attribut TOTAL-KM-FAITS.
F7 : remise à zéro des programmes d'une semaine donnée. L'utilisateur fournira le numéro de la
semaine concernée. Tous les programmes à faire cette semaine-là seront supprimés, tous les
programmes réellement faits également. L'utilisateur aura ensuite le choix de revenir au menu général
ou bien de fournir une autre semaine.
Les équipes de cinq étudiants devront analyser et programmer la fonction supplémentaire suivante :
•
F5 : édition de l'état d'avancement des programmes d'entraînements. Deux versions de cet état sont
demandées. Dans les deux cas, il s'agit de produire une liste décrivant tous les entraînements. La
première version les présente semaine par semaine, la seconde coureur par coureur. Les fichiers sont
supposés sans erreur.
o Version 1 :
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
TOUTES les semaines figureront sur le document. Si, pour une semaine donnée, le coureur n'a
pas d'entraînement prévu, la valeur 0 sera inscrite dans les cases prévus et réalisés.
5.3) Rôle du chef de projet
Le chef de projet est chargé, plus spécifiquement, de l'intégration des sous-programmes "dans" le logiciel. C'est
lui qui crée le programme principal, teste son fonctionnement, remplace les sous-programmes "par défaut" par
les "vrais", dès que possible. Le chef de projet doit aussi piloter l'équipe, en surveillant l'avancement du travail,
en aidant, éventuellement, un co-équipier.
C'est, enfin, le chef de projet qui crée un répertoire GROSTP (avec les droits nécessaires pour que chaque
membre de l'équipe puisse y accéder), y place les jeux d'essais, y remet éventuellement ces jeux d'essais s'ils sont
altérés -en allant les chercher sur l'Intranet). L'intégration des sous-programmes dans ce répertoire sera effectué
sous la responsabilité du chef de projet. Les tests de non régression (i.e. globaux) seront réalisés par lui.
5.4) Répartition des tâches au sein de l'équipe
Soit une équipe quelconque, composée de cinq étudiants, appelés A, B, C, D et E. A est le chef d'équipe. La
répartition des tâches peut être la suivante :
•
•
•
•
•
A : (chef de projet) création du programme principal, intégration, tests de non régression, analyse et
programmation F0
B : analyse et programmation F1, tests unitaires, import dans GROSTP
C : analyse et programmation F2, F3 et F7, tests unitaires, import dans GROSTP
D : analyse et programmation F4 et F6, tests unitaires, import dans GROSTP
E : analyse et programmation F5, tests unitaires, import dans GROSTP
D'autres organisations sont possibles. Elles sont toutefois déconseillées. Le "KIFEKOUA" sera défini dès le
début du TP et fourni aux enseignants.
NB : la fonction F1 est la plus difficile des quatre. Il serait prudent de la confier à un bon. (B stands for "bon").
>"#?$,'1@%-+&?#=#(%-.(%#
TOUS les coureurs figureront dans cet état, pour chaque semaine. Si, une semaine donnée, un
coureur n'a pas d'entraînement à faire, la valeur 0 sera inscrite dans les cases prévus et réalisés.
o
Le listing de chaque programme (programme principal, sous-programmes externes), le "chemin" Linux indiquant
où sont situées les sources, ainsi que la ligne de compilation seront fournis en annexe. Les listings seront
imprimés sur du papier perforé, sur une des imprimantes à aiguilles du Centre Informatique d'Enseignement de
la Faculté des Sciences et des Techniques.
Version 2 :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Chaque équipe rendra un seul dossier. Il devra comporter une partie analyse algorithmique (une douzaine de
pages au maximum) et une partie jeux d'essais (avec une description des essais prévus par l'équipe, avec les
résultats escomptés, rédigée sur un maximum de 4 pages).
Page 75 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 76 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
CODAV
CPTHORAV
CPTINTER
INFOS
ETATAV
CODTYP
4.3 Cas Aéroclub
Objectif : mise en place d'un mini-logiciel de gestion d'un aéroclub, composé d'un programme principal et de
sous-programmes.
Module A206 : Programmation fichiers - COBOL
Code de l'avion
compteur horaire de l'avion
compteur horaire intermédiaire
informations techniques
état de l'avion
type de l'avion
La variable ETATAV peut prendre les valeurs E (en état), O (hors état) ou R (retiré).
2) enregistrement du fichier PILOTE (nom système fpilot.dat) :
!"#$%&'()*+),-#.%#/0#&+(1'+1(%#.%#.,--2%&#
On se situe dans le cadre du développement d'une application de gestion d'un aéroclub. Chaque avion, chaque
pilote, chaque vol effectué par les pilotes sur les avions sont décrits. Les types d'avions sur lesquels peuvent
voler les pilotes sont également fournis. Le système d'information de cette application peut être décrit par le
modèle entités associations propriétés suivant :
NUMPIL
NOM
PRENOM
ADRESSE
NBHVOL
ETATPIL
entier 3 chiffres 20 alpha. num. 10 alpha. num. 50 alpha. num. entier 6 chiffres 3 lettres
9 (3)
X (20)
X (10)
X (50)
9 (6)
AAA
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro du pilote (NUMPIL). Le sens de
chaque rubrique est donné ci-dessous :
NUMPIL
NOM
PRENOM
ADRESSE
NBHVOL
ETATPIL
numéro du pilote
nom du pilote
prénom du pilote
adresse du pilote
nombre d'heures de vol du pilote
état du pilote
La variable ETAPIL, composée de trois lettres, peut prendre les valeurs suivantes :
o
o
o
pour la première lettre : A (apte) ou M (malade) ;
pour la deuxième lettre : E (endetté) ou R (en règle) ;
pour la troisième lettre : L (présent), P (en partance) ou Q (parti).
Toutes les combinaisons de valeurs sont possibles (AEL, AEP...).
3) enregistrement du fichier VISITE (nom système fvisit.dat) :
NUMVISIT
DATEVISIT RESULTAT TYPVISIT
entier 3 chiffres 10 alpha. num.
Les avions peuvent être "en état", "hors d'état" ou "retiré". Les pilotes peuvent prendre les états suivants : "apte",
"malade", "endetté", "en règle", "présent", "en partance" et "parti". Les vols sont d'abord "déposés". Ils sont
ensuite (au retour de l'avion) "terminés". Ils seront enfin "facturés".
Cette structure de données peut être matérialisée par six fichiers : AVION, PILOTE, VISITE, TYPE, TABLE et
VOL. Leur structure est la suivante :
1) enregistrement du fichier AVION (nom système favion.dat) :
CODAV
CPTHORAV
CPTINTER
INFOS
entier 3 chiffres entier 6 chiffres entier 3 chiffres 50 alpha. num.
9 (3)
9 (6)
9 (3)
X (50)
ETATAV
CODTYP
1 lettre
2 alpha. num.
A
XX
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique CODAV. Il dispose d'une clé
secondaire, CODTYP. Le sens de chaque rubrique est donné ci-dessous :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 77 / 97
9 (3)
X (10)
CODOBJ
1 lettre
1 lettre
entier 3 chiffres
A
A
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire le numéro de visite NUMVISIT. Le sens de
chaque rubrique est donné ci-dessous :
NUMVISIT
DATEVISIT
RESULTAT
TYPVISIT
CODOBJ
numéro de la visite
date à laquelle la visite a été réalisée
résultat de la visite
type de visite
code de l'objet ayant subi la visite
La variable RESULTAT peut prendre les valeurs 1 ou 2, selon que la visite soit concluante (l'avion ou le pilote
peut voler) ou non (le pilote est malade ou l'avion est à réviser). La variable TYPVISIT prend deux valeurs, A
(avion) ou P (pilote). Selon la valeur prise par cette variable, la suivante (CODOBJ) contient un numéro d'avion
ou un numéro de pilote.
4) enregistrement du fichier TYPE (nom système ftyp.dat) :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 78 / 97
Campus International e-mi@ge
NUMTYP
Module A206 : Programmation fichiers - COBOL
DESIGN
•
•
TARIF
2 alpha. num. 20 alpha. num. réel 5 chiffres, dont 2 décimales
XX
X (20)
•
99V99
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NUMTYP. Le sens de chaque
rubrique est donné ci-dessous :
NUMTYP
DESIGN
TARIF
Campus International e-mi@ge
type de l'avion
description des caractéristiques de ce type d'avion
tarif horaire associé à ce type d'avion
•
•
•
Module A206 : Programmation fichiers - COBOL
F2 : enregistrement d'un vol (avec mise-à-jour des compteurs horaires)
F3 : mise-à-jour des pilotes (ajout, suppression, modification), avec arrivée possible d'un pilote d'un
nouveau type
F4 : mise à jour des avions (ajout, suppression, modification), avec achat possible d'un avion d'un
nouveau type
F5 : récapitulatif avions (avec informations sur les pilotes les ayant utilisés)
F6 : récapitulatif des pilotes (avec informations sur les avions pilotés)
F7 : facturation des vols aux pilotes
L'architecture fonctionnelle du logiciel à développer est une arborescence :
5) enregistrement du fichier TABLE (nom système ftabl.dat) :
CODPIL
CODTYP
entier 3 chiffres 2 alpha. num.
9 (3)
XX
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire l'ensemble des deux rubriques CODPIL et
CODTYP. Il dispose, en outre, de deux clés secondaires, CODPIL et CODTYP. Le sens de chaque rubrique est
donné ci-dessous :
CODPIL
CODTYP
numéro du pilote
type d'avion que peut piloter le pilote
6) enregistrement du fichier VOL (nom système fvol.dat) :
NUMVOL DATEDEB DATEFIN CPTDEP CPTARR DESTIN ETATVOL NUMAV NUMPIL
entier 6
chiffres
10 alpha.
num.
10 alpha.
num.
entier 6
chiffres
entier 6
chiffres
25 alpha.
num.
1 lettre
entier 3
chiffres
entier 3
chiffres
9 (6)
X (10)
X (10)
9 (6)
9 (6)
X (25)
A
9 (3)
9 (3)
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique NUMVOL. Il dispose, en outre,
de deux clés secondaires, NUMPIL et NUMAV. Le sens de chaque rubrique est donné ci-dessous :
NUMVOL
DATEDEB
DATEFIN
CPTDEP
CPTARR
DESTIN
ETATVOL
NUMAV
NUMPIL
numéro du vol
date de début du vol
date de fin du vol
compteur horaire au départ du vol
compteur horaire à l'arrivée du vol
destination du vol
état du vol
numéro de l'avion sur lequel s'est effectué le vol
numéro du pilote
Chaque fin d'exécution d'une feuille de cet arbre doit permettre à l'utilisateur de choisir soit de revenir au menu,
soit de quitter l'application.
6"#7-+%(80'%#.1#/,5)')%/#
Tous les écrans seront standardisés. Ils seront tous composés de trois parties, selon le modèle ci-joint :
La variable ETATVOL peut prendre la valeur D (déposé), T (terminé) ou F (facturé).
3"#4+(1'+1(0+),-#.1#/,5)')%/#
L'application comprend les fonctionnalités suivantes :
•
•
F0 : liste des avions à réviser et des pilotes malades (avec changement d'état des avions et des pilotes)
F1 : dépôt d'un plan de vol (avec vérification des disponibilités des pilotes et avions)
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 79 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 80 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
•
•
•
•
F0 : un avion ne peut être utilisé que s'il a passé un contrôle réussi (résultat = 1) depuis moins de 500h
de vol (CPTINTER < 500). Un pilote ne peut voler que s'il a passé une visite médicale depuis moins
d'un an et si, au cours de celle-ci, il a été déclaré apte (résultat = 1). La fonction recense tous les avions
à contrôler (en positionnant l'avion à contrôler dans l'état O) et tous les pilotes malades (en affectant la
valeur Mxx à la variable ETATPIL). Les pilotes en partance (ETATPIL = xxP) ou partis (ETATPIL =
xxQ) ne sont pas concernés par ce recensement. Dès l'instant où un avion est marqué à contrôler, son
compteur horaire intermédiaire (CPTINTER) est remis à zéro.
F1 : le pilote qui organise un vol effectue ce que l'on appelle le dépôt d'un plan de vol. Il doit fournir les
renseignements suivants : date de départ prévu (heure, jour, mois, année), date de retour estimé,
destination du vol. Il doit également indiquer le type de vol envisagé. Pour que le plan de vol soit
accepté, il faut que TOUTES les conditions suivantes soient respectées :
o le pilote doit être en règle et apte (il doit être dans un état ARx) et ne pas avoir manifesté le
désir de partir (la dernière lettre de son état doit donc être un L) ; le pilote est libre à ce
moment là ;
o le type de vol souhaité est compatible avec ce que sait faire le pilote ;
o il y a au moins un avion de ce type disponible (et en état de voler).
Un pilote sera disponible s'il n'a aucun plan de vol prévu, en totalité ou en partie, entre le départ et
l'arrivée du vol en cours de dépôt. Tous ses vols déjà planifiés doivent donc se terminer avant la date de
départ prévu ou commencer après la date de retour estimé. Dans le schéma ci-dessous, seuls les vols V5
et V6 sont "compatibles" avec le plan de vol en cours de dépôt. Si l'un des vols V1... V4 est déjà
planifié, le plan de vol en cours de dépôt sera refusé.
Les différentes parties jouent des rôles différents :
•
Module A206 : Programmation fichiers - COBOL
entête (partie supérieure) : 4 à 6 lignes pour désignation de l'application, fonction en cours, date du jour
et ligne de séparation
corps (partie médiane) : 13 à 15 lignes pour affichage de résultats, saisies autres que les invites...
bas de page (partie inférieure) : 4 lignes, ligne 19 : ligne de séparation, ligne 20 : ligne pour les
messages provenant d'erreurs de saisie, de manipulation... ligne 21 : ligne d'invite indiquant les
différents choix de poursuite, ligne 22 : ligne pour saisir le caractère représentant le choix.
L'écran de présentation du menu sera structuré différemment des autres : présentation des différents choix et
saisie du choix dans la partie médiane, partie inférieure ne contenant que le message d'erreur de saisie.
9"#40)&)%&#
Les données saisies sont supposées pleines d'erreurs. Toutes les données saisies devront donc être vérifiées. Les
données erronées donneront lieu à affichage de messages d'erreurs appropriés (dans la partie inférieure de
l'écran), effacement des données erronées (afin de permettre une re-saisie) et, après la nouvelle saisie, effacement
du message d'erreur précédent. Le nombre d'essais sera limité à trois pour chaque saisie. Le choix de la partie du
logiciel à exécuter (menu) fourni par l'utilisateur sera vérifié AVANT de lancer l'exécution.
La disponibilité des avions se détermine de la même façon. Si les conditions sont réunies, le plan de vol
est accepté, le vol est enregistré (les compteurs horaires ne seront valués qu'au retour). Le vol est dans
l'état D.
•
:"#;(0<0)/#=#80)(%#
5.1) Organisation
Le travail est exécuté par des équipes de quatre (exceptionnellement cinq, et uniquement en cas de groupes ayant
un nombre impair d'étudiants). Chaque équipe désignera, dès le début, un chef de projet.
•
F2 : lors du retour de l'avion, le compteur horaire est relevé. Date de début, de fin, destination du vol
(ces informations ont été saisies lors du dépôt du plan de vol) sont éventuellement corrigées. Le
compteur horaire départ (il a été relevé au moment du décollage de l'avion) et le compteur arrivée sont
saisis. Le temps de vol (CPTARR - CPTDEP) est ensuite ajouté aux compteurs horaires avion
(CPTINTER et CPTHORAV) et pilote (NBHVOL). Le vol est marqué "terminé".
F3 : les enregistrements concernant le pilote et ses habilitations sont mis à jour par cette fonction. Le
traitement peut correspondre à une création (cela ne concerne qu'un pilote ayant passé une visite
médicale satisfaisante), une suppression (il ne peut s'agir que d'une demande de départ, le pilote étant
mis dans l'état "en partance") ou une modification.
5.2) Travail de l'équipe
Tous les membres de l'équipe devront analyser et programmer le logiciel. Une organisation avec un programme
principal (pour l'affichage du menu) et des sous-programmes externes, un par module, sera mise en place. Le
programme principal devra être programmé en premier. Il fera "normalement" appel aux divers sousprogrammes externes, un par fonction, selon le principe développé en TD (cf. TD n° 4, programme P4). Même si
une fonction n'est pas encore prête, le sous-programme externe correspondant devra donc être présent dès le
début. Il comportera AU DEBUT un écran "par défaut" qui affichera, en partie médiane, un message indiquant
que la fonction n'est pas encore disponible. Le "vrai" sous-programme une fois testé, ce sous-programme par
défaut disparaîtra au profit du "vrai". Chaque équipe devra analyser et programmer les trois fonctions ci-après :
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 81 / 97
La création concerne également la table de correspondance (fichier ftabl), avec éventuellement ajout
d'un nouveau type d'avion. Il n'y a pas de création de pilote sans création d'une visite médicale. Le
compteur de vol du pilote est initialisé à la valeur fournie par le pilote (ce n'est pas forcément zéro).
L'état initial du pilote est "ARL".
Les modifications ne concernent que les informations personnelles du pilote (ie. nom, prénom, adresse,
numéro de brevet). Le compteur horaire et la variable d'état ne sont pas modifiables par cette fonction.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 82 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Un pilote peut ajouter, supprimer des habilitations (liste des types d'avions qu'il peut piloter). Lorsqu'un
pilote passe dans l'état "en partance", ses habilitations sont conservées dans le fichier ftabl.
•
•
Campus International e-mi@ge
•
Module A206 : Programmation fichiers - COBOL
F6 : le récapitulatif pilotes permet de connaître tous les vols effectués par lui durant la période de
référence.
F4 : la mise à jour des avions consiste à ajouter des avions (ce qui peut entraîner également la création
d'un nouveau type d'avion), à modifier les renseignements que l'on peut posséder sur eux ou à en
supprimer. La création n'est possible que si l'avion a passé, auparavant, un contrôle technique
satisfaisant (résultat = 1). Ce contrôle est enregistré en même temps que l'avion. Le compteur horaire de
l'avion créé est initialisé à la valeur saisie ; le compteur intermédiaire est, quant à lui, mis à zéro. L'état
de l'avion est E. Les seules informations modifiables sont les informations techniques. Ni les compteurs,
ni l'état de l'avion ne sont accessibles par cette fonction. La suppression d'un avion consiste simplement
à le changer d'état. Il passe à la valeur R. Un avion retiré ne peut plus voler.
F5 : le récapitulatif avions permet de dresser la liste de tous les vols effectués par ces avions, selon le
schéma suivant :
Les vols de chaque avion sont séparés les uns des autres par deux lignes (chaque tableau avion est
séparé des autres par deux lignes). Lorsque l'on change de pilote, il y a d'abord saut de page. Les pilotes
recensés sont ceux qui ont effectué un vol démarrant dans la période de référence (celui-ci pouvant se
terminer en dehors de la période).
Le nombre total d'heures de vol effectuées par chaque avion termine la présentation des vols de l'avion.
Les pilotes qui n'ont pas du tout volé durant la période sont recensés, le message "AUCUN VOL
DURANT LA PÉRIODE" remplaçant le tableau avions. L'état est trié sur les numéros de pilotes
croissant en majeur, sur les numéros d'avions en ordre croissant ensuite et enfin, en mineur, sur les
numéros de vols croissant.
Les vols de chaque pilote sont séparés les uns des autres par deux lignes (chaque tableau pilote est
séparé des autres par deux lignes). Lorsque l'on change d'avion, il y a d'abord saut de page. Les avions
recensés sont ceux qui ont effectué un vol démarrant dans la période de référence (celui-ci pouvant se
terminer en dehors de la période).
•
F7 : régulièrement (la périodicité du traitement étant laissée au choix du gestionnaire de l'aéroclub), les
vols terminés sont facturés aux pilotes. Une fois facturés, ils passent dans l'état F (ETATVOL = F). Pour
calculer le prix d'un vol, il y a calcul du nombre d'heures de vol (CPTARR - CPTDEP), puis application
du tarif horaire correspondant au type de l'avion. Les factures ressemblent au schéma ci-après.
Le nombre total d'heures de vol effectuées par chaque pilote termine la présentation des vols du pilote.
Les avions qui n'ont pas du tout volé durant la période sont recensés, le message "AUCUN VOL
DURANT LA PÉRIODE" remplaçant le tableau pilotes. L'état est trié sur les numéros d'avion croissant
en majeur, sur les numéros de pilote en ordre croissant ensuite et enfin, en mineur, sur les numéros de
vols croissant.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 83 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 84 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
choix d'organisation de fichiers et d'indiquer si, compte tenu des enseignements tirés du développement, ce sont
les bonnes qui ont été choisies. Dans le cas contraire, indiquer lesquelles il aurait fallu adopter.
16/10/12
5.3) Rôle du chef de projet
Le chef de projet est chargé, plus spécifiquement, de l'intégration des sous-programmes "dans" le logiciel. C'est
lui qui crée le programme principal, teste son fonctionnement, remplace les sous-programmes "par défaut" par
les "vrais", dès que possible. Le chef de projet doit aussi piloter l'équipe, en surveillant l'avancement du travail,
en aidant, éventuellement, un co-équipier.
C'est, enfin, le chef de projet qui crée un répertoire GROSTP (avec les droits nécessaires pour que chaque
membre de l'équipe puisse y accéder), y place les jeux d'essais, y remet éventuellement ces jeux d'essais s'ils sont
altérés -en allant les chercher sur l'Intranet). L'intégration des sous-programmes dans ce répertoire sera effectué
sous la responsabilité du chef de projet. Les tests de non régression (i.e. globaux) seront réalisés par lui.
5.4) Répartition des tâches au sein de l'équipe
Soit une équipe quelconque, composée de cinq étudiants, appelés A, B, C, D et E. A est le chef d'équipe. La
répartition des tâches peut être la suivante :
•
•
•
•
•
A : (chef de projet) création du programme principal, intégration, tests de non régression, analyse et
programmation F7
B : analyse et programmation F1, tests unitaires, import dans GROSTP
C : analyse et programmation F5 et F6, tests unitaires, import dans GROSTP
D : analyse et programmation F0 et F2, tests unitaires, import dans GROSTP
E : analyse et programmation F3 et F4, tests unitaires, import dans GROSTP
D'autres organisations sont possibles. Elles sont toutefois déconseillées. Le "KIFEKOUA" sera défini dès le
début du TP et fourni aux enseignants.
NB : la fonction F1 est la plus difficile des huit. Il serait prudent de la confier à un bon. (B stands for "bon").
>"#?$,'1@%-+&?#=#(%-.(%#
Chaque équipe rendra un seul dossier. Il devra comporter une partie analyse algorithmique (une douzaine de
pages au maximum) et une partie jeux d'essais (avec une description des essais prévus par l'équipe, avec les
résultats escomptés, rédigée sur un maximum de quatre pages).
Le listing de chaque programme (programme principal, sous-programmes externes), le "chemin" Linux indiquant
où sont situées les sources, ainsi que la ligne de compilation seront fournis en annexe. Dossier, programmes
seront également enregistrés sur un support informatique (disquette ou CD) et remis aux enseignants lors de
l'évaluation. Un retour sur les organisations de fichiers sera apprécié. Il est, en effet, intéressant de revenir sur les
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 85 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 86 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
On dispose d'un fichier des coureurs (fcour), séquentiel, trié en ordre croissant sur le numéro de coureur
(CODCOUR), ayant la structure suivante :
COBOL par la pratique
CODCOUR
NOM
PRENOM
ADRESSE
KM-FAITS
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num. entier 5 chiffres
9 (3)
5- Épreuves en temps limité
Les épreuves dont les sujets sont présentés ci-après ont été, un jour, imposées à nos étudiants. Elles sont, pour la
plupart, prévues pour durer une heure et demie. Le principe que nous appliquons lors de ces épreuves est le
suivant :
à réponse complète (et correcte), note maximale (ie. 20)
X (20)
X (25)
9 (5)
Les programmes hebdomadaires prévus sont enregistrés dans un fichier (fprog), séquentiel, trié d'abord, et en
ordre croissant, sur le numéro de coureur (CODCOUR), puis, pour un même coureur et en ordre croissant, sur le
numéro de semaine (CODSEM). Un enregistrement représente un entraînement hebdomadaire à effectuer par un
coureur. Un coureur du fichier fcour peut ne pas être présent dans ce fichier (il peut être malade, par exemple). Il
peut aussi y figurer plusieurs fois (si un programme sur plusieurs semaines a été établi). Il n'y a toutefois qu'un
programme par semaine et par coureur. On supposera que les numéros de coureurs et les numéros de semaines
sont corrects, sans erreurs. La structure du fichier est la suivante :
Ceci a une conséquence immédiate sur les sujets proposés. Ils sont longs, seuls les meilleurs et les plus rapides
des étudiants pouvant terminer dans les délais. Chaque sujet est fourni sur le même canevas : après avoir rappelé
les conditions dans lesquelles le test doit se dérouler, les questions sont données. Pour des raisons assez simples
à comprendre, les solutions ne sont accessibles qu'à distance. Il faut donc les demander par courrier électronique.
Sont à ce jour disponibles :
•
•
•
•
X (20)
CODCOUR
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
9 (3)
99
9 (4)
Les programmes réalisés sont enregistrés dans un fichier (freal), séquentiel-indexé, ayant pour clé primaire le
couple (numéro coureur, numéro semaine). La structure de ce fichier est la suivante :
Sujet 1 (devoir)
Sujet 2 (examen)
Sujet 3 (devoir)
Sujet 4 (examen)
CODCOUR
CODSEM
entier 3 chiffres entier 2 chiffres
La distinction devoir - examen est administrative. Un examen est un exercice un peu plus formel (i.e. situé dans
un cadre réglementaire et législatif strict). Les exigences sont les mêmes pour les deux et le plus souvent les
conditions de travail également.
9 (3)
KM-PARCOURUS
entier 4 chiffres
99
9 (4)
Un coureur peut être répertorié plusieurs fois dans ce fichier car le programme que vous êtes chargés d'écrire
peut ne pas être exécuté toutes les semaines. Tous les coureurs présents dans ce fichier sont décrits dans le
fichier fcour. Le nombre de kilomètres parcourus (KM-PARCOURUS) est égal au nombre de kilomètres à faire
(KM-A-FAIRE).
5.1 Sujet 1 (devoir)
Le traitement qui vous est demandé produira, en un seul parcours simultané des fichiers séquentiels
précédents et une seule consultation du fichier indexé :
Cette épreuve est prévue pour se dérouler dans les conditions suivantes :
•
•
•
•
sa durée est de 1h30.
tous les documents sont autorisés.
le sujet est en deux parties, la première d'algorithmique, la seconde de programmation,
DÉPENDANTES L'UNE DE L'AUTRE.
aucune question ne sera acceptée, une fois passé le premier quart d'heure. La compréhension du sujet
faisant partie intégrante du sujet, passé ce délai, les candidats ayant des problèmes indiqueront sur leur
copie la nature de celui-ci et la solution adoptée pour le résoudre.
•
•
un fichier fprogmaj, correspondant à une mise à jour du fichier fprog, dans lequel on ne retrouvera QUE
les programmes hebdomadaires prévus et non réalisés (ils sont dans fprog et pas dans freal).
un fichier fcourmaj, dans lequel on retrouvera tous les coureurs, avec pour certains, le champ KMFAITS modifié par cumul des kilomètres effectués par le coureur.
Les structures des fichiers séquentiels à produire sont les suivantes :
•
fichier fprogmaj (fichier des programmes non encore réalisés) :
CODCOUR
NB : toute ressemblance de ce sujet avec le sujet de l'étude de cas Cyclistes n'est aucunement fortuite. Ce sujet
de contrôle a servi de base pour l'étude de cas.
9 (3)
•
A0(+)%#7#B#!C#*,)-+&#
CODSEM
KM-A-FAIRE
entier 3 chiffres entier 2 chiffres entier 4 chiffres
99
9 (4)
fichier fcourmaj (fichier des coureurs mis à jour) :
CODCOUR
NOM
PRENOM
ADRESSE
KM-FAITS
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num. entier 5 chiffres
9 (3)
X (20)
X (20)
X (25)
9 (5)
On désire effectuer un traitement permettant de gérer l'entraînement de coureurs cyclistes. Chaque coureur établit
un programme adapté à sa morphologie, sa forme du moment et ses objectifs, exprimé en termes de kilométrage
à réaliser.
On rappelle que, par hypothèse, aucun fichier d'entrée n'est vide et qu'il n'y a pas d'erreurs, nulle part.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 87 / 97
Page 88 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
D1%&+),-#!#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
•
Analyser ce problème en une dizaine de lignes maximum, en expliquant très rigoureusement tous les différents
cas possibles. Dans votre analyse, la présence, ou l'absence, de fichier guide devra être expliquée et justifiée avec
rigueur.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#>#*,)-+&"#
Module A206 : Programmation fichiers - COBOL
soit la liste des kilométrages hebdomadaires réalisés par le coureur correspondant au numéro saisi. On
supposera que tous les kilométrages hebdomadaires "tiennent" sur un seul écran, la gestion de l'écran
suivant ou précédent n'étant pas à faire. La ligne d'affichage d'un kilométrage devra comporter le
numéro de la semaine et le kilométrage réalisé. Après affichage de la dernière ligne du coureur, une
ligne total devra afficher le cumul des kilométrages, sous la forme suivante :
TOTAL KILOMETRES PARCOURUS PAR CE COUREUR : 1233km
Le programme ne traite qu'un seul coureur. Une fois les résultats affichés, il s'arrête (i.e. il n'y a pas de boucle sur
la saisie d'un numéro de coureur).
Écrire un algorithme général et les algorithmes détaillés de toutes les procédures que vous avez mises en place
dans votre algorithme général. Vous devrez rédiger avec rigueur les procédures de lecture et d'écriture des
fichiers. Si vous mettez en place des procédures paramétrées, le mode de passage de chaque paramètre devra être
explicité. Votre rédaction devra obligatoirement utiliser les noms de fichiers et ceux des champs des
enregistrements définis dans le texte. Les variables, ou constantes, supplémentaires nécessaires à votre analyse
devront être explicitement déclarées.
A0(+)%#77#E-,+0+),-#*(2<1%#B#!C#*,)-+&"#
La suite d'instructions que vous devez écrire sera placée après la séquence suivante :
1
7A
B
OPEN INPUT FREAL.
DISPLAY "SAISIR UN NUMERO DE COUREUR : "
LINE 10 COL 5 WITH BLANK SCREEN.
ACCEPT W-COUR LINE 10 COL 33.
---partie à compléter---
On suppose que le fichier séquentiel-indexé freal ayant pour clé primaire le couple (numéro coureur, numéro
semaine) dispose d'une clé secondaire dupliquée représentée par le numéro du coureur (CODCOUR).
D1%&+),-#!#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Écrire les instructions COBOL qui permettent de déclarer l'enregistrement du fichier freal. Son enregistrement
sera nommé REALISES :
1
7A
B
DATA DIVISION.
FILE SECTION.
FD FREAL
---partie à compléter---
3#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Écrire l'instruction COBOL qui permet la déclaration du fichier freal, en prenant en compte le traitement
demandé dans la question 3 ci-après. Le nom système de ce fichier sera freal.dat.
1
7A
B
ENVIRONMENT DIVISION.
---partie à compléter---
D1%&+),-#6#E-,+0+),-#*(2<1%#B#>#*,)-+&"#
Écrire la séquence d'instructions COBOL de la PROCEDURE DIVISION permettant, après la saisie de la valeur
du numéro d'un coureur dans la variable W-COUR (déclarée en WORKING-STORAGE SECTION et de même
format que le champ CODCOUR du fichier freal), d'afficher sur un nouvel écran :
•
soit PAS DE KILOMETRAGE REALISE PAR CE COUREUR, si la valeur saisie ne correspond à
aucun des numéros de coureurs enregistrés dans le fichier freal ;
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 89 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 90 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
D1%&+),-#6#E-,+0+),-#*(2<1%#B#:#*,)-+&"#
Rédiger le programme COBOL correspondant à votre algorithme.
5.2 Sujet 2 (examen)
A0(+)%#77#E-,+0+),-#*(2<1%#B#F#*,)-+&"#
Cette épreuve est prévue pour se dérouler dans les conditions suivantes :
•
•
•
•
sa durée est de 1h30.
tous les documents sont autorisés.
le sujet est en deux parties, la première plutôt axée sur des fichiers séquentiels, la seconde proposant
une réflexion sur les fichiers indexés, DÉPENDANTES L'UNE DE L'AUTRE.
aucune question ne sera acceptée, une fois passé le premier quart d'heure. La compréhension du sujet
faisant partie intégrante du sujet, passé ce délai, les candidats ayant des problèmes indiqueront sur leur
copie la nature de celui-ci et la solution adoptée pour le résoudre.
A0(+)%#7#B#!3#*,)-+&#
L'hypothèse de départ (exploitation en accès séquentiel) est très onéreuse. Dans cette deuxième partie, nous
allons tenter de réduire le coût de ce renversement.
D1%&+),-#!#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Donner une estimation du coût de l'algorithme qui a été présenté en partie I, en supposant que l'on ait 10000
enregistrements et que l'on ne prenne en compte que les lectures du fichier ANCIEN. Toutes vos hypothèses de
calcul seront soigneusement explicitées.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
Soit le fichier ANCIEN suivant :
COTE
TITRE
Dans la partie I, nous avions émis l'hypothèse que le fichier ANCIEN serait exploité en accès séquentiel. Étudier
la possibilité de renverser ce fichier ANCIEN en utilisant un accès direct. L'étude ne comprend pas la rédaction
du programme COBOL, mais peut proposer des algorithmes. Donner une estimation du temps de renversement
avec une telle organisation, calculée sur les mêmes bases que dans la question précédente.
CATEGORIE
entier 5 chiffres 40 alpha. num. 25 alpha. num.
9 (5)
X (40)
X (25)
D1%&+),-#6#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Ce fichier est un fichier séquentiel-indexé, avec comme clé primaire la rubrique COTE. Le sens de chaque
rubrique est donné ci-dessous :
COTE
identifiant de l'ouvrage
TITRE
titre de l'ouvrage
Dans la partie I, nous avions imposé l'organisation séquentielle pour le fichier NOUVEAU. Etudier la possibilité
de renverser le fichier ANCIEN, qui sera exploité en séquentiel, comme dans la partie I, et de produire un fichier
NOUVEAU en organisation indexée. Que penser du résultat obtenu ?
CATEGORIE genre dans lequel est classé l'ouvrage
NB : il s'agit bien du fichier OUVRAGE de l'étude de cas Bibliothèque. Celle-ci avait été étudiée en projet avant
l'examen. La longueur de la rubrique COTE a toutefois été modifiée pour les besoins de cet examen.
Ce fichier, par hypothèse, est trié en ordre croissant sur la cote. On ne connaît pas a priori le nombre
d'enregistrements du fichier, mais on est sûr qu'il ne peut pas être chargé tout entier en mémoire centrale. Ce
fichier doit rester intact. Il n'est pas question de l'altérer.
On souhaite obtenir un fichier NOUVEAU, organisé en séquentiel, dont le contenu est identique à celui de
ANCIEN, mais trié "à l'envers", c'est-à-dire en ordre décroissant des cotes. Toutefois, pour une raison
incompréhensible, l'instruction COBOL SORT n'est plus disponible. Votre solution devra donc pallier cette
absence.
D1%&+),-#!#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Analyser ce problème en une dizaine de lignes maximum, en expliquant très rigoureusement comment vous
envisagez de le résoudre. Par hypothèse, le fichier ANCIEN sera exploité en accès séquentiel.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#:#*,)-+&"#
Écrire l'algorithme qui permet d'atteindre cet objectif.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 91 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 92 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Par hypothèse, les fichiers d'entrées peuvent être vides mais, s'ils ne le sont pas, ils ne contiennent pas d'erreur,
nulle part. En revanche, les saisies effectuées par les utilisateurs peuvent être mauvaises et nécessiter d'être
saisies de nouveau.
5.3 Sujet 3 (devoir)
D1%&+),-#!#E-,+0+),-#*(2<1%#B#6#*,)-+&"#
Cette épreuve est prévue pour se dérouler dans les conditions suivantes :
•
•
•
sa durée est de 1h30.
tous les documents sont autorisés.
aucune question ne sera acceptée, une fois passé le premier quart d'heure. La compréhension du sujet
faisant partie intégrante du sujet, passé ce délai, les candidats ayant des problèmes indiqueront sur leur
copie la nature de celui-ci et la solution adoptée pour le résoudre.
Analyser le problème en une dizaine de lignes maximum, en expliquant très rigoureusement tous les différents
cas possibles. Dans votre analyse, la présence, ou l'absence, de fichier guide (maître, principal...) devra être
expliquée et justifiée avec rigueur.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Donnez la structure du fichier LISTE et l'organisation que vous avez choisie pour lui. Justifiez.
On veut programmer un contrôleur d'accès à des salles de TP Informatiques via des cartes magnétiques. Le
principe de ce contrôleur est de débloquer la porte d'entrée pour les seuls porteurs de cartes enregistrées dans un
fichier. Chaque carte est numérotée et attribuée à un étudiant précis. Pour éviter de saisir manuellement la liste
des étudiants autorisés, on vous demande de rédiger un programme qui extrait les informations d'une mini-base
de données composée des trois fichiers suivants :
•
fichier DIPLOMES des diplômes (fdiplo.dat), indexé, ayant pour clé primaire la concaténation des trois
champs CODIP, NIV et OPT, pour clé secondaire la concaténation des champs CODIP et NIV, et
contenant les champs suivants : code du diplôme, niveau, option, libellé du diplôme. Sa structure est la
suivante :
CODIP
NIV
OPT
9
9
NOMET
PRENOMET
•
X (25)
NAISS
X (15)
CODIP
NIV
Écrire un algorithme général et les algorithmes détaillés de toutes les procédures que vous avez mises en place
dans votre algorithme général. Vous devrez rédiger avec rigueur les procédures de lecture et d'écriture des
fichiers. Si vous mettez en place des procédures paramétrées, le mode de passage de chaque paramètre devra être
explicité. Votre rédaction devra obligatoirement utiliser les noms de fichiers et ceux des champs des
enregistrements définis dans le texte. Les variables, ou constantes, supplémentaires nécessaires à votre analyse
devront être explicitement déclarées.
D1%&+),-#:#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
9 (8)
fichier INSCRITS des inscriptions pédagogiques (finscrip.dat), indexé, ayant pour clé primaire
NUMET et pour clé secondaire la concaténation des trois champs CODIP, NIV et OPT, contenant les
champs suivants : numéro de l'étudiant, code complet du diplôme et année d'inscription. Sa structure est
la suivante :
NUMET
7A
B
ENVIRONMENT DIVISION.
---partie à compléter---
D1%&+),-#9#E-,+0+),-#*(2<1%#B#>#*,)-+&"#
8 alpha. num. 25 alpha. num. 15 alpha. num. entier 8 chiffres
X (8)
1
X (30)
Il y a au plus trois niveaux par diplôme (1, 2, 3) ; il peut y avoir plusieurs options pour un même niveau de
diplôme.
• fichier ETUDIANTS des étudiants (fetud.dat), indexé, ayant pour clé primaire le numéro d'étudiant
NUMET et contenant les champs suivants : numéro d'étudiant, nom et prénom de l'étudiant, date de
naissance exprimée sous la forme JJMMAAAA. Sa structure est la suivante : :
NUMET
Écrire l'instruction COBOL qui permet la déclaration des trois fichiers d'entrée (DIPLOMES, ETUDIANTS,
INSCRITS), en prenant en compte le traitement demandé dans la question 4 ci-après.
LIBDIP
7 alpha. num. entier 1 chiffre entier 1 chiffre 30 alpha. num.
X (7)
D1%&+),-#6#E-,+0+),-#*(2<1%#B#6#*,)-+&"#
OPT
Écrire la séquence d'instructions COBOL de la PROCEDURE DIVISION qui permet d'exécuter l'algorithme de
la question 4. Les variables de travail que vous serez amenés à utiliser devront faire l'objet d'une déclaration dans
la WORKING-STORAGE SECTION.
D1%&+),-#>#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
ANNEE
8 alpha. num. 7 alpha. num. entier 1 chiffre entier 1 chiffre entier 4 chiffres
X (8)
X (7)
9
9
En supposant que l'on autorise maintenant les étudiants à s'inscrire à plusieurs diplômes la même année, indiquez
ce qu'il faut modifier dans votre programme (structures des fichiers, algorithme, programme COBOL luimême...). Justifiez.
9 (4)
Dans un premier temps, nous allons supposer que les étudiants ne peuvent s'inscrire que dans un seul
diplôme par année (le code complet du diplôme, CODIP+NIV+OPT, est unique pour chaque étudiant).
Le traitement qui vous est demandé saisit un code diplôme partiel (code diplôme + niveau) -MAIS PAS
L'OPTION- et fournit la liste de tous les étudiants inscrits à ce diplôme et à ce niveau, quelque soit l'option
choisie, en donnant les renseignements suivants : numéro d'étudiant, nom, prénom. Il fournira également le
nombre total d'inscrits à ce diplôme et à ce niveau, toutes options confondues. Le fichier obtenu sera appelé
LISTE (nom système du fichier fliste.dat). Il n'est pas nécessaire de présenter les résultats triés selon un
quelconque critère.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 93 / 97
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 94 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Les fichiers sont ordonnés sur le nom du client ou du fournisseur. Dans un premier temps, on suppose que
chaque nom de client n'apparaît (au plus) qu'une seule fois dans chaque fichier, mais peut bien évidemment
apparaître dans les deux fichiers.
5.4 Sujet 4 (examen)
Écrire l'algorithme permettant de créer un troisième fichier ne contenant que les noms et adresses de chaque
client et/ou fournisseur, ordonné selon leur nom et sans répétition. On s'appliquera à regrouper d'un côté toutes
les instructions relatives à l'écriture dans le fichier, et de l'autre côté celles relatives à la lecture du ou des
enregistrements suivants.
Cette épreuve est prévue pour se dérouler dans les conditions suivantes :
•
•
•
•
sa durée est de 1h30.
tous les documents sont autorisés.
le sujet est en deux parties, la première plutôt axée sur des fichiers séquentiels, la seconde proposant
une réflexion sur les fichiers indexés, INDÉPENDANTES L'UNE DE L'AUTRE.
aucune question ne sera acceptée, une fois passé le premier quart d'heure. La compréhension du sujet
faisant partie intégrante du sujet, passé ce délai, les candidats ayant des problèmes indiqueront sur leur
copie la nature de celui-ci et la solution adoptée pour le résoudre.
Une solution à ce problème consiste à considérer les deux fichiers CLIENT et FOURNISSEUR comme un seul
fichier logique qu'il s'agit "simplement" de parcourir. Il est donc possible de mettre en place une procédure
OBTENIR-TOUT qui fournit un article à la procédure chargée de la création, selon la politique énoncée ci-avant
(articles triés dans l'ordre croissant des noms, un seul nom au plus dans chaque fichier d'origine et dans le fichier
résultat). La procédure de création peut alors être vue comme le parcours d'un seul fichier, selon l'algorithme
suivant :
A0(+)%#7#B#!C#*,)-+&#
On dispose d'une procédure OBTENIR ayant le comportement suivant :
•
•
•
•
Elle est appelée par OBTENIR (ENR, WFIN).
Si le fichier n'a pas été entièrement parcouru, OBTENIR transfère le contenu de l'enregistrement courant
du fichier dans ENR et déplace le pointeur sur l'enregistrement courant d'une position. Le paramètre
WFIN n'est pas modifié.
Si le fichier a été entièrement parcouru, OBTENIR met WFIN à vrai. ENR n'est pas modifié.
Le fichier est supposé avoir été ouvert avant le premier appel.
D1%&+),-#!#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Une implémentation COBOL de cette procédure, pour le fichier ETUDIANT, est la suivante :
1
Analyser ce problème en une dizaine de lignes maximum, en expliquant très rigoureusement comment vous
envisagez de le résoudre. Tout ce qui concerne la manipulation des fichiers CLIENT et FOURNISSEUR doit être
inclus dans OBTENIR-TOUT (il n'est pas question, par exemple, d'ouvrir et de fermer ces fichiers dans la
procédure de création).
7A
B
OBTENIR-ETUDIANT.
*
* PROCEDURE DE LECTURE DU FICHIER ETUDIANT
*
READ ETUDIANT AT END MOVE "V" TO WFIN.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
Écrire l'algorithme des trois procédures OBTENIR-TOUT, OBTENIR-CLIENT et OBTENIR-FOURNISSEUR.
Ces deux dernières seront appelées par la première. Elles sont semblables à la procédure OBTENIR-ETUDIANT
décrite dans la page précédente.
On va utiliser ce type de procédures dans l'exercice suivant (vu en TD). Soient les deux fichiers CLIENT (nom
système fclient.dat) et FOURNISSEUR (nom système ffour.dat).
•
L'enregistrement du fichier CLIENT est le suivant :
NOM
ADRESSE
PRODUIT
D1%&+),-#6#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
Rédiger le programme COBOL correspondant à votre algorithme.
PRIXTTC
QUANTITE
20 alpha. num. 25 alpha. num. 20 alpha. num. entier 4 chiffres entier 4 chiffres
X (20)
•
X (25)
X (20)
9 (4)
9 (4)
PRIXTTC
QUANTITE
A0(+)%#77#E-,+0+),-#*(2<1%#B#!C#*,)-+&"#
L'enregistrement du fichier FOURNISSEUR est le suivant :
NOM
ADRESSE
PRODUIT
On va revenir sur l'application Coureurs cyclistes et modifier quelque peu les données. Nous souhaitons mettre
en place une procédure de mise à jour plus sûre et, en particulier, pouvoir supprimer les coureurs en deux fois :
20 alpha. num. 25 alpha. num. 20 alpha. num. entier 4 chiffres entier 4 chiffres
X (20)
X (25)
X (20)
9 (4)
9 (4)
•
•
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 95 / 97
une première fonction qui se contente de marquer l'enregistrement à supprimer ;
une seconde qui balaye le fichier des coureurs et procède effectivement à la suppression physique (ie. à
la destruction) des coureurs précédemment marqués.
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 96 / 97
Campus International e-mi@ge
Module A206 : Programmation fichiers - COBOL
Pour mémoire, le fichier des coureurs COUREUR, séquentiel indexé, de clé primaire le numéro de coureur
(CODCOUR), de clé secondaire le numéro d'entraîneur (ENTRAINEUR), a la structure suivante :
CODCOUR
NOM
PRENOM
ADRESSE
entier 3 chiffres 20 alpha. num. 20 alpha. num. 25 alpha. num.
9 (3)
X (20)
X (20)
X (25)
TOTAL-KM-FAITS ENTRAINEUR
entier 5 chiffres
entier 3 chiffres
9 (5)
9 (3)
D1%&+),-#!#E-,+0+),-#*(2<1%#B#3#*,)-+&"#
Adapter la structure de données du fichier à cette nouvelle problématique. Les modifications proposées seront
justifiées.
D1%&+),-#3#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
Donner l'algorithme de la procédure permettant de marquer les coureurs à supprimer.
D1%&+),-#6#E-,+0+),-#*(2<1%#B#9#*,)-+&"#
Donner l'algorithme de la procédure permettant de supprimer effectivement les coureurs marqués.
16/10/12
Document rédigé par Alain VAILLY, le 19/10/12 à 8:10
Page 97 / 97