Licence Professionnelle Développeur Web Programmation Orientée

publicité
Grenoble
IMA
1
UNIVERSITE
JOSEPH FOURIER
Informatique & Mathématiques Appliquées
Sciences, Technologie, Médecine
Licence Professionnelle Développeur Web
Programmation Orientée Objets
Gestion de comptes en banque ([email protected])
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 1/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 2/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ésigné 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
private
private
private
private
private
final DataSource dataSource; la source de données pour l’accès à la base de données.
final int numero; le numéro du compte.
final int titulaire; le code client du titulaire
double solde ; le solde du compte
double debitMax ; le montant maximal pour une opération de retrait
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 3/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 COMPTES1. 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
private
private
private
private
private
int id; l’identifiant du client
String nom; le nom du client
String prenom; le prénom du client
String adresse; l’adresse du client
String passwd; mot de passe du client
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
public
public
public
public
1
int getId()retourne le numéro d’identification du client.
String getNom() retourne le nom du client.
String getPrenom() retourne le prénom du client.
String getAdresse() retourne l’adresse du client.
String getPasswd() retourne le mot de passe du client.
Ajout de 1000 € au solde du compte de numéro 1001
UPDATE COMPTES SET SOLDE = SOLDE+1000 WHERE NUMERO=1001
Page 4/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.
Page 5/5
Téléchargement