Dernière scéance: Des question?????? + Deux exercices.

Post on 03-Apr-2015

114 views 4 download

Transcript of Dernière scéance: Des question?????? + Deux exercices.

Dernière scéance:

Des question??????

+

Deux exercices

exercice1 • On veut créer une application de gestion de

compte bancaire.• Chaque client possède est identifier par un

numéro client, son nom et son prénom.• chaque client possède un ou plusieurs comptes

bancaires • Chaque compte est identifier par un numéro

relatif • Chaque compte contient une liste d’opération.• Une opération peut être une opération de retrait

ou de versement• On veux créer une application de gestion d’un

agence

Modèle de données

agence client

compteopération

• Modèle de traitement :• On veux effectuer les opération suivante:• Ajout de client le solde est fixé à la création.• Effectuer des opérations de retrait: le retrait non

autorisé générera une exception de type OperationInvalide

• à la fin de chaque exécution de l’application les clients ainsi que les opération seront sauvegarder (en utilisant le mécanisme de la sérialisation dans un fichier banque.obj).

Première étape programmer les classe

public class OperationInvalide extends Exception {

float soldmax;

public OperationInvalide(float sm) {soldmax=sm;}

public String toString() {return "vous devez retirer au maximum : :"+soldmax;}

}

public class Compte {float solde; public Compte() { } public Compte(float s){solde=s;} public void retirer(float somme) throws OperationInvalide {if (somme<solde) solde-=somme; else throw new OperationInvalide(solde);}}

public class Client {String nom;String prenom;int numC;Compte compteC; public Client() { }

public Client(String n,String p,int num, float solde) {nom=n;prenom=p;numC=num;compteC=new Compte(solde);}

public void retirer(float somme)throws OperationInvalide { compteC.retirer(somme);}

}

public class Agence {Vector listeClient=new Vector();String name;public Agence() { } public Agence(String n) {name=n;} public void ajoutClient(Client c) {listeClient.add(c);}

public Client getClient(int num) {for(int i=0;i<listeClient.size();i++) {if (((Client) listeClient.get(i)).numC==num) { return ((Client) listeClient.get(i));} } return null; }

public void save()throws IOException { File f=new File("agence.obj"); ObjectOutputStream m=new ObjectOutputStream(new FileOutputStream(f)); m.writeObject(this);}

public static Agence load(String n)throws IOException, ClassNotFoundException {File f=new File(n+".obj"); ObjectInputStream m=new ObjectInputStream(new FileInputStream(f)); return ((Agence) m.readObject()); }

Conception de l’interface graphiqueInterface général

agence1load Gestion agence1

Ajout clientopératio

nsQuiter+saveInterface Ajout Interface

opérationnumCnomprenom ajouter

numCsomme

retirer

Quatre classe: une par interface voulu

cinque class écouteur: une par boutton

Objet:Agence

Objet: Agence

Objet: Agence

Les class des fenêtre • Chaque fenêtre doit avoir accés aux

données nécessaires a son fonctionnement

1. Class InterGéneral crée un objet agence Nouveau ou désérialisé et le passe dans à l’objet InterGestionAgence.

2. Les autres interfaces ont aussi besoin de l’objet Agence pour le gérer.

Fenêtre générale

public class InterGeneral extends JFrame {JTextField nom=new JTextField("quel agence?");JButton load=new JButton("Load"); public InterGeneral() { this.getContentPane().setLayout(new GridLayout(2,1,10,10)); this.getContentPane().add(nom); this.getContentPane().add(load); }

Fenêtre gestion d’une agence

public class InterGestionAgence extends JFrame {Agence ag;JButton ajout=new JButton("Ajout client");JButton operation=new JButton("Opération");JButton quiter=new JButton("Quit + save");

public InterGestionAgence(Agence c) { ag=c; this.setTitle("gestion de l'agence : "+ag.name); this.getContentPane().setLayout(new GridLayout(3,1,10,10)); this.getContentPane().add(ajout); this.getContentPane().add(operation); this.getContentPane().add(quiter); }}

Fenêtre Ajout clientpublic class InterfaceAjout extends JFrame { Agence ag; JLabel numL=new JLabel("Num Client"); JTextField numT=new JTextField("num???"); JLabel nomL=new JLabel("Nom"); JTextField nomT=new JTextField("Nom???"); JLabel preL=new JLabel("Prénom"); JTextField preT=new JTextField("Prénom???"); JLabel somL=new JLabel("Crédit"); JTextField somT=new JTextField("Crédit???"); JButton ajout=new JButton("Ajout"); public InterfaceAjout(Agence c) { ag=c; this.setTitle("ajout client de l'agence "+ag.name); this.getContentPane().setLayout(new GridLayout(5,2,10,10)); this.getContentPane().add(numL); this.getContentPane().add(numT); this.getContentPane().add(nomL); this.getContentPane().add(nomT); this.getContentPane().add(preL); this.getContentPane().add(preT); this.getContentPane().add(somL); this.getContentPane().add(somT); this.getContentPane().add(ajout); }}

Fenêtre opérationpublic class InterOperation extends JFrame { Agence ag; JLabel numL=new JLabel("num Client"); JTextField numT=new JTextField("num???"); JLabel somL=new JLabel("Somme"); JTextField somT=new JTextField("somme???"); JButton retirer=new JButton("retirer"); JLabel message=new JLabel(""); public InterOperation(Agence c) { ag=c; this.setTitle("opération Client de l'agence "+ag.name); this.getContentPane().setLayout(new GridLayout(3,2,10,10)); this.getContentPane().add(numL); this.getContentPane().add(numT); this.getContentPane().add(somL); this.getContentPane().add(somT); this.getContentPane().add(retirer); this.getContentPane().add(message); message.setVisible(false); }}

Les écouteurs:load

Interface général

agence1load

Entrée: La valeur de zone de texteIl doit avoir accés à l’objet fenêtre auquel il est rattaché

Traitement : essayer de lire désérialiser un objet Agence à partir d’un fichier au nom de zone de texte «  valuerdezoneText.obj » 

codepublic class EcouteurLoad implements ActionListener {InterGeneral in; public EcouteurLoad(InterGeneral i) {in=i;} public void actionPerformed(ActionEvent e) { Agence c; try{ c=Agence.load(in.nom.getText()); InterGestionAgence inter=new InterGestionAgence(c); inter.pack();inter.show(); } catch(IOException ex){c=new Agence(in.nom.getText()); InterGestionAgence inter=new InterGestionAgence(c); inter.pack();inter.show(); } catch(ClassNotFoundException exc){ in.nom.setText("vérifier la class Agence"); in.load.setEnabled(false); } }}

Attacher une instance au boutton load:

load.addActionListener(new EcouteurLoad(this));

Gestion agence1

Ajout clientopératio

nsQuiter+save

Entrée: l’objet agence de la fenêtre en cours

Traitement 1 et 2: création d’une fenêtre de type interAjout où interOperation pour les deux premiers.

Traitement quit:

Exécute la méthode save de l’objet agence et quit en exécutant exit

Code des deux écouteurs ajout et opérations

public class EcouteurAjout implements ActionListener {Agence ag; public EcouteurAjout(Agence a) {ag=a; } public void actionPerformed(ActionEvent e) { InterfaceAjout in=new InterfaceAjout(ag); in.pack();in.show(); }}*********************************************************************************************public class EcouteurOperation implements ActionListener {Agence ag; public EcouteurOperation(Agence a) {ag=a;} public void actionPerformed(ActionEvent e) { InterOperation in=new InterOperation(ag); in.pack();in.show(); }}

Attachez les ecouteur au bouttons ajout et operation:

ajout.addActionListener(new EcouteurAjout(ag)); operation.addActionListener(new EcouteurOperation(ag));

Code de l’écouteur quiter+savepublic class EcouteurQuiter implements ActionListener {Agence ag; public EcouteurQuiter(Agence a) {ag=a;} public void actionPerformed(ActionEvent e) { try{ag.save(); System.exit(1);} catch(IOException ex){ ((JButton)e.getSource()). setText("problème de sauvgarde: fermez la fenêtre"); ((JButton)e.getSource()).setEnabled(false); } }}

Attachez l’ écouteur au boutton quiter:

quiter.addActionListener(new EcouteurQuiter(ag));

Ecouteur du bouton ajouter

Interface Ajout

numCnomprenom ajouter

Entrée: objet agence + les valeurs de champs texte donc la fenêtre

Traitement: créer un client avec les valeur en entrée et ajouter le client dans la liste des clients de l’agence

Code de l’écouteur AjoutClientpublic class EcouteurAjoutClient implements ActionListener {InterfaceAjout in; public EcouteurAjoutClient(InterfaceAjout inter) {in =inter;} public void actionPerformed(ActionEvent e) { int num=Integer.parseInt(in.numT.getText()); String n=in.nomT.getText(); String p=in.preT.getText(); float s=Float.parseFloat(in.somT.getText()); Client c=new Client(n,p,num,s); in.ag.ajoutClient(c); }}

Attachez l’ écouteur au boutton ajouter:

ajout.addActionListener(new EcouteurAjoutClient(this));

Même chose ~ pour opérationInterface opération

numCsomme

retirer

Entrée: objet agence + les valeurs de champs texte donc la fenêtre

Traitement: chercher le client dans la liste et effectuer une opération:

Attention il faut gérer l’exception

Code écouteur retirerpublic class EcouteurRetirer implements ActionListener {InterOperation in; public EcouteurRetirer(InterOperation inter) {in=inter; } public void actionPerformed(ActionEvent e) { int num=Integer.parseInt(in.numT.getText()); Client c=in.ag.getClient(num); if (c==null) {in.message.setText("client n'exsite pas. refaire!!!!"); in.message.setVisible(true);} else {try{ float somme=Float.parseFloat(in.somT.getText()); c.retirer(somme);} catch(OperationInvalide ex){ in.message.setText(ex.toString()); in.message.setVisible(true);} } }}

Attachez l’ écouteur au boutton retirer:

retirer.addActionListener(new EcouteurRetirer(this));

Vous pouvez tester votre programme

public Test() { } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); InterGeneral f=new InterGeneral(); f.pack(); f.show(); }