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
|
||||
|
||||
- [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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Reference in a new issue