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
- [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 <!-- Comment ça ? -->
- [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<vector<int>, int> avis(const RunProjet &)` : renvoie l'ordonnancement

View file

@ -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:

View file

@ -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:

View file

@ -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<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::vector<int> ordonnancement;
if (!payer()) {
return std::make_pair(ordonnancement, -1);
}
const std::vector<const Tache *> taches = projet.consult_tasks();
int duree_totale = 0;
for (const Tache *it : taches) {
duree_totale += it->get_duree_totale();
}
std::vector<int> ordonnancement;
for (const Tache *it : taches) {
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::vector<int> ordonnancement;
if (!payer()) {
return std::make_pair(ordonnancement, -1);
}
const std::vector<const Tache *> taches = projet.consult_tasks();
const int duree_totale = taches.front()->dureeParal();
std::vector<int> ordonnancement;
for (const Tache *it : taches) {
ordonnancement.push_back(it->unique_id);
}

View file

@ -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();
}

View file

@ -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;