[COBOL2G] - Projet partie 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

[COBOL2G] - Projet partie 2

Message  Mateus le Mar 14 Fév 2012, 23:38

Bonsoir.

Je voulais savoir s'il m'était possible d'avoir quelques clarifications, parce que je suis juste au point mort actuellement. Je vais poster un schéma qui va récapituler le peu que j'ai compris :
Spoiler:



Et donc à chaque nouvelle opération extraite, on fait un move corresponding dans un élément du fichier VSAM + une place pour un pointeur qui pointera vers la prochaine opération de la liste d'opérations du compte donné.
Dans lastop, on a le numéro de clé de ce qui sera la première opération pour ce compte empilée.
Dans teteop, on a le numéro de clé de ce qui sera la dernière opération pour ce compte empilée.

Le pointeur courant permet de savoir où on se trouve dans la pile, on doit donc logiquement s'en servir pour initialiser le pointeur vers le suivant dans les opérations du fichier VSAM.

A chaque opération, on peut retrouver le compte car on l'a implémenté de sorte à ce que le compte soit un index.

Mais je ne vois pas en quoi ça nous aide, pour ma part, je crois qu'il faudrait, à chaque opération =>

vérifier si teteop du compte est 'occupé' ou non déjà par une clé :
-> si teteop n'est pas occupé, on y assigne la clé de l'opération. On assigne lastop à cette même valeur
-> sinon on place le pointeur courant dans la zone pointeur dans l'opération dont la clé est dans lastop (puisque c'est la dernière qui a été enregistrée) et on assigne la clé de cet élément au lastop.

Enfin, j'ai un problème pour l'utilisation des pointeurs. Comment le faire avancer dans la liste ?

Merci d'avance, j'espère avoir été suffisamment clair et j'espère avoir enfin compris comment résoudre ce problème...

Merci d'avance ^^.

Mateus

Nombre de messages : 21
Prénom : Maël
Date d'inscription : 02/01/2012

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  efo le Mer 15 Fév 2012, 21:24

Bonsoir,

voici quelques pistes pour avancer.

Le fichier qui doit garder les opérations est un fichier relatif ce qui signifie qu'à tout enregistrement est associé un numéro relatif d'enregistrement, qui ne fait pas partie de l'enregistrement.
Ce fichier est constitué d'un ensemble de listes linéaires, une par compte vue, reprenant les opérations d'un compte. Comme un extrait de compte renseigne les opérations par ordre chronologique, la pile ne me semble pas convenir car l'ordre d'impression d'un extrait de compte serait de la dernière (la plus récente) à la plus ancienne.

Donc il me semble que pour chaque opération, il faut, pas nécessairement dans l'ordre ci-dessous :
- créer un enregistrement dans le relatif pour cette oopération
- retrouver le compte correspondant dans le fichier des comptes et :
- vérifier si c'est la première opération sur le compte ( ?teteop)
- adapter le lastop : la dernière opération sur le compte devient l'opération courante
- créer le chaînage entre l'ex-dernière opération sur le compte et l'opération courante

Ce sont les numéros relatifs qui doivent être utilisés pour les chaînages.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  Mateus le Jeu 16 Fév 2012, 23:07

Bonsoir ! Je sais bien qu'il est trop tard en ce qui concerne la remise du projet, mais j'aimerais au moins comprendre ce que j'ai de faut histoire de corriger et de pouvoir faire une partie 3 dans les meilleures conditions.

J'dois vraiment avoir un blocage, parce que le code que j'ai écris ci-dessous me parait totalement et absolument complet et correct, mais vu que à la compilation j'ai des erreurs niveau 8 (au niveau des END-READ et END-REWRITE ), je dois avoir des trucs qui clochent.
Je soutiens mordicus depuis plusieurs jours que le pointeur VSCOUR ne sert à rien, je ne comprends absolument pas son utilité.
Je vous assure que ce n'est pas par fainéantise, je suis vraiment à cours d'idées pour résoudre ça, et je n'y comprends plus rien... Je ne demande évidement pas d'avoir la solution toute cuite dans la bouche, mais une aide serait clairement la bienvenue :/.

Ci-dessous j'ai joint le code que j'ai fait pour le traitement des données des OPERATIONS et l'écriture dans le VSAM. Mais avant tout je dois expliquer des trucs :
- pour mes masques et mes noms de structures, j'ajoute V à la fin pour dire que c'est le fichier VSAM qui est écris/lu.
- OPERATIONS et COMPTEVUE sont mes masques pour les opérations et les comptes à vue.
- UNEOPERATION et UNCOMPTEVUE sont le nom des structures pour les compte
- CLE-VSOPER est le numéro relatif du VSAM relatif initialisé à zéro lors de l'ouverture du fichiers OPERATIONS

Aussi je poste mes structures en cachés avant le code même.

Spoiler:

Code:
      FD COMPTEVUE.                               
      01 UNCOMPTEVUE.                             
          03 COMPTE              PIC X(16).       
          03 MATCLI              PIC X(5).       
          03 SOLDEIMP            PIC 9(12)V99.   
          03 SOLDE                PIC 9(12)V99.   
                                                   
      FD COMPTEVUEV.                               
      01 UNCOMPTEVUEV.                             
          03 COMPTE              PIC X(16).       
          03 MATCLI              PIC X(5).       
          03 SOLDEIMP            PIC 9(12)V99.   
          03 SOLDE                PIC 9(12)V99.   
          03 TETEOP              PIC 9(4).       
                                                   
      FD OPERATIONS.                               
      01 UNEOPERATION.                       
          03 CODEOP              PIC X.     
          03 COMPTE              PIC X(16). 
          03 MONTANT              PIC 9(10)V99.
          03 DATEXEC              PIC X(8).   
                                               
      FD OPERATIONSV.                         
      01 UNEOPERATIONV.                       
          03 CODEOP              PIC X.     
          03 MONTANT              PIC 9(10)V99.
          03 DATEXEC              PIC X(8).   
          03 PRECEDENT            PIC 9(4).   

Code:
******Ci-après le code du traitement des opérations******

ADD 1 TO CLE-VSOPER

MOVE CODEOP OF UNEOPERATION TO CODEOP OF UNEOPERATIONV
MOVE MONTANT OF UNEOPERATION TO MONTANT OF UNEOPERATIONV
MOVE DATEXEC OF UNEOPERATION TO DATEXEC OF UNEOPERATIONV

MOVE COMPTE OF UNEOPERATION TO COMPTE OF UNCOMPTEVUEV

READ COMPTEVUEV
    MOVE TETEOP TO TEMPORAIRE
END-READ

IF TEMPORAIRE = 0 THEN
    REWRITE UNCOMPTEVUEV
        MOVE CLE-VSOPER TO TETEOP
    END-REWRITE
    MOVE 0 TO PRECEDENT OF UNEOPERATIONV
ELSE
    MOVE CLE-VSOPER TO PRECEDENT OF UNEOPERATIONV
    REWRITE UNCOMPTEVUEV
        MOVE CLE-VSOPER TO TETEOP
    END-REWRITE
    END-IF

REWRITE UNCOMPTEVUEV
    ADD MONTANT OF UNEOPERATION TO SOLDE OF UNCOMPTEVUEV
END-REWRITE

ADD 1 TO VSCOUR

READ OPERATIONS
  AT END SET FINFICHIEROP TO TRUE
END-READ
.

Mateus

Nombre de messages : 21
Prénom : Maël
Date d'inscription : 02/01/2012

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  efo le Jeu 16 Fév 2012, 23:23

Bonsoir,

ma réponse sera brève : en dehors du dernier read, il n'y a pas une instruction d'i-o écrite convenablement et les msgs à la compilation doivent par ailleurs être assez éloquents? Il y a donc un gros effort à faire au niveau du Cobol.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  Hana le Ven 17 Fév 2012, 09:26

Moi aussi j'ai un problème pour cette partie. J'ai déclaré mon fichier VSOPER avec les champs suivants :
- codeop
- montant
- datexec
- suivant
et cleoper au niveau 77 pour le numéro relatif.
Et voici un petit schéma pour expliquer en gros ce que j'ai fait sans avoir à mettre tout le code :

Spoiler:

Ca ne marche pas évidemment, j'essaie de lire dans un fichier qui n'existe pas encore donc erreur à l'exécution. Le problème c'est que je ne vois pas comment je pourrais faire autrement. En lisant un enregistrement de OPERATIONS je ne peux pas savoir si il y a un suivant pour le même compte ou pas. Et puis comment récupérer le numéro relatif d'un enregistrement avant de l'écrire dans le fichier ?

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  efo le Ven 17 Fév 2012, 10:25

Bonjour,

manifestement les idées sont là, mais mal exploitées.

Ca ne marche pas évidemment, j'essaie de lire dans un fichier qui n'existe pas encore donc erreur à l'exécution. Le problème c'est que je ne vois pas comment je pourrais faire autrement. En lisant un enregistrement de OPERATIONS je ne peux pas savoir si il y a un suivant pour le même compte ou pas.

Donc il faut y créer un premier enregistrement résultant de la 1ère opération du fichier oper; pour cette opération il n'y a que les pointeurs du compte vue correspondant à modifier et rien d'autre à faire dans le relatif.
Ensuite on entre dans un processus d'ajout (les autres opérations) avec mise à jour dans les comptes et aussi dans le relatif. Ceci implique un mode d'utilisation du fichier (ouverture) différent de celui choisi pour la 1ère opération.

Et puis comment récupérer le numéro relatif d'un enregistrement avant de l'écrire dans le fichier ?
Ne serait-ce pas le rôle de lastop ? Avant de le modifier, il désigne (pointe) vers l'ex-dernière opération effectuée sur un compte et on peut donc la lire, la récupérer dans le relatif. En le modifiant, elle va devenir l'avant-dernière opération sur ce compte.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  Hana le Mar 21 Fév 2012, 17:40

J'ai fait comme vous avez dit mais maintenant j'ai une erreur clé invalide à l'écriture de la première opération. Si j'ai bien compris on obtient une clé invalide à l'écriture uniquement si l'enregistrement existe déjà, donc je ne comprends pas mon erreur Shocked

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  efo le Mar 21 Fév 2012, 20:17

Bonsoir,
sans vision du code, je donne quelques pistes ou règles à respecter :
- les n° relatifs valides commencent à 1

- la première ouverture du fichier doit se faire en output, ce qui n'est pas gênant pour la première opération. Ensuite, à partir de la deuxième opération, il faudra qu'il soit en i-o afin de pouvoir continuer à faire les ajouts d'opérations (write) et modifications de pointeurs (read et rewrite).

- avant chaque nouvelle exécution d'un programme de chargement, il faut au préalable relancer idcams pour détruire la version précédente du cluster et relancer sa définition.

- quel est le file status ? quelle est la valeur de n° invalide ?

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  Hana le Ven 24 Fév 2012, 16:38

Merci, j'ai trouvé mon erreur, j'avais commencé l'écriture avec cleoper = 0. Razz

Voici à quoi ressemble mon programme après corrections :
Spoiler:

J'ai préféré faire la mise à jour du solde après chaque lecture dans OPER. Est-ce que ça vous semble correct ? =)

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  efo le Ven 24 Fév 2012, 18:40

C'est effectivement la bonne voie. Un simple programme de relecture et affichage rapide (par display) des comptes à vue et des opérations permettrait de vous rassurer sur le contenu des fichiers.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

Re: [COBOL2G] - Projet partie 2

Message  Contenu sponsorisé Aujourd'hui à 21:06


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum