La socit C fabrique des pices mtalliques ralises dans son atelier. La socit C est en relation
commerciale uniquement avec des clients rguliers. Les factures sont mensualises : toutes les
commandes dun client dans le mois sont factures la fin du mois.
A la rception dune commande, le secrtariat de la socit C dite un bon de fabrication quelle
transmet latelier (un double de ce bon de fabrication est envoy au client). Une fois la pice
fabrique, latelier complte le bon de fabrication et le transmet au secrtariat qui enregistre la date
de fin de fabrication et informe le client que sa pice est disponible latelier.
A la fin du mois, les factures sont dites. Une facture est dite pour chaque client ayant effectu
une commande dans le mois.
Si une facture nest pas paye dans le dlai de 10 jours ouvrables alors un courriel de relance est
envoy au client. Tant quil naura pas pay sa facture aucune de ses commandes ne sera accepte :
chaque fois quil effectuera une commande, un courriel de refus lui sera envoy.
Une facture paye est archive 15 ans et ensuite dtruite.
Hypothse : nous considrons que tous les paiements sont corrects : un client paye le total factur
ou il nenvoie pas de rglement.
Hors Contexte : lenregistrement de nouveau client est hors contexte.
UM L, C. Johnen
IUT de Bordeaux, V1
Le diagramme de classes
Facture
Commande
- numCmd : int
- dateCmd : Date
- descPiece : String
- totalCmd : float
- dateRealisation : Date = NULL
*
mesFactures
+ nouvelleCmd()
+ ARR_BonFabComplet()
+ getMontant()
+ getDateRealisatgion()
mesCommandes *
mesCommandes *
Factures
1
Client
- numClt : int
- nomClt : String
- adrClt : String
- etatClt : String
- numFact : int
- /totalFact : float
1..* - dateFact : Date
- dateRelance : Date = NULL
- datePaiement : Date = NULL
- delaiPaiement : int = 10
- delaiArchivage : int = 15
+ ddeFact ()
+ ARR_Paiement()
+ ARR_DateRelance()
+ ARR_FinArchivage()
+ getDatePaiement()
1
payeur
mesFactures
mesFacturesPayes
1
es
payeur
*
+ ARR_Cmd()
+ aPayer()
+ estDebiteur()
+ ARR_FinMois()
+ estAJour()
+ getNom()
La signature des mthodes ( en Java) :
ARR_Cmd (descPiece : String, prixCmd : float) : void
aPayer () : void
estDebiteur () : void
estAJour () : void
ARR_FinMois () : void
getNom() : String
nouvelleCmd (clt :Client, descPiece : String, prixCmd : float): void
ARR_BonFabComplet () : void
getMontant () : float
ddeFact (clt : Client, listCmd : ArrayList<Commande>) : void
ARR_Paiement (sommePayee : float) : void
ARR_DateRelance () : void
ARR_FinArchivage () : void
getDatePaiement() : Date
UM L, C. Johnen
IUT de Bordeaux, V1
<<actor>>
:HORLOGE
ENV_ddeTemporisation
:CLIENT
ENV_facture
ENV_relance
ENV_refusCmd
ENV_infoPiece
ENV_doubleBonFab
:ATELIER
ENV_bonFab
:ATELIER
:CLIENT
Enregistrer un paiement
Relancer un client
<<actor>>
:HORLOGE
UM L, C. Johnen
IUT de Bordeaux, V1
:Commande
:Client
:CLIENT
:ATELIER
ARR_Cmd
nouvelleCmd
ENV_bonFab
ENV_doubleBonFab
:Client
1.1. nouvelleCmd
1. ARR_Cmd
1.1.1. ENV_bonFab
:Commande
:ATELIER
1.1.2. ENV_doubleBonFab
:CLIENT
UM L, C. Johnen
IUT de Bordeaux, V1
:Client
:CLIENT
ARR_Cmd
ENV_refusCmd
1.1. ENV_refusCmd
:Commande
:ATELIER
:CLIENT
ARR_BonFabComplet
ENV_infoPiece
1. ARR_BonFabComplet
:Commande
:ATELIER
UM L, C. Johnen
1.1. ENV_infoPiece
:CLIENT
IUT de Bordeaux, V1
<<actor>>
:HORLOGE
:Client
:Facture
:CLIENT
ARR_FinMois
ddeFact
ENV_ddeTemporisation
ENV_facture
ENV_ddeTemporisation
(numFact, ARRDateRelance, 10 jours)
:Client
:Facture
1. ARR_FinMois
1.2. ENV_ddeTemporisation
1.1.1. ENV_facture
1.1.2. ENV_ddeTemporisation
<<actor>>
:HORLOGE
UM L, C. Johnen
:CLIENT
IUT de Bordeaux, V1
Le diagramme de squence Vrifier quun client na pas fait de commande durant le prcdent
mois :
<<actor>>
:HORLOGE
:Client
ARR_FinMois
ENV_ddeTemporisation
(numClt, arrFinMois, 1 mois)
Le diagramme de communication
prcdent mois :
1. ARR_FinMois
:Client
<<actor>>
:HORLOGE
1.1. ENV_ddeTemporisation
(numClt, arrFinMois, 1 mois)
:Facture
:Client
:CLIENT
ARR_DateRelance
estDebiteur
ENV_relance
:Facture
1.1. estDebiteur
:Client
1. ARR_DateRelance
1.2. ENV_relance
:CLIENT
UM L, C. Johnen
IUT de Bordeaux, V1
:Facture
<<actor>>
:HORLOGE
:CLIENT
ARR_Paiement
aPayer
ENV_ddeTemporisation
(numClt, arrFinArchivage, 15 ans)
1.1. aPayer
:Client
1. ARR_Paiement
:CLIENT
1.2. ENV_ddeTemporisation
(numClt, arrFinArchivage, 15 ans)
<<actor>>
:HORLOGE
Le diagramme de squence Enregistrer du paiement dun client dbiteur qui reste dbiteur malgr
ce paiement est identique au diagramme de squence Enregistrer un paiement dun client non
dbiteur .
De la mme manire, le diagramme de communication Enregistrer du paiement dun client
dbiteur qui reste dbiteur malgr ce paiement est identique au diagramme de communication
Enregistrer un paiement dun client non dbiteur .
UM L, C. Johnen
IUT de Bordeaux, V1
Le diagramme de squence Enregistrer du paiement dun client dbiteur qui suite ce paiement est
jour :
:Facture
:Client
:CLIENT
ARR_Paiement
<<actor>>
:HORLOGE
aPayer
estAJour
ENV_ddeTemporisation
(numClt, arrFinArchivage, 15 ans)
:Facture
:Client
1. ARR_Paiement
:CLIENT
1.2. ENV_ddeTemporisation
(numClt, arrFinArchivage, 15 ans)
1.1.1. estAJour
<<actor>>
:HORLOGE
<<actor>>
:HORLOGE
ARR_FinArchivage
aDetruire
X
Le diagramme de communication Dtruire une facture :
<<actor>>
:HORLOGE
UM L, C. Johnen
1. ARR_FinArchivage
:Facture
1.1 aDetruire
IUT de Bordeaux, V1
1. enregistre
nouvelleCmd
entry
entry
entry
entry
entry
entry
entry
/ calculer numCmd
/ crer inst classe Commande
/ maj numCmd, dateCmd, descPiece, totalCmd
: crer inst association cmd
/ prparer bon de fabrication
/ ^ENV_bonFab[ :ATELIER]
/ ^ENV_doubleBonFab [ :CLIENT]
ARR_BonFabComplet
2. ralise
entry / maj dateRealisation
entry / prparer information sur pice
entry / ^ENV_infoPiece [ :CLIENT]
UM L, C. Johnen
Commande ralise
dateRalisation NULL
10
IUT de Bordeaux, V1
1. enregistre
ddeFact
2. impaye
entry / maj dateRelance
entry / prparer relance envoyer
entry / ^ENV_relance [ :CLIENT]
entry:/^ estDebiteur [ payeur:client]
ARR_Paiement
3. paye
ARR_Paiement
aDetruire
UM L, C. Johnen
Facture paye
datePaiement NULL
11
Facture impaye
datePaiement = NULL
dateRelance NULL
IUT de Bordeaux, V1
1. crditeur
entry / maj etatClt
on ARR_Cmd / ^nouvelleCmd [-crer:Commande]
on ARR_FinMois / sil existe des commandes du client dont la
dateCmd est du mois courant alors
^ddeFact [-crer :Facture] ;
^ENV_ddeTemporisation [:HORLOGE]
estDebiteur
estAJour
2. dbiteur
entry / maj etatClt
on ARR_Cmd / prparer refus de commande envoyer ;
^ENV_refusCmd[ :CLIENT]
on ARR_FinMois/ sil existe des commandes du client dont la dateCmd est du mois
courant alors
^ddeFact [-crer :Facture] ;
^ENV_ddeTemporisation[ :Horloge]
on aPayer/ si toutes les factures du clients sont payes alors
^estAJour [lui-mme : Client]
UM L, C. Johnen
12
Client dbiteur
etatClt = "dbiteur"
IUT de Bordeaux, V1
}
public class Facture {
private int numFacture;
private static int nombreFactures = 0;
private float totalFacture;
private Calendar dateFacture, datePaiement=null, dateRelance=null;
private static int delaiRelance = 10;
private static int delaiArchivage = 15;
private Collection<Commande> mesCommandes;
private Client monPayeur;
public Calendar getDatePaiement() { return datePaiement;}
public float getMontant() { return totalFacture;}
public void arrPaiement(float somme) {
if (somme == totalFacture) {
datePaiement = Calendar.getInstance(); monPayeur.aPayer() ;
"+cmd); }
UM L, C. Johnen
13
IUT de Bordeaux, V1
String nom;
String prenom;
String adresse;
int etatClient; // = 1 si il est dbiteur
null;}
UM L, C. Johnen
14
IUT de Bordeaux, V1
UM L, C. Johnen
15
IUT de Bordeaux, V1
#ifndef CLIENT_H
#define CLIENT_H
#include <Date.h>
class Facture ;
class Commande ;
class Client {
private :
int _numClt;
string _nomClt, _adrClt, _etatClt;
vector<Facture> _mesFactures;
vector<Commande> _mesCommandes;
public :
Client(string nom, string adresse);
void arrCommande(string descPiece, float totalCmd) ;
void aPayer();
void estDebiteur();
void estAJour();
void arrFinMois();
};
#endif
UM L, C. Johnen
16
IUT de Bordeaux, V1
#ifndef COMMANDE_H
#define COMMANDE_H
#include <Client.h>
class Commande {
private :
int _numCmd;
string _descPiece;
float _totalCmd ;
Date _dateRealisation;
Date _dateCmd;
public :
Commande() ;
Commande(Client clt, string descPiece, float totalCmd) ;
void arrBonFabComplet(Date dateRealisation);
};
#endif
==================================================================
#ifndef FACTURE_H
#define FACTURE_H
#include <Commande.h>
class Facture {
private :
static const int _delaiPaiement = 10; // 10 jours
static const int _delaiArchivage = 5475; // 15 ans = 5475 jours
int _numFact;
float _totalfact;
Date _dateFact, _dateRelance, _datePaiement;
Client _payeur;
vector<Commande> _mesCommandes;
public :
Facture (Client clt, vector<Commande> mesCommandes);
void arrPaiement(float somme);
void arrDateRelance();
void arrFinArchivage();
};
#endif
#include <Facture.h>
int main() {
Client cl("Johnen", "IUT Bordeaux 1");
Commande c(cl, "pieceAColette", 13.3);
vector<Commande> listeCmd(10);
listeCmd[0] = c;
Facture f(cl, listeCmd);
return 0; }
UM L, C. Johnen
17
IUT de Bordeaux, V1