Mon stage de maîtrise s'est déroulé du 26 Avril au 18 Juin à l'Université de
Toulouse le Mirail au sein de l'équipe G.R.I.M.M.
Ce rapport porte sur mon travail effectué dans le cadre de la recherche en
Interface Homme Machine et Systèmes Distribués.
Durant ces huit semaines, j'ai contribué à la réalisation d'un système
bancaire distribué.
La norme C.O.R.B.A. et le langage de programmation Java ont été choisis
de la conception à la réalisation.
Les outils logiciels utilisés sont Orbix Web de IONA Technologies,
et MS J++.
Ce travail s'est découpé en deux phases de réflexion :
Je tiens également à remercier toutes les personnes avec lesquelles j'ai travaillé et sympathisé : Mme Marie-Pierre CROS, Daniel et Laurent, Fabrice, Isaac et ceux que je ai oublié de citer.
Une attention particulière à toutes les personnes et sociétés que j'ai "visitées" sur Internet et qui m'ont apportés une aide précieuse sur Java et Corba.
Enfin, je ne pourais oublier le soutien et les conseils de Philippe qui a suivi tout mon travail =-)
Ce langage étant relativement récent, toutes les technologies actuelles ont y été implantées : support internet, web (java.net), multimédia (java.awt, java.3d) , base de données (jdbc) et commerce électronique (java.wallet) ...
Depuis la distribution java 1.2 le jdk (compilateur et environnement de programmation) inclu pleinement C.O.R.B.A. avec son O.R.B. et compilateur d'IDL.
C.O.R.B.A. a été développé par l'O.M.G. (Object Management Group).
L'O.M.G. est un consortium international regroupant des fournisseurs de matériels (SUN, HP, IBM, ...),
des fournisseurs de logiciels (I.O.N.A., Borland, Oracle, Microsoft, ...) et des grands utilisateurs comme Motorola, Alcatel, Boeing.
Son but est de définir des standards pour l'intégration d'applications
distribuées hétérogènes.
Pour que ces applications répondent aux besoins de communication,
de portabilité et d'interopérabilité,
l'O.M.G. a défini un modèle de référence : la
norme C.O.R.B.A .
C.O.R.B.A. utilise:
Cette architecture globale de l'O.M.A. propose une classisfication
des types d'objets C.O.R.B.A. selon
leur fonctionnalité dans les applications distribuées.
Elle structure ces fonctionnalités en quatre catégories de composantes
:
Caractéristiques
A l'image d'un bus matériel, l'O.R.B. est un outil de communication entre différents éléments logiciels répondant à la norme
C.O.R.B.A.
Il permet de résoudre les besoins d'interopérabilité et d'intégration de technologies informatiques hétérogènes.
Il gère de façon tranparente :
Distributeur de requêtes objet
Comme son nom l'indique, l'O.R.B. assure le transport des requêtes entre les objets distribués.
Il fonctionne selon un modèle objet de type client/serveur.
L'O.R.B est utilisé aussi bien par le client que par le serveur via des souches de communication (appelées aussi talons ou proxy).
Ces souches masquent les communications à travers le reseau.
Elles sont générées automatiquement par le compilateur d'I.D.L.
(décrit plus loin) à partir des sources I.D.L.
A chaque objet décrit en I.D.L. sont générées une souche client et une souche serveur.
Du côté client, la souche s'appelle le "stub";
elle est stockée dans l'espace d'adressage du client et représente
l'objet distant. C'est à ce représentant que le client adressera
ses requêtes.
De façon symétrique, le serveur dispose
d'une souche serveur de l'objet : le "skeleton"
qui reçoit la requête du client et invoque l'objet.
Principe d'invocation en mode statique
Développer des applications distribuées sur des plate-formes hétérogènes nécessite
une séparation stricte interface / implantation.
En effet rappelons que c'est selon l'interface que les applications clientes peuvent manipuler les objets.
Ainsi, pour pouvoir décrire ces interfaces, l'O.M.G. a conçu l'I.D.L.
L'I.D.L. assure aussi la correspondance avec différents langages de programmation.
Définition
L'I.D.L. permet de décrire les interfaces des objets.
C'est un langage déclarartif orienté objet dont la syntaxe est très inspirée du langage C++ ou Java.
L'I.D.L. définit pour un objet distribué :
Les constructions du langage I.D.L.
Interface d'une Banque en I.D.L. :
/*classe de définition d'une banque */ interface Banque { readonly attribute string nombanque; long ouvrirCompte(in string nom); void fermerCompte(in long numero); void crediterCompte(in float montant,in long numero ); void debiterCompte(in float montant,in long numero); float soldeCompte(in long numero); string listeClients(); };
Projection vers un langage de programmation
Pour pouvoir exploiter les défintions I.D.L., l'environnement C.O.R.B.A. fournit des compilateurs I.D.L.
qui dépendent du langage cible et de l'implantation du bus.
Ces précompilateurs transforment ces définitions I.D.L. en des constructions utilisables depuis des langages de programmation.
Précompilateurs existants : I.D.L. vers Java, C, C++, Corba-script, Smalltalk, Cobol, Ada.
Pour chaque interface I.D.L., le précompilateur génère :
Premier exemple applicatif réalisé avec Orbix Web 3.0 de IONA
Orbix Web 3.0 de IONA est un logiciel qui permet de développer des applications distribuées C.O.R.B.A.
C'est un outil dédié au langage Java, il intègre un O.R.B., un compilateur d'I.D.L vers Java, et toutes les autres fonctionnalités
nécéssaires au dévelopement de systèmes distribués.
Considérons un objet Banque sur lequel nous souhaitons effectuer les opérations élémentaires de gestion de comptes
bancaires : ouvrirCompte(nomclient), fermerCompte(numerocompte), crediterCompte(montant, numerocompte),
debiterCompte(montant, numerocompte) ...
Nous spécifions l'interface de la banque en I.D.L. (cf plus haut exemple dans le document).
Après avoir écrit ce contrat I.D.L, le compilateur choisi (ici I.D.L vers Java) fait le reste.
Effectivement, de la projection vers le langage Java, sont générés principalement :
Une fois notre objet banque implanté, nous écrivons un programme serveur en Java :
classe BanqueServeur qui "met" les objets (Banque en l'occurence) à la disposition des clients.
Ecriture du programme serveur
import IE.Iona.OrbixWeb._CORBA; import IE.Iona.OrbixWeb.CORBA.ORB; import IE.Iona.OrbixWeb.CORBA.ORB; public class BanqueServeur{ public static void main(String args[]){ Banque b=null; ORB orb; // création et initialisation de l'orb orb=(ORB)org.omg.CORBA.ORB.init(); // création de l'objet Banque : b b=new BanqueImplementation("Crédit Agricole"); // enregistrement avec l'orb de la Banque b (de nom "ca" sur le serveur) orb.connect(b,"ca"); // BanqueSr: serveur de la banque "ca" _CORBA.Orbix.impl_is_ready("BanqueSr"); try { Thread.sleep(500000); } catch (InterruptedException ex) {} // déconnexion de b de l'orb orb.disconnect(b); System.out.println("déconnexion"); } }Un objet Banque (b) est maintenant disponible sur le serveur BanqueSr.
Regardons maintenant le programme client qui va utiliser b et c.
Ecriture du programme client
import org.omg.CORBA.ORB; import IE.Iona.OrbixWeb._CORBA; import javax.swing.*; public class BanqueClient { public static void main(String args[]){ //initialisation de l'O.R.B. ORB.init(); //référence x à une Banque Banque x=null; //référence x à l'objet Banque b du serveur "BanqueSr" x=BanqueHelper.bind(":BanqueSr","mass-171315.univ-tlse2.fr"); JOptionPane.showMessageDialog(null, "Bienvenue à la banque du " + x.nombanque()); //saisie du nom d'un futur client String S = JOptionPane.showInputDialog(null, "A quel nom souhaitez-vous ouvrir un compte ?"); //ouverture du compte pour S int a=x.ouvrirCompte(S); }; }
Schéma récapitulatif des classes écrites et générées
La notation graphique obtenue à partir des objets décrits ci-dessus est la suivante :
Cette représentation graphique symbolise parfaitement la structure de
l'application.
Il nous reste maintenant à définir les classes et les opérations possibles sur
celles-ci.
Du schéma des classes ci-dessus, nous nous sommes intéressés aux classes suivantes :
typedef sequence <Operation> tabop;
Les interfaces écrites en I.D.L. sont "tapées" dans un fichier texte puis
sauvées dans mon répertoire de travail sous l'extension idl.
Ce fichier idl a ensuite été compilé (commande : idl AppBanque.idl)
par le compilateur d'I.D.L. vers Java fournit par Orbix Web.
Si des erreurs sont apparues à la compilation, on les corrige dans le fichier
idl et on le compile à nouveau jusqu'à ce qu'il n'y ait plus aucune erreur.
Lorsque la compilation s'est déroulée correctement, Orbix Web a généré
des fichiers Java incluant le corps des squelettes et stubs
utiles à la programmation de l'application. Par défaut ces fichiers
sont "déposés"
dans un répertoire crée par orbix Web à cet effet : java_output
Vous pouvez visualiser le contenu de ces fichiers en annexes.
Cette partie contient :
contenu :
Deux types de classes générées :
Orbix Web fournit deux méthodes pour implanter une interface I.D.L.
Ces deux approches sont :
Ce mécanisme n'est possible que si l'on a au préalable implementé une
interface I.D.L.
Regardons le mécanisme sur le schéma suivant :
Le compilateur d'I.D.L.
d'Orbix a génèré une classe tie java pour chaque interface I.D.L.
Le fichier généré est nommé "_tie_xxx.java".
Un objet qui implante l'interface I.D.L. est passé
en paramètre au constructeur de la classe tie.
On définit ensuite une classe qui va implanter les
opérations et attributs définis dans l'interface I.D.L.
exemple de classe : GestionnaireImplementation
Cette classe n'a pas besoin d'hériter de toutes les classes générées
automatiquement.
Elle doit simplement implanter l'interface java :
_gestionnaireOperations.
Ensuite, le programmeur instancie un objet tie :
_tie_gestionnaire,
en passant l'objet implanté GestionnaireImplementation
au constructeur.
A la création des objets tie, il est possible de passer un second
paramètre au constructeur de type String. Ce marqueur permet
ainsi d'identifier de façon unique l'objet instacié sur le serveur.
GestionnaireImplementation g=new GestionnaireImplementation(); Gestionnaire gestCA= new _tie_Gestionnaire(g,"CA");
bind ("nom de l'objet tie : nom du serveur d'objets", "adresse de la machine serveur")
GestionnaireHelper.bind("CA:ApplServeur","mass-handicap.univ-tlse2.fr");
Schéma explicatif
Menu / Retrait
[ IT_daemon: New Connection (mass-handicap.univ-tlse2.fr:1075) ] -- Receive thread started for @:* [ Consulting Object Table by type IT_daemon ] [ Consulting Object Table by type IT_daemon ] [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] [Incoming Request getIIOPDetails to object 0 of type IT_daemon] [ Consulting Object Table by marker 0 ] Launching a server with the following: C:\jdk1.1.6\bin\java.exe -classpath c:\mesdoc~1\visual~1\06-01-99;C:\Iona\OrbixWeb3.0\classes; C:\jdk1.1.6\lib\classes.zip -Dorbixweb.env=tcp:xdr:2005:ApplServeur:-889265217:*:*:shared_m::1571:2005 ApplServeur [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] -- Outgoing Reply to getIIOPDetails from object 0 of type IT_daemon] gestCA cree => _tie_Gestionnaire@16ccb5 [ ApplServeur: New Connection (mass-handicap.univ-tlse2.fr:1077) ] gestCL cree => _tie_Gestionnaire@16d29a serveur en attente pause [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] [Incoming Request getIIOPDetails to object 0 of type IT_daemon] [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] [ Consulting Object Table by marker 0 ] -- Outgoing Reply to getIIOPDetails from object 0 of type IT_daemon] banque : CréditAgricole conversion gest conversion ok => _tie_Gestionnaire@16d5c3 identite bancaire => 001001 cptimplementation ok CompteClient ? CompteClient ok code guichet du gestionnaire gestCA: 001 [ Consulting Object Table by marker 2 ] code guichet: 001 code local: 001 identite bancaire: 001001 libelle du cpte :katia liste des comptes : {} identite bancaire: 001001 taille de liste_compte: 1 elnts de liste_compte =>{_tie_IdentiteBancaire@16d613=_tie_CompteClient@16d665} ___________________________________________________________ ajout d op ds vecteur d operation ajout op ok [New IIOP Connection (mass-handicap.univ-tlse2.fr,1074, null,null,pid=0) ] valeur de la cible : 0 debiter cptdsrce solde de cpt source(c1): 320.0 montant de l op: 300.0 debit ok : 20.0 ___________________________________________________________ ajout d op ds vecteur d operation ajout op ok valeur de la cible : 1 crediter cptdest solde de cpt dest(c2): 20.0 montant de l op: 56.5 credit ok : 76.5 banque : CréditLyonnais conversion gest [ Consulting Object Table by marker 5 ] conversion ok => _tie_Gestionnaire@16dc33 identite bancaire => 002001 cptimplementation ok CompteClient ? CompteClient ok code guichet du gestionnaire gestCA: 002 code guichet: 002 code local: 001 identite bancaire: 002001 libelle du cpte :sonia liste des comptes : {} identite bancaire: 002001 taille de liste_compte: 1 elnts de liste_compte =>{_tie_IdentiteBancaire@16dc8d=_tie_CompteClient@16dcee} [ Consulting Object Table by marker 2 ] ___________________________________________________________ ajout d op ds vecteur d operation ajout op ok valeur de la cible : 0 debiter cptdsrce solde de cpt source(c1): 76.5 montant de l op: 50.0 debit ok : 26.5 ___________________________________________________________ ajout d op ds vecteur d operation ajout op ok valeur de la cible : 1 crediter cptdest solde de cpt dest(c2): 100.0 montant de l op: 50.0 credit ok : 150.0 debut consultation code local du cpt consulte: 001 codelocal ok type de la consultation: 2 type =2 ok date de la consultation mon 14 jun 99 MaDateImplementation ok [ Consulting Object Table by marker 7 ] MaDate ok tab des op [_OperationStub@16d827, _OperationStub@16da7d, _OperationStub@16df2d] taille de tabop 3 op 0 : _OperationStub@16d827 tab releve[_OperationStub@16d827] taille de tabop 3 op 1 : _OperationStub@16da7d tab releve[_OperationStub@16d827, _OperationStub@16da7d] taille de tabop 3 op 2 : _OperationStub@16df2d tab releve[_OperationStub@16d827, _OperationStub@16da7d, _OperationStub@16df2d] taille de tabop 3 releve ok debut afficher nb d'opérations effectuées : 3 0 op ok 1 op ok 2 op ok 1 ème opération : retrait montant : 300.0 2 ème opération : dépot montant : 56.5 3 ème opération : virement montant : 50.0 debut consultation code local du cpt consulte: 001 codelocal ok type de la consultation: 1 type =1 ok [ Consulting Object Table by marker 9 ] solde du cpte c1 26.5 [ Consulting Object Table by marker 8 ] debut consultation code local du cpt consulte: 001 codelocal ok type de la consultation: 1 type =1 ok [ Consulting Object Table by marker 11 ] solde du cpte c1 150.0 [ Consulting Object Table by marker 10 ] [ End of IIOP connection (mass-handicap.univ-tlse2.fr:1074) ] [ IT_daemon: End of IIOP connection (mass-handicap.univ-tlse2.fr:1075) ] [ ApplServeur: End of IIOP connection (mass-handicap.univ-tlse2.fr:1077) ] deconnexion
AppBanque.idl ------------------------------------------------------------------------------- //!!! #include date.idl interface MaDate{ string showDate(); boolean after(in MaDate d); }; interface Consultation; interface Gestionnaire; interface Agence; interface CentreCB{}; interface Compte; interface CompteClient; interface CompteCB; interface IdentiteBancaire; interface CompteRendu; interface Operation; interface Consultation; typedef sequencetabop; interface Client{ string getNom(); string getPrenom(); }; interface Agence{ string getNom(); Gestionnaire getGestionnaire(); }; interface Signature{ string getNom(); }; interface IdentiteBancaire{ string getCodeBanque(); string getCodeGuichet(); string getCodeLocal(); }; interface Gestionnaire { string getLibelle(); string getNumero(); Agence getAgence(); //string getCodeInit(); //void setCodeInit(in string nvcodinit); CompteClient creerCompteClient(in Client cli, in string lib,in float sold, in string codelocal, in float decouvertMaximum); void fermerCompte(in IdentiteBancaire ib); CompteClient getCompte(in IdentiteBancaire ib); void migrerCompte(in CompteClient cptcli, in Agence agence); void creerCB(in Client cli,in CompteClient cptcli); void fermerCB(); void executer(in Operation operation); }; interface CompteRendu { float getSolde(); MaDate getDate(); string getLibelle(); tabop getReleve(); string showReleve(); }; interface Compte { Client getClient(); string getLibelle(); string getNumero(); float getSolde(); CompteRendu effectuer(in Operation operation); CompteRendu consulter(in Consultation consultation); }; interface CompteClient : Compte { void setDecouvertMaximum(in float nvdecouvert); Gestionnaire getGestionnaire(); float getDecouvertMaximum(); IdentiteBancaire getIb(); }; interface CompteCB : Compte { void setRetraitMaxhebdo(in float nvretrait); CompteClient getCompteClient(); boolean etat(); void bloquer(); void debloquer(); float getRetraitMaxHebdo(); long getCode(); }; interface Operation { IdentiteBancaire getSource(); IdentiteBancaire getDestination(); float getMontant(); string getLibelle(); string getNumCheque(); long getCible(); void setCible(in long nvcible); MaDate getDate(); Signature getAuthentification(); }; interface Consultation { long getType(); IdentiteBancaire getIb(); };
CompteImplementation.java ------------------------------------------------------------------------------- import java.util.*; import java.util.Date; import javax.swing.*; import org.omg.CORBA.SystemException; /** * implementation de l'objet compte bancaire */ public class CompteImplementation implements _CompteOperations { //membres Client client; String libelle; String numero; float solde; /** * vecteur des opérations effectuées sur le compte bancaire */ Vector tabop; //constructeur public CompteImplementation(Client cli, String lib,float sold,String numlocal) { this.client=cli; this.libelle=lib; this.solde=sold; this.numero=numlocal; this.tabop=new Vector(); } //effectuer une operation public CompteRendu effectuer(Operation op) { MaDateImplementation dateimpl=new MaDateImplementation(); MaDate datecourante=new _tie_MaDate(dateimpl); tabop.addElement(op); //!!!exceptions si cible!=0 ou 1 if (op.getCible()==0) this.solde-=op.getMontant(); if (op.getCible()==1) this.solde+=op.getMontant(); String libop=op.getLibelle()+" de "+op.getMontant()+" effectué le "+ op.getDate(); CompteRenduImplementation cr= new CompteRenduImplementation(libop,datecourante); CompteRendu cptrendu=new _tie_CompteRendu(cr); return(cptrendu); } /** * consulter soit le solde soit le releve des opérations, * retourne un compte rendu qui differe selon * le type de la consultation. * */ public CompteRendu consulter(Consultation cons) { System.out.println("debut consultation"); MaDateImplementation d=new MaDateImplementation(); MaDate currentDate=new _tie_MaDate(d); Vector listop=new Vector(); int i; //compte consulte IdentiteBancaire ibc=cons.getIb(); System.out.println("code local du cpt consulte: " +ibc.getCodeLocal()); //IdentiteBancaire ib=this.getIb(); //si bon codelocal if (ibc.getCodeLocal()==this.getNumero()){ System.out.println("codelocal ok"); int a=cons.getType(); System.out.println("type de la consultation: "+a); //type=1 => solde if (cons.getType()==1){ System.out.println("type =1 ok"); //retourne un cpte rendu(solde+date) float s=this.getSolde(); System.out.println("solde du cpte c1 "+s); CompteRenduImplementation cptr1=null; try{ cptr1=new CompteRenduImplementation(s,currentDate); } catch (SystemException se){ System.out.println("Exception :"+se.toString()); } CompteRendu cptrendu1 =new _tie_CompteRendu(cptr1); return(cptrendu1); }//fin if1 //type=2 => releve if (cons.getType()==2){ System.out.println("type =2 ok"); /*String dateop=JOptionPane.showInputDialog(null, "relevé à partir de quelle date ?"); System.out.println("...." + dateop );*/ String dateop="mon 14 jun 1999"; MaDateImplementation da= new MaDateImplementation(dateop); System.out.println(" MaDateImplementation ok"); MaDate dt=new _tie_MaDate(da); System.out.println(" MaDate ok"+dt.showDate()); //recuperer le vecteur d op System.out.println("tab des op "+tabop); System.out.println("taille de tabop "+tabop.size()); for(i=0;i<(tabop.size());i++){ Operation o=(Operation)tabop.elementAt(i); System.out.println("op "+i+" : "+o); MaDate mydate=(MaDate) o.getDate(); System.out.println("date pr releve =>"+mydate.showDate()); /*String res= (madate.after(d))? "yes" : "no" ; System.out.println("date releve after? "+res) ; if ( madate.after(d) ){*/ System.out.println("after ok"); listop.addElement(o); System.out.println("tab releve"+listop); System.out.println("taille de tabop "+tabop.size()); } System.out.println("releve ok"); //retourne un cpte rendu(releve+date) CompteRenduImplementation cptr2=null; try{ cptr2=new CompteRenduImplementation(listop,dt); } catch (SystemException se){ System.out.println("Exception : "+se.toString()); } CompteRendu cptrendu2=new _tie_CompteRendu(cptr2); return(cptrendu2); }//fin if2 System.out.println("erreur type consultation"); return(null); } System.out.println("erreur codelocal"); return(null); } public Client getClient() { return(this.client); } public String getLibelle(){ return(this.libelle); } public String getNumero() { return(this.numero); } public float getSolde() { return(this.solde); } }
CompteClientImplementation.java ------------------------------------------------------------------------------- import java.util.*; import java.math.*; /** * Impléméetation d'un compte bancaire client, * qui ne possède pas de carte bancaire. */ public class CompteClientImplementation extends CompteImplementation implements _CompteClientOperations{ //membres IdentiteBancaireImplementation ident; IdentiteBancaire ib; Gestionnaire gestionnaire; float decouvertMaximum; //constructeur public CompteClientImplementation(Client cli,String lib,float sold, String numlocal, Gestionnaire gest, float decouvertmax) { super(cli,lib,sold,numlocal); this.decouvertMaximum=decouvertmax; this.gestionnaire=gest; //!!!codeBanque="" this.ident= new IdentiteBancaireImplementation("",gest.getNumero(),numlocal); this.ib=new _tie_IdentiteBancaire(ident); System.out.println("identite bancaire => "+ib.getCodeGuichet() +ib.getCodeLocal()); } /** */ public CompteRendu effectuer(Operation op) { System.out.println("___________________________________________________________"); MaDateImplementation dateimpl=new MaDateImplementation(); MaDate datecourante=new _tie_MaDate(dateimpl); System.out.println("ajout d op ds vecteur d operation"); (this.tabop).addElement(op); System.out.println("ajout op ok"); System.out.println("valeur de la cible : "+op.getCible()); //verification ib //if ((op.getSource()).getCodeLocal()==this.getNumero()){ //si src=>dest if (op.getCible()==0){ if (this.getDecouvertMaximum()>=(this.solde-op.getMontant())){ System.out.println("debiter cptdsrce"); System.out.println("solde de cpt source(c1): "+this.solde); System.out.println("montant de l op: "+op.getMontant()); this.solde-=op.getMontant(); System.out.println("debit ok : "+this.solde); } else { String erreur="vous ne disposez pas de cette somme sur votre compte"; CompteRenduImplementation crimpl= new CompteRenduImplementation(erreur,datecourante); CompteRendu cpr=new _tie_CompteRendu(crimpl); return(cpr); } }// fin cible=0 //si dest=>src if (op.getCible()==1) { System.out.println("crediter cptdest"); System.out.println("solde de cpt dest(c2): "+this.solde); System.out.println("montant de l op: "+op.getMontant()); this.solde=(this.solde + op.getMontant()); System.out.println("credit ok : "+this.solde); }//fin si clible=1 String ok=op.getLibelle()+" de "+op.getMontant()+" effectué le " +op.getDate(); CompteRenduImplementation cimpl= new CompteRenduImplementation(ok,datecourante); CompteRendu compterdu=new _tie_CompteRendu(cimpl); return(compterdu); //} //return("erreur"); } //modifier le decouvert maximum public void setDecouvertMaximum(float nvdecouvert) { this.decouvertMaximum=nvdecouvert; } public Gestionnaire getGestionnaire() { return gestionnaire; } public float getDecouvertMaximum() { return(this.decouvertMaximum); } public IdentiteBancaire getIb(){ return(this.ib); } }
CompteCBImplementation.java ------------------------------------------------------------------------------- import java.util.*; public class CompteCBImplementation extends CompteImplementation implements _CompteCBOperations{ //membres CentreCB centreCB; float retraitMaxHebdo; CompteClient compteClient; int code; boolean lock; //etat bloque ou non //constructeur public CompteCBImplementation(Client cli,String lib,float sold,String num, CentreCB centrecb,float retraitmaxhebdo, CompteClient cptclient,int cod){ super(cli,lib,sold,num); this.centreCB=centrecb; this.retraitMaxHebdo=retraitmaxhebdo; this.compteClient=cptclient; this.code=cod; this.lock=false; } //etat du compte public boolean etat(){ return(this.lock); } //bloquer le compte public void bloquer() { this.lock=true; } //debloquer le compte public void debloquer() { this.lock=false; } //!!! methode effectuer a redefinir //si bloquer ou pas, + retraitMaxHebdo ds sem courante(lundi=>) public CompteRendu effectuer(Operation op) { MaDateImplementation dateimpl=new MaDateImplementation(); MaDate datecourante=new _tie_MaDate(dateimpl); tabop.addElement(op); //si compte non bloque if (this.etat()){ //si src=>dest //!!!!mqe test si cible!=0 ou 1 if (op.getCible()==0){ //!!!lundi=>op.getdate() som(op.mont)=(op.getMontant())) this.solde-=op.getMontant(); else { String libop="retrait refuse"; CompteRenduImplementation cr =new CompteRenduImplementation(libop,datecourante); CompteRendu cptrendu=new _tie_CompteRendu(cr); return(cptrendu); }//fin else } //fin if cible=0 //si dest=>src if (op.getCible()==1) this.solde+=op.getMontant(); String libo=op.getLibelle()+" de "+op.getMontant() +" effectué le "+op.getDate(); CompteRenduImplementation crendu= new CompteRenduImplementation(libo,datecourante); CompteRendu cprendu=new _tie_CompteRendu(crendu); return(cprendu); } //fin état String l="compte bloqué"; CompteRenduImplementation rendu =new CompteRenduImplementation(l,datecourante); CompteRendu cp=new _tie_CompteRendu(rendu); return(cp); } public CentreCB getCentreCB(){ return(this.centreCB); } public float getRetraitMaxHebdo() { return(this.retraitMaxHebdo); } public void setRetraitMaxhebdo(float nvretrait){ this.retraitMaxHebdo=nvretrait; } public CompteClient getCompteClient() { return(this.compteClient); } public int getCode() { return(this.code); } }
CompteRenduImplementation.java ------------------------------------------------------------------------------- import java.util.Date; import java.util.*; import javax.swing.*; public class CompteRenduImplementation implements _CompteRenduOperations{ //membres String libelle; float solde; MaDate date; Vector taboperations; //constructeur pr op effectuée public CompteRenduImplementation(String lib,MaDate dat){ this.libelle=lib; this.date=dat; } //constructeur solde public CompteRenduImplementation(float sold,MaDate dat){ this.solde=sold; this.date=dat; } //constructeur releve public CompteRenduImplementation(Vector top,MaDate dat){ this.taboperations=top; this.date=dat; } public String getLibelle(){ return(this.libelle); } public float getSolde(){ return(this.solde); } public Operation[] getReleve(){ Operation[] tab = new Operation[taboperations.size()]; taboperations.copyInto(tab); return tab; } public MaDate getDate(){ return(this.date); } //parametre le tablo d op public String showReleve(){ System.out.println("debut afficher"); String s=""; int taille=taboperations.size(); System.out.println("nb d'opérations effectuées : "+taille); for(int i=0;imontant : "+o.getMontant()+"\n"; } System.out.println(s); return(s); }//fin afficher }
OperationImplementation.java ------------------------------------------------------------------------------- import java.util.Date; import java.util.*; public class OperationImplementation implements _OperationOperations{ //membres IdentiteBancaire ibsource; IdentiteBancaire ibdest; float montant; String numcheque; String libelle; int cible; Signature signature; MaDate date; //constructeur pour les opérations de virement public OperationImplementation(int cib,IdentiteBancaire ibs, IdentiteBancaire ibd,float mont,String lib, Signature sign,MaDate dat){ this.cible=cib; this.ibsource=ibs; this.ibdest=ibd; this.montant=mont; this.signature=sign; this.libelle=lib; this.date=dat; } //constructeur pour les opérations de chèques public OperationImplementation(int cib,IdentiteBancaire ibs, IdentiteBancaire ibd,float mont, String lib,String numc,Signature sign, MaDate dat){ this.cible=cib; this.ibsource=ibs; this.ibdest=ibd; this.montant=mont; this.numcheque=numc; this.signature=sign; this.date=dat; } //constructeur pour les opérations de CB public OperationImplementation(int cib,IdentiteBancaire ibs, float mont,String lib, Signature sign,MaDate dat){ this.cible=cib; this.ibsource=ibs; this.libelle=lib; this.montant=mont; this.signature=sign; this.date=dat; } public int getCible(){ return(this.cible); } public void setCible(int nvcible){ this.cible=nvcible; } public IdentiteBancaire getSource(){ return(this.ibsource); } public IdentiteBancaire getDestination(){ return(this.ibdest); } public float getMontant() { return(this.montant); } public MaDate getDate(){ return(this.date); } public String getLibelle() { return(this.libelle); } public String getNumCheque() { return(this.numcheque); } public Signature getAuthentification() { return(this.signature); } }
ConsultationImplementation.java ------------------------------------------------------------------------------- public class ConsultationImplementation implements _ConsultationOperations{ //membres int type; IdentiteBancaire ib; //constructeur public ConsultationImplementation(int typec,IdentiteBancaire num){ this.type=typec; this.ib=num; } public int getType() { return(this.type); } public IdentiteBancaire getIb() { return(this.ib); } }
GestionnaireImplementation.java ------------------------------------------------------------------------------- import java.util.*; import javax.swing.*; import org.omg.CORBA.SystemException; /** * */ public class GestionnaireImplementation implements _GestionnaireOperations { //membres String libelle; Agence agence; String codguichet; String codinit; Hashtable liste_compte; //constructeur public GestionnaireImplementation(String numg,String lib, Agence agenceg){ this.agence=agenceg; this.libelle=lib; this.codguichet=numg; liste_compte = new Hashtable(); this.codinit="00000"; } /**ouvrir un compte *retourne le compte **/ public CompteClient creerCompteClient(Client cli,String lib,float sold, String codlocal, float decouvertMaximum){ System.out.println("banque : "+(this.getLibelle())); Gestionnaire ge=new _tie_Gestionnaire(this); //creer le cpte client associe /*calculer le code local String cod1=this.getCodeInit(); System.out.println("code init: "+cod1); long codloc1=parseLong((String)cod1); System.out.println("code init en entier "+codloc1); codloc1++; System.out.println("code init en entier "+codloc1); String codlocal=codloc1.toString(); System.out.println("codelocal finish "+codlocal); */ CompteClientImplementation cpt=null; try{ //pr l'instant codelocal cpt=new CompteClientImplementation(cli,lib,sold,codlocal, ge,decouvertMaximum); System.out.println("cptimplementation ok"); } catch (SystemException se){ System.out.println("exception during CompteClientImplementation"); System.out.println("Exception : "+se.toString()); } System.out.println("CompteClient ?"); CompteClient cptclient=new _tie_CompteClient(cpt); System.out.println("CompteClient ok"); //aff gestionnaire Gestionnaire mongest=cpt.getGestionnaire(); String n=mongest.getNumero(); System.out.println("code guichet du gestionnaire gestCA: "+n); //afficher l'ib IdentiteBancaire ibd=cptclient.getIb(); System.out.println("code guichet: "+ibd.getCodeGuichet()); System.out.println("code local: "+ibd.getCodeLocal()); System.out.println("identite bancaire: " +(cptclient.getIb()).getCodeGuichet() +(cptclient.getIb()).getCodeLocal()); //affiche client String monlib=cptclient.getLibelle(); System.out.println("libelle du cpte :"+lib); //liste des comptes System.out.println("liste des comptes : "+(this.liste_compte)); //ident bancaire du compte System.out.println("identite bancaire: "+ibd.getCodeGuichet() +ibd.getCodeLocal()); //enrg ds la hashtable numcpte+cpte (this.liste_compte).put(cptclient.getIb(),cptclient); System.out.println("taille de liste_compte: "+(this.liste_compte).size()); System.out.println("elnts de liste_compte =>" +(this.liste_compte).toString()); return(cptclient); } //fermer un compte, effacer de la hashtable public void fermerCompte(IdentiteBancaire ib) { CompteClient c=(CompteClient)liste_compte.remove(ib); //!!!retourne le cpt associe a ib } public void migrerCompte(CompteClient cptcli, Agence agence){ ;} public void creerCB(Client cli,CompteClient cptcli) {;} public void fermerCB() {;} public void executer(Operation op) { System.out.println("_________________________________________________________"); CompteRendu info=null; //obtenir l'ib du cpte source IdentiteBancaire ibsource=op.getSource(); System.out.println("codeguichet du source: "+ibsource.getCodeGuichet()); //obtenir l'ib du cpte IdentiteBancaire ibdest=op.getDestination(); System.out.println("codeguichet du dest: "+ibdest.getCodeGuichet()); //effectuer l'op sur les cptes if (op.getCible()==0){ CompteClient cpts=this.getCompte(ibsource); info=cpts.effectuer(op); //crediter le dest JOptionPane.showMessageDialog(null,info.getLibelle()); op.setCible(1); } if (op.getCible()==1){ CompteClient cptd=this.getCompte(ibdest); info=cptd.effectuer(op); //debiter le dest JOptionPane.showMessageDialog(null,info.getLibelle()); op.setCible(0); } } //obtenir un cpte a partir de son num de cpte public CompteClient getCompte(IdentiteBancaire ib){ if (ib.getCodeGuichet()==this.codguichet){ CompteClient cpt=(CompteClient)liste_compte.get(ib); return(cpt); } return(null); } public String getLibelle() { return(this.libelle); } public String getNumero() { return(this.codguichet); } public Agence getAgence() { return(this.agence); } public String getCodeInit(){ return(this.codinit); } public void setCodeInit(String nvcodinit){ this.codinit=nvcodinit; } }
ClientImplementation.java ------------------------------------------------------------------------------- import java.util.*; public class ClientImplementation implements _ClientOperations{ //membres String nom; String prenom; //constructeur public ClientImplementation(String nomcli,String prenomcli){ this.nom=nomcli; this.prenom=prenomcli; } public String getNom(){ return(nom); } public String getPrenom(){ return(prenom); } }
IdentiteBancaireImplementation.java ------------------------------------------------------------------------------- public class IdentiteBancaireImplementation implements _IdentiteBancaireOperations{ //membres String CodeBanque; String CodeGuichet; String CodeLocal; //constructeur public IdentiteBancaireImplementation(String codeb,String codeg, String codel){ this.CodeBanque=codeb; this.CodeGuichet=codeg; this.CodeLocal=codel; } public String getCodeBanque() { return(CodeBanque); } public String getCodeGuichet() { return(CodeGuichet); } public String getCodeLocal() { return(CodeLocal); } }
SignatureImplementation.java ------------------------------------------------------------------------------- public class SignatureImplementation implements _SignatureOperations{ String nom; public SignatureImplementation(String noms){ this.nom=noms; } public String getNom(){ return(nom); } }
CentreCBImplementation.java ------------------------------------------------------------------------------- public class CentreCBImplementation implements _CentreCBOperations { String nomCentreCB; public CentreCBImplementation(String nom){ this.nomCentreCB=nom; } }
AgenceImplementation.java ------------------------------------------------------------------------------- public class AgenceImplementation implements _AgenceOperations{ //membres String nom; /** * gestionnaire (unique) de l'agence **/ GestionnaireImplementation gestion; Gestionnaire gestionnaire; //constructeur public AgenceImplementation(String nomag){ this.nom=nomag; gestion=new GestionnaireImplementation("","",(Agence)this); gestionnaire=new _tie_Gestionnaire(gestion); } public Gestionnaire getGestionnaire(){ return(this.gestionnaire); } public String getNom(){ return(this.nom); } }
MaDateImplementation.java ------------------------------------------------------------------------------- import java.util.Date; public class MaDateImplementation extends Date implements _MaDateOperations { public MaDateImplementation(){ super(); } public MaDateImplementation(String d){ super(d); } public String showDate(){ String d=this.toString(); return(d); } public boolean after(MaDate d){ return(super.after((Date)d)); } }
ApplServeur.java ------------------------------------------------------------------------------- import IE.Iona.OrbixWeb._CORBA; import IE.Iona.OrbixWeb.CORBA.ORB; import org.omg.CORBA.SystemException; import javax.swing.*; /** * ApplServeur serveur des gestionnaires de comptes * du CréditAgricole et du CréditLyonnais. * */ public class ApplServeur { public static void main(String args[]){ /** * creation et initialisation de l'ORB * */ ORB orb=(ORB)org.omg.CORBA.ORB.init(); Gestionnaire gestCA=null; Gestionnaire gestCL=null; //creation des gestionnaires GestionnaireImplementation ga=new GestionnaireImplementation( "001","CréditAgricole",null); gestCA=new _tie_Gestionnaire(ga,"CA"); System.out.println("gestCA cree => "+gestCA); GestionnaireImplementation gl=new GestionnaireImplementation( "002","CréditLyonnais",null); gestCL=new _tie_Gestionnaire(gl,"CL"); System.out.println("gestCL cree => "+ gestCL); /** * gestCA et gestCL connectés à l'ORB */ orb.connect(gestCA); orb.connect(gestCL); // _CORBA.Orbix.impl_is_ready("BanqueServeur"); System.out.println("serveur en attente"); try { System.out.println("pause"); Thread.sleep(500000); } catch(InterruptedException ex){} orb.disconnect(gestCA); orb.disconnect(gestCL); System.out.println("deconnexion"); } }
ApplClientDemo.java ------------------------------------------------------------------------------- import IE.Iona.OrbixWeb._CORBA; import javax.swing.*; import java.awt.*; import java.util.*; import java.util.Date; import java.awt.event.*; import IE.Iona.OrbixWeb.CORBA.ORB; import org.omg.CORBA.SystemException; public class ApplClientDemo { public static void main(String args[]){ /** * initialisation de l'ORB. * */ ORB.init(); /** * référence à un gestionnaire du CréditAgricole: gca, * référence à un gestionnaire du CréditLyonnais: gcl. * */ Gestionnaire gca=null; Gestionnaire gcl=null; /**gca et gcl liés avec le serveur ApplServeur, * sur la machine mass-handicap.univ-tlse2.fr. * */ try { gca=GestionnaireHelper.bind("CA:ApplServeur", "mass-handicap.univ-tlse2.fr"); System.out.println("liaison avec gestCA ok"); gcl=GestionnaireHelper.bind("CL:ApplServeur", "mass-handicap.univ-tlse2.fr"); System.out.println("liaison avec gestCL ok"); } catch (SystemException ex){ JOptionPane.showMessageDialog(null,"BIND EN PANNE"); System.out.println("exception during bind"); System.out.println(ex.toString()); } //_______________reation d un cpte c1 au credit agricole______________________ //creation d un compte c1 au credit agricole JOptionPane.showMessageDialog(null,"vous êtes à la banque du " +gca.getLibelle()); System.out.println("creation compte c1 au credit agricole"); //saisie nom du client1 String nomClient1 = JOptionPane.showInputDialog(null, "A quel nom souhaitez-vous ouvrir un compte ?"); System.out.println("nom du client: "+nomClient1); //creation du client1 System.out.println("creation du client1"); ClientImplementation cli1=new ClientImplementation(nomClient1,nomClient1); Client client1=new _tie_Client(cli1); System.out.println("client1 cree => "+client1); //codeguichet du gestionnaire gca String codeg1=gca.getNumero(); System.out.println("code guichet gestCA : "+codeg1); //creer compte client1 CompteClient c1=null; try { //001=codelocal c1= gca.creerCompteClient(client1,nomClient1,320,"001",300); System.out.println("compte c1 cree => "+c1); } catch (SystemException se) { System.out.println("exception in creerCompteClient"); System.out.println(se.toString()); } //affichage du solde du client1 JOptionPane.showMessageDialog(null, "solde de "+c1.getLibelle()+" " +c1.getSolde()); //______________________retrait c1 de 400__________________________________ OperationImplementation opr=null; //date du retrait=date du jour MaDateImplementation dar=new MaDateImplementation(); MaDate currentDateRetrait=new _tie_MaDate(dar); try { //pr retrait cible=0 opr=new OperationImplementation(0,c1.getIb(),700,"retrait", null,currentDateRetrait); } catch (SystemException se) { System.out.println("exception during OperationImplementation retrait"); System.out.println("Exception : "+se.toString()); } Operation retrait=new _tie_Operation(opr); //effectuer le retrait sur c1 CompteRendu compterendu1=c1.effectuer(retrait); JOptionPane.showMessageDialog(null,compterendu1.getLibelle()); //_______________________depot 56.50 sur c1_________________________________ OperationImplementation opd=null; //date du retrait=date du jour MaDateImplementation dad=new MaDateImplementation(); MaDate currentDateDepot=new _tie_MaDate(dad); try { //pr depot cible=1 opd=new OperationImplementation(1,c1.getIb(),(float)56.5,"dépot", null,currentDateDepot); } catch (SystemException se) { System.out.println("exception during OperationImplementation depot"); System.out.println("Exception : "+se.toString()); } Operation depot=new _tie_Operation(opd); //effectuer le retrait sur c1 CompteRendu compterendu2=c1.effectuer(depot); JOptionPane.showMessageDialog(null,compterendu2.getLibelle()); //________________creation d un cpte c2 au credit lyonnais_________________ //creation d'un compte c2 au CL JOptionPane.showMessageDialog(null,"vous êtes à la banque du " +gcl.getLibelle()); System.out.println("creation compte c2 au credit lyonnais"); //saisie nom du client2 String nomClient2 = JOptionPane.showInputDialog(null, "A quel nom souhaitez-vous ouvrir un compte ?"); System.out.println("nom du client2: "+nomClient2); //creation du client2 System.out.println("creation du client2"); ClientImplementation cli2=new ClientImplementation(nomClient2,nomClient2); Client client2=new _tie_Client(cli2); System.out.println("client2 cree => "+client2); //codeguichet du gestionnaire gcl String codeg2=gcl.getNumero(); System.out.println("code guichet gestCL : "+codeg2); //creer compte client2 CompteClient c2=null; try { //001=codelocal c2=gcl.creerCompteClient(client2,nomClient2,100,"001",150); System.out.println("compte c2 cree => "+c2); } catch (SystemException se) { System.out.println("exception in creerCompteClient"); System.out.println(se.toString()); } //affichage du solde JOptionPane.showMessageDialog(null, "solde de "+c2.getLibelle()+" " +c2.getSolde()); //____________________________virement de 50 de c1 sur c2_________________________ //creer une operation OperationImplementation op=null; MaDateImplementation dav=new MaDateImplementation(); MaDate currentDateVirement=new _tie_MaDate(dav); System.out.println(currentDateVirement.showDate()); try { op=new OperationImplementation(0,c1.getIb(),c2.getIb(),50,"virement", null,currentDateVirement); } catch (SystemException se) { System.out.println("exception during OperationImplementation virement"); System.out.println("Exception : "+se.toString()); } Operation o=new _tie_Operation(op); System.out.println("Operation creee ok"); //affichage montant de l operation System.out.println("montant de l operation : "+o.getMontant()); //affichage infos sur ib de source + dest IdentiteBancaire idsource=o.getSource(); IdentiteBancaire iddest=o.getDestination(); System.out.println("ib de c1 : "+idsource); System.out.println("ib de c2 : "+iddest); System.out.println("code guichet de c2 : "+iddest.getCodeGuichet()); System.out.println("code local de c2 : "+iddest.getCodeLocal()); System.out.println("code guichet de c1 : "+idsource.getCodeGuichet()); System.out.println("code local de c1 : "+idsource.getCodeLocal()); //affichage cpte associe a idsource CompteClient compte=gca.getCompte(idsource);//pb si=null car id.cog="" System.out.println("libelle du compte source: "+compte.getLibelle()); System.out.println("solde de c1: "+compte.getSolde()); //effectuer l operation sur c1 System.out.println("operation a effectuer sur c1"); CompteRendu compterendu3=c1.effectuer(o); //sur compte c1(qu il soit src ou dest) JOptionPane.showMessageDialog(null,compterendu3.getLibelle()); //effectuer l operation sur c2 System.out.println("operation a effectuer sur c2"); o.setCible(1); CompteRendu compterendu4=c2.effectuer(o); //gest gcl execute op sur cpte dest //JOptionPane.showMessageDialog(null,compterendu4.getLibelle()); //___________________consultation releve c1________________________________ //creer une consultation ConsultationImplementation co2=null; try { co2=new ConsultationImplementation(2,c1.getIb()); System.out.println("ConsultationImplementation releve ok"); } catch (SystemException se) { System.out.println("exception during ConsultationImplementation"); System.out.println("Exception : "+se.toString()); } Consultation cons2=new _tie_Consultation(co2); System.out.println("consultation releve creee ok"); //effectuer la consultation CompteRendu cptr2=c1.consulter(cons2); //afficher le releve String rel=cptr2.showReleve(); JOptionPane.showMessageDialog(null,rel); /*JOptionPane.showMessageDialog(null,"solde de "+ c1.getLibelle()+" : " +cptr2.getSolde()+" au " +(cptr2.getDate()).showDate()); */ //___________________consultation solde c1__________________________________ //creer une consultation ConsultationImplementation co=null; try { co=new ConsultationImplementation(1,c1.getIb()); } catch (SystemException se) { System.out.println("exception during ConsultationImplementation"); System.out.println("Exception : "+se.toString()); } Consultation c=new _tie_Consultation(co); //effectuer la consultation CompteRendu cptr1=c1.consulter(c); JOptionPane.showMessageDialog(null,"solde de " +c1.getLibelle()+" "+ cptr1.getSolde()+" au "+ (cptr1.getDate().showDate())); //_____________________consultation solde c2________________________________ //creer une consultation ConsultationImplementation consul=null; try { consul=new ConsultationImplementation(1,c2.getIb()); } catch (SystemException se) { System.out.println("exception during ConsultationImplementation"); System.out.println("Exception : "+se.toString()); } Consultation consult=new _tie_Consultation(consul); //effectuer la consultation CompteRendu cptrs=c2.consulter(consult); JOptionPane.showMessageDialog(null,"solde de " +c2.getLibelle()+" "+ cptrs.getSolde()+" au "+ (cptrs.getDate().showDate())); }//fin main() } //fin class ApplClient
ApplClient.java ------------------------------------------------------------------------------- import IE.Iona.OrbixWeb._CORBA; import javax.swing.*; import java.awt.*; import java.util.*; import java.util.Date; import java.awt.event.*; import IE.Iona.OrbixWeb.CORBA.ORB; import org.omg.CORBA.SystemException; public class ApplClient { //références gca et gcl à un gestionnaire CA et CL Gestionnaire gca=null; Gestionnaire gcl=null; //objets de l interface graphique JFrame f; JTextField tnom,tprenom,tnumero,tmontant,tdest; JComboBox listbanque,listop; CheckboxGroup cbgop; Checkbox rboperation,rbconsultation; JButton bok,bannuler,bokop,bannulerop,bsaisieok,bsaisieannuler; EvenementInterface evnt=new EvenementInterface(); EvenementOperation evntop=new EvenementOperation(); EvenementSaisie evntsaisie=new EvenementSaisie(); Gestionnaire gclient=null; //constructeur public ApplClient() { connection(); drawInterface(); } //____________________methode de connexion_________________________________ public void connection() { //initialisation de l'ORB ORB.init(); //gca et gcl liés avec le serveur ApplServeur, sur la machine //mass-handicap try { gca=GestionnaireHelper.bind("CA:ApplServeur", "mass-handicap.univ-tlse2.fr"); System.out.println("liaison avec gestCA ok"); gcl=GestionnaireHelper.bind("CL:ApplServeur", "mass-handicap.univ-tlse2.fr"); System.out.println("liaison avec gestCL ok"); //JOptionPane.showMessageDialog(null,"BIND OK"); } catch (SystemException ex){ JOptionPane.showMessageDialog(null,"BIND EN PANNE"); System.out.println("exception during bind"); System.out.println(ex.toString()); } } //fin connection //________________dessiner l interface graphique___________________________ public void drawInterface(){ f=new JFrame("Ouverture d'un compte"); JPanel p= new JPanel(); p.setLayout(new GridLayout(4,2)); //labels JLabel lbanque= new JLabel("Banque : "); JLabel lnom= new JLabel("Nom : "); JLabel lprenom= new JLabel("Prénom : "); //textfields tnom=new JTextField(); tprenom=new JTextField(); //listebox des banques listbanque=new JComboBox(); listbanque.addItem("Crédit Agricole"); listbanque.addItem("Crédit Lyonnais"); //bouton ok bok=new JButton("OK"); bok.setActionCommand("ok"); bok.addActionListener(evnt); //bouton annuler bannuler=new JButton("ANNULER"); bannuler.setActionCommand("annuler"); bannuler.addActionListener(evnt); p.add(lbanque); p.add(listbanque); p.add(lnom); p.add(tnom); p.add(lprenom); p.add(tprenom); p.add(bok); p.add(bannuler); f.setContentPane(p); f.pack(); f.setVisible(true); } //fin drawInterface //__________dessiner l interface graphique pour le menu des operations_____ public void drawOperation(){ JFrame fop=new JFrame("Opérations bancaires"); //panel ppal JPanel pop=new JPanel(); pop.setLayout(new GridLayout(4,1)); //ensemble de boutons radios cbgop=new CheckboxGroup(); //choix 1 bouton operation rboperation=new Checkbox("Effectuer une opération",cbgop,false); //choix 2 bouton consultation rbconsultation=new Checkbox("Effectuer une consultation",cbgop,false); //boutons op ok et annuler bokop=new JButton("ok"); bokop.setActionCommand("ok"); bokop.addActionListener(evntop); bannulerop=new JButton("Annuler"); bannulerop.setActionCommand("annuler"); bannulerop.addActionListener(evntop); pop.add(rboperation); pop.add(rbconsultation); pop.add(bokop); pop.add(bannulerop); fop.setContentPane(pop); fop.pack(); fop.setVisible(true); ;} //fin drawOperation() //______dessiner l interface pour la saisie de l'operation_________________ public void drawSaisieOperation(){ JFrame fsaisieop=new JFrame("Nature de l'opération bancaire"); //panel JPanel psaisie=new JPanel(); psaisie.setLayout(new GridLayout(5,2)); //labels JLabel lnumero=new JLabel("Numéro de compte : "); JLabel lnature=new JLabel("Nature de l'opération : "); JLabel lmontant=new JLabel("Montant de l'opération : "); JLabel ldest=new JLabel("Numéro du compte destinataire : "); //ldest.setVisible(false); //textfields tnumero=new JTextField(6); tmontant=new JTextField(); tdest=new JTextField(); tdest.setEditable(false); //tdest.setVisible(false); //listbox listop=new JComboBox(); listop.addItem("Retrait"); listop.addItem("Versement"); listop.addItem("Virement"); //boutons bsaisieok=new JButton("OK"); bsaisieok.setActionCommand("ok"); bsaisieok.addActionListener(evntsaisie); bsaisieannuler=new JButton("Annuler"); bsaisieannuler.setActionCommand("annuler"); bsaisieannuler.addActionListener(evntsaisie); psaisie.add(lnumero); psaisie.add(tnumero); psaisie.add(lnature); psaisie.add(listop); psaisie.add(ldest); psaisie.add(tdest); psaisie.add(lmontant); psaisie.add(tmontant); psaisie.add(bsaisieok); psaisie.add(bsaisieannuler); fsaisieop.setContentPane(psaisie); if (listop.getSelectedIndex()==2){ tdest.setEditable(true); fsaisieop.validate(); } fsaisieop.pack(); fsaisieop.setVisible(true); } //fin drawSaisieOperation() //____________creation du client___________________________________________ public Client enregistrerClient(String n,String p){ //creation du client ClientImplementation cli1=new ClientImplementation(n,p); Client client1=new _tie_Client(cli1); return(client1); }//fin enregistrerClient() //_____________________ouverture du compte_________________________________ public Gestionnaire ouvrirCompte(Client cli){ CompteClient c1=null; //si banque du credit agricole if (listbanque.getSelectedIndex()==0){ try { c1= gca.creerCompteClient(cli,"compte ouvert",0,"001",300); } catch (SystemException se) { System.out.println("exception in creerCompteClient"); System.out.println(se.toString()); } return(gca); }//fin if //si banque du credit lyonnais if (listbanque.getSelectedIndex()==1){ try { c1= gcl.creerCompteClient(cli,"compte ouvert",0,"001",300); } catch (SystemException se) { System.out.println("exception in creerCompteClient"); System.out.println(se.toString()); } //affichage du solde du client1 JOptionPane.showMessageDialog(null, "solde de "+cli.getPrenom()+" "+ cli.getNom()+" " +c1.getSolde()+" francs"); return(gcl); }//fin if2 return(null); }//fin ouvrir compte //_____________________faire une operation_________________________________ public void faireOperation(Gestionnaire g_op){ //dessiner l interface pour la saisie de l op drawSaisieOperation(); } //_____________________faire une consultation______________________________ public void faireConsultation(){;} //_______________________retrait___________________________________________ public void faireRetrait(String id,String s,float f){ //date du retrait=date du jour MaDateImplementation dar=new MaDateImplementation(); MaDate currentDateRetrait=new _tie_MaDate(dar); //creation de l'operation OperationImplementation opr=null; try { //pr retrait cible=0 opr=new OperationImplementation(0,c1.getIb(),f,"retrait", null,currentDateRetrait); } catch (SystemException se) { System.out.println("exception during OpImplementation retrait"); System.out.println("Exception : "+se.toString()); } Operation retrait=new _tie_Operation(opr); //effectuer le retrait sur c1 CompteRendu compterendu1=c1.effectuer(retrait); JOptionPane.showMessageDialog(null,compterendu1.getLibelle()); }//fin faireRetrait //__________________________________depot__________________________________ public void faireDepot(String a,float b){;} //_______________MAIN()____________________________________________________ public static void main(String args[]){ ApplClient myapp = new ApplClient(); }//fin main() //______________________classes pr gérer les evnts_________________________ class EvenementInterface implements ActionListener { public void actionPerformed(ActionEvent e) { //si ouverture compte ok if(e.getActionCommand().equals("ok")) { if((tnom.getText()==null)|(tprenom.getText()==null)) JOptionPane.showMessageDialog(null, "Vous n'avez pas rempli tous les champs"); else { String nclient=tnom.getText(); String pclient=tprenom.getText(); //creation du client avec les infos saisies Client monclient=enregistrerClient(nclient,pclient); JOptionPane.showMessageDialog(null, "Bienvenue "+pclient+" "+nclient+" à la banque du " +listbanque.getSelectedItem()); gclient=ouvrirCompte(monclient); drawOperation(); }//fin else }//fin if ouverture //annuler if(e.getActionCommand().equals("annuler")) {System.exit(0);} } } //fin class Evenement //_________________________________________________________________________ class EvenementOperation implements ActionListener{ public void actionPerformed(ActionEvent e){ //si une operation bancaire est ok if(e.getActionCommand().equals("ok")){ if (rboperation.getState()){ faireOperation(gclient); } if (rbconsultation.getState()){ faireConsultation(); } }//fin if op //annuler if(e.getActionCommand().equals("annuler")) {System.exit(0);} } } //fin class EvenementOperation //________________________________________________________________________ class EvenementSaisie implements ActionListener{ public void actionPerformed(ActionEvent e){ //si ouverture compte ok if(e.getActionCommand().equals("ok")) { String num=tnumero.getText(); String mont=tmontant.getText(); float somme=mont.floatValue(); //!!!pb num=IdentiteBancaire! gclient.getCompte(num); //retrait if (listop.getSelectedIndex()==0){ faireRetrait(num,somme); } //depot if (listop.getSelectedIndex()==1){ faireDepot(num,somme); } //virement if (listop.getSelectedIndex()==2){ //faireRetrait(num,somme) ; } } //annuler if(e.getActionCommand().equals("annuler")) {System.exit(0);} } } //fin class EvenementSaisie } //fin class ApplClient