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