Conversation with Merlin [email protected] · Tue Dec 26 2023

Ouvrir avec On écrira un programme qui gère le stock d'un supermarché. On suppose qu'on a déjà conçu la description du problème en terme des classes et des interfaces (voir annexe). Vous devez d'abord comprendre la hiérarchie des classes et des interfaces comme suit. Cela est nécessaire pour voir clairement les paramètres de retour des méthodes ainsi que la liste de leurs arguments. Voici une spécification du programme en terme des classes et des interfaces: I. On aura trois interfaces:

Vendable par kilogramme: l'interface pour les produits qui se vendent par kilogramme о Méthodes: vendre: cette méthode reçoit la quantité vendue du produit, retourne le revenu du supermarché et modifie le stock, sachant que: revenu = prix de vente * quantité Vendable par pièce: l'interface pour les produits qui se vendent par pièce о Méthodes: On vendre Succeptible d'être vendu en solde o Méthodes: D lancer le solde: cette méthode baisse le prix du produit par le pourcentage donné terminer le solde: cette méthode augmente le prix du produit par le pourcentage donné aura une classe générale des Articles: 0 6 Propriétés: prix d'achat: le prix pour lequel le supermarché achète le produit prix de vente: le prix pour lequel le supermarché vend le produit nom: le nom du produit IV. III. o fournisseur: le nom du fournisseur du produit Méthodes (autre que le constructeur): . calculateur du taux de rendement, sachant que: rendement (prix de vente - prix d'achat) / prix d'achat description des caractéristiques du produit sur l'écran (les prix, le nom. le fournisseur, rendement) Cette classe n'implémente aucune interface. On a deux classes dérivées des Articles: Chaque classe dérivée des articles respecte la règle suivante: au moment de la construction de l'objet, le stock et vide. La classe des articles élécroménagers • Propriétés suplémentaires: . nombre de pièces en stock O Méthodes supplémentaires (autre que le constructeur): remplir le stock: cette méthode reçoit la quantité achetée du produit, retourne les dépenses du supermarché et modifie le stock, sachant que: dépenses = prix d'achat * quantité description des caractéristiques du produit sur l'écran (les prix, le nom. le fournisseur; rendement; stock) Il faut implémenter les interfaces correspondantes à cette classe. La classe des primeurs o Propriété supplémentaires: " quantité en stock o Méthodes supplémentaires: remplir le stock description des caractéristiques du produit sur l'écran (les prix, le nom, le fournisseur; rendement; stock) Il faut implémenter les interfaces correspondantes à cette classe, sachant que les primeurs ne peuvent pas être vendu en solde. On a une classe pour les supermarchés: Au moment de la construction de l'objet, les dépenses et les revenus sont nuls. o Propriétés: . dépenses: le coût d'achat des produits revenus: les revenus après la vente des produits produits: deux vecteurs de deux articles (éléctroménagers et primeurs) o Méthodes (autre que le constructeur): D calculateur du taux de rendement, sachant que: . rendement= (Revenu - Dépense) / Dépense description de l'état du supermarché (les dépenses, les revenus; rendement) Questions: Coder les interfaces et les classes. Développer une classe exécutable > qui créée un supermarché, définit les articles à vendre, effectue le remplissage du stock et simule les achats.

Pour mener à bien votre demande, je vais fournir un exemple de code en Java. Nous allons d'abord écrire les interfaces, puis nous définirons la classe générale des Articles, suivie des classes dérivées pour les articles électroménagers et les primeurs. Nous terminerons par coder la classe du supermarché et une classe de démonstration qui simule la création d'un supermarché, le remplissage du stock et la gestion des ventes.

Commençons par écrire les interfaces :

interface VendableParKilogramme { double vendre(double quantite); } interface VendableParPiece { double vendre(int nombreDePieces); } interface SusceptibleDEtreVenduEnSolde { void lancerLeSolde(double pourcentage); void terminerLeSolde(double pourcentage); }

Maintenant, définissons la classe de base Article :

class Article { protected double prixAchat; protected double prixVente; protected String nom; protected String fournisseur; public Article(double prixAchat, double prixVente, String nom, String fournisseur) { this.prixAchat = prixAchat; this.prixVente = prixVente; this.nom = nom; this.fournisseur = fournisseur; } public double calculerTauxRendement() { return (prixVente - prixAchat) / prixAchat; } public void afficherCaracteristiques() { System.out.println("Nom: " + nom); System.out.println("Fournisseur: " + fournisseur); System.out.println("Prix d'achat: " + prixAchat); System.out.println("Prix de vente: " + prixVente); System.out.println("Rendement: " + calculerTauxRendement()); } }

Ensuite, nous définissons les classes dérivées :

class ArticleElectromenager extends Article implements VendableParPiece { private int nombrePiecesEnStock; public ArticleElectromenager(double prixAchat, double prixVente, String nom, String fournisseur) { super(prixAchat, prixVente, nom, fournisseur); this.nombrePiecesEnStock = 0; } public double vendre(int nombreDePieces) { if (nombreDePieces <= nombrePiecesEnStock) { nombrePiecesEnStock -= nombreDePieces; double revenu = prixVente * nombreDePieces; return revenu; } else { System.out.println("Stock insuffisant."); return 0; } } public void remplirLeStock(int quantite) { this.nombrePiecesEnStock += quantite; } @Override public void afficherCaracteristiques() { super.afficherCaracteristiques(); System.out.println("Stock: " + nombrePiecesEnStock); } } class Primeur extends Article implements VendableParKilogramme { private double quantiteEnStock; public Primeur(double prixAchat, double prixVente, String nom, String fournisseur) { super(prixAchat, prixVente, nom, fournisseur); this.quantiteEnStock = 0.0; } public double vendre(double quantite) { if (quantite <= quantiteEnStock) { quantiteEnStock -= quantite; double revenu = prixVente * quantite; return revenu; } else { System.out.println("Stock insuffisant."); return 0; } } public void remplirLeStock(double quantite) { this.quantiteEnStock += quantite; } @Override public void afficherCaracteristiques() { super.afficherCaracteristiques(); System.out.println("Stock: " + quantiteEnStock); } }

Puis, nous codons la classe Supermarche :

complter

D'accord, je vais maintenant continuer avec la classe Supermarche et ajouter une classe démo pour simuler l'exécution.

import java.util.ArrayList; import java.util.List; class Supermarche { private double depenses; private double revenus; private List<ArticleElectromenager> articlesElectromenagers; private List<Primeur> primeurs; public Supermarche() { this.depenses = 0; this.revenus = 0; this.articlesElectromenagers = new ArrayList<>(); this.primeurs = new ArrayList<>(); } public void ajouterArticleElectromenager(ArticleElectromenager article) { articlesElectromenagers.add(article); } public void ajouterPrimeur(Primeur primeur) { primeurs.add(primeur); } public double calculerTauxRendement() { if(depenses != 0) { return (revenus - depenses) / depenses; } else { return 0; } } public void acheterStockElectromenager(ArticleElectromenager article, int quantite) { double cout = article.prixAchat * quantite; this.depenses += cout; article.remplirLeStock(quantite); } public void acheterStockPrimeur(Primeur primeur, double quantite) { double cout = primeur.prixAchat * quantite; this.depenses += cout; primeur.remplirLeStock(quantite); } public void vendreArticleElectromenager(ArticleElectromenager article, int quantite) { double recette = article.vendre(quantite); this.revenus += recette; } public void vendrePrimeur(Primeur primeur, double quantite) { double recette = primeur.vendre(quantite); this.revenus += recette; } public void afficherEtat() { System.out.println("Dépenses totales: " + depenses); System.out.println("Revenus totaux: " + revenus); System.out.println("Taux de rendement: " + calculerTauxRendement()); } } public class Main { public static void main(String[] args) { Supermarche supermarche = new Supermarche(); // Création et ajout d'articles ArticleElectromenager tv = new ArticleElectromenager(200, 500, "Télévision", "Samsung"); Primeur pommes = new Primeur(0.5, 1.2, "Pommes", "Producteur local"); supermarche.ajouterArticleElectromenager(tv); supermarche.ajouterPrimeur(pommes); // Achats de stock supermarche.acheterStockElectromenager(tv, 30); supermarche.acheterStockPrimeur(pommes, 200); // Simulations de ventes supermarche.vendreArticleElectromenager(tv, 10); supermarche.vendrePrimeur(pommes, 150); // Affichage de l'état du supermarché supermarche.afficherEtat(); } }

Dans cette partie, la classe Supermarche gère les dépenses et les revenus, ajoute des articles électroménagers et des primeurs, gère les achats de stock et les ventes des articles, et affiche l'état financier du supermarché. La classe Main simule la création d'un supermarché, l'ajout d'articles, l'achat de stock et enfin, effectue des ventes.

Ce code donne un exemple simpliste et ne gère pas les cas d'erreurs ou les conditions plus complexes pouvant survenir dans un système de gestion de stock réel. Normalement, vous pourriez avoir une base de données et une interface utilisateur pour gérer ces aspects de manière plus dynamique et robuste.