Featured image of post O de France : Gestion Commerciale en JavaFX avec MVC

O de France : Gestion Commerciale en JavaFX avec MVC

Application JavaFX complète pour la gestion des clients, stocks et commandes d'une entreprise de vente d'eau.

O de France — Application de Gestion Commerciale en JavaFX


Présentation du projet

Dans le cadre de la SAE 2.01, O de France est une application de gestion commerciale destinée à une entreprise vendant de l’eau en bouteilles (plate et gazeuse).
Elle permet de gérer efficacement :

  • les clients (particuliers, entreprises, établissements publics),
  • les stocks d’eau dans différents entrepôts,
  • les commandes avec un système de remises et de bouteilles gratuites selon la fidélité client.

L’application utilise :

  • une architecture Modèle-Vue-Contrôleur (MVC) stricte
  • le langage Java 11+
  • le framework JavaFX
  • le langage de définition d’interface FXML

Objectifs du projet

  • Maîtriser la conception MVC en JavaFX
  • Implémenter une gestion complète clients, stocks et commandes
  • Appliquer la POO : héritage, polymorphisme, interfaces
  • Gérer les remises et fidélités de manière flexible
  • Proposer une interface utilisateur intuitive et réactive

Architecture du projet

1. Structure des packages

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
fr.iutlens.odefrance/  
├── controller/ # Contrôleurs JavaFX  
│   ├── ClientController.java  
│   ├── StockController.java  
│   ├── CommandeController.java  
│   ├── ClientFormController.java  
│   ├── StockFormController.java  
│   └── CommandeFormController.java  
├── model/ # Classes métier et données  
│   ├── Client.java  
│   ├── ClientParticulier.java  
│   ├── ClientEntreprise.java  
│   ├── ClientEtablissementPublic.java  
│   ├── StockEau.java  
│   ├── StockGlobal.java  
│   ├── Commande.java  
│   ├── LigneDeCommande.java  
│   ├── Entrepot.java  
│   └── Adresse.java  
└── resources/ # FXML, CSS, images  
├── fxml/  
└── css/

2. Modèle-Vue-Contrôleur (MVC)

  • Modèle : Logique métier et gestion des données
  • Vue : Interfaces graphiques définies en FXML + CSS
  • Contrôleur : Liaison entre la vue et le modèle, gestion des événements

Modules fonctionnels

Module Clients

Hiérarchie des classes

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public abstract class Client {
    protected int code;
    protected Date dateInscription;
    protected Adresse adresse;
    protected double pointsFidelite;

    public abstract String getTypeClient();
    public abstract void ajoutPointsFidelite(double montantAchat);
}

public class ClientParticulier extends Client {
    private String nom;
    private String prenom;
    private String email;
    private String telephone;

    @Override
    public String getTypeClient() { return "Particulier"; }
}

public class ClientEntreprise extends Client {
    private String nom;
    private String contact;
    private String siret;

    @Override
    public String getTypeClient() { return "Entreprise"; }
}

public class ClientEtablissementPublic extends Client {
    private String nom;
    private TypeEtablissement type;

    @Override
    public String getTypeClient() { return "Établissement public"; }
}

Fonctionnalités

  • Gestion complète CRUD (création, lecture, mise à jour, suppression)
  • Validation des données (email, téléphone, SIRET)
  • Calcul et attribution des points de fidélité
  • Recherche multicritère
  • Import/export des clients

Module Stocks

Modèle StockEau

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public class StockEau {
    private Categorie categorie; // EAU_PLATE ou EAU_GAZEUSE
    private Entrepot entrepot;
    private int quantite; // en caisses

    public void deltaQuantity(int delta) {
        setQuantite(this.quantite + delta);
    }

    public void setQuantite(int quantite) {
        if (quantite < 0) throw new IllegalArgumentException("Quantité négative");
        this.quantite = quantite;
    }
}

Gestion globale des stocks

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class StockGlobal {
    private final ObservableList<StockEau> stocks;

    public void addStockEau(StockEau stock) {
        // Ajoute ou met à jour si existe déjà
    }

    public void diminuerQuantite(StockEau stock, int quantite) {
        // Vérifie le stock avant déduction
    }
}

Interface utilisateur

  • Visualisation des stocks par entrepôt
  • Alertes pour stocks faibles
  • Modification par delta (+/-)
  • Historique des mouvements

Module Commandes

Modèle Commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public class Commande implements RemisesPossibles {
    private Client client;
    private Date dateCommande;
    private ObservableList<LigneDeCommande> lignes;

    public double montantTotal() {
        return lignes.stream().mapToDouble(LigneDeCommande::getMontantTotal).sum();
    }

    public double montantDeLaRemise() {
        // Calcul selon type client et points fidélité
    }

    public int nombreBouteillesGratuites() {
        // 1 gratuite par 12/60/120 bouteilles selon client
    }
}

Processus de commande

  • Sélection du client
  • Ajout de lignes (type d’eau + quantité)
  • Application automatique des remises et bouteilles gratuites
  • Validation et mise à jour des stocks

Points techniques remarquables

Polymorphisme

1
2
3
4
public void ajouterClient(Client client) {
    clients.add(client);
    client.ajoutPointsFidelite(montantAchat); // comportement propre selon type client
}

Validation spécifique

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
private boolean validerClient() {
    if (nomField.getText().trim().isEmpty()) {
        afficherErreur("Nom obligatoire");
        return false;
    }
    if (client instanceof ClientEntreprise && !validerSiret()) {
        return false;
    }
    return true;
}

Bindings JavaFX

1
2
<!-- Affichage conditionnel selon type client -->
<TextField fx:id="siretField" visible="\${typeClientCombo.value == 'Entreprise'}"/>

Design Patterns

  • Observer : mises à jour automatiques des vues
  • Factory : création des clients selon type
  • Strategy : calcul des remises

Captures d’écran

Gestion Clients
Interface de gestion des clients
Gestion Clients

Stocks
Visualisation des stocks avec indicateurs
Stocks

Formulaire Commande
Formulaire de commande avec calcul automatique
Formulaire Commande


Conclusion

Cette application démontre :

  • Une architecture MVC rigoureuse
  • Une bonne maîtrise de JavaFX et FXML
  • L’utilisation des concepts avancés de POO
  • Une interface intuitive et réactive
  • Une gestion robuste des données
Généré avec Hugo