paye!
This commit is contained in:
parent
1ee2bc5603
commit
e8ff85b383
8 changed files with 71 additions and 13 deletions
14
TODO.md
14
TODO.md
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Reference in a new issue