1. Rapport du TP1 Genie Logiciel Avanc´e
SONFACK S. Serge et ZONGO Sylvain
February 2018
UIVERSITE INSTITUT DE LA
NATIONALE FRANCOPHONIE
DE VIETNAM POUR L’INNOVATION
1
3. IFI-VNU Projet Genie Logiciel TP1
Introduction
Le g´enie logiciel (software engineering) repr´esente l’application de principes d’ing´enierie au
domaine de la cr´eation de logiciels. Il consiste `a identifier et `a utiliser des m´ethodes, des pratiques
et des outils permettant de maximiser les chances de r´eussite d’un projet logiciel. Ce TP (travail
Pratique) a donc pour objectif de nous permettre de rationaliser et d’optimiser le processus de
production d’un logiciel en int´egrant le concept de la programmation orient´ee objet. Nous allons
d’abord pr´esenter les sp´ecifications de l’application, ensuite nous allons appliquer la m´ethode
Agile extreme programming pour l’impl´ementation et la gestion de notre projet.
1 Analyse et Conception
1.1 M´ethode agile extreme programming
XP(extreme programming) est une m´ethode agile adapt´ee pour une ´equipe r´eduite et qui
permet de pousser `a l’extr`eme les principes simples. Cette m´ethode des gestions repose sur des
valeurs telles que : le courage, le simplicit´e, le respect et surtout la communication entre les
diff´erents membres de l’´equipe.
XP dans la pratique repose sur un cycle de d´evelopement qui commence par un planning qui
orgarnise le travail en tˆache dans un ordre de priorit´e. Par la suite chaque tˆache retir´e dans la liste
de priorit´e est ex´ecut´ee et repr´esente une it´eration. Chaque it´eration passe par une conception,
une implementation, un test et finie par un checking sur les modification `a apporter sur la ou les
it´eration pr´ecedente.
Tel sera notre m´ethodologie de travail.
1.2 Analyse des sp´ecifications de l’application
L’application r´ealis´ee a de diverses fonctionnalit´es. L’application permet la mise en œuvre d’un
syst`eme de gestion de comptes des clients dans une banque. Elle permet l’ouverture d’un ou de
plusieurs compte(s) pour tout client avec des taux d’int´erˆet diff´erents. Elle permet de faire une
transaction(faire un d´epˆot ou un retrait) sur un compte cr´e´e. L’application permettra ´egalement
de consulter un compte, de calculer le taux d’int´erˆet pour tous les comptes et de mettre le solde
de chaque compte `a jour. L’application permet de faire aussi des rapports qui incluent la liste
des comptes. L’application permet aussi de faire des recherches sur les comptes et de reconnaˆıtre
si un client poss`ede un ou plusieurs comptes dans une banque.
– cr´eer un nouveau compte,
– d´eposer un certain montant d’argent dans un compte,
– retirer un certain montant d’argent d’un compte,
– consulter le solde d’un compte,
– calculer l’int´erˆet pour tous les comptes et mettre `a jours leur solde,
– produire un rapport qui inclut une liste de comptes avec les informations suivantes : le
num´ero de compte, le solde, et les transactions effectu´ees (d´eposer et retirer l’argent) depuis
que le compte est cr´e´e.
– faire une recherche qui permet, `a partir du num´ero d’identification d’une personne, de
savoir si elle poss`ede un ou des comptes dans la banque.
1.3 Planning
Dans cette partie tout le projet est planifi´e et prioris´e en se basant sur les sp´ecifications
3
4. IFI-VNU Projet Genie Logiciel TP1
Fig. 1 – planification du projet
1.4 Conception
1.4.1 It´erration
1.4.2 Premi`ere It´erration
– Cas d’utilisation : creer compte
Fig. 2 – Diagramme de cas d’utilisation
– description
4
5. IFI-VNU Projet Genie Logiciel TP1
Cr´eer compte ID : CC-1
Acteur primaire Gestionnaire
Acteur secondaire Client
Description Permet au gestionnaire de cr´eer les comptes client
Auteurs SONFACK et ZONGO
Version 1.0
Syst`eme Syst`eme de gestion de banque
Intervenant gestionnaire
Pr´econdition Lancer l’application
Op´erations normale
1 Lancer ou ex´ecuter l’application
2 S´electionner l’option cr´eer compte
3 Affichage du formulaire de cr´eation de compte
4 Remplir le formulaire de cr´eation de compte
5 Enregistrer le formulaire
Post condition
1 Retour `a l’´etat initial
Exception
4.a Informations invalides
4.a.1 r´e-afficher le formulaire
4.a.2 Renseigner les champs erron´es
4.a.3 Passer au l’action 4
5.a Si le client existe
5.a.1 Demander voulez vous ajouter un nouveau compte?
5.a.2 Si oui
5.a.3 Demander l’identit´e du client
5.a.4 Retour `a l’action 4
5
6. IFI-VNU Projet Genie Logiciel TP1
– diagramme de s´equence : creer compte
Fig. 3 – Diagramme de s´equence
– code L’identifiant du compte est g´en´erer automatiquement
public class Compte{
public static int indiceCompte = 0;
% liste des transactions du compte
ArrayList<Transaction> listeTransaction = new ArrayList<Transaction>();
private Client client;
private int numCompte;
private double solde ;
public int tauxInteret;
public Compte(Client client, int taux ) {
Compte.indiceCompte = Compte.indiceCompte + 1;
this.numCompte = Compte.indiceCompte ;
this.solde = 0;
this.tauxInteret = taux;
client.listeCompte.add(this);
System.out.println("tCompte = "+this.numCompte+" ; nom client =
"+client.nomClient+" identifiant =
"+client.getIdClient(client)+" ; montant =
"+this.getSolde() +" et taux = "+this.tauxInteret+"%" );
}
– test
6
7. IFI-VNU Projet Genie Logiciel TP1
class ClientTest {
@Test
void test() {
Banque BIDV = new Banque();
assertNotNull("Non null", BIDV);
/*
Deux clients diffrentes de la meme banque sont diffrentes */
Client client1 = new Client(BIDV, "serge");
Client client2 = new Client(BIDV,"landry");
assertNotNull("Not null test",client1);
assertNotNull("Not null test",client2);
assertNotEquals(client1.nomClient, client2.nomClient);
assertNotEquals(client1.getIdClient(), client2.getIdClient());
assertNotEquals(client1.nomClient, client2.nomClient);
assertNotEquals(client1.getIdClient(), client2.getIdClient());
System.out.println("Fin test");
}
@FixMethodOrder()
class CompteTest {
@Test
void test0() {
Banque BIDV = new Banque();
assertNotNull("Non null", BIDV);
Client client1 = new Client(BIDV, "serge");
Client client2 = new Client(BIDV,"landry");
Compte cpt1 = new Compte(client1, 3);
7
8. IFI-VNU Projet Genie Logiciel TP1
Compte cpt2 = new Compte(client2, 4);
assertNotNull("Not null", cpt1);
assertNotNull("Not null", cpt2);
assertEquals(cpt1.getTaux(), 3);
assertEquals(cpt2.getTaux(), 4);
System.out.println("Fin test0");
}
– checking
Toujours cr´eer un client avant de cr´eer son compte Tout compte sans transaction doit avoir
un solde nul
8
9. IFI-VNU Projet Genie Logiciel TP1
1.4.3 Deuxi`eme It´erration
– Ajout du cas d’utilisation : consulter compte
Fig. 4 – Diagramme de cas d’utilisation : consulter compte
– description
Consulter compte ID: CC-2
Acteur primaire Gestionnaire
Acteur secondaire Client
Description Permet au gestionnaire de consulter les comptes des clients
Syst`eme Syst`eme de gestion de banque
Auteurs SONFACK et ZONGO
Version 1.0
Intervenant Gestionnaire
Pr´econdition Lancer l’application
Op´erations normale
1 Lancer ou ex´ecuter l’application
2 Demande de consultation de compte
3 affichage de la zone de saisie de l’identifant du compte
4 Saisir le nom ou l’identifiant du client
5 Choisir le type de recherche
6 Si recherche par identifiant
7 Affichage du contenu correspondant
8 Sinon si recherche par nom
9 Affichage des noms identiques
10 S´election de l’identifiant correspondant
11 Affichage du contenu compte
Post condition
1 Retour `a l’´etat initial
9
10. IFI-VNU Projet Genie Logiciel TP1
– diagramme de s´equence : consulter compte
Fig. 5 – Diagramme de sequence : consulter compte
– code
public class Client {
public static int indiceClient=0 ;
public String nomClient ;
private int idClient;
public ArrayList<Compte> listeCompte = new ArrayList<Compte>();
public Compte getCompte(int numCompte) {
Compte compte = null ;
for(int i = 0 ; i < this.listeCompte.size(); i++) {
if(this.listeCompte.get(i).getNumCompte() == numCompte) {
compte = this.listeCompte.get(i);
}
10
11. IFI-VNU Projet Genie Logiciel TP1
}
return compte;
}
– test
void test1() {
Banque BIDV = new Banque();
assertNotNull("Non null", BIDV);
Client client1 = new Client(BIDV, "serge");
Compte cpt1 = new Compte(client1, 2);
cpt1.setInteret();
assertEquals(cpt1.getSolde(), 0.0,0);
// type transaction
TypeTransaction typeTrs1 = new TypeTransaction(BIDV,"depot");
TypeTransaction typeTrs2 = new TypeTransaction(BIDV,"retrait");
// transaction
Transaction Trs1 = new Transaction(client1, cpt1, typeTrs1, 500);
Transaction Trs2 = new Transaction(client1, cpt1, typeTrs2, 200);
//consultation
assertEquals(cpt1.getSolde(), 300,0);
cpt1.setInteret();
double intCal = (300.0*2.0)/100.0 + 300.0;
assertEquals(cpt1.getSolde(), intCal,0);
}
– checking
Consulter une compte `a partir d’un num´ero donn´e et retourner les informations du compte
( solde et interet)
11
12. IFI-VNU Projet Genie Logiciel TP1
1.4.4 Troisi`eme It´erration
– Ajout de cas d’utilisation : faire recherche
Fig. 6 – Diagramme de cas d’utilisation : faire recherche
– description
12
13. IFI-VNU Projet Genie Logiciel TP1
Faire recherche ID : FR-1
Acteur primaire Gestionnaire
Acteur secondaire Client
Description Permet au gestionnaire de faire une recherche
Auteurs SONFACK et ZONGO
Version 1.0
Syst`eme Syst`eme de gestion de banque
Intervenant gestionnaire
Pr´econdition Lancer ou ex´ecuter l’application
Op´erations normale
1 Saisir le mot `a rechercher
2 Afficher le r´esultat de la recherche
Post condition
1 Retour `a l’´etat initial
Exception
3.a Informations invalides
3.a.1 r´e-afficher le formulaire
3.a. Renseigner les champs erron´es
3.a.3 Passer `a l’action 4
– diagramme de s´equence : faire recherche
– code
public class Banque {
// liste des clients de la banque
private HashSet<Client> listeClient = new HashSet();
// liste des types de transaction de la banque
private HashSet<TypeTransaction> listeTypeTransaction = new HashSet();
public HashSet<Client> getClient(){
return this.listeClient;
}
// recherche un client connaissant a partir de son identifiant
public Client getClient(int idClient) {
Client client = null ;
for(Client clt:this.listeClient) {
if(clt.getIdClient() == idClient) {
client = clt;
}
}
return client;
}
– test
/**
* Test recherche
*/
13
14. IFI-VNU Projet Genie Logiciel TP1
Fig. 7 – Diagramme de sequence : faire recherche
void test2() {
Banque BIDV = new Banque();
assertNotNull("Non null", BIDV);
assertNotEquals(BIDV.getTypeTransaction(), null);
assertEquals(BIDV.getClient(), null);
Client client1 = new Client(BIDV, "serge1");
Client client2 = new Client(BIDV,"landry1");
14
15. IFI-VNU Projet Genie Logiciel TP1
Client client3 = new Client(BIDV, "serge2");
Client client4 = new Client(BIDV,"landry2");
Client client5 = new Client(BIDV, "serge3");
Client client6 = new Client(BIDV,"landry3");
Client client7 = new Client(BIDV, "serge4");
Client client8 = new Client(BIDV,"landry4");
assertEquals(BIDV.getClient(1).nomClient, "serge1");
assertEquals(BIDV.getClient(10), null );
}
– checking
Recherche le client `a partir de la classe Banque Retourner l’objet client
15
16. IFI-VNU Projet Genie Logiciel TP1
Cinqui`eme It´errationAjout de cas d’utilisation : faire transaction Le diagramme de cas
d’utilisation Le diagramme de cas d’utilisation repr´esente la structure des grandes fonc-
tionnalit´es n´ecessaires aux utilisateurs du syst`eme. C’est diagramme statique du mod`ele
UML, celui o`u s’assure la relation entre l’utilisateur et les objets que le syst`eme met en
œuvre.
Fig. 8 – Diagramme de cas d’utilisation : faire transaction
–
– description
16
17. IFI-VNU Projet Genie Logiciel TP1
Faire transaction ID: FT-1
Acteur primaire Gestionnaire
Acteur secondaire Client
Description Permet au gestionnaire d’effectuer une transaction
Auteurs SONFACK et ZONGO
Version 1.0
Syst`eme Syst`eme de gestion de banque
Intervenant gestionnaire
Pr´e condition Lancer ou ex´ecuter l’application
Op´erations normale
1 Demande d’effectuer une transaction
2 Saisir l’identifiant client
3 Choisir l’op´eration `a effectuer
4 Si choix est d´epˆot
5 Enregistrer montant
6 Faire mise `a jour du compte
7 Si choix est retrait
8 V´erifier si montant `a retirer ¡montant du compte
9 Si oui effectuer l’op´eration
10 Mise `a jour du compte
Post condition
1 Retour `a l’´etat initial
Exception
3.a Informations invalides
3.a.1 r´e-afficher le formulaire
3.a.2 Renseigner les champs erron´es
3.a. Passer au l’action 4
– diagramme de s´equence : faire transaction
– code
class TransactionTest {
@Test
void test() {
Banque BIDV = new Banque();
assertNotNull("Non null", BIDV);
Client client1 = new Client(BIDV, "serge");
Client client2 = new Client(BIDV,"landry");
Compte cpt1 = new Compte(client1, 3);
Compte cpt2 = new Compte(client2, 4);
// type transaction
17
18. IFI-VNU Projet Genie Logiciel TP1
Fig. 9 – Diagramme de sequence : faire transaction
TypeTransaction typeTrs1 = new TypeTransaction(BIDV,"depot");
TypeTransaction typeTrs2 = new TypeTransaction(BIDV,"retrait");
// transaction
Transaction Trs1 = new Transaction(client1, cpt1, typeTrs1, 500);
Transaction Trs2 = new Transaction(client1, cpt1, typeTrs1,
-100);
18
19. IFI-VNU Projet Genie Logiciel TP1
Transaction Trs4 = new Transaction(client1, cpt1, typeTrs1, 0);
Transaction Trs5 = new Transaction(client1, cpt1, typeTrs2, 200);
assertEquals(cpt1.getSolde(), 300);
}
}
– test
– checking
Une transaction doit ˆetre definie avec son type et son montant, la date `a la quelle elle a
´et´et effectu´ee. Il ne doit pas y avoir des transaction negatives
19
20. IFI-VNU Projet Genie Logiciel TP1
Cinqui`eme It´errationAjout de cas d’utilisation : calcul interet Le diagramme de cas d’utili-
sation Le diagramme de cas d’utilisation repr´esente la structure des grandes fonctionnalit´es
n´ecessaires aux utilisateurs du syst`eme. C’est diagramme statique du mod`ele UML, celui
o`u s’assure la relation entre l’utilisateur et les objets que le syst`eme met en œuvre.
Fig. 10 – Diagramme de cas d’utilisation: calcul interet
–– description
– diagramme de s´equence : calcul interet
– code
– test
public class Banque {
// liste des clients de la banque
private HashSet<Client> listeClient = new HashSet();
// liste des types de transaction de la banque
private HashSet<TypeTransaction> listeTypeTransaction = new HashSet();
20
21. IFI-VNU Projet Genie Logiciel TP1
Fig. 11 – Diagramme de sequence : calcul interet
public HashSet<Client> getClient(){
return this.listeClient;
}
/*
* Calcul d’interet
*/
public void calculateInteret() {
for(Client clt:this.listeClient) {
System.out.println("Client : "+clt.nomClient);
for(int i = 0 ; i < clt.listeCompte.size() ; i++) {
System.out.println("Numero de complte"+
clt.listeCompte.get(i).getNumCompte());
System.out.println("----Solde :
21
22. IFI-VNU Projet Genie Logiciel TP1
"+clt.listeCompte.get(i).getSolde()+"----");
clt.listeCompte.get(i).setSolde((clt.listeCompte.get(i).getTaux()*
clt.listeCompte.get(i).getSolde())/100 +
clt.listeCompte.get(i).getSolde());
System.out.println("----Nouveau solde :
"+clt.listeCompte.get(i).
getSolde()+" pour Interet :
"+clt.listeCompte.get(i).getTaux()+" ----");
}
System.out.println("------------------------");
}
}
– checking
Calcul les interets des clients de la banque tout en mettant ajour leurs solde
1.4.5 Sxi`eme It´erration
– Ajout de cas d’utilisation : Produire rapport
– description
Produire rapport ID: CC-3
Acteur primaire Gestionnaire
Acteur secondaire Gestionnaire
Description Permet au gestionnaire de produire des rapports des clients
Auteurs SONFACK et ZONGO
Version 1.0
Syst`eme Syst`eme de gestion de banque
Intervenant Gestionnaire
Pr´econdition Lancer l’application
Op´erations normale
1 Demande de production de rapport
2 Affichage du rapport incluant la liste des comptes
Postcondition
1 Retour `a l’´etat initial
– diagramme de s´equence : produire rapport
– code
public class Banque {
// liste des clients de la banque
22
23. IFI-VNU Projet Genie Logiciel TP1
Fig. 12 – Diagramme de cas d’utilisation:produire rapport
private HashSet<Client> listeClient = new HashSet();
// liste des types de transaction de la banque
private HashSet<TypeTransaction> listeTypeTransaction = new HashSet();
public HashSet<Client> getClient(){
return this.listeClient;
}
/**
23
24. IFI-VNU Projet Genie Logiciel TP1
Fig. 13 – Diagramme de sequence :produire rapport
* Cette fonction retourn le rapport des transation de la banque
*/
public void printRapport() {
System.out.println("##############################################");
System.out.println("### Rapport des transaction de la banque ####");
System.out.println("##############################################");
for(Client clt:this.listeClient) {
System.out.println("Nom : "+clt.nomClient);
for(int index =0 ; index< clt.listeCompte.size(); index++) {
System.out.println("Compte NO: "+
clt.listeCompte.get(index).getNumCompte());
24
25. IFI-VNU Projet Genie Logiciel TP1
System.out.println("Sole :
"+clt.listeCompte.get(index).getSolde()+"Euros");
for(int intTrs = 0 ;
intTrs <
clt.listeCompte.get(index).getListeTransaction().size();
intTrs++) {
if(
clt.listeCompte.get(index).getListeTransaction().
get(intTrs).getNomTypeTransaction().equals("depot")) {
System.out.println("---- Dposer un montant de "+
clt.listeCompte.get(index).getListeTransaction().get(intTrs).
getMontantTransaction()+"Euros pour le compte "+
clt.listeCompte.
get(index).getNumCompte()+"au "+clt.listeCompte.get(index).
getListeTransaction().get(intTrs).getDateTransaction());
}else if(clt.listeCompte.get(index).getListeTransaction().
get(intTrs).getNomTypeTransaction().equals("retrait")) {
System.out.println("---- Retirer un montant de "+
clt.listeCompte.get(index).getListeTransaction().get(intTrs).
getMontantTransaction()+"Euros pour le compte "+
clt.listeCompte.get(index).getNumCompte()+"au "+
clt.listeCompte.get(index).
getListeTransaction().get(intTrs).getDateTransaction());
}
}
}
System.out.println("n-------------------n");
}
}
– test
– checking
Produire le rapport de tous les transactions effectu´ees dans la banque
1.4.6 Diagramme de classe
Le diagramme de classes montre la structure interne d’un syst`eme. Il permet de fournir une
repr´esentation abstraite des objets du syst`eme qui vont interagir ensemble pour r´ealiser les cas
d’utilisation. Le diagramme de classes permet de mod´eliser les classes du syst`eme et leurs relations
ind´ependamment d’un langage de programmation particulier.
25
26. IFI-VNU Projet Genie Logiciel TP1
Fig. 14 – Diagramme de classe
Conclusion
Ce projet nous a permis d’apprendre les bsaes de la modelisation Unify modeling Languange
(UML) qui est un language de mod´elisation. Il nous a egalement permis de comprendre les
concepts de la programmation orient´ee objet et de l´eappliquer avec le langage Java. Il nous aussi
pousser `a maˆıtriser l’utilisation de certains outils pour mener `a bien le projet.
2 Outils de d´eveloppement
– GanttProject
C’est un logiciel libre de gestion de projet, il permet la planification d’un projet `a travers la
r´ealisation d’un diagramme de Gantt. Ecrit en Java,il peut etre utiliser sur de nombreux OS tel
que Windows, Linux, MacOS. Ce projet a ´et´e lanc´e par un ´etudiant de l’universit´e de Marne La
Vall´ee en janvier 2003 et est maintenant propos´e sous licence libre (GNU GPL)
– Sharelatex
C’est un ´editeur LaTeX en ligne, collaboratif, en temps r´eel et compileur PDF. En comparaison
avec les autres ´editeurs LaTeX, ShareLaTeX est une application bas´ee sur un serveur web, qui
est donc accessible via un navigateur internet. Une version publique, et maintenue, est disponible
sur https://www.sharelatex.com
– EDI Eclipse
26
27. IFI-VNU Projet Genie Logiciel TP1
L’environnement de D´eveloppement Int´egr´e Eclipse est sous projet, du projet Eclipse qui est
d´eclin´e et organis´e en un ensemble de sous-projets de d´eveloppements logiciels, de la fondation
Eclipse visant `a d´evelopper un environnement de production de logiciels libre qui soit extensible,
universel et polyvalent, en s’appuyant principalement sur Java
– JRE : version 1.8
– StarUML
est un logiciel de mod´elisation UML, c´ed´e comme open source par son ´editeur, `a la fin de son
exploitation commerciale, sous une licence modifi´ee de GNU GPL
– FramaPad
est un service en ligne de traitement de texte (une sorte de Word tr`es simplifi´e), et de colla-
boratif (proche de Google Drive), mais reposant sur l’application libre EtherPad, reconnu dans
l’´education comme outil permettant la production `a plusieurs
– Github
C’est un service web d’h´ebergement et de gestion de d´eveloppement de logiciels, utilisant le
logiciel de gestion de versions Git
– Git
C’est un logiciel de gestion de versions d´ecentralis´e. C’est un logiciel libre cr´e´e par Linus Torvalds,
auteur du noyau Linux, et distribu´e selon les termes de la licence publique g´en´erale GNU version
2
3 Code source
/**
*
*/
package com.ckomsa.controller;
import java.util.ArrayList;
import com.ckomsa.main.Banque;
/**
* Classe permettant de grer les clients
* @author sonfack
*
*/
public class Client {
public static int indiceClient=0 ;
public String nomClient ;
private int idClient;
public ArrayList<Compte> listeCompte = new ArrayList<Compte>();
/**
27
28. IFI-VNU Projet Genie Logiciel TP1
* Constructeur de la classe Client n’ayant pas de compte dans la systme
* @param banque est l objet de la classe Banque
* @param nom est le nom du client a crer
* @param id represente l’identifiant du client
* le constructeur ajoute directement le client dans la liste de client
*/
public Client(Banque banque, String nom , int id) {
// TODO Auto-generated constructor stub
this.nomClient = nom.toUpperCase();
this.idClient = id ;
banque.setListeClient(this);
}
/**
* Constructeur de la classe Client n’ayant pas de compte dans la systme
* @param banque est l objet de la classe Banque
* @param nom est le nom du client a crer
* Le constructeur ajoute directement le client dans la liste de client
* Le constructeur cre automatique l’identifiant du client crer
*/
public Client(Banque banque, String nom) {
Client.indiceClient = Client.indiceClient +1;
this.nomClient = nom.toUpperCase();
this.idClient = Client.indiceClient ;
banque.setListeClient(this);
System.out.print("n---- Creer un nouveau compte pour "+this.nomClient+"
avec :n");
}
/**
* Cette methode permet de retourner l’identifiant d’un client
* @param client un objet de la classe Client
* @return idClient l’identifiant de l’objet pass
*/
public int getIdClient(Client client) {
return client.idClient;
}
/**
* Cette methode permet de retourner l’identifiant d’un client
* cette fonction est sans paramettre
* @return idClient l’identifiant de l’objet pass
*/
public int getIdClient() {
return this.idClient;
}
/**
28
29. IFI-VNU Projet Genie Logiciel TP1
* Cette fonction permet d’imprimer les comptes de tous les clients
*/
public void printCompteClient() {
int compte ;
if(this.listeCompte.size() >0) {
System.out.println("---- Le client : "+this.nomClient+" pour Id :
"+this.getIdClient()+" dispose de :"+this.listeCompte.size()
+" ----" );
for(int i = 0 ; i < this.listeCompte.size() ; i++) {
compte = i+1;
System.out.println("* compte "+compte+" pour numero de
compte: "+this.listeCompte.get(i).getNumCompte());
}
}else {
System.out.println("---- Aucun compte pour "+this.nomClient+ "
pour Id : "+this.getIdClient()+" ----");
}
}
/**
* Cette fonction returne un compte etant donn un numero de compte
* @param numCompte le numero dont on recherche le compte
* @return null si aucun compte n a le numero ou le compte
*/
public Compte getCompte(int numCompte) {
Compte compte = null ;
for(int i = 0 ; i < this.listeCompte.size(); i++) {
if(this.listeCompte.get(i).getNumCompte() == numCompte) {
compte = this.listeCompte.get(i);
}
}
return compte;
}
}
//////////////////////// compte ////////////////////////////
/**
*
*/
package com.ckomsa.controller;
import java.util.ArrayList;
import java.util.List;
/**
* @author sonfack
*
*/
29
30. IFI-VNU Projet Genie Logiciel TP1
public class Compte{
public static int indiceCompte = 0;
// liste des transactions du compte
ArrayList<Transaction> listeTransaction = new ArrayList<Transaction>();
//private Client client;
private int numCompte;
private double solde ;
public int tauxInteret;
/*
* Constructeur de la classe Compte qui permet de crer un compte sans transaction
*/
public Compte(Client client, int taux ) {
Compte.indiceCompte = Compte.indiceCompte + 1;
this.numCompte = Compte.indiceCompte ;
this.solde = 0;
this.tauxInteret = taux;
client.listeCompte.add(this);
System.out.println("tCompte = "+this.numCompte+" ; nom client =
"+client.nomClient+" identifiant = "+client.getIdClient(client)+" ;
montant = "+this.getSolde() +" et taux = "+this.tauxInteret+"%" );
}
public Compte(Client client) {
Compte.indiceCompte = Compte.indiceCompte + 1;
this.numCompte = Compte.indiceCompte ;
this.solde = 0;
this.tauxInteret = 0;
client.listeCompte.add(this);
System.out.println("tCompte = "+this.numCompte+" ; nom client =
"+client.nomClient+" identifiant = "+client.getIdClient(client)+" ;
montant = "+this.getSolde() +" et taux = "+this.tauxInteret+"%" );
}
public void printTransaction(Transaction transaction) {
if(transaction != null) {
if(transaction.getNomTypeTransaction().equals("depot")) {
System.out.println("---- Dpot un montant de
"+transaction.getMontantTransaction()+"Euros pour le
compte "+this.getNumCompte()+" au
"+transaction.getDateTransaction()+" ----");
}else if(transaction.getNomTypeTransaction().equals("retrait")) {
System.out.println("---- Retrait un montant de
"+transaction.getMontantTransaction()+"Euros pour le
compte "+this.getNumCompte()+" au
"+transaction.getDateTransaction()+" ----");
}
}else {
30
31. IFI-VNU Projet Genie Logiciel TP1
System.out.println("null");
}
}
public void printListeTransaction(String nomTypeTransaction) {
for (int i = 0; i < this.getListeTransaction().size(); i++) {
if(nomTypeTransaction.equals(this.getListeTransaction().get(i).getNomTypeTransaction(
{
if(nomTypeTransaction.equals("depot")) {
System.out.println("---- Dpot un montant de
"+this.getListeTransaction().get(i).getMontantTransaction()+"
pour le compte "+this.getNumCompte()+" au
"+this.getListeTransaction().get(i).getDateTransaction()+"
----");
}else if(nomTypeTransaction.equals("retrait")) {
System.out.println("---- Retrait un montant de
"+this.getListeTransaction().get(i).getMontantTransaction()+"
pour le compte "+this.getNumCompte()+" au
"+this.getListeTransaction().get(i).getDateTransaction()+"
----");
}
}
}
}
/**
* Cette fonction returne la liste des transaction d’un compte
*
*/
public ArrayList<Transaction> getListeTransaction() {
return this.listeTransaction ;
}
public void setListeTransaction(Transaction transaction) {
this.listeTransaction.add(transaction);
}
/**
* Cette methode calcul l’interet d’un solde
* @param taux
*/
public void setInteret() {
this.setSolde((this.getSolde()*this.getTaux())/100 + this.getSolde());
}
/**
* Cette fonction retourne le numro de compte
*/
31
32. IFI-VNU Projet Genie Logiciel TP1
public double getSolde() {
return this.solde;
}
/**
* Cette fonction retourne le taux d’interet d’un compte
*/
public int getTaux() {
return this.tauxInteret;
}
/**
*Cette fonction permet d’initialiser un numero de compte
*/
public void setNumCompte(int numcompte) {
this.numCompte = numcompte;
}
/**
* Cette fonction permet d’initialiser un solde
*/
public void setSolde(double solde) {
this.solde = solde;
}
/**
* Cette fonction retour
*/
public int getNumCompte() {
return this.numCompte;
}
/**
* Cette fonction permet d’ajouter une transaction a un compte
*
*/
public boolean setTransation(Transaction transaction) {
this.listeTransaction.add(transaction);
return true ;
}
}
//////////////////////////Transaction ////////////////////
/**
*
*/
package com.ckomsa.controller;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
32
33. IFI-VNU Projet Genie Logiciel TP1
import com.ckomsa.main.Banque;
/**
* @author sonfack
*
*/
public class Transaction {
private TypeTransaction typeTransaction ;
private Date dateTransation ;
private double montantTransaction ;
/**
* Cration d’une transaction avec un type de transaction et sans montant
* @param client
* @param compte
* @param type
* @param montant
*/
public Transaction(Client client, Compte compte, TypeTransaction type, double
montant) {
if(montant > 0) {
switch(type.getTypeTransaction()) {
case "retrait":{
if(compte.getSolde() < montant) {
System.out.println("Solde insufisant");
}else {
DateFormat dateFormat = new
SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
this.dateTransation = new Date();
// le montant doit etre positif
this.montantTransaction = montant;
this.typeTransaction = type;
// ajout de la transaction dans le compte
compte.getListeTransaction().add(this);
compte.setSolde(compte.getSolde() - montant);
System.out.println("Transaction OK");
compte.printTransaction(this);
}
break ;
}
case "depot" : {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd
HH:mm:ss");
this.dateTransation = new Date();
// le montant doit etre positif
this.montantTransaction = montant;
this.typeTransaction = type;
// ajout de la transaction dans le compte
compte.getListeTransaction().add(this);
compte.setSolde(compte.getSolde() + montant);
System.out.println("Transaction OK");
compte.printTransaction(this);
33
34. IFI-VNU Projet Genie Logiciel TP1
break;
}
}
}else {
System.out.println("Echec transation n---- Montant nul ou
negatif ----");
}
}
/**
* Cette methode permet de retouner le nom d’une transaction
* @return nom du type de transaction
*/
public String getNomTypeTransaction() {
String nomTypeTransaction ;
nomTypeTransaction = this.typeTransaction.getTypeTransaction();
return nomTypeTransaction;
}
/**
* Cette methode permet de retourner la date d’une transaction
* @return date d’une transaction
*/
public Date getDateTransaction() {
return this.dateTransation;
}
/**
* Cette fonction permet de retourner le montant d’une transaction
* @return montant de la transaction
*/
public double getMontantTransaction() {
return this.montantTransaction ;
}
}
///////////////////////TypeTransaction //////////////////
/**
* Cette classe permet de creer des types de transaction
*/
package com.ckomsa.controller;
import com.ckomsa.main.Banque;
/**
* @author sonfack
*
*/
public class TypeTransaction {
private String nomTypeTransaction ;
34
35. IFI-VNU Projet Genie Logiciel TP1
/**
* Constructeur de type de transaction
* NB: ne doit par crer une transation existante
* @param banque qui est la Banque
* @param type est le type de transaction
* Ce constructeur ajoute automatiquement le type
* de transaction dans la liste des transaction de la banque
*/
public TypeTransaction(Banque banque, String type) {
this.setTypeTransaction(type);
if(! banque.getTypeTransaction().contains(this)) {
banque.setListeTypeTransaction(this);
}
}
/**
* Cette methode permet d’affecter le nom du type de transaction
* @param type
*/
public void setTypeTransaction(String type) {
this.nomTypeTransaction = type.toLowerCase();
}
/**
* Cette methode permet de retourner le nom d’un type de transaction
* @return le nom du type de transaction
*/
public String getTypeTransaction() {
return this.nomTypeTransaction;
}
}
///////////////// Banque //////////////
/**
*
*/
package com.ckomsa.main;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import com.ckomsa.controller.Client;
import com.ckomsa.controller.Compte;
import com.ckomsa.controller.Transaction;
import com.ckomsa.controller.TypeTransaction;
import com.ckomsa.view.Menu;
35
36. IFI-VNU Projet Genie Logiciel TP1
/**
* @author sonfack
*
*/
public class Banque {
// liste des clients de la banque
private HashSet<Client> listeClient = new HashSet();
// liste des types de transaction de la banque
private HashSet<TypeTransaction> listeTypeTransaction = new HashSet();
public HashSet<Client> getClient(){
return this.listeClient;
}
/**
* Cette fonction retourne la liste des types transaction
*/
public HashSet<TypeTransaction> getTypeTransaction() {
return this.listeTypeTransaction;
}
public TypeTransaction getTypeTransaction(String nomTypeTransaction) {
TypeTransaction type = null;
for(TypeTransaction trs:this.listeTypeTransaction) {
if(trs.getTypeTransaction().equals(nomTypeTransaction)) {
type = trs;
}
}
return type;
}
/**
* recherche un client connaissant a partir de son identifiant
*/
public Client getClient(int idClient) {
Client client = null ;
for(Client clt:this.listeClient) {
if(clt.getIdClient() == idClient) {
client = clt;
}
}
return client;
}
/**
* @return the listeTypeTransaction
*/
public void setListeClient(Client client) {
int count = 0;
for(Client clt:this.listeClient) {
36
38. IFI-VNU Projet Genie Logiciel TP1
/**
* Cette fonction retourn le rapport des transation de la banque
*/
public void printRapport() {
System.out.println("##############################################");
System.out.println("### Rapport des transaction de la banque ####");
System.out.println("##############################################");
for(Client clt:this.listeClient) {
System.out.println("Nom : "+clt.nomClient);
for(int index =0 ; index< clt.listeCompte.size(); index++) {
System.out.println("Compte NO: "+
clt.listeCompte.get(index).getNumCompte());
System.out.println("Sole :
"+clt.listeCompte.get(index).getSolde()+"Euros");
for(int intTrs = 0 ;
intTrs <
clt.listeCompte.get(index).getListeTransaction().size();
intTrs++) {
if(
clt.listeCompte.get(index).getListeTransaction().
get(intTrs).getNomTypeTransaction().equals("depot"))
{
System.out.println("---- Dposer un montant
de "+
clt.listeCompte.get(index).getListeTransaction().get(intTrs).
getMontantTransaction()+"Euros pour le
compte "+ clt.listeCompte.
get(index).getNumCompte()+"au
"+clt.listeCompte.get(index).
getListeTransaction().get(intTrs).getDateTransaction());
}else
if(clt.listeCompte.get(index).getListeTransaction().
get(intTrs).getNomTypeTransaction().equals("retrait"))
{
System.out.println("---- Retirer un montant
de "+
clt.listeCompte.get(index).getListeTransaction().get(intTr
getMontantTransaction()+"Euros pour
le compte "+
clt.listeCompte.get(index).getNumCompte()+"au
"+clt.listeCompte.get(index).getListeTransaction().ge
}
}
}
System.out.println("n----------------------------------------n");
}
}
/**
*
38
39. IFI-VNU Projet Genie Logiciel TP1
*/
public void printListeTypeTransaction() {
for(TypeTransaction trs:this.listeTypeTransaction) {
System.out.println(trs.getTypeTransaction());
}
}
/**
* Constructeur de la classe banque
*/
public Banque() {
TypeTransaction typetransaction1 = new TypeTransaction(this, "depot");
TypeTransaction typetransaction2 = new TypeTransaction(this, "retrait");
}
/**
* @param args
*/
public static void main(String[] args) {
// TypeTransaction typeTransaction =
//System.out.println(BIDV.getTypeTransaction("depot").getTypeTransaction());
//BIDV.printListeClient();
//BIDV.getClient(1);
/*
* Client clt = new Client(BIDV, "serge0", 1);
Client clt1 = new Client(BIDV, "serge1", 1);
Client clt2 = new Client(BIDV, "serge2", 6);
Client clt3 = new Client(BIDV, "serge3", 5);
Client clt4 = new Client(BIDV, "serge4", 2);
Client clt5 = new Client(BIDV, "serge5", 3);
Client clt6 = new Client(BIDV, "serge6", 4);
Compte cpt = new Compte(clt, 122);
System.out.println("///////////////////////////");
*/
try {
Banque BIDV = new Banque();
boolean fin = true;
do {
Menu MenuBanque = Menu.getInstanceMenu(BIDV," ");
Scanner sc =new Scanner(System.in);
try {
System.out.print("nn*Choix : ");
int choix = sc.nextInt();
if(choix < 0) {
// choix negatif
System.out.println("*Reponse : ---- Votre
choix doit etre un entier positif ----");
39
40. IFI-VNU Projet Genie Logiciel TP1
}else if(choix > 0) {
switch(choix) {
case 1 : {
MenuBanque.menuConsulteSolde(BIDV);
break;
}
case 2 : {
MenuBanque.menuCreerCompte(BIDV);
break;
}
case 3 : {
MenuBanque.menuTransaction(BIDV);
break;
}
case 4 : {
MenuBanque.menuCalculateInteret(BIDV);
break;
}
case 5 : {
BIDV.printRapport();
break ;
}
case 6 : {
MenuBanque.menuRecherche(BIDV);
break;
}
default :{
MenuBanque.messageErreur();
}
}
//MenuBanque =
Menu.getInstanceMenu(BIDV, " ");
//choix = sc.nextInt();
}else if(choix == 0) {
fin = false;
}
}catch(InputMismatchException e) {
System.out.println("*Reponse : ---- Votre choix
doit etre un entier en 0 et 6, verifiez le menu
et entrez a nouveau ----");
}
}while(fin);
BIDV.printListeClient();
}catch(Error e) {
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$ Une erreur grave est survenue : " +
e+" $$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
}
40
41. IFI-VNU Projet Genie Logiciel TP1
System.out.println("Programme termine");
System.exit(0);
/*try {
while(choix != 0) {
}
BIDV.printListeClient();
System.out.println("Programme termine");
System.exit(0);
}catch(InputMismatchException e) {
System.out.println("---- Votre choix doit etre un entier ----");
}
* * TypeTransaction tr1 = new TypeTransaction(BIDV, "depot");
TypeTransaction tr2 = new TypeTransaction(BIDV, "retrait");
BIDV.printListeTypeTransaction();
System.out.println("/////////");
Client clt = new Client(BIDV, "serge", 1);
Compte cpt = new Compte(clt, 122);
Compte cpt2 = new Compte(clt, 12);
Transaction tr = new Transaction(clt, cpt, tr1, 300.0);
Transaction tr00 = new Transaction(clt, cpt, tr1, 600.0);
System.out.println("/////////////////");
System.out.println(tr.getDateTransaction().toString());
System.out.println(tr.getMontantTransaction());
System.out.println("/////////////////");
System.out.println(cpt.getSolde());
// cpt.setListeTransaction(tr);
System.out.println(cpt.getListeTransaction().size());
Client clt2 = new Client(BIDV, "landry", 3);
Client clt4 = new Client(BIDV, "landry", 3);
Client clt3 = new Client(BIDV, "sylvain", 23);
*/
}
}
Lien github: www.github.com/sonfack/simple_bank
41