exercice d’entraînement tp-14 - resoo.org · 5- cobol déclaration des différents fichiers...

35
Exercice d’Entraînement TP-14 l) Enoncé Une société de commercialisation de produits industriels dispose d’un système informatique centralisé qui lui permet de traiter les commandes de ses clients. Une des composantes de l’application de gestion des commandes est spécialisée dans l’émission et le suivi de la facturation. Vous vous attacherez à développer l’aspect facturation en respectant les règles de gestion décrites ci-dessous. DESCRIPTION DU SYSTEME DE FACTURATION Le Système de facturation à mettre en place se compose de deux parties: Première partie (UT1): Par un traitement en « Temps différé » quotidien, cette étape effectue la facturation de toutes les commandes des divers clients, COMMANDES NON ENCORE TRAITÉES. Seconde partie (UT2): Par un traitement de périodicité annuelle, elle restitue d’une part le cumul de toutes les commandes des clients, et effectue, d’autre part le calcul du coefficient de réduction qui permet d’avantager les meilleurs clients de la société. DESCRIPTION DETAILLEE Unité de Traitement 1 (UT1) Cette unité de traitement consiste à établir la facturation des nouvelles commandes des clients. Les codes des clients pour lesquels il existe des commandes qui doivent être facturées sont contenus dans le fichier « F_DEMANDES ». Toutes les commandes des différents clients, sont stockées dans le fichier « F_COMMANDES ». Le traitement consiste à retrouver dans ce fichier, tous les produits commandés par les clients, produits pour lesquels il n’y a pas eu encore de facturation. Chaque produit répondant à ce critère fera l’objet d’une ligne détail dans un état « F_FACTURES ». On veillera particulièrement à éviter les doubles facturations. On distingue quatre catégories de clients (Catégories 1 à 4). La catégorie de chaque client est déterminée selon le montant total de ses commandes passées au cours de l’année précédente. L’appartenance à une catégorie de client donne droit à l’application d’un coefficient de réduction sur le prix de chaque produit. Ces coefficients de réduction sont variables d’un produit à l’autre. Les diverses informations sur les prix et les coefficients de réduction pour les divers produits sont communiquées par l’intermédiaire du fichier « F_BAREME ».

Upload: lethu

Post on 16-Sep-2018

218 views

Category:

Documents


1 download

TRANSCRIPT

Exercice d’Entraînement TP-14

l) Enoncé

Une société de commercialisation de produits industriels dispose d’un système informatique centralisé qui lui permet de traiter les commandes de ses clients. Une des composantes de l’application de gestion des commandes est spécialisée dans l’émission et le suivi de la facturation.

Vous vous attacherez à développer l’aspect facturation en respectant les règles de gestion décrites ci-dessous.

DESCRIPTION DU SYSTEME DE FACTURATION

Le Système de facturation à mettre en place se compose de deux parties:

Première partie (UT1):

Par un traitement en « Temps différé » quotidien, cette étape effectue la facturation de toutes les commandes des divers clients, COMMANDES NON ENCORE TRAITÉES.

Seconde partie (UT2):

Par un traitement de périodicité annuelle, elle restitue d’une part le cumul de toutes les commandes des clients, et effectue, d’autre part le calcul du coefficient de réduction qui permet d’avantager les meilleurs clients de la société.

DESCRIPTION DETAILLEE Unité de Traitement 1 (UT1)

Cette unité de traitement consiste à établir la facturation des nouvelles commandes des clients.

Les codes des clients pour lesquels il existe des commandes qui doivent être facturées sont contenus dans le fichier « F_DEMANDES ».

Toutes les commandes des différents clients, sont stockées dans le fichier « F_COMMANDES ». Le traitement consiste à retrouver dans ce fichier, tous les produits commandés par les clients, produits pour lesquels il n’y a pas eu encore de facturation. Chaque produit répondant à ce critère fera l’objet d’une ligne détail dans un état « F_FACTURES ».

On veillera particulièrement à éviter les doubles facturations.

On distingue quatre catégories de clients (Catégories 1 à 4). La catégorie de chaque client est déterminée selon le montant total de ses commandes passées au cours de l’année précédente.

L’appartenance à une catégorie de client donne droit à l’application d’un coefficient de réduction sur le prix de chaque produit. Ces coefficients de réduction sont variables d’un produit à l’autre. Les diverses informations sur les prix et les coefficients de réduction pour les divers produits sont communiquées par l’intermédiaire du fichier « F_BAREME ».

Pour tous les produits

La catégorie de client 1 se verra affecter le coefficient de réduction de rang 1 dans F_BAREME

La catégorie de client 2 se verra affecter le coefficient de réduction de rang 2 dans F_BAREME

La catégorie de client 3 se verra affecter le coefficient de réduction de rang 3 dans F_BAREME

La catégorie de client 4 se verra affecter le coefficient de réduction de rang 4 dans F_BAREME. La somme due par un client pour un produit commandé est égale au prix du produit multiplié par la quantité multipliée par le coefficient de réduction auquel le client a droit.

Un produit déjà facturé est repéré par la présence du caractère « X » dans l’indicateur de traitement de produit.

L’édition de la facturation doit être réalisée. Le montant Total hors taxes servira à la mise à jour du cumul des diverses commandes du client.

DESCRIPTION DES FICHIERS de l’UT1

FICHIER F_BAREME

Ce fichier est sur disque magnétique en organisation séquentielle.

Longueur de l’enregistrement 24 caractères.

Fichier non trié.

Ce fichier contient au plus 100 produits

Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code du Produit 5 Alpha Numérique Prix du Produit 7 Numérique

(2 Décimales)

Coefficient de Réduction 3 Numérique (2 Décimales)

zone répétée 4 fois

Chaque coefficient de réduction est une zone numérique inférieure ou égale à 1

Fichier F_CLIENTS

Ce fichier est sur disque magnétique en organisation séquentielle indexée.

Longueur de l’enregistrement 144 caractères.

Clé d’accès code client.

Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique Clé Nom Client 30 Alpha Numérique Prénom_Client 20 Alpha Numérique Adresse Client 55 Alpha Numérique Ville Client 20 Alpha Numérique Code Postal Client 5 Alpha Numérique Catégorie Client 1 Numérique Cumul Commandes Client 8 Numérique (2

Décimales)

Fichier F_DEMANDES

Ce fichier est sur disque magnétique en organisation séquentielle.

Longueur de l’enregistrement 5 caractères

Fichier non trié.

Contenu de la Zone LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique

Fichier F_COMMANDES

Ce fichier est sur disque magnétique en organisation séquentielle indexée.

Longueur de l’enregistrement 17 caractères.

Clés d’accès le Code Client et le Code Produit.

NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Code Client 5 Alpha Numérique Code Produit 5 Alpha Numérique

La concaténation de ces 2 zones forme la clé d’accès au fichier

Quantité commandée 6 Numérique Indicateur de traitement du produit

1 Alpha Numérique

à blanc ou à « X »

Fichier F_PRODUITS

Ce fichier est sur disque magnétique en organisation séquentielle indexée.

Longueur de l’enregistrement 28 caractères.

Clé d’accès le Code Produit.

NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Code Produit 5 Alpha Numérique Clé Libellé du Produit 23 Alpha Numérique

Fichier F_FACTURES

Ce fichier est sur imprimante

La facture d’un client tient sur une seule page.

Les intitulés sont en gras

PAGE : xxx 4 lignes FACTURE 3 lignes NOM : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PRENOM : XXXXXXXXXXXXXXXX ADRESSE : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX VILLE : XXXXXXXXXXXXXXXXXXXXX CODE POSTAL :XXXXXXXXXXXXXX 2 lignes PRODUIT DESIGNATION QUANTITE PRIX 2 lignes XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX XXXXX XXXXXXXXXXXXXXX XXXXX XXX XXX,XX Saut de 5 lignes TOTAL HORS TAXES : XXX XXX XXX,XX TVA 18,6% : XX XXX,XX TOTAL TTC : X XXX XXX XXX,XX

DESCRIPTION DETAILLEE Unité de Traitement 2 (UT2)

Cette unité de traitement de périodicité annuelle remplit deux fonctions distinctes :

1) Production d’un état statistique à partir du fichier « F_CLIENTS »

L’état annuel des clients, fichier « F_ETATSTAT » est une liste par ordre décroissant du cumul hors taxes des commandes, il reflète l’importance des clients vis à vis de la société

Sur la dernière page de cet état, on fera figurer le Montant Total Hors Taxes des ventes de la Société pour l’année écoulée.

On considère que le fichier des clients ne peut dépasser plus de 1000 enregistrements.

2) Mise à jour de la catégorie de chaque client Un enregistrement paramètre fichier « F_PARAMETRE », sera fourni au programme, indiquant par trois valeurs les limites des plages de cumul hors taxes des commandes pour chaque catégorie de client.

Catégorie 1 : Montant des cumuls HT <= valeur 1

Catégorie 2 : Montant des cumuls HT <= valeur 2

Catégorie 3 : Montant des cumuls HT <= valeur 3

Catégorie 4 : Montant des cumuls HT > valeur 3.

La remise à zéro du cumul hors taxes des commandes de chaque client devra également être gérée par cette fonction

DESCRIPTION DES FICHIERS de l’UT2

Fichier F_CLIENTS

Voir description dans l’unité de traitement 1.

Enregistrement PARAMETRE

Organisation séquentielle sur disque magnétique

UN SEUL ENREGISTREMENT de longueur 39 caractères.

NOM DE LA ZONE LONGUEUR NATURE OBSERVATIONS Plages de Cumul 13 Numérique (2 Décimales) zone répétée 3 fois

Fichier F_ETATSTAT

Ce fichier est sur imprimante

On édite 50 lignes détails, le titre sur chaque page.

Les intitulés sont en gras

Le chiffre d’affaire annuel uniquement sur la dernière page.

ETAT DES CLIENTS 3 lignes CODE CLIENT NOM CUMUL ANNUEL HT 2 lignes XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX XXXXX XXXXXXXXXXXXXXX X XXX XXX ,XX Ligne 60 CHIFFRE D’AFFAIRE HT ANNUEL: XXX XXX XXX XXX,XX

Il) Travail Demandé

1- Unité de traitement ou Diagramme

2- Description des données

3- Arbre programmatique général UT1. Arbres programmatiques détaillés de l’UT1 Chargement et Recherche Barème

4- Arbre programmatique général UT2. Arbres programmatiques détaillés de l’UT2 Tri de la table des clients, Mise à jour du fichier des clients et édition de l’état statistique.

5- Cobol déclaration des différents fichiers (UT1), traitement du calcul du prix unitaire (UT1).

Corrigé de l’Exercice d’Entraînement TP-14_UT1

I) Diagramme de Traitement UT1

Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.

F_BAREMEOrganisationSéquentielle

PROG_TP14UT1

Non Trié

F_DEMANDESOrganisationSéquentielle

F_FACTURES

F_CLIENTSOrganisation

Séq.Index.

Non Trié

F_PRODUITSOrganisationSéq. Index.

Clé Code Produitt

Clé Code Client

F_COMMANDESOrganisation

Seq. IndexClé Code Client +

Code Produit

Dans cette première unité de traitement, nous avons donc défini les fichiers en entrée et les fichiers en sortie avec pour chacun le type d’organisation qui a été spécifié au niveau de l’analyse. Nous rappelons que le type d’organisation impose le ou les types d’accès permettant de lire les enregistrements de ces fichiers.

- Organisation Séquentielle ==> Accès Séquentiel

- Organisation Séquentielle Indexée ==> Accès Séquentiel, Accès Direct, Accès Dynamique.

Nous détaillerons au cours de la correction, les caractéristiques de chacun de ces accès.

II) Analyse du problème

Ce traitement consiste à produire une facture pour les clients ayant effectué une commande, ce type de clients est répertorié dans le fichier « F_DEMANDES ».

Le fichier « F_BAREMES », en organisation séquentielle contient toutes les informations nécessaires à l’établissement du coût des produits commandés. Ce fichier comporte au maximum 100 enregistrements, ce fichier F_BAREMES sera chargé en mémoire centrale dans une structure de type table dès le début du traitement.

Il apparaît que le fichier de base du traitement est le fichier « F_DEMANDES », ce fichier devra être lu SÉQUENTIELLEMENT en entier afin de traiter toutes les demandes, la fin de ce fichier conditionne la fin du traitement.

Pour chaque client appartenant à ce fichier « F_DEMANDES », il faudra :

- Préparer l’en-tête de la facture, la date la numérotation des pages, toutes les informations concernant le client seront éditées à partir du fichier « F_CLIENTS » par UNE LECTURE DIRECTE avec la clé renseignée par le code client du fichier « F_DEMANDES ».

- A partir de ce même code client, SE POSITIONNER DIRECTEMENT sur le premier enregistrement de ce client dans le fichier « F_COMMANDES », puis lire séquentiellement tous les enregistrements (tous les produits commandés) concernant ce client.

- Pour chaque produit non facturé, calculer le prix en fonction du prix unitaire, de la quantité et du coefficient de réduction attribué au client. Une ligne détail de la facture sera établie et éditée pour chacun des produits, la désignation du produit sera renseignée par UNE LECTURE DIRECTE du fichier « F_PRODUITS » à partir du code produit. Préparer le cumul des achats du client. Mettre à jour l’enregistrement traité dans le fichier « F_COMMANDES » après avoir positionné l’indicateur de traitement du produit à « X ».

- En fin de client, éditer la ligne total Hors Taxes, éditer la ligne TVA ainsi que la ligne TTC de la facture, mettre à jour le cumul des commandes du client dans le fichier « F_CLIENTS ».

Nous allons donc résumer dans un tableau les différents types d’accès et les ordres associés sur les fichiers pour l’unité de traitement 1

Nom de Fichier Type d’Organisation

Type d’Accès Ordres E/ S Ordres E/S en cobol

F_DEMANDES

en Entrée

Séquentielle Séquentiel Lecture Séquentielle READ F_DEMANDES AT END xxxxxxxx

F_BAREME

en Entrée

Séquentielle Séquentiel Lecture Séquentielle READ F_BAREME AT END xxxxxxxx

F_CLIENTS

En Entrée- Sortie

Séquentielle Indexée

Direct Lecture Directe

Réécriture Directe

READ F_CLIENTS INVALID KEY xxxxxxx

REWRITE ES_Client INVALID KEY xxxxxxxx

F_COMMANDES

En Entrée -Sortie

Séquentielle Indexée

Dynamique Lecture Directe

Réécriture Directe

Positionnement

Lecture Séquentielle

READ F_COMMANDES INVALID KEY xxxxxxx

REWRITE ES_Commande INVALID KEY xxxxxxxx

START F_COMMANDES INVALID KEY xxxxxxx

READ F_COMMANDES NEXT AT END xxxxxx

F_PRODUITS

En entrée

Séquentielle Indexée

Direct Lecture Directe READ F_PRODUITS INVALID KEY xxxxxxx

F_FACTURES

En Sortie

Séquentielle Séquentiel Écriture Séquentielle

WRITE S_Facture

La structure du fichier F_DEMANDES, fichier directeur du traitement est très simple un enregistrement par client.

Dans le fichier F_COMMANDES pour un client il existe N Commandes.

FICHIERF_DEMANDES

CLIENTS

1

N

1

TANT QUE

TANT QUE

EnregistrementF_DEMANDES

1

LectureF_DEMANDES

PRODUITS

1

P

11

EnregistrementF_COMMANDES

LectureF_COMMANDES

III) Description des données UT1

En Pseudo-Code

FICHIER F_DEMANDES

E_Dem_Cod_Client Texte (5)

FICHIER F_BAREME

E_Bareme : Fiche ( Bar_Cod_Produit Texte (5) Bar_Prix Numérique (5,2)

Bar_ZoneCoef [1 : 4] : Bar_Coef Numérique (1,2) )

E_Bareme Texte (24) (par défaut)

FICHIER F_CLIENTS

ES_Client : Fiche ( Cli_Cod_Client Texte (5) Clé Cli_Nom Texte (30) Cli_Prenom Texte (20) Cli_Adresse Texte (55) Cli_Ville Texte (20) Cli_CP Texte (5) Cli_Cat Numérique (1) Cli_Cumul Numérique (6,2) )

ES_Client Texte (144) (par défaut)

FICHIER F_COMMANDES

ES_Commande : Fiche ( Cmd_Clé Fiche (

Cmd_Cod_Client Texte (5) Clé1 Cmd_Cod_Produit Texte (5) Clé2

) Cmd_Quantite Numérique (6) Cmd_Indic_Traite Texte (1)

)

ES_Commande Texte (17) (par défaut)

FICHIER F_PRODUITS

E_Produit : Fiche ( Prod_Cod_Produit Texte (5) Clé

Prod_Libelle Texte (23) )

E_Produit Texte (28) (par défaut)

FICHIER F_FACTURES

S_Facture Texte (132)

Le fichier F_FACTURES ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées. Les différents enregistrements seront décrits sous forme de zones de travail.

ZONES de TRAVAIL

T_Fin_F_Demandes Logique

T_Fin_F_Bareme Logique

T_Fin_F_Commandes Logique

Variable identifiant la fin du fichier Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux »

T_LgnPage_Fact Fiche ( 120 caractères à blanc T_Int1_Page Texte (7) T_Num_Page Numérique Editée (3) 2 caractères à blanc )

T_LgnPage_Fact Texte (132) (par défaut)

Ligne Numéro de page du fichier F_FACTURES

T_LgnTitre_Fact Fiche ( 62 caractères à blanc T_Int1_Titre Texte (7) 63 caractères à blanc )

T_LgnTitre_Fact Texte (132) (par défaut)

Ligne Titre du fichier F_FACTURES

T_LgnNom_Fact Fiche ( T_Int1_Nom Texte (15) T_Nom Texte (30) 87 caractères à blanc )

T_LgnNom_Fact Texte (132) (par défaut)

Ligne Nom du client du fichier F_FACTURES

T_LgnPrenom_Fact Fiche ( T_Int1_Prenom Texte (15) T_Prenom Texte (20) 97 caractères à blanc )

T_LgnPrenom_Fact Texte (132) (par défaut)

Ligne Prenom du client du fichier F_FACTURES

T_LgnAdr_Fact Fiche ( T_Int1_Adr Texte (15) T_Adresse Texte (55) 62 caractères à blanc )

T_LgnAdr_Fact Texte (132) (par défaut)

Ligne Adresse du client du fichier F_FACTURES

T_LgnVilleCP_Fact Fiche ( T_Int1_VilleCP Texte (15) T_Ville Texte (20) 40 caractères à blanc T_Int2_VilleCP Texte (10) T_CP Texte (5) 42 caractère à blanc )

T_LgnVilleCP_Fact Texte (132) (par défaut)

Ligne Adresse du client du fichier F_FACTURES

T_LgnInt_Fact Fiche ( 20 caractère à blanc T_Int1_Int Texte (7) 20 caractère à blanc T_Int2_Int Texte (11) 20 caractère à blanc T_Int3_Int Texte (8) 20 caractère à blanc T_Int4_Int Texte (4) 22 caractère à blanc )

T_LgnInt_Fact Texte (132) (par défaut)

Ligne Intitulé de l’état F_FACTURES

T_Lgn_Fact Fiche ( 21 caractère à blanc T_Code_Produit Texte (5) 14 caractère à blanc T_Libelle_Produit Texte (23) 15 caractère à blanc T_Qte_Produit Numérique Editée (6) 18 caractère à blanc T_Prix_Produit Numérique Editée (10) 20 caractère à blanc )

T_Lgn_Fact Texte (132) (par défaut)

Ligne courante de l’état F_FACTURES

T_LgnHT_Fact Fiche ( 87 caractères à blanc T_Int1_HT Texte (25) T_HT Numérique éditée (14) 6 caractères à blanc )

T_LgnHT_Fact Texte (132) (par défaut)

Ligne Total Hors Taxes du fichier F_FACTURES

T_LgnTVA_Fact Fiche ( 87 caractères à blanc T_Int1_TVA Texte (30) T_TVA Numérique éditée (9) 6 caractères à blanc )

T_LgnTVA_Fact Texte (132) (par défaut)

Ligne Total TVA du fichier F_FACTURES

T_LgnTTC_Fact Fiche ( 87 caractères à blanc T_Int1_HT Texte (23) T_HT Numérique éditée (16) 6 caractères à blanc )

T_LgnTTC_Fact Texte (132) (par défaut)

Ligne Total Toutes Taxes du fichier F_FACTURES

T_Sov_Client Texte (6)

Sauvegarde du Code Client

T_NumPage_Fact Numérique (3)

Compteurs de page

T_CalculPrix_Produit Numérique (6,2)

Prix produit (Qte et coeff)

T_Cum_Client Numérique (6,2)

Cumul client

T_MtHT_Client Numérique (9,2)

Montant Hors Taxes du client

T_TVA_Client Numérique (5,2)

Montant TVA du client

T_MtTTC_Client Numérique (10,2)

Montant TTC du client

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

Nous avons indiqué qu’il était nécessaire de stocker le fichier F_BAREME sous forme de table.

Quelles sont les fonctions ==> Le prix unitaire

Le coefficient de réduction.

Le prix unitaire dépend d’un argument qui est ==> Le code produit qui n’est pas une séquence absolue

Le coefficient de réduction dépend de 2 arguments ==> Le code produit qui n’est pas une séquence absolue

La catégorie 1 à 4 qui est une séquence absolue

Chargement Séquentiel et Recherche Séquentielle pour le sur l’argument code produit

Chargement Directe et Recherche Directe sur l’argument catégorie

100 postes

T_Bareme : TABLEAU ( [1 :100] : Fiche (

T_CodeProduit_Bareme Texte (5)

T_PUProduit_Bareme Numérique (5,2)

T_Coef_Bareme [1 :4] Numérique (1,2))

)

T_Ind_Bareme Numérique (3)

PROG_TP14_UT1

TANT QUE

T_Fin_F_Demandes =

"Faux"

Debut_Prog_TP14_UT1 Fin_Prog_TP14_UT1

Ouvertures LectureF_DEMANDES

UN_CLIENT

Debut_ClientFin_Client

IV - ARBRE GENERALPROG TP14-UT1

Init_TP14 Fermetures

TANT QUE

T_Fin_F_Commandes="Faux"

ETE_Dem_Cod_Client=

Cmd_Cod_Client

UN_PRODUIT Edition_Fin_Facture

Init_Client

Charg_Bareme

MAJ_Client LectureF_DEMANDES

SI ALORS

Trait_Produit

Lecture SEQF_COMMANDES

Cmd_Indic_Traite^= "X"

Edition_DebutFacture

Positionnement F_COMMANDES

Lecture SEQF_COMMANDES

IV - ARBRE DETAILLE PROG TP14_UT1

Trait_Produit

Lecture_DirecteF_PRODUITS

On renseigne la clé du fichier SIF_PRODUITS par le code produit de lacommande, afin d'effectuer une lecture

directe pour récupérer le libellé duproduit

Calcul_Prix_Produit Cumul_FactureProd_Cod_Produit

<==Cmd_Cod_Produit

Edit_Lgn_Facture MAJ_Commandes

T_Libelle_Produit<==

Prod_Libelle

T_Qte_Produit<==

Cmd_Quantite

T_Prix_Produit<==

T_CalculPrix_Produit

T_Code_Produit<==

Cmd_Cod_Produit

Ecrire S_Facture<==

T_Lgn_Fact

T_CalculPrix_Produit a été calculédans le bloc

Calcul_Prix_Produit

Le libellé du produit (Prod_Libelle) estobtenu à l'aide de la lecture directe de

F_PRODUITS

IV - ARBRE DETAILLEPROG TP14_UT1

Init_TP14_UT1

T_Fin_F_Demandes<== "Faux"

Ouvertures

Ouvrir en entrée F_DEMANDES,F_PRODUITS

Fermetures

FermerF_DEMANDES,F_PRODUITS,F_CLIENTS,

F_COMMANDES,F_FACTURE

T_Int1_Page <== "PAGE : "T_Int1_Titre <== "FACTURE"

T_Int1_Nom <== "NOM :"T_Int1_Prenom <== "PRENOM :"

T_Int1_Adresse <== "ADRESSE :"T_Int1_VilleCP <== "VILLE :"T_Int2_VilleCP <== "CP :""

T_Int1_Int<== "PRODUIT"T_Int2_Int<==

"DESIGNATION"T_Int3_Int <=="QUANTITE"

T_Int4_Int <== "PRIX"

Ouvrir en sortieF_FACTURE

Ouvrir en entrée-sortieF_CLIENTS,

F_COMMANDES

T_NumPage_Fact<== 0

Initialisation tableT_Bareme

T_Int1_HT<== "TOTAL HORS TAXES : "T_Int1_TVA<== "TVA 18,6%"

T_Int1_TTC <=="TOTAL T.T.C."

IV - ARBRE DETAILLE PROG TP14_UT1

Charg_Bareme

TANT QUE

Charg_Un_Produit

Fin_Charg_Bareme

T_Fin_F_Bareme=

"Faux

On commence le chargement sur le premierposte de la table

OuvertureF_BAREME

en entréeFermer F_BAREME

Chargement de la tableT_Bareme à partir du fichier

F_BAREME

Debut_Charg_Bareme

T_Fin_F_Bareme<==

"Faux"

T_Ind_Bareme<== 1

LectureF_BAREME

T_Bareme (T_Ind_Bareme)<==

E_Bareme

T_Ind_Bareme<==

T_Ind_Bareme+ 1

LectureF_BAREME

On passe au poste suivant, chargementséquentiel

Optimisation du chargement: le dessin de l'enregistrement de

F_BAREME étant identique à la descriptiond'un poste de la table, on charge tout le

poste sans s'occuper de la catégorie

IV - ARBRE DETAILLEPROG TP14_UT1

Init_Client

T_MtHT_Client,T_Cumul_Client

<== 0

Edition_Debut_Facture

Cli_Cod_Client<==

E_Dem_Cod_Client

Lecture_DirecteF_CLIENTS

Ecrire S_Facture<==

T_LgnTitre_Fact aprèssaut de 4 lignes

Edit_Lgn_Page

Edit_Lgn_Titre

Edit_Lgn_Nom

Edit_Lgn_Prenom

Edit_Lgn_Adresse

Edit_Lgn_Ville_CP

Edit_Lgn_Intitules

Ecrire S_Facture<==

T_LgnAdr_Fact

T_Adresse<==

Cli_Adresse

Edit_Lgn_Page

T_NumPage_Fact<==

T_NumPage_Fact+ 1

T_Num_Page_Fact<==

T_NumPage_Fact

Ecrire S_Facture<==

T_LgnPage_Factaprès saut de page

Edit_Lgn_Nom

T_Nom<==

Cli_Nom

Ecrire S_Facture<==

T_LgnNom_Fact

IV - ARBRE DETAILLEPROG TP14_UT1

T_Prenom<==

Cli_Prenom

Ecrire S_Facture<==

T_LgnPrenom_Fact

Edit_Lgn_Prenom

T_Ville<==

Cli_Ville

T_Cp<==

Cli_CP

Ecrire S_Facture<==

T_LgnPrenom_Fact

Edit_Lgn_Ville_CP

S_Facture<==

à blanc

Edit_Lgn_Intitules

Ecrire S_Facture<==

T_LgnInt_Factaprès saut de 2 lignes

Ecrire S_Factureaprès saut d'une ligne

Cumul_Facture

T_MtHT_Client<==

T_MtHT_Client +

T_CalculPrix_Produit

MAJ_Commande

Cmd_Indic_Traite<=="X"

Réécrire directeES_Commande

On positionne l'indicateur de facturationdu produit à "X" pour éviter double

facturation

On réécrit l'enregistrement mis à jour sur le fichierF_COMMANDES.

La clé est renseignée par les précédents ordre d'entréesortie ( LECTURE SEQ de F_COMMANDES)

IV - ARBRE DETAILLEPROG TP14_UT1

Edition_Fin_Facture

Ecrire S_Facture<==

T_LgnHT_Factaprès saut de 5 lignes

Edition_Lgn_TVA Edition_Lgn_TTC

T_HT<==

T_MtHT_Client

T_TVA_Client<==

(T_MtHT_Client * 18,6)/ 100

T_TVA<==

T_TVA_Client

Ecrire S_Facture<==

T_LgnTVA_Fact

Edition_Lgn_TTC

T_TTC_Client<==

T_MtHT_Client+ T_TVA_Client

T_TTC<==

T_TTC_Client

Ecrire S_Facture<==

T_LgnTTC_Fact

Edition_Lgn_HT

IV - ARBRE DETAILLEPROG TP14_UT1

T_Ind_Bareme<==

1

Calcul_Prix_produit

Poste_Suivant

Cli_Cumul<==

Cli_Cumul +T_MtTTC

TANT QUE

On se positionne sur le premierposte, puis on effectue une

recherche séquentielle afin detrouver le poste où est stocké le

produit commandé

MAJ_Client

Le Poste ayant été trouvé,le prix unitaire du produit est dans la zone ==>

T_PUProduit_Bareme (T_Ind_Bareme)

Le coefficient de réduction dépend du poste du produitcommandé et de la catégorie du client

==> T_Coef_Bareme (T_Ind_Bareme, Cli_Cat)

T_CodeProduit_Bareme(T_Ind_Bareme)

^=Cmd_Cod_Produit

T_Ind_Bareme<==

T_Ind_Bareme + 1

T_CalculPrix_Produit<==

T_PUProduit_Bareme(T_Ind_Bareme) *Cmd_Quantite *T_Coef_Bareme

(T_Ind_Bareme,Cli_Cat)

Réécrire Direct ES_Client

On met à jour le total cumulé des commandesdu client en zone de communication,

puis on réécrit l'enregistrement sur le fichier F_CLIENTS.La clé d'accès a été renseigné lors de la lecture de l'enregistrement

client pour gérer le début de la facture

IV - ARBRE DETAILLEPROG TP14_UT1

Cmd_Code_Client<==

E_Dmd_Code_Client

SI ALORS

Clé invalide

Ano_Pos_Commandes

Positionnement_F_COMMANDES

Positionnement surF_COMMANDES

enreg cle > Cmd_Clé

Cmd_Code_Produit<==

Valeur Minimale

On désire se positionner sur le premier enregistrement d'un client identifié parE_Dmd_Code_Client

1) On renseigne la sous-clé Cmd_Code_Client du fichier COMMANDESà la valeur E_Dmd_Code_Client.

On ignore la valeur du premier produit de ce service.

2) On affecte donc la valeur minimale à la sous clé Cmd_Code_Produit.

On demande un positionnement sur l'enregistrement du fichier COMMANDESdont la clé est immédiatement supérieure à Cmd_Clé, il s'agit obligatoirement dupremier enregistrement du client.

Attention, un positionnement n'est pas une Lecture, il faudra lire séquentiellemntle fichier par la suite pour récupérer en mémoire centrale ce premierenregistrement du service.

Lecture SEQF_COMMANDES

Lire séquentiellementF_COMMANDES

SI ALORS

Fin de Fichier

T_Fin_F_Commandes<==

"Vrai"

Après un positionnement, on effectue deslectures séquentielles pour traiter toutes

les commandes du client

LectureF_DEMANDES

LireF_DEMANDES

SI ALORS

Fin de Fichier

T_Fin_F_Demandes<==

"Vrai"

IV - ARBRE DETAILLEPROG TP14_UT1

SI ALORS

Clé invalide

Ano_Réécr_Commandes

Réécrire DirectES_Commande

RéécrireES_Commande

Lecture F_BAREME

LireF_BAREME

SI ALORS

Fin de Fichier

T_Fin_F_Baremes<==

"Vrai"

Lecture DirecteF_PRODUITS

LireF_PRODUITS

SI ALORS

Clé Invalide

Réécrire DirectES_Client

SI ALORS

Clé invalide

Ano_Réécr_Client

Réécrire ES_Client

Ano_Lect_Produit

COBOL de la déclaration des différents fichiers (UT1)

7 8 12 73

ENVIRONMENT DIVISION. .............. INPUT-OUPUT SECTION.

FILE-CONTROL.

SELECT F_DEMANDES ASSIGN TO DEMANDES.

SELECT F_CLIENTS ASSIGN TO CLIENTS

ORGANIZATION INDEXED

RECORD KEY IS Cli_Cod_Client

ACCESS MODE IS RANDOM.

SELECT F_COMMANDES ASSIGN TO COMMANDES

ORGANIZATION INDEXED

RECORD KEY IS Cmd_Clé

ACCESS MODE IS DYNAMIC.

SELECT F_PRODUITS ASSIGN TO PRODUITS

ORGANIZATION INDEXED

RECORD KEY IS Prod_Cod_Produit

ACCESS MODE IS RANDOM.

SELECT F_BAREME ASSIGN TO BAREME.

SELECT F_FACTURES ASSIGN TO FACTURE.

* Les fichiers F_DEMANDES, F_BAREME et F_FACTURES ont par défaut

* ORGANIZATION SEQUENTIAL

COBOL de la procédure de calcul du prix unitaire

7 8 12 73

Calcul_Prix_Produit.

PERFORM VARYING T_Ind_Bareme FROM 1 BY 1 UNTIL T_CodeProduit_Bareme (T_Ind_Bareme) = Cmd_Cod_Produit End-PERFORM.

COMPUTE T_CalculPrix_Produit = T_PUProduit_Bareme(T_Ind_Bareme)

* Cmd_Quantite * T_Coef_Bareme (T_Ind_Bareme,Cli_Cat).

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

Corrigé de l’Exercice d’Entraînement TP-14_UT2

I) Diagramme de Traitement UT2

Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.

PROG_TP14UT2

F_ETATSTAT

F_CLIENTSOrganisation

Séq.Index.

Clé Code Client

II) Analyse du problème

Ce traitement annuel consiste à produire une état statistique trié sur le montant total des commandes des clients et de mettre à jour la catégorie du client en fonction de ce montant et des valeurs indiquées dans l’enregistrement paramètre.

L’enregistrement paramètre sera lu en début de traitement et stocké en mémoire centrale.

Le fichier de base du traitement est bien entendu le fichier « F_CLIENTS », ce fichier devra être lu SÉQUENTIELLEMENT en entier afin de stocker dans une table T_Tab_Clients de 1000 postes les informations concernant le client en vue de produire l’état statistique.

Pour chaque client appartenant au fichier « F_CLIENTS », il faudra :

- Stocker dans la table T_Tab_Clients, le code client, son nom, son montant cumulé des achats.

- Évaluer la nouvelle catégorie pour le client à l’aide des valeurs paramètres.

- Mettre à jour cette information dans le fichier F_CLIENTS en réécrivant l’enregistrement modifié par la nouvelle catégorie.

- En fin de traitement, lorsque tous les clients auront été stockés dans la table, il faut la trier en ordre décroissant sur le montant cumulé des achats, puis éditer cette table en respectant les règles d’édition.

Le fichier F_CLIENTS sera ouvert en Entrée_Sortie, on effectuera un accès de type dynamique afin de pouvoir lire séquentiellement ce fichier à partir du premier enregistrement et de pouvoir effectuer une réécriture des divers enregistrements clients mis à jour.

III) Description des données UT2

En Pseudo-Code

FICHIER F_CLIENTS

ES_Client : Fiche ( Cli_Cod_Client Texte (5) Clé Cli_Nom Texte (30) Cli_Prenom Texte (20) Cli_Adresse Texte (55) Cli_Ville Texte (20) Cli_CP Texte (5) Cli_Cat Numérique (1) Cli_Cumul Numérique (6,2) )

ES_Client Texte (144) (par défaut)

FICHIER F_ETATSTAT

S_Etatstat Texte (132)

Le fichier F_ETATSTAT ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées. Les différents enregistrements seront décrits sous forme de zones de travail.

ZONES de TRAVAIL

T_Fin_F_Clients Logique

Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux »

T_Trouve_Cat Logique

Borne Catégorie trouvé ==> « Vrai » Borne Catégorie non trouvé ==> « Faux »

T_Param : Fiche(

T_ValCat [1 :4] Numérique (10,2)

)

Stockage de l’enregistrement paramètre

T_Indcat Numérique (1)

Indice pour la zone indicée paramètre

T_IndBal Numérique (4)

T_IndDeb Numérique (4)

T_IndMax Numérique (4)

Zones servant à repérer les postes lors du tri de la table

T_LgnTitre_Stat Fiche ( 58 caractères à blanc T_Int1_TitreStat Texte (16) 58 caractères à blanc )

T_LgnTitre_Stat Texte (132) (par défaut)

Ligne Titre du fichier F_ETATSTAT

T_LgnInt_Stat Fiche ( 25 caractère à blanc T_Int1_IntStat Texte (11) 25 caractère à blanc T_Int2_IntStat Texte (3) 25 caractère à blanc T_Int3_IntStat Texte (16) 27 caractère à blanc )

T_LgnInt_Stat Texte (132) (par défaut)

Ligne Intitulé de l’état F_ETATSTAT

T_Lgn_Stat Fiche ( 28 caractère à blanc T_Code_Client_Statt Texte (5) 12 caractère à blanc T_Nom_Client_Stat Texte (30) 12 caractère à blanc T_MTHT_Stat Numérique Editée (16) 29 caractère à blanc )

T_Lgn_Stat Texte (132) (par défaut)

Ligne courante de l’état F_ETATSTAT

T_LgnTot_Stat Fiche ( 50 caractère à blanc T_Int1_TotStat Texte (30) 25 caractère à blanc T_MtTotal_TotStat Numérique éditée (18) 9 caractère à blanc )

T_LgnInt_Stat Texte (132) (par défaut)

Ligne Intitulé de l’état F_ETATSTAT

T_Max Numérique (10,2)

Stockage Maximum lors d’un balayage au cours du tri

T_CA_Annuel Numérique (12,2)

Chiffra annuel de l’entreprise

***************************************************************************************** Nous avons indiqué qu’il était nécessaire de stocker le fichier les clients dans une table T_Tab_Clients afin de pouvoir produire une liste triée.

Quelles sont les fonctions ==> Le code clien,t son nom, son montant des commandes hors taxes

Chargement Séquentiel et Recherche Séquentielle

T_Tab_Clients : TABLEAU ( [1 :1000] : Fiche (

T_CodeClient_Tab Texte (5)

T_NomClient_Tab Texte (30)

T_CumClient_Tab Numérique (10,2))

)

T_Indtab Numérique (4)

T_Stock Texte (47)

Zone de stockage d’un poste de la table lors de l’inversion au cours du tri

PROG_TP14_UT2

TANT QUE

T_Fin_F_Clients =

"Faux"

Debut_Prog_TP14_UT2 Fin_Prog_TP14_UT2

Ouvertures Lecture_SEQF_CLIENTS

UN_CLIENT

Lecture SEQF_CLIENTS

IV - ARBRE GENERALPROG TP14_UT2

Init_TP14_UT2

Stock_TABLE T_Indtab<==

t_Indtab + 1

LectureParam==>T_Param

T_Indtab<== 1

MAJ_CAT Réécriture directeES_Client

Tri_Table Edit_Stat Fermetures

Stockage Client dans la tableséquentiellement

Mise à jour de la catégorie duclient

Réécriture du client

On lit séquentiellement leclient suivant

IV - ARBRE DETAILLEPROG TP14_UT2

Init_TP14_UT2

T_Fin_F_Clients<== "Faux"

Ouvertures

Ouvrir en sortieF_ETATSTAT

Fermetures

FermerF_CLIENTS,

F_ETATSTAT

T_Int1_TitreStat <== "ETAT DES CLIENTS"

T_Int1_IntStat <== "CODE CLIENT"

T_Int2_IntStat <== "NOM :"

T_Int3_IntStat <== "MONTANT ANNUEL HT"

Ouvrir en entrée-sortieF_CLIENTS,

Initialisation tableT_Tab_Clients

T_Int1_TotStat <=="CHIFFRE D'AFFAIRE ANNUEL : "

T_CA_Annuel<==0

Stock_Table

T_CodeClient_Tab(T_Indtab)

<==Cli_Cod_Client

T_NomClient_Tab(T_Indtab)

<==Cli_Nom

T_CumClient_Tab(T_Indtab)

<==Cli_Cum

IV - ARBRE DETAILLEPROG TP14_UT2

MAJ_CAT

T_Trouve_Cat<== "Faux"

SI ALORS SINON

SI ALORS

Cli_Cat<==

4

T_Indcat<==

1

UNE_CATEGORIE

TANT QUE

T_Indcat <= 3ET

T_Trouve_Cat= "Faux"

Cli_Cumul<=

T_ValCat (T_Indcat)

Borne_Trouve

Cli_Cat<==

T_Indcat

T_Trouve_Cat<==

"vrai"

T_Indcat<==

T_Indcat + 1

T_Trouve_Cat=

"Faux"

On débute la recherche de la bornesupérieure d'une catégorie sur lepremier poste de la zone indicée

Le cumul du client est inférieur à la bornesupérieure de la catégorie

La catégorie du client correspons au numérode poste de la zone indicée

En sortant de la répétitive, si l'indicateur est à "Faux", cela signifie

que le cumul du client n'est pas inférieur àla borne de la catégorie 3, donc le client

est de catégorie 4

Réécriture DirecteES_Client

Réécrire directeES_Client

SI ALORS

ANO_Réécr_Client

Clé InvalideAyant lu l'enregclient, la clé estdonc renseignée

TRI _TAB

DEBUT TRI_TAB FIN TRI_TABTANT QUE

T_IndDeb<=

n - 1

UN_BALAYAGET_IndDeb

<==1

DEBUT_BALAYAGE

T_IndBal<==

T_IndDeb + 1

TANT QUE

SI ALORS

T_CumClient_Tab(T_IndBal)>T_Max

T_IndMax<==T_IndDeb,

T_Max<== T_CumClient_Tab

(T_IndDeb)

T_IndDeb<==

T_IndDeb + 1

FIN_BALAYAGET_IndBal

<=n

T_IndBal<==

T_IndBal + 1

UNE COMPARAISON

INVERSION

Le cumul du client étant plus grand que lemaximum trouvé précédemment, on mémorisecette nouvelle valeur maximale dans T_Max et

sa position dans T_Ind_Max

T_IndMax<==T_IndBal,

T_Max>== T_CumClient_Tab

(T_IndBal)

A la fin du balayage, on peut rangerl'argument "Maxi" trouvé, dans le poste

repéré par T_IndDeb

La fin du Tri seraeffective, lorsque l'avantdernier poste de la table

aura été renseignée

IV - ARBRE DETAILLEPROG TP14_UT2

INVERSION

T_Stock<==

T_Table_Clients( T_IndMax )

T_Table_Clients(T_IndMax )

<==T_Table_Clients

( T_IndDeb )

T_Table_Clients( T_IndDeb )

<==Stock

IV - ARBRE DETAILLEPROG TP14_UT2

EDIT_STAT

DEB_EDIT_STATTANT QUE FIN_EDIT_STAT

SI ALORS

UN_CLIENT_EDIT

EDIT_LGN_STAT T_NbLgn<==T_NbLgn + 1

TITRE_STAT

T_Intab <==T_Indtab +1

T_Indtab <=T_NbPostes

T_NbLgn = 20

T_NbLgn<==20

T_Indtab<== 1

Ecrire S_Stat<==

T_LgnTitre_Stataprès saut de

page

Ecrire S_Stat<==

T_LgnInt_Stataprès saut de 3

lignes

S_Stat<==

à blanc

Ecrire S_Stataprès saut d 2

lignes

T_NbLgn<==

0