From e8ff85b383b0ee4788fded5a2bbaeaff268417a8 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sat, 28 Oct 2023 11:51:31 +0200 Subject: [PATCH] paye! --- TODO.md | 14 ++++++++++---- includes/Consultant.hpp | 2 +- includes/Expert.hpp | 2 +- includes/Gestionnaire.hpp | 13 ++++++++++++- src/Consultant.cpp | 6 +++++- src/Expert.cpp | 6 +++++- src/Gestionnaire.cpp | 39 +++++++++++++++++++++++++++++++++++---- src/main.cpp | 2 ++ 8 files changed, 71 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index c837ad9..2416ba3 100644 --- a/TODO.md +++ b/TODO.md @@ -8,7 +8,7 @@ TODO avant rendu : ## Notes - [x] Toute classe doit être surchargée avec `<<` -- [ ] Gestion satisfaisante des copies, affectation, destruction +- [x] Gestion satisfaisante des copies, affectation, destruction ### Projet @@ -59,14 +59,20 @@ TODO avant rendu : - [x] `run(sequence_taches)` : Exécute une liste de tâches dans l'ordre donnée - [x] Surcharge de `<<` -### Gestionnaire / Concepteur +### Concepteur + +L'utilisateur final en somme + +- [x] Interagis avec un `ProtoProjet` pour y mettre des tâches + +### Gestionnaire - [x] Étudie/Analyse des `RunProjet` -- [ ] Interagis avec un `ProtoProjet` pour y mettre des tâches + - [x] Recommande des ordonnancements pour la suite des exécutions à venir (ordre d'exécutions des tâches) - [x] Calcule la durée totale restante d'un projet -- [ ] Demande un salaire pour travailler +- [x] Demande un salaire pour travailler - Méthodes - [x] Surcharge de `<<` : Affiche une facturation - [x] `pair, int> avis(const RunProjet &)` : renvoie l'ordonnancement diff --git a/includes/Consultant.hpp b/includes/Consultant.hpp index ec30191..3f9c816 100644 --- a/includes/Consultant.hpp +++ b/includes/Consultant.hpp @@ -3,7 +3,7 @@ #include "Gestionnaire.hpp" -class Consultant final : Gestionnaire { +class Consultant final : public Gestionnaire { friend std::ostream &operator<<(std::ostream &, const Consultant &); public: diff --git a/includes/Expert.hpp b/includes/Expert.hpp index 36b12a2..2887e54 100644 --- a/includes/Expert.hpp +++ b/includes/Expert.hpp @@ -3,7 +3,7 @@ #include "Gestionnaire.hpp" -class Expert final : Gestionnaire { +class Expert final : public Gestionnaire { friend std::ostream &operator<<(std::ostream &, const Expert &); public: diff --git a/includes/Gestionnaire.hpp b/includes/Gestionnaire.hpp index 1189f25..51200a3 100644 --- a/includes/Gestionnaire.hpp +++ b/includes/Gestionnaire.hpp @@ -6,12 +6,19 @@ class Gestionnaire { friend std::ostream &operator<<(std::ostream &, const Gestionnaire &); + // Renvoie le reste à payer pour donner une expertise + int reste_a_payer() const; + protected: - int salaire; + int salaire_attendu; + int salaire_recu; // Auxiliaire pour simplifier l'affichage d'un projet std::ostream &print(std::ostream &) const; + // Vrai si Gestionnaire à été payé.e + bool payer() const; + public: Gestionnaire(); // constructor virtual ~Gestionnaire(); // destructor @@ -19,7 +26,11 @@ public: Gestionnaire(const Gestionnaire &); // copy constructor const Gestionnaire &operator=(const Gestionnaire &); // copy assignement + // Paye Gestionnaire, renvoie le montant restant à payer + int payer(const int argent); + // Renvoie l'ordonnancement et la durée totale restante + // Renvoie une liste vide et une durée totale -1 si pas payé.e virtual std::pair, int> avis(const RunProjet &) = 0; }; diff --git a/src/Consultant.cpp b/src/Consultant.cpp index 5050b39..e6ff950 100644 --- a/src/Consultant.cpp +++ b/src/Consultant.cpp @@ -19,13 +19,17 @@ std::ostream &operator<<(std::ostream &out, const Consultant &data) { } std::pair, int> Consultant::avis(const RunProjet &projet) { + std::vector ordonnancement; + if (!payer()) { + return std::make_pair(ordonnancement, -1); + } + const std::vector taches = projet.consult_tasks(); int duree_totale = 0; for (const Tache *it : taches) { duree_totale += it->get_duree_totale(); } - std::vector ordonnancement; for (const Tache *it : taches) { ordonnancement.push_back(it->unique_id); } diff --git a/src/Expert.cpp b/src/Expert.cpp index 81c3ccb..d5c7c5c 100644 --- a/src/Expert.cpp +++ b/src/Expert.cpp @@ -19,10 +19,14 @@ std::ostream &operator<<(std::ostream &out, const Expert &data) { } std::pair, int> Expert::avis(const RunProjet &projet) { + std::vector ordonnancement; + if (!payer()) { + return std::make_pair(ordonnancement, -1); + } + const std::vector taches = projet.consult_tasks(); const int duree_totale = taches.front()->dureeParal(); - std::vector ordonnancement; for (const Tache *it : taches) { ordonnancement.push_back(it->unique_id); } diff --git a/src/Gestionnaire.cpp b/src/Gestionnaire.cpp index 5ac8ea7..d88c68f 100644 --- a/src/Gestionnaire.cpp +++ b/src/Gestionnaire.cpp @@ -1,24 +1,28 @@ #include "../includes/Gestionnaire.hpp" Gestionnaire::Gestionnaire() { - salaire = rand() % 500 + 400; // Entre 400 et 899 + salaire_attendu = rand() % 500 + 400; // Entre 400 et 899 + salaire_recu = 0; } Gestionnaire::~Gestionnaire() {} -Gestionnaire::Gestionnaire(const Gestionnaire &src) : salaire(src.salaire) {} +Gestionnaire::Gestionnaire(const Gestionnaire &src) + : salaire_attendu(src.salaire_attendu), salaire_recu(0) {} const Gestionnaire &Gestionnaire::operator=(const Gestionnaire &src) { if (this == &src) { return *this; } - salaire = src.salaire; + salaire_attendu = src.salaire_attendu; + salaire_recu = src.salaire_recu; return *this; } std::ostream &Gestionnaire::print(std::ostream &out) const { - out << "La facture s'élève à " << salaire << "€"; + out << "La facture s'élève à " << salaire_attendu << "€. Il reste " + << reste_a_payer() << "€ à payer"; return out; } @@ -26,3 +30,30 @@ std::ostream &Gestionnaire::print(std::ostream &out) const { std::ostream &operator<<(std::ostream &out, const Gestionnaire &data) { return data.print(out); } + +int Gestionnaire::reste_a_payer() const { + return salaire_attendu - salaire_recu; +} + +bool Gestionnaire::payer() const { + bool return_val = salaire_recu >= salaire_attendu; + + if (!return_val) { + std::cerr << "Je n'ai pas été payé." << *this << ".\n"; + } + + return return_val; +} + +int Gestionnaire::payer(const int argent) { + if (reste_a_payer() <= 0) { + return 0; + } + + salaire_recu += argent; + if (reste_a_payer() <= 0) { + return 0; + } + + return reste_a_payer(); +} diff --git a/src/main.cpp b/src/main.cpp index 94ad871..98c4690 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,9 +19,11 @@ int main() { cout << pp << endl; Consultant c; + c.payer(1000); cout << c.avis(rp).second << endl; // dira 25 Expert e; + e.payer(1000); cout << e.avis(rp).second << endl; // dira 15 return EXIT_SUCCESS;