Upload
barnabe-laurent
View
114
Download
4
Embed Size (px)
Citation preview
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(); }