Licence Professionnelle Développeur Web Programmation Orientée

Page 1/5
Informatique & Mathématiques Appliquées
UNIVERSITE
JOSEPH FOURIER
Sciences, Technologie, MédecineInformatique & Mathématiques Appliquées
UNIVERSITE
JOSEPH FOURIER
Sciences, Technologie, MédecineInformatique & Mathématiques Appliquées
UNIVERSITE
JOSEPH FOURIER
Sciences, Technologie, Médecine
Grenoble 1
IMA
Licence Professionnelle Développeur Web
Programmation Orientée Objets
Gestion de comptes en banque
(Philippe.Genoud@imag.fr)
Objectifs : utilisation de JDBC, écriture de tests unitaires JUnit.
Pour la gestion des comptes de ses clients (vois Tds précédents) la banque IMA a mis en place une base de
données relationnelle définissant les tables suivantes :
Table CLIENTS, stocke les données relatives aux clients de la banque.
Le code SQL de création de la table :
CREATE TABLE CLIENTS (CODE_CLIENT NUMBER(38) NOT NULL,
NOM VARCHAR2(32) NOT NULL,
PRENOM VARCHAR2(32) NOT NULL,
ADRESSE VARCHAR2(50),
PASSWD VARCHAR2(8),
PRIMARY KEY (CODE_CLIENT));
Table COMPTES, stockes les données relatives aux comptes de la banque.
Le code SQL de création de la table :
CREATE TABLE COMPTES (NUMERO NUMBER(38) NOT NULL,
SOLDE NUMBER(126) NOT NULL,
DEBITMAX NUMBER(126) NOT NULL,
DECOUVERTMAX NUMBER(126) NOT NULL,
INTITULE VARCHAR2(32) NOT NULL,
TITULAIRE NUMBER(126) NOT NULL,
PRIMARY KEY (NUMERO))
TITULAIRE est une clé étrangère
ALTER TABLE COMPTES ADD FOREIGN KEY (TITULAIRE) REFERENCES CLIENTS(
CODE_CLIENT
)
Page 2/5
La banque IMA, souhaite développer différentes applications Java pour permettre l’exploitation de cette
base de données (entre autres est prévu le développement d’une application WEB pour permettre à ses
clients de consulter à distance l’état de leurs comptes, et éventuellement effectuer des virements d’un compte
vers un autre). Pour la mise en œuvre de ces applications, les architectes logiciels de la banque IMA ont
décidé de définir les classes d’objets métiers suivantes:
Compte : qui modélise un compte en banque. Cette classe permet de faire le lien entre une application Java et
la table COMPTES dans la base de données gérant les comptes de la banque.
Client : qui modélise un client (à partir des informations contenues dans les tables CLIENTS et COMPTES).
Une hiérarchie de classes d’exceptions est également définie :
CompteException : classe d’exceptions pouvant être levées par les méthodes de Compte et spécialisée en
deux sous classes CompteNotFoundException (utilisée lorsqu’un compte désigné par un numéro n’est pas
trouvé dans la base de données) et CompteOpException (lorsqu’une opération sur un compte (dépôt, retrait,
virement) ne peut être effectuée).
Page 3/5
ClientException : classe d’exceptions pouvant être levées par les méthodes de Client et spécialisée en
deux sous classes ClientNotFoundException (utilisée lorsqu’un client désig par un numéro n’est pas
trouvé dans la base de données) et ClientBadPasswdException (lorsqu’un le mot de passe donnée pour un
client ne correspond pas à celui enregistré en BD).
1) La classe Compte
Les attributs (variables d’instance) :
private final DataSource dataSource; la source de données pour l’accès à la base de données.
private final int numero; le numéro du compte.
private final int titulaire; le code client du titulaire
private double solde ; le solde du compte
private double debitMax ; le montant maximal pour une opération de retrait
private double decouverMax ; le montant maximal autorisé
Constructeur :
public Compte(DataSource ds, int no) throws
SQLException, CompteNotFoundException
Création d’un objet java représentant un compte donné et identifié par son numéro (paramètre no). Le
paramètre ds référence une DataSource qui permet d’accéder à la base de données stockant les
comptes. Si il n’existe pas de compte de numéro no dans la table COMPTES une
CompteNotFoundException est levée. Le constructeur initialise les différents attributs de l’objet
Compte avec les données stockées dans la table COMPTES. Une SQLException
est levée si il y a un
problème d’accès au SGBD.
Méthodes publiques :
public int getNumero()
retourne le numéro du compte
public int getTitulaire()
retourne le code client du titulaire du compte
public double getSolde()
retourne le solde courant du compte.
public double getDecouvertMax()
retourne le découvert maximal autorisé pour ce compte.
public double getDebitMax()
retourne le débit maximal autorisé pour ce compte.
public boolean estADecouvert()
renvoie la situation de découvert du compte (
true
si le compte est
à découvert,
false
sinon).
Page 4/5
private double retraitMaxPossible()
renvoie le montant maximal qu’il est possible de débiter à un
instant donné sur ce compte. Ce montant est le minimum entre le débit maximal autorisé et la somme du
solde du compte et du débit maximum autorisé.
public void crediter(double s) throws SQLException, CompteOpException
dépose la
somme s sur le compte (s doit être > 0). Le solde du compte est modifié dans la table COMPTES
1
. Une
SQLException est levée si un problème d’accès au SGBD a lieu. Une CompteOpException est levée
si le dépôt ne peut être réalisé (s <0).
public void debiter(double r) throws SQLException, CompteOpException
débite le
compte d’un montant r donné (le montant spécifié pour le retrait doit être inférieur au retrait maximal
possible ou supérieur à 0). Le solde du compte est modifié dans la table COMPTES. Une SQLException
est levée si un problème d’accès au SGBD a lieu. Une CompteOpException est levée si le retrait ne
peut être réalisé (r <0 ou r > au retrait maximal possible sur ce compte).
public void virer(double r, Compte c) throws SQLException, CompteOpException
effectue un virement d’un montant r de ce compte vers le compte c. Une transaction est effectuée pour
modifier les soldes des comptes dans la table COMPTES. Une SQLException est levée si un problème
d’accès au SGBD a lieu, la transaction est alors annulée. Une CompteOpException est levée si le
virement ne peut être réalisé, (r <0 ou bien r > au retrait maximal possible sur ce compte).
2) La classe Client
Attributs :
private int id; l’identifiant du client
private String nom; le nom du client
private String prenom; le prénom du client
private String adresse; l’adresse du client
private String passwd; mot de passe du client
private List<Comptes> comptes; la structure de données pour stocker l’ensemble des comptes du client
Constructeur :
public Client(DataSource ds, int id, String passwd) throws SQLException,
ClientNotFoundException, ClientBadPasswdException, CompteException
Création d’une nouvelle instance de Client. Recherche dans la table CLIENTS l’enregistrement dont le
champ CODE_CLIENT correspond au paramètre id. Si il n’y a pas de tel enregistrement une exception de
type ClientNotFoundException est levée. Sinon, le mot de passe associé à ce client est comparé
avec le paramètre passwd. Si ils ne correspondent pas, une exception de type
ClientBadPasswdException est levée. Si le client existe et s’est correctement authentifié, les
informations le décrivant sont recopiées depuis la base de données vers les attributs correspondants et la liste
des ses comptes est construite. Le paramètre ds est la référence d’un objet DataSource permettant
l’accès à la base de données.
Méthodes publiques :
public int getId()retourne le numéro d’identification du client.
public String getNom() retourne le nom du client.
public String getPrenom() retourne le prénom du client.
public String getAdresse() retourne l’adresse du client.
public String getPasswd() retourne le mot de passe du client.
1
Ajout de 1000 € au solde du compte de numéro 1001
UPDATE COMPTES SET SOLDE = SOLDE+1000 WHERE NUMERO=1001
Page 5/5
public int getNbComptes()
retourne le nombre de comptes auquel ce client a accès.
public Compte getCompte(int no)
recherche parmi les comptes accessibles par ce client, le compte
de numéro no. Retourne sa référence si il est présent, null si il n’y est pas.
public Iterator<Compte> iterator()
retourne un itérateur pour le parcours de l’ensemble des
comptes dont ce client est titulaire. Ce parcours est effectué selon l’ordre croissant des numéros de comptes.
1) Télécharger le projet Netbeans squelette de l’application (voir site web de l’enseignement). Ce
projet contient les classes suivantes :
ClientNotFoundException,ClientNotFoundException et ClientBadPasswdException
CompteException ,CompteNotFoundException, CompteOpException
Le squelette de la classe Compte
Le squelette de la classe Client
TestDataSource classe implémentant l’interface javax.sql.DataSource et utilisée pour les test (ce
n’est pas une véritable DataSource, elle ne gère pas de pool de connexions)
ClientTest classe de test JUnit pour la classe Client
2) Compléter le code de la classe Compte
3) Créer un test unitaire JUnit pour cette classe.
4) Terminer la classe Client et compléter son test unitaire.
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !