This commit is contained in:
Mylloon 2023-10-28 11:51:31 +02:00
parent 1ee2bc5603
commit e8ff85b383
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
8 changed files with 71 additions and 13 deletions

14
TODO.md
View file

@ -8,7 +8,7 @@ TODO avant rendu :
## Notes ## Notes
- [x] Toute classe doit être surchargée avec `<<` - [x] Toute classe doit être surchargée avec `<<`
- [ ] Gestion satisfaisante des copies, affectation, destruction - [x] Gestion satisfaisante des copies, affectation, destruction
### Projet ### 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] `run(sequence_taches)` : Exécute une liste de tâches dans l'ordre donnée
- [x] Surcharge de `<<` - [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` - [x] Étudie/Analyse des `RunProjet`
- [ ] Interagis avec un `ProtoProjet` pour y mettre des tâches <!-- Comment ça ? -->
- [x] Recommande des ordonnancements pour la suite des exécutions à venir - [x] Recommande des ordonnancements pour la suite des exécutions à venir
(ordre d'exécutions des tâches) (ordre d'exécutions des tâches)
- [x] Calcule la durée totale restante d'un projet - [x] Calcule la durée totale restante d'un projet
- [ ] Demande un salaire pour travailler - [x] Demande un salaire pour travailler
- Méthodes - Méthodes
- [x] Surcharge de `<<` : Affiche une facturation - [x] Surcharge de `<<` : Affiche une facturation
- [x] `pair<vector<int>, int> avis(const RunProjet &)` : renvoie l'ordonnancement - [x] `pair<vector<int>, int> avis(const RunProjet &)` : renvoie l'ordonnancement

View file

@ -3,7 +3,7 @@
#include "Gestionnaire.hpp" #include "Gestionnaire.hpp"
class Consultant final : Gestionnaire { class Consultant final : public Gestionnaire {
friend std::ostream &operator<<(std::ostream &, const Consultant &); friend std::ostream &operator<<(std::ostream &, const Consultant &);
public: public:

View file

@ -3,7 +3,7 @@
#include "Gestionnaire.hpp" #include "Gestionnaire.hpp"
class Expert final : Gestionnaire { class Expert final : public Gestionnaire {
friend std::ostream &operator<<(std::ostream &, const Expert &); friend std::ostream &operator<<(std::ostream &, const Expert &);
public: public:

View file

@ -6,12 +6,19 @@
class Gestionnaire { class Gestionnaire {
friend std::ostream &operator<<(std::ostream &, const Gestionnaire &); friend std::ostream &operator<<(std::ostream &, const Gestionnaire &);
// Renvoie le reste à payer pour donner une expertise
int reste_a_payer() const;
protected: protected:
int salaire; int salaire_attendu;
int salaire_recu;
// Auxiliaire pour simplifier l'affichage d'un projet // Auxiliaire pour simplifier l'affichage d'un projet
std::ostream &print(std::ostream &) const; std::ostream &print(std::ostream &) const;
// Vrai si Gestionnaire à été payé.e
bool payer() const;
public: public:
Gestionnaire(); // constructor Gestionnaire(); // constructor
virtual ~Gestionnaire(); // destructor virtual ~Gestionnaire(); // destructor
@ -19,7 +26,11 @@ public:
Gestionnaire(const Gestionnaire &); // copy constructor Gestionnaire(const Gestionnaire &); // copy constructor
const Gestionnaire &operator=(const Gestionnaire &); // copy assignement 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 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<std::vector<int>, int> avis(const RunProjet &) = 0; virtual std::pair<std::vector<int>, int> avis(const RunProjet &) = 0;
}; };

View file

@ -19,13 +19,17 @@ std::ostream &operator<<(std::ostream &out, const Consultant &data) {
} }
std::pair<std::vector<int>, int> Consultant::avis(const RunProjet &projet) { std::pair<std::vector<int>, int> Consultant::avis(const RunProjet &projet) {
std::vector<int> ordonnancement;
if (!payer()) {
return std::make_pair(ordonnancement, -1);
}
const std::vector<const Tache *> taches = projet.consult_tasks(); const std::vector<const Tache *> taches = projet.consult_tasks();
int duree_totale = 0; int duree_totale = 0;
for (const Tache *it : taches) { for (const Tache *it : taches) {
duree_totale += it->get_duree_totale(); duree_totale += it->get_duree_totale();
} }
std::vector<int> ordonnancement;
for (const Tache *it : taches) { for (const Tache *it : taches) {
ordonnancement.push_back(it->unique_id); ordonnancement.push_back(it->unique_id);
} }

View file

@ -19,10 +19,14 @@ std::ostream &operator<<(std::ostream &out, const Expert &data) {
} }
std::pair<std::vector<int>, int> Expert::avis(const RunProjet &projet) { std::pair<std::vector<int>, int> Expert::avis(const RunProjet &projet) {
std::vector<int> ordonnancement;
if (!payer()) {
return std::make_pair(ordonnancement, -1);
}
const std::vector<const Tache *> taches = projet.consult_tasks(); const std::vector<const Tache *> taches = projet.consult_tasks();
const int duree_totale = taches.front()->dureeParal(); const int duree_totale = taches.front()->dureeParal();
std::vector<int> ordonnancement;
for (const Tache *it : taches) { for (const Tache *it : taches) {
ordonnancement.push_back(it->unique_id); ordonnancement.push_back(it->unique_id);
} }

View file

@ -1,24 +1,28 @@
#include "../includes/Gestionnaire.hpp" #include "../includes/Gestionnaire.hpp"
Gestionnaire::Gestionnaire() { 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() {}
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) { const Gestionnaire &Gestionnaire::operator=(const Gestionnaire &src) {
if (this == &src) { if (this == &src) {
return *this; return *this;
} }
salaire = src.salaire; salaire_attendu = src.salaire_attendu;
salaire_recu = src.salaire_recu;
return *this; return *this;
} }
std::ostream &Gestionnaire::print(std::ostream &out) const { 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; return out;
} }
@ -26,3 +30,30 @@ std::ostream &Gestionnaire::print(std::ostream &out) const {
std::ostream &operator<<(std::ostream &out, const Gestionnaire &data) { std::ostream &operator<<(std::ostream &out, const Gestionnaire &data) {
return data.print(out); 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();
}

View file

@ -19,9 +19,11 @@ int main() {
cout << pp << endl; cout << pp << endl;
Consultant c; Consultant c;
c.payer(1000);
cout << c.avis(rp).second << endl; // dira 25 cout << c.avis(rp).second << endl; // dira 25
Expert e; Expert e;
e.payer(1000);
cout << e.avis(rp).second << endl; // dira 15 cout << e.avis(rp).second << endl; // dira 15
return EXIT_SUCCESS; return EXIT_SUCCESS;