diff --git a/include/animal/anfibio/anfibio_domestico.hpp b/include/animal/anfibio/anfibio_domestico.hpp index d16f65b..d0ccca5 100644 --- a/include/animal/anfibio/anfibio_domestico.hpp +++ b/include/animal/anfibio/anfibio_domestico.hpp @@ -18,7 +18,7 @@ using std::string; */ class AnfibioDomestico : public Anfibio, public Domestico { public: - AnfibioDomestico(string nome, string especie, Veterinario veterinario, + AnfibioDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool cauda, bool pata); ~AnfibioDomestico(); diff --git a/include/animal/anfibio/anfibio_exotico.hpp b/include/animal/anfibio/anfibio_exotico.hpp index a7b1ebe..0f30c43 100644 --- a/include/animal/anfibio/anfibio_exotico.hpp +++ b/include/animal/anfibio/anfibio_exotico.hpp @@ -19,7 +19,7 @@ using std::string; */ class AnfibioExotico : public Anfibio, public Exotico { public: - AnfibioExotico(string nome, string especie, Veterinario veterinario, + AnfibioExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool cauda, bool pata); ~AnfibioExotico(); diff --git a/include/animal/anfibio/anfibio_nativo.hpp b/include/animal/anfibio/anfibio_nativo.hpp index 910fe67..6bc7325 100644 --- a/include/animal/anfibio/anfibio_nativo.hpp +++ b/include/animal/anfibio/anfibio_nativo.hpp @@ -19,8 +19,8 @@ using std::string; */ class AnfibioNativo : public Anfibio, public Nativo { public: - AnfibioNativo(string nome, string especie, Veterinario veterinario, - Tratador tratador, bool perigoso, string regiao, bool cauda, bool pata); + AnfibioNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, + Tratador tratador, bool perigoso, string regiao, string licenca, bool cauda, bool pata); ~AnfibioNativo(); }; \ No newline at end of file diff --git a/include/animal/animal.hpp b/include/animal/animal.hpp index 218ac65..11f0c39 100644 --- a/include/animal/animal.hpp +++ b/include/animal/animal.hpp @@ -18,12 +18,13 @@ using std::string; class Animal { public: Animal() {}; - Animal(string nome, string especie, Veterinario veterinario, + Animal(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso); virtual ~Animal(); string getNome() const; string getEspecie() const; + string getAmeacadoPor() const; Veterinario getVeterinario() const; Tratador getTratador() const; bool getPerigoso() const; @@ -64,6 +65,7 @@ class Animal { protected: string nome; string especie; + string ameacadoPor; Veterinario veterinario; /** @brief A classe do animal pode indicar a necessidade de um Tratador com Uniforme específico */ Tratador tratador; diff --git a/include/animal/ave/ave_domestica.hpp b/include/animal/ave/ave_domestica.hpp index 13dd494..fd36347 100644 --- a/include/animal/ave/ave_domestica.hpp +++ b/include/animal/ave/ave_domestica.hpp @@ -19,7 +19,7 @@ using std::string; class AveDomestica : public Ave, public Domestico { public: AveDomestica() {}; - AveDomestica(string nome, string especie, Veterinario veterinario, + AveDomestica(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool voa); ~AveDomestica(); diff --git a/include/animal/ave/ave_exotica.hpp b/include/animal/ave/ave_exotica.hpp index b19184f..095e821 100644 --- a/include/animal/ave/ave_exotica.hpp +++ b/include/animal/ave/ave_exotica.hpp @@ -18,7 +18,7 @@ using std::string; */ class AveExotica : public Ave, public Exotico { public: - AveExotica(string nome, string especie, Veterinario veterinario, + AveExotica(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool voa); ~AveExotica(); diff --git a/include/animal/ave/ave_nativa.hpp b/include/animal/ave/ave_nativa.hpp index 5142458..fe3f16f 100644 --- a/include/animal/ave/ave_nativa.hpp +++ b/include/animal/ave/ave_nativa.hpp @@ -19,8 +19,8 @@ using std::string; */ class AveNativa : public Ave, public Nativo { public: - AveNativa(string nome, string especie, Veterinario veterinario, - Tratador tratador, bool perigoso, string regiao, bool voa); + AveNativa(string nome, string especie, string ameacadoPor, Veterinario veterinario, + Tratador tratador, bool perigoso, string regiao, string licenca, bool voa); ~AveNativa(); }; \ No newline at end of file diff --git a/include/animal/domestico.hpp b/include/animal/domestico.hpp index b34683c..0cc1a96 100644 --- a/include/animal/domestico.hpp +++ b/include/animal/domestico.hpp @@ -15,7 +15,7 @@ using std::string; class Domestico : public Animal { public: Domestico() {}; - Domestico(string nome, string especie, Veterinario veterinario, + Domestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado); virtual ~Domestico(); diff --git a/include/animal/exotico.hpp b/include/animal/exotico.hpp index 2d39a7e..3fcc78d 100644 --- a/include/animal/exotico.hpp +++ b/include/animal/exotico.hpp @@ -16,7 +16,7 @@ using std::string; class Exotico : public Animal { public: Exotico() {}; - Exotico(string nome, string especie, Veterinario veterinario, + Exotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local); virtual ~Exotico(); diff --git a/include/animal/mamifero/mamifero_domestico.hpp b/include/animal/mamifero/mamifero_domestico.hpp index fc861c7..54bd58d 100644 --- a/include/animal/mamifero/mamifero_domestico.hpp +++ b/include/animal/mamifero/mamifero_domestico.hpp @@ -18,7 +18,7 @@ using std::string; */ class MamiferoDomestico : public Mamifero, public Domestico { public: - MamiferoDomestico(string nome, string especie, Veterinario veterinario, + MamiferoDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool gestacao); ~MamiferoDomestico(); diff --git a/include/animal/mamifero/mamifero_exotico.hpp b/include/animal/mamifero/mamifero_exotico.hpp index bac4f8b..28c1693 100644 --- a/include/animal/mamifero/mamifero_exotico.hpp +++ b/include/animal/mamifero/mamifero_exotico.hpp @@ -18,7 +18,7 @@ using std::string; */ class MamiferoExotico : public Mamifero, public Exotico { public: - MamiferoExotico(string nome, string especie, Veterinario veterinario, + MamiferoExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool gestacao); ~MamiferoExotico(); diff --git a/include/animal/mamifero/mamifero_nativo.hpp b/include/animal/mamifero/mamifero_nativo.hpp index 918d140..72a2728 100644 --- a/include/animal/mamifero/mamifero_nativo.hpp +++ b/include/animal/mamifero/mamifero_nativo.hpp @@ -18,8 +18,8 @@ using std::string; */ class MamiferoNativo : public Mamifero, public Nativo { public: - MamiferoNativo(string nome, string especie, Veterinario veterinario, - Tratador tratador, bool perigoso, string regiao, bool gestacao); + MamiferoNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, + Tratador tratador, bool perigoso, string regiao, string licenca, bool gestacao); ~MamiferoNativo(); }; \ No newline at end of file diff --git a/include/animal/mapeador_animal.hpp b/include/animal/mapeador_animal.hpp index de76a06..4c7d64b 100644 --- a/include/animal/mapeador_animal.hpp +++ b/include/animal/mapeador_animal.hpp @@ -38,6 +38,7 @@ typedef struct DadosAnimal { //Animal string nome; string especie; + string ameacadoPor; Veterinario veterinario; Tratador tratador; bool perigoso; @@ -45,6 +46,7 @@ typedef struct DadosAnimal { //Categoria string regiao; string local; + string licenca; bool adestrado; //Classe diff --git a/include/animal/nativo.hpp b/include/animal/nativo.hpp index db6509a..efb1d9d 100644 --- a/include/animal/nativo.hpp +++ b/include/animal/nativo.hpp @@ -16,8 +16,8 @@ using std::string; class Nativo : public Animal { public: Nativo() {}; - Nativo(string nome, string especie, Veterinario veterinario, - Tratador tratador, bool perigoso, string regiao); + Nativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, + Tratador tratador, bool perigoso, string regiao, string licenca); virtual ~Nativo(); /** @@ -25,6 +25,12 @@ class Nativo : public Animal { */ string getRegiao() const; + /** + * @brief Um Nativo tem uma licença de transporte gerada pelo IBAMA. + */ + string getLicenca() const; + protected: string regiao; + string licenca; }; \ No newline at end of file diff --git a/include/animal/reptil/reptil_domestico.hpp b/include/animal/reptil/reptil_domestico.hpp index be18a48..990d73e 100644 --- a/include/animal/reptil/reptil_domestico.hpp +++ b/include/animal/reptil/reptil_domestico.hpp @@ -18,7 +18,7 @@ using std::string; */ class ReptilDomestico : public Reptil, public Domestico { public: - ReptilDomestico(string nome, string especie, Veterinario veterinario, + ReptilDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, Pele pele); ~ReptilDomestico(); diff --git a/include/animal/reptil/reptil_exotico.hpp b/include/animal/reptil/reptil_exotico.hpp index 9a28b33..4ad762f 100644 --- a/include/animal/reptil/reptil_exotico.hpp +++ b/include/animal/reptil/reptil_exotico.hpp @@ -18,7 +18,7 @@ using std::string; */ class ReptilExotico : public Reptil, public Exotico { public: - ReptilExotico(string nome, string especie, Veterinario veterinario, + ReptilExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, Pele pele); ~ReptilExotico(); diff --git a/include/animal/reptil/reptil_nativo.hpp b/include/animal/reptil/reptil_nativo.hpp index 40eece2..96e0a90 100644 --- a/include/animal/reptil/reptil_nativo.hpp +++ b/include/animal/reptil/reptil_nativo.hpp @@ -18,8 +18,8 @@ using std::string; */ class ReptilNativo : public Reptil, public Nativo { public: - ReptilNativo(string nome, string especie, Veterinario veterinario, - Tratador tratador, bool perigoso, string regiao, Pele pele); + ReptilNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, + Tratador tratador, bool perigoso, string regiao, string licenca, Pele pele); ~ReptilNativo(); }; \ No newline at end of file diff --git a/src/animal/anfibio/anfibio_domestico.cpp b/src/animal/anfibio/anfibio_domestico.cpp index 552e252..ea8d6e9 100644 --- a/src/animal/anfibio/anfibio_domestico.cpp +++ b/src/animal/anfibio/anfibio_domestico.cpp @@ -1,8 +1,8 @@ #include "anfibio_domestico.hpp" -AnfibioDomestico::AnfibioDomestico(string nome, string especie, Veterinario veterinario, Tratador tratador, +AnfibioDomestico::AnfibioDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool cauda, bool pata): - Domestico(nome, especie, veterinario, tratador, perigoso, adestrado), + Domestico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, adestrado), Anfibio(cauda, pata){} AnfibioDomestico::~AnfibioDomestico(){} \ No newline at end of file diff --git a/src/animal/anfibio/anfibio_exotico.cpp b/src/animal/anfibio/anfibio_exotico.cpp index 57c2c2c..b83b94b 100644 --- a/src/animal/anfibio/anfibio_exotico.cpp +++ b/src/animal/anfibio/anfibio_exotico.cpp @@ -1,8 +1,8 @@ #include "anfibio_exotico.hpp" -AnfibioExotico::AnfibioExotico(string nome, string especie, Veterinario veterinario, Tratador tratador, +AnfibioExotico::AnfibioExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool cauda, bool pata): - Exotico(nome, especie, veterinario, tratador, perigoso, local), + Exotico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, local), Anfibio(cauda, pata){} AnfibioExotico::~AnfibioExotico(){} \ No newline at end of file diff --git a/src/animal/anfibio/anfibio_nativo.cpp b/src/animal/anfibio/anfibio_nativo.cpp index 59afea0..10f047d 100644 --- a/src/animal/anfibio/anfibio_nativo.cpp +++ b/src/animal/anfibio/anfibio_nativo.cpp @@ -1,8 +1,8 @@ #include "anfibio_nativo.hpp" -AnfibioNativo::AnfibioNativo(string nome, string especie, Veterinario veterinario, Tratador tratador, - bool perigoso, string regiao, bool cauda, bool pata): - Nativo(nome, especie, veterinario, tratador, perigoso, regiao), +AnfibioNativo::AnfibioNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, + bool perigoso, string regiao, string licenca, bool cauda, bool pata): + Nativo(nome, especie, ameacadoPor, veterinario, tratador, perigoso, regiao, licenca), Anfibio(cauda, pata){} AnfibioNativo::~AnfibioNativo(){} \ No newline at end of file diff --git a/src/animal/animal.cpp b/src/animal/animal.cpp index 563ca50..88388c6 100644 --- a/src/animal/animal.cpp +++ b/src/animal/animal.cpp @@ -21,9 +21,9 @@ using std::right; using std::cout; using std::endl; -Animal::Animal(string nome, string especie, Veterinario veterinario, Tratador tratador, +Animal::Animal(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso): - nome(nome), especie(especie), veterinario(veterinario), tratador(tratador), + nome(nome), especie(especie), ameacadoPor(ameacadoPor), veterinario(veterinario), tratador(tratador), perigoso(perigoso){} Animal::~Animal(){} @@ -36,6 +36,10 @@ string Animal::getEspecie() const { return this->especie; } +string Animal::getAmeacadoPor() const { + return this->ameacadoPor; +} + Veterinario Animal::getVeterinario() const { return this->veterinario; } @@ -71,19 +75,19 @@ string Animal::getClasse(Animal* animal) const { } ostream& Animal::printOutDados(ostream& o, Animal* animal) const { - int tamanhoColuna = 16; + int tamanhoColuna = 20; int espacamento = 3; int tamanhoTruncado = tamanhoColuna - 3 - espacamento; - o << right - << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getNome().length() > tamanhoTruncado) ? (this->getNome().substr(0, tamanhoTruncado) + "...") : this->getNome()) + o << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getNome().length() > tamanhoTruncado) ? (this->getNome().substr(0, tamanhoTruncado) + "...") : this->getNome()) << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getEspecie().length() > tamanhoTruncado) ? (this->getEspecie().substr(0, tamanhoTruncado) + "...") : this->getEspecie()) - << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getVeterinario().getNome().length() > tamanhoTruncado) ? (this->getVeterinario().getNome().substr(0, tamanhoTruncado) + "...") : this->getVeterinario().getNome()) - << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getTratador().getNome().length() > tamanhoTruncado) ? (this->getTratador().getNome().substr(0, tamanhoTruncado) + "...") : this->getTratador().getNome()) + << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getAmeacadoPor().length() > tamanhoTruncado) ? (this->getAmeacadoPor().substr(0, tamanhoTruncado) + "...") : this->getAmeacadoPor()) + // << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getVeterinario().getNome().length() > tamanhoTruncado) ? (this->getVeterinario().getNome().substr(0, tamanhoTruncado) + "...") : this->getVeterinario().getNome()) + // << setfill(' ') << setw(tamanhoColuna + espacamento) << ((this->getTratador().getNome().length() > tamanhoTruncado) ? (this->getTratador().getNome().substr(0, tamanhoTruncado) + "...") : this->getTratador().getNome()) << setfill(' ') << setw(tamanhoColuna + espacamento) << (this->getPerigoso()? "Sim" : "Não") << setfill(' ') << setw(tamanhoColuna + espacamento) << this->getClassificacao(animal) << setfill(' ') << setw(tamanhoColuna + espacamento) << this->getClasse(animal) - << endl; + << right << endl; return o; } diff --git a/src/animal/ave/ave_domestica.cpp b/src/animal/ave/ave_domestica.cpp index c149289..d6de17b 100644 --- a/src/animal/ave/ave_domestica.cpp +++ b/src/animal/ave/ave_domestica.cpp @@ -1,8 +1,8 @@ #include "ave_domestica.hpp" -AveDomestica::AveDomestica(string nome, string especie, Veterinario veterinario, Tratador tratador, +AveDomestica::AveDomestica(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool voa): - Domestico(nome, especie, veterinario, tratador, perigoso, adestrado), + Domestico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, adestrado), Ave(voa){} AveDomestica::~AveDomestica(){} \ No newline at end of file diff --git a/src/animal/ave/ave_exotica.cpp b/src/animal/ave/ave_exotica.cpp index cb6768f..cc80c9c 100644 --- a/src/animal/ave/ave_exotica.cpp +++ b/src/animal/ave/ave_exotica.cpp @@ -1,8 +1,8 @@ #include "ave_exotica.hpp" -AveExotica::AveExotica(string nome, string especie, Veterinario veterinario, Tratador tratador, +AveExotica::AveExotica(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool voa): - Exotico(nome, especie, veterinario, tratador, perigoso, local), + Exotico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, local), Ave(voa){} AveExotica::~AveExotica(){} \ No newline at end of file diff --git a/src/animal/ave/ave_nativa.cpp b/src/animal/ave/ave_nativa.cpp index 48784a2..132e727 100644 --- a/src/animal/ave/ave_nativa.cpp +++ b/src/animal/ave/ave_nativa.cpp @@ -1,8 +1,8 @@ #include "ave_nativa.hpp" -AveNativa::AveNativa(string nome, string especie, Veterinario veterinario, Tratador tratador, - bool perigoso, string regiao, bool voa): - Nativo(nome, especie, veterinario, tratador, perigoso, regiao), +AveNativa::AveNativa(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, + bool perigoso, string regiao, string licenca, bool voa): + Nativo(nome, especie, ameacadoPor, veterinario, tratador, perigoso, regiao, licenca), Ave(voa){} AveNativa::~AveNativa(){} \ No newline at end of file diff --git a/src/animal/domestico.cpp b/src/animal/domestico.cpp index c66746c..c6b1887 100644 --- a/src/animal/domestico.cpp +++ b/src/animal/domestico.cpp @@ -1,8 +1,8 @@ #include "domestico.hpp" -Domestico::Domestico(string nome, string especie, Veterinario veterinario, Tratador tratador, +Domestico::Domestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado): - Animal(nome, especie, veterinario, tratador, perigoso), + Animal(nome, especie, ameacadoPor, veterinario, tratador, perigoso), adestrado(adestrado){} Domestico::~Domestico(){} diff --git a/src/animal/exotico.cpp b/src/animal/exotico.cpp index e169013..40a1aff 100644 --- a/src/animal/exotico.cpp +++ b/src/animal/exotico.cpp @@ -1,8 +1,8 @@ #include "exotico.hpp" -Exotico::Exotico(string nome, string especie, Veterinario veterinario, Tratador tratador, +Exotico::Exotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local): - Animal(nome, especie, veterinario, tratador, perigoso), + Animal(nome, especie, ameacadoPor, veterinario, tratador, perigoso), local(local){} Exotico::~Exotico(){} diff --git a/src/animal/mamifero/mamifero_domestico.cpp b/src/animal/mamifero/mamifero_domestico.cpp index dbfdbad..90c3113 100644 --- a/src/animal/mamifero/mamifero_domestico.cpp +++ b/src/animal/mamifero/mamifero_domestico.cpp @@ -1,8 +1,8 @@ #include "mamifero_domestico.hpp" -MamiferoDomestico::MamiferoDomestico(string nome, string especie, Veterinario veterinario, Tratador tratador, +MamiferoDomestico::MamiferoDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, bool gestacao): - Domestico(nome, especie, veterinario, tratador, perigoso, adestrado), + Domestico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, adestrado), Mamifero(gestacao){} MamiferoDomestico::~MamiferoDomestico(){} \ No newline at end of file diff --git a/src/animal/mamifero/mamifero_exotico.cpp b/src/animal/mamifero/mamifero_exotico.cpp index 46e8c84..4be92d9 100644 --- a/src/animal/mamifero/mamifero_exotico.cpp +++ b/src/animal/mamifero/mamifero_exotico.cpp @@ -1,8 +1,8 @@ #include "mamifero_exotico.hpp" -MamiferoExotico::MamiferoExotico(string nome, string especie, Veterinario veterinario, Tratador tratador, +MamiferoExotico::MamiferoExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, bool gestacao): - Exotico(nome, especie, veterinario, tratador, perigoso, local), + Exotico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, local), Mamifero(gestacao){} MamiferoExotico::~MamiferoExotico(){} \ No newline at end of file diff --git a/src/animal/mamifero/mamifero_nativo.cpp b/src/animal/mamifero/mamifero_nativo.cpp index 57b62af..14e4f46 100644 --- a/src/animal/mamifero/mamifero_nativo.cpp +++ b/src/animal/mamifero/mamifero_nativo.cpp @@ -1,8 +1,8 @@ #include "mamifero_nativo.hpp" -MamiferoNativo::MamiferoNativo(string nome, string especie, Veterinario veterinario, Tratador tratador, - bool perigoso, string regiao, bool gestacao): - Nativo(nome, especie, veterinario, tratador, perigoso, regiao), +MamiferoNativo::MamiferoNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, + bool perigoso, string regiao, string licenca, bool gestacao): + Nativo(nome, especie, ameacadoPor, veterinario, tratador, perigoso, regiao, licenca), Mamifero(gestacao){} MamiferoNativo::~MamiferoNativo(){} \ No newline at end of file diff --git a/src/animal/mapeador_animal.cpp b/src/animal/mapeador_animal.cpp index 0a616bb..6607733 100644 --- a/src/animal/mapeador_animal.cpp +++ b/src/animal/mapeador_animal.cpp @@ -31,65 +31,65 @@ FiltroAnimal::FiltroAnimal() { MapeadorAnimal::MapeadorAnimal() { aMap["aveD"] = [](DadosAnimal dados) { - return new AveDomestica(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new AveDomestica(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.adestrado, dados.voa); }; aMap["aveN"] = [](DadosAnimal dados) { - return new AveNativa(dados.nome, dados.especie, dados.veterinario, dados.tratador, - dados.perigoso, dados.regiao, dados.voa); + return new AveNativa(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, + dados.perigoso, dados.regiao, dados.licenca, dados.voa); }; aMap["aveE"] = [](DadosAnimal dados) { - return new AveExotica(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new AveExotica(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.local, dados.voa); }; aMap["anfD"] = [](DadosAnimal dados) { - return new AnfibioDomestico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new AnfibioDomestico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.adestrado, dados.cauda, dados.pata); }; aMap["anfN"] = [](DadosAnimal dados) { - return new AnfibioNativo(dados.nome, dados.especie, dados.veterinario, dados.tratador, - dados.perigoso, dados.regiao, dados.cauda, dados.pata); + return new AnfibioNativo(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, + dados.perigoso, dados.regiao, dados.licenca, dados.cauda, dados.pata); }; aMap["anfE"] = [](DadosAnimal dados) { - return new AnfibioExotico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new AnfibioExotico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.local, dados.cauda, dados.pata); }; aMap["repD"] = [](DadosAnimal dados) { - return new ReptilDomestico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new ReptilDomestico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.adestrado, dados.pele); }; aMap["repN"] = [](DadosAnimal dados) { - return new ReptilNativo(dados.nome, dados.especie, dados.veterinario, dados.tratador, - dados.perigoso, dados.regiao, dados.pele); + return new ReptilNativo(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, + dados.perigoso, dados.regiao, dados.licenca, dados.pele); }; aMap["repE"] = [](DadosAnimal dados) { - return new ReptilExotico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new ReptilExotico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.local, dados.pele); }; aMap["mamD"] = [](DadosAnimal dados) { - return new MamiferoDomestico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new MamiferoDomestico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.adestrado, dados.gestacao); }; aMap["mamN"] = [](DadosAnimal dados) { - return new MamiferoNativo(dados.nome, dados.especie, dados.veterinario, dados.tratador, - dados.perigoso, dados.regiao, dados.gestacao); + return new MamiferoNativo(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, + dados.perigoso, dados.regiao, dados.licenca, dados.gestacao); }; aMap["mamE"] = [](DadosAnimal dados) { - return new MamiferoExotico(dados.nome, dados.especie, dados.veterinario, dados.tratador, + return new MamiferoExotico(dados.nome, dados.especie, dados.ameacadoPor, dados.veterinario, dados.tratador, dados.perigoso, dados.local, dados.gestacao); }; } \ No newline at end of file diff --git a/src/animal/nativo.cpp b/src/animal/nativo.cpp index e21c7cd..c78b550 100644 --- a/src/animal/nativo.cpp +++ b/src/animal/nativo.cpp @@ -1,12 +1,16 @@ #include "nativo.hpp" -Nativo::Nativo(string nome, string especie, Veterinario veterinario, Tratador tratador, - bool perigoso, string regiao): - Animal(nome, especie, veterinario, tratador, perigoso), - regiao(regiao){} +Nativo::Nativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, + bool perigoso, string regiao, string licenca): + Animal(nome, especie, ameacadoPor, veterinario, tratador, perigoso), + regiao(regiao), licenca(licenca){} Nativo::~Nativo(){} +string Nativo::getLicenca() const { + return this->licenca; +} + string Nativo::getRegiao() const { return this->regiao; } \ No newline at end of file diff --git a/src/animal/reptil/reptil_domestico.cpp b/src/animal/reptil/reptil_domestico.cpp index b9eb7ce..38725ec 100644 --- a/src/animal/reptil/reptil_domestico.cpp +++ b/src/animal/reptil/reptil_domestico.cpp @@ -1,8 +1,8 @@ #include "reptil_domestico.hpp" -ReptilDomestico::ReptilDomestico(string nome, string especie, Veterinario veterinario, Tratador tratador, +ReptilDomestico::ReptilDomestico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, bool adestrado, Pele pele): - Domestico(nome, especie, veterinario, tratador, perigoso, adestrado), + Domestico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, adestrado), Reptil(pele){} ReptilDomestico::~ReptilDomestico(){} \ No newline at end of file diff --git a/src/animal/reptil/reptil_exotico.cpp b/src/animal/reptil/reptil_exotico.cpp index 9ad12a4..49de57b 100644 --- a/src/animal/reptil/reptil_exotico.cpp +++ b/src/animal/reptil/reptil_exotico.cpp @@ -1,8 +1,8 @@ #include "reptil_exotico.hpp" -ReptilExotico::ReptilExotico(string nome, string especie, Veterinario veterinario, Tratador tratador, +ReptilExotico::ReptilExotico(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, bool perigoso, string local, Pele pele): - Exotico(nome, especie, veterinario, tratador, perigoso, local), + Exotico(nome, especie, ameacadoPor, veterinario, tratador, perigoso, local), Reptil(pele){} ReptilExotico::~ReptilExotico(){} \ No newline at end of file diff --git a/src/animal/reptil/reptil_nativo.cpp b/src/animal/reptil/reptil_nativo.cpp index 3ec3569..6750967 100644 --- a/src/animal/reptil/reptil_nativo.cpp +++ b/src/animal/reptil/reptil_nativo.cpp @@ -1,8 +1,8 @@ #include "reptil_nativo.hpp" -ReptilNativo::ReptilNativo(string nome, string especie, Veterinario veterinario, Tratador tratador, - bool perigoso, string regiao, Pele pele): - Nativo(nome, especie, veterinario, tratador, perigoso, regiao), +ReptilNativo::ReptilNativo(string nome, string especie, string ameacadoPor, Veterinario veterinario, Tratador tratador, + bool perigoso, string regiao, string licenca, Pele pele): + Nativo(nome, especie, ameacadoPor, veterinario, tratador, perigoso, regiao, licenca), Reptil(pele){} ReptilNativo::~ReptilNativo(){} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 35ef189..e1a4ec9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -67,9 +67,11 @@ void menu() { } catch (const std::bad_function_call&) { cout << "Informe uma opção válida para realizar uma ação" << endl; - } - catch (std::exception& ex) { - cout << "Algo de errado ocorreu, tente novamente" << endl; + } catch(char const* msg) { + cout << "Erro: " << msg << endl; + cout << "Verifique os dados informados e tente novamente." << endl; + } catch(...) { + cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; } pausar(); diff --git a/src/petshop.cpp b/src/petshop.cpp index e662ef3..3f73e19 100644 --- a/src/petshop.cpp +++ b/src/petshop.cpp @@ -53,44 +53,36 @@ bool Petshop::adicionarAnimal(Animal* animalAdd) { void Petshop::criarVeterinario() { string nome, telefone, email, CRMV; - try { - cout << "Nome do funcionário: " << endl; - cin.ignore(); - getline(cin, nome); - if (nome.size() == 0) - throw "Funcionário sem nome!"; - - if(this->findVeterinario(nome) != nullptr) - throw "Funcionário já existe!"; - - cout << endl << "Telefone: " << endl; - getline(cin, telefone); - if (telefone.size() == 0) - throw "Funcionário sem telefone!"; - cout << endl << "E-mail pessoal: " << endl; - getline(cin, email); - if (email.size() == 0) - throw "Funcionário sem telefone!"; - cout << endl << "CRMV do veterinário: " << endl; - getline(cin, CRMV); - if (CRMV.size() == 0) - throw "Veterinário precisa de um CRMV!"; - - cout << endl; - - Veterinario *vet = new Veterinario(nome, telefone, email, CRMV); + cout << "Nome do funcionário: " << endl; + cin.ignore(); + getline(cin, nome); + if (nome.size() == 0) + throw "Funcionário sem nome!"; + + if(this->findVeterinario(nome) != nullptr) + throw "Funcionário já existe!"; + + cout << endl << "Telefone: " << endl; + getline(cin, telefone); + if (telefone.size() == 0) + throw "Funcionário sem telefone!"; + cout << endl << "E-mail pessoal: " << endl; + getline(cin, email); + if (email.size() == 0) + throw "Funcionário sem telefone!"; + cout << endl << "CRMV do veterinário: " << endl; + getline(cin, CRMV); + if (CRMV.size() == 0) + throw "Veterinário precisa de um CRMV!"; + + cout << endl; + + Veterinario *vet = new Veterinario(nome, telefone, email, CRMV); - if(this->adicionarVeterinario(vet)) { - cout << "Veterinário cadastrado com sucesso" << endl; - } else { - cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; - } - - } catch(char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; + if(this->adicionarVeterinario(vet)) { + cout << "Veterinário cadastrado com sucesso" << endl; + } else { + cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; } } @@ -98,235 +90,626 @@ void Petshop::criarTratador() { string nome, telefone, email, uniforme; Uniforme un; - try { - cout << "Nome do funcionário: " << endl; - cin.ignore(); - getline(cin, nome); - if (nome.size() == 0) - throw "Funcionário sem nome!"; - - if(this->findTratador(nome) != nullptr) - throw "Funcionário já existe!"; - - cout << endl << "Telefone: " << endl; - getline(cin, telefone); - if (telefone.size() == 0) - throw "Funcionário sem telefone!"; - cout << endl << "E-mail pessoal: " << endl; - getline(cin, email); - if (email.size() == 0) - throw "Funcionário sem telefone!"; - cout << endl << "Nível de segurança:" << endl; - cout << "V - Verde" << endl; - cout << "A - Azul" << endl; - cout << "M - verMelho" << endl; - getline(cin, uniforme); - if(uniforme == "V" || uniforme == "v") //toupper não cabe por necessariamente ser string, e não um char - un = Verde; - else if(uniforme == "A" || uniforme == "a") - un = Azul; - else if(uniforme == "M" || uniforme == "m") - un = Vermelho; - else - throw "Funcionário precisa de um nível de segurança válido."; - - cout << endl; - - Tratador *trt = new Tratador(nome, telefone, email, un); - - if(this->adicionarTratador(trt)) { - cout << "Tratador cadastrado com sucesso" << endl; - } else { - cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; - } - - } catch(char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; + cout << "Nome do funcionário: " << endl; + cin.ignore(); + getline(cin, nome); + if (nome.size() == 0) + throw "Funcionário sem nome!"; + + if(this->findTratador(nome) != nullptr) + throw "Funcionário já existe!"; + + cout << endl << "Telefone: " << endl; + getline(cin, telefone); + if (telefone.size() == 0) + throw "Funcionário sem telefone!"; + cout << endl << "E-mail pessoal: " << endl; + getline(cin, email); + if (email.size() == 0) + throw "Funcionário sem telefone!"; + cout << endl << "Nível de segurança:" << endl; + cout << "V - Verde" << endl; + cout << "A - Azul" << endl; + cout << "M - verMelho" << endl; + getline(cin, uniforme); + if(uniforme == "V" || uniforme == "v") //toupper não cabe por necessariamente ser string, e não um char + un = Verde; + else if(uniforme == "A" || uniforme == "a") + un = Azul; + else if(uniforme == "M" || uniforme == "m") + un = Vermelho; + else + throw "Funcionário precisa de um nível de segurança válido."; + + cout << endl; + + Tratador *trt = new Tratador(nome, telefone, email, un); + + if(this->adicionarTratador(trt)) { + cout << "Tratador cadastrado com sucesso" << endl; + } else { + cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; } } void Petshop::criarAnimal() { - string nome, especie, regiao, local, classe, categoria; + string nome, especie, regiao, local, classe, categoria, ameacadoPor, licenca; Veterinario vet; Tratador trata; bool perigo = false, voa = false, cauda = false, pata = false, gestacao = false, adestrado = false; char opcao; Pele pele; - - try { - if(this->veterinarios.size() < 1) - throw "Não há veterinários no sistema!"; - if(this->tratadores.size() < 1) - throw "Não há tratadores no sistema!"; + if(this->veterinarios.size() < 1) + throw "Não há veterinários no sistema!"; + + if(this->tratadores.size() < 1) + throw "Não há tratadores no sistema!"; + + cout << "Nome do animal: " << endl; + cin.ignore(); + getline(cin, nome); + if (nome.size() == 0) + throw "Animal sem nome!"; + cout << endl << "Espécie: " << endl; + getline(cin, especie); + if (especie.size() == 0) + throw "Animal sem espécie!"; + cout << endl << "Animal ameaçado de extinção por: (mantenha em branco para \"nada\")" << endl; + getline(cin, ameacadoPor); + if (ameacadoPor.size() == 0) + ameacadoPor = "Nada"; + this->listarVeterinarios(); + cout << endl << "Digite o número do veterinário responsável: " << endl; + int num; + cin >> num; + + if(num >= 0 && num < this->veterinarios.size()) + vet = *this->veterinarios[num]; + else + throw "Veterinário não existe!"; + cout << endl << "É perigoso ? \t S/N : "; + cin >> opcao; + if(toupper(opcao) == 'S') + perigo = true; + else + perigo = false; + cout << endl << "O animal pertence a que classe?..." << endl; + cout << "A - ave" << endl; + cout << "F - anfíbio" << endl; + cout << "R - réptil" << endl; + cout << "M - mamífero" << endl; + cin >> opcao; + + switch(toupper(opcao)) { + case 'A': + classe = "ave"; + break; + case 'F': + classe = "anf"; + break; + case 'R': + classe = "rep"; + break; + case 'M': + classe = "mam"; + break; + default: + throw "Animal deve ter uma classe!"; + break; + } + cout << endl; + if(classe == "ave") { + cout << "Voa? \t S/N : " << endl; + cin >> opcao; + if(toupper(opcao) == 'S') + voa = true; + else + voa = false; + } + else if(classe == "anf") { + cout << "Possui cauda? \t S/N : " << endl; + cin >> opcao; + if(toupper(opcao) == 'S') + cauda = true; + else + cauda = false; - cout << "Nome do animal: " << endl; + cout << "Possui pata? \t S/N : " << endl; + cin >> opcao; + if(toupper(opcao) == 'S') + pata = true; + else + pata = false; + } + else if(classe == "rep") { + cout << "Qual o tipo de pele? " << endl; + cout << "C - carapaça" << endl; + cout << "E - escama" << endl; + cout << "P - placa" << endl; + cin >> opcao; + if(toupper(opcao) == 'C') + pele = Carapaca; + else if(toupper(opcao) == 'E') + pele = Escama; + else if(toupper(opcao) == 'P') + pele = Placa; + else + throw "Réptil precisa de pele"; + } + else { + cout << "Possui gestação? \t S/N : " << endl; + cin >> opcao; + if(toupper(opcao) == 'S') + gestacao = true; + else + gestacao = false; + } + cout << endl << "A que categoria o animal pertence?..." << endl; + cout << "D - doméstico" << endl; + cout << "E - exótico" << endl; + cout << "N - nativo" << endl; + cin >> opcao; + + switch(toupper(opcao)) { + case 'D': + categoria = "D"; + break; + case 'E' : + categoria = "E"; + break; + case 'N' : + categoria = "N"; + break; + default: + throw "Animal deve ter uma categoria!"; + break; + } + cout << endl; + if(categoria == "D") { + cout << "É adestrado? \t S/N : " << endl; + cin >> opcao; + if(toupper(opcao) == 'S') + adestrado = true; + else + adestrado = false; + } + else if(categoria == "E") { + cout << "Habitat local: " << endl; cin.ignore(); + getline(cin, local); + if (local.size() == 0) + throw "Animal sem habitat!"; + } + else { + cout << "Região do animal: " << endl; + cin.ignore(); + getline(cin, regiao); + if (regiao.size() == 0) + throw "Animal sem região!"; + + cout << endl << "Licença de transporte do IBAMA:" << endl; + getline(cin, licenca); + if (licenca.size() == 0) + throw "Não é possível cadastrar animal silvestre nativo sem cadastro no IBAMA!"; + } + this->listarTratadores(); + cout << endl << "Digite o número do tratador responsável: " << endl; + num; + cin >> num; + + if(num >= 0 && num < this->tratadores.size()) { + trata = *this->tratadores[num]; + Uniforme un = trata.getUniforme(); + + if(perigo && un != Vermelho) + throw "Erro de permissão! O tratador necessita de ao menos um nível de segurança Vermelho."; + else if((classe == "rep" || classe == "mam") && (un == Verde)) + throw "Erro de permissão! O tratador necessita de ao menos um nível de segurança Azul."; + } else + throw "Tratador não existe!"; + + cout << endl; + + DadosAnimal dadosNovoAnimal = (DadosAnimal) { + .nome = nome, + .especie = especie, + .ameacadoPor = ameacadoPor, + .veterinario = vet, + .tratador = trata, + .perigoso = perigo, + .regiao = regiao, + .local = local, + .licenca = licenca, + .adestrado = adestrado, + .voa = voa, + .cauda = cauda, + .pata = pata, + .gestacao = gestacao, + .pele = pele, + }; + + string animalControle = classe + categoria; + + if(this->adicionarAnimal(mapa.aMap[animalControle](dadosNovoAnimal))) { + cout << "Animal adicionado ao cadastro." << endl; + } else { + cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; + } +} + +// Atualização +void Petshop::atualizarVeterinario() { + Veterinario* vet; + string nomeFind, nome, telefone, email, CRMV; + + // Encontrar funcionário + cout << "Qual o nome do funcionário a ser alterado?: " << endl; + cin.ignore(); + getline(cin, nome); + vet = this->findVeterinario(nome); + if (nome.size() == 0 || vet == nullptr) + throw "Funcionário não encontrado!"; + + cout << "Alterar nome do veterinário: (para não alterar mantenha em branco)" << endl; + getline(cin, nome); + if (nome.size() == 0) + nome = vet->getNome(); + + cout << "Alterar telefone do veterinário: (para não alterar mantenha em branco)" << endl; + getline(cin, telefone); + if (telefone.size() == 0) + telefone = vet->getTelefone(); + + cout << "Alterar e-mail pessoal do veterinário: (para não alterar mantenha em branco)" << endl; + getline(cin, email); + if (email.size() == 0) + email = vet->getEmail(); + + cout << "Alterar CRMV do veterinário: (para não alterar mantenha em branco)" << endl; + getline(cin, CRMV); + if (CRMV.size() == 0) + CRMV = vet->getCRMV(); + + this->excluirVeterinario(vet); + delete vet; + + if(this->adicionarVeterinario(new Veterinario(nome, telefone, email, CRMV))) { + cout << "Veterinário atualizado com sucesso" << endl; + } else { + cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; + } +} + +void Petshop::atualizarTratador() { + string nomeFind, nome, telefone, email, uniforme; + Uniforme un; + Tratador* trt; + + // Encontrar funcionário + cout << "Qual o nome do funcionário a ser alterado?: " << endl; + cin.ignore(); + getline(cin, nome); + trt = this->findTratador(nome); + if (nome.size() == 0 || trt == nullptr) + throw "Funcionário não encontrado!"; + + cout << "Alterar nome do tratador: (para não alterar mantenha em branco)" << endl; + getline(cin, nome); + if (nome.size() == 0) + nome = trt->getNome(); + + cout << "Alterar telefone do tratador: (para não alterar mantenha em branco)" << endl; + getline(cin, telefone); + if (telefone.size() == 0) + telefone = trt->getTelefone(); + + cout << "Alterar e-mail pessoal do tratador: (para não alterar mantenha em branco)" << endl; + getline(cin, email); + if (email.size() == 0) + email = trt->getEmail(); + + cout << "Alterar nível de segurança: (para não alterar mantenha em branco)" << endl; + cout << "V - Verde" << endl; + cout << "A - Azul" << endl; + cout << "M - verMelho" << endl; + getline(cin, uniforme); + bool alterou = true; + if(uniforme == "V" || uniforme == "v") //toupper não cabe por necessariamente ser string, e não um char + un = Verde; + else if(uniforme == "A" || uniforme == "a") + un = Azul; + else if(uniforme == "M" || uniforme == "m") + un = Vermelho; + else + trt->getUniforme(); + + // Checa se o novo uniforme do tratador não entra em conflito com algum animal + if(un != trt->getUniforme()) { + for(auto& animal : this->animais) { + if(animal->getTratador() == *trt) { + string classe = animal->getClasse(animal); + if(animal->getPerigoso() && un != Vermelho) + throw "O tratador possui animais que requerem segurança maior que a informada. Remova os animais de sua cautela e tente novamente."; + else if((classe == "Réptil" || classe == "Mamífero") && (un == Verde)) + throw "O tratador possui animais que requerem segurança maior que a informada. Remova os animais de sua cautela e tente novamente."; + } + } + } + + this->excluirTratador(trt); + delete trt; + + if(this->adicionarTratador(new Tratador(nome, telefone, email, un))) { + cout << "Tratador atualizado com sucesso" << endl; + } else { + cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; + } +} + +void Petshop::atualizarAnimal() { + bool perigoso = false, voa = false, cauda = false, pata = false, gestacao = false, adestrado = false; + string nome, especie, perigo, veterinario, tratador, categoria, classe, regiao, local, licenca, ameacadoPor; + Pele pele = Escama; + Veterinario vet; + Tratador trt; + + cout << "Qual o nome do animal ?" << endl; + cin.ignore(); + getline(cin, nome); + if (nome.size() == 0) + throw "Não é possível pesquisar animal sem nome!"; + + cout << "E sua espécie?" << endl; + getline(cin, especie); + if (especie.size() == 0) + throw "Não é possível pesquisar animal sem espécie!"; + + Animal* atualizar = findAnimal(nome, especie); + if(atualizar != nullptr) { + cout << "Animal encontrado!" << endl; + + cout << endl << "Alterar nome: (para não alterar mantenha em branco)" << endl; getline(cin, nome); if (nome.size() == 0) - throw "Animal sem nome!"; - cout << endl << "Espécie: " << endl; + nome = atualizar->getNome(); + + cout << endl << "Alterar especie: (para não alterar mantenha em branco)" << endl; getline(cin, especie); if (especie.size() == 0) - throw "Animal sem espécie!"; - cout << endl << "Digite o número do veterinário responsável: " << endl; - this->listarVeterinarios(); - int num; - cin >> num; - - if(num >= 0 && num < this->veterinarios.size()) - vet = *this->veterinarios[num]; + especie = atualizar->getEspecie(); + + cout << endl << "Alterar \"ameaçado de extinção por\": (para não alterar mantenha em branco)" << endl; + getline(cin, ameacadoPor); + if (ameacadoPor.size() == 0) + ameacadoPor = atualizar->getAmeacadoPor(); + + cout << endl << "Alterar periculosidade para S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, perigo); + if (perigo.size() == 0) + perigoso = atualizar->getPerigoso(); + else if(perigo == "S" || perigo == "s") //toupper não cabe por necessariamente ser string, e não um char + perigoso = true; else - throw "Veterinário não existe!"; - cout << endl << "É perigoso ? \t S/N : "; - cin >> opcao; - if(toupper(opcao) == 'S') - perigo = true; - else - perigo = false; - cout << endl << "O animal pertence a que classe?..." << endl; + perigoso = false; + + //Alterar classe + cout << endl << "Alterar classe: (para não alterar mantenha em branco)" << endl; cout << "A - ave" << endl; cout << "F - anfíbio" << endl; cout << "R - réptil" << endl; cout << "M - mamífero" << endl; - cin >> opcao; - - switch(toupper(opcao)) { - case 'A': - classe = "ave"; - break; - case 'F': - classe = "anf"; - break; - case 'R': - classe = "rep"; - break; - case 'M': - classe = "mam"; - break; - default: - throw "Animal deve ter uma classe!"; - break; + getline(cin, classe); + if(classe == "A" || classe == "a") //toupper não cabe por classe necessariamente ser string, e não um char + classe = "ave"; + else if(classe == "F" || classe == "f") + classe = "anf"; + else if(classe == "R" || classe == "r") + classe = "rep"; + else if(classe == "M" || classe == "m") + classe = "mam"; + else { + try { + string aux = atualizar->getClasse(atualizar); + if(aux == "Mamífero") + classe = "mam"; + else if (aux == "Ave") + classe = "ave"; + else if (aux == "Anfíbio") + classe = "anf"; + else + classe = "rep"; + } + catch(...) { + throw "Falha ao pegar a Classe, verifique se cadastrou o animal em questão corretamente."; + } } + cout << endl; + string verificarClasse; + //Alterar coisas específicas de cada classe: if(classe == "ave") { - cout << "Voa? \t S/N : " << endl; - cin >> opcao; - if(toupper(opcao) == 'S') + Ave* teste = dynamic_cast< Ave* >(atualizar); + cout << "Alterar status \"voa?\" S/N: (para não alterar mantenha em branco)" << endl; + + getline(cin, verificarClasse); + if (verificarClasse.size() == 0) + voa = teste->getVoa(); + else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char voa = true; else voa = false; - } - else if(classe == "anf") { - cout << "Possui cauda? \t S/N : " << endl; - cin >> opcao; - if(toupper(opcao) == 'S') + + } else if(classe == "anf") { + Anfibio* teste = dynamic_cast< Anfibio* >(atualizar); + cout << "Alterar status \"possui cauda?\" S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarClasse); + if (verificarClasse.size() == 0) + cauda = teste->getCauda(); + else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char cauda = true; else cauda = false; - - cout << "Possui pata? \t S/N : " << endl; - cin >> opcao; - if(toupper(opcao) == 'S') + + verificarClasse = ""; + cout << "Alterar status \"possui pata?\" S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarClasse); + if (verificarClasse.size() == 0) + pata = teste->getPata(); + else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char pata = true; else pata = false; - } - else if(classe == "rep") { - cout << "Qual o tipo de pele? " << endl; + + } else if(classe == "rep") { + Reptil* teste = dynamic_cast< Reptil* >(atualizar); + cout << "Alterar status \"pele?\" S/N: (para não alterar mantenha em branco)" << endl; cout << "C - carapaça" << endl; cout << "E - escama" << endl; cout << "P - placa" << endl; - cin >> opcao; - if(toupper(opcao) == 'C') + getline(cin, verificarClasse); + if(verificarClasse == "C" || verificarClasse == "c") //toupper não cabe por necessariamente ser string, e não um char pele = Carapaca; - else if(toupper(opcao) == 'E') + else if(verificarClasse == "E" || verificarClasse == "e") pele = Escama; - else if(toupper(opcao) == 'P') + else if(verificarClasse == "P" || verificarClasse == "p") pele = Placa; else - throw "Réptil precisa de pele"; - } - else { - cout << "Possui gestação? \t S/N : " << endl; - cin >> opcao; - if(toupper(opcao) == 'S') + pele = teste->getPele(); + + } else { + Mamifero* teste = dynamic_cast< Mamifero* >(atualizar); + cout << "Alterar status \"possui gestação?\" S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarClasse); + if (verificarClasse.size() == 0) + gestacao = teste->getGestacao(); + else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char gestacao = true; else gestacao = false; } - cout << endl << "A que categoria o animal pertence?..." << endl; + + //Alterar categoria + cout << endl << "Alterar categoria: (para não alterar mantenha em branco)" << endl; cout << "D - doméstico" << endl; cout << "E - exótico" << endl; cout << "N - nativo" << endl; - cin >> opcao; - - switch(toupper(opcao)) { - case 'D': - categoria = "D"; - break; - case 'E' : - categoria = "E"; - break; - case 'N' : - categoria = "N"; - break; - default: - throw "Animal deve ter uma categoria!"; - break; + getline(cin, categoria); + + if(categoria == "D" || categoria == "d") //validação, toupper não cabe por categoria necessariamente ser string, e não um char + categoria = "D"; + else if (categoria == "E" || categoria == "e") + categoria = "E"; + else if (categoria == "N" || categoria == "n") + categoria = "N"; + else { + try { + string aux = atualizar->getClassificacao(atualizar); + if(aux == "Silvestre Nativo") + categoria = "N"; + else if (aux == "Silvestre Exótico") + categoria = "E"; + else + categoria = "D"; + } + catch(...) { + throw "Falha ao pegar a Classificação, verifique se cadastrou o animal em questão corretamente."; + } } + cout << endl; + //Alterar coisas específicas de cada categoria: + string verificarCategoria; if(categoria == "D") { - cout << "É adestrado? \t S/N : " << endl; - cin >> opcao; - if(toupper(opcao) == 'S') + Domestico* teste = dynamic_cast< Domestico* >(atualizar); + cout << "Alterar status \"adestrado?\" S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarCategoria); + if (verificarCategoria.size() == 0) + adestrado = teste->getAdestrado(); + else if(verificarCategoria == "S" || verificarCategoria == "s") //toupper não cabe por necessariamente ser string, e não um char adestrado = true; else adestrado = false; + } else if(categoria == "E") { + Exotico* teste = dynamic_cast< Exotico* >(atualizar); + cout << "Alterar habitat local: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarCategoria); + if (verificarCategoria.size() == 0) + local = teste->getLocal(); + } else { + Nativo* teste = dynamic_cast< Nativo* >(atualizar); + cout << "Alterar região na qual habita: (para não alterar mantenha em branco)" << endl; + getline(cin, verificarCategoria); + if (verificarCategoria.size() == 0) + regiao = teste->getRegiao(); + + cout << endl << "Alterar licença de transporte do IBAMA: (para não alterar mantenha em branco)" << endl; + getline(cin, licenca); + if (licenca.size() == 0) + licenca = teste->getLicenca(); } - else if(categoria == "E") { - cout << "Habitat local: " << endl; - cin.ignore(); - getline(cin, local); - if (local.size() == 0) - throw "Animal sem habitat!"; + + //Alterar veterinário ou tratador: + cout << "Alterar veterinário S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, veterinario); + if (veterinario.size() == 0) + vet = atualizar->getVeterinario(); + else if(veterinario != "N" && veterinario != "n") + { + cout << "Digite o número do veterinario responsável: " << endl; + this->listarVeterinarios(); + cout << endl; + int num; + cin >> num; + + try { + vet = *this->veterinarios[num]; + } + catch(...) { + cout << "Não pudemos trocar o veterinário, cheque se o mesmo existe e tente novamente mais tarde." << endl; + vet = atualizar->getVeterinario(); + } } - else { - cout << "Região do animal: " << endl; - cin.ignore(); - getline(cin, regiao); - if (regiao.size() == 0) - throw "Animal sem região!"; + + cout << endl << "Alterar tratador S/N: (para não alterar mantenha em branco)" << endl; + getline(cin, tratador); + if (tratador.size() == 0 || tratador == "N" || tratador == "n") + trt = atualizar->getTratador(); + else + { + cout << "Digite o número do tratador responsável: " << endl; + this->listarTratadores(); + cout << endl; + int num; + cin >> num; + trt = *this->tratadores[num]; } - cout << endl << "Digite o número do tratador responsável: " << endl; - this->listarTratadores(); - num; - cin >> num; - - if(num >= 0 && num < this->tratadores.size()) { - trata = *this->tratadores[num]; - Uniforme un = trata.getUniforme(); + + try { + Uniforme un = trt.getUniforme(); - if(perigo && un != Vermelho) - throw "Erro de permissão! O tratador necessita de ao menos um nível de segurança Vermelho."; + if(perigoso && un != Vermelho) + throw "Erro de permissão!"; else if((classe == "rep" || classe == "mam") && (un == Verde)) - throw "Erro de permissão! O tratador necessita de ao menos um nível de segurança Azul."; - } else - throw "Tratador não existe!"; + throw "Erro de permissão!"; + } catch(...) { + cout << "Não pudemos trocar o tratador, cheque se o mesmo existe ou possui a permissão necessária e tente novamente mais tarde." << endl; + trt = atualizar->getTratador(); + } + + this->excluirAnimal(atualizar); + delete atualizar; - cout << endl; - DadosAnimal dadosNovoAnimal = (DadosAnimal) { .nome = nome, .especie = especie, + .ameacadoPor = ameacadoPor, .veterinario = vet, - .tratador = trata, - .perigoso = perigo, + .tratador = trt, + .perigoso = perigoso, .regiao = regiao, .local = local, + .licenca = licenca, .adestrado = adestrado, .voa = voa, .cauda = cauda, @@ -338,420 +721,12 @@ void Petshop::criarAnimal() { string animalControle = classe + categoria; if(this->adicionarAnimal(mapa.aMap[animalControle](dadosNovoAnimal))) { - cout << "Animal adicionado ao cadastro." << endl; - } else { - cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; - } - } - catch (char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } - catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente" << endl; - } -} - -// Atualização -void Petshop::atualizarVeterinario() { - Veterinario* vet; - string nomeFind, nome, telefone, email, CRMV; - - try { - // Encontrar funcionário - cout << "Qual o nome do funcionário a ser alterado?: " << endl; - cin.ignore(); - getline(cin, nome); - vet = this->findVeterinario(nome); - if (nome.size() == 0 || vet == nullptr) - throw "Funcionário não encontrado!"; - - cout << "Alterar nome do veterinário: (para não alterar mantenha em branco)" << endl; - getline(cin, nome); - if (nome.size() == 0) - nome = vet->getNome(); - - cout << "Alterar telefone do veterinário: (para não alterar mantenha em branco)" << endl; - getline(cin, telefone); - if (telefone.size() == 0) - telefone = vet->getTelefone(); - - cout << "Alterar e-mail pessoal do veterinário: (para não alterar mantenha em branco)" << endl; - getline(cin, email); - if (email.size() == 0) - email = vet->getEmail(); - - cout << "Alterar CRMV do veterinário: (para não alterar mantenha em branco)" << endl; - getline(cin, CRMV); - if (CRMV.size() == 0) - CRMV = vet->getCRMV(); - - this->excluirVeterinario(vet); - delete vet; - - if(this->adicionarVeterinario(new Veterinario(nome, telefone, email, CRMV))) { - cout << "Veterinário atualizado com sucesso" << endl; - } else { - cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; - } - - } catch(char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - } -} - -void Petshop::atualizarTratador() { - string nomeFind, nome, telefone, email, uniforme; - Uniforme un; - Tratador* trt; - - try { - // Encontrar funcionário - cout << "Qual o nome do funcionário a ser alterado?: " << endl; - cin.ignore(); - getline(cin, nome); - trt = this->findTratador(nome); - if (nome.size() == 0 || trt == nullptr) - throw "Funcionário não encontrado!"; - - cout << "Alterar nome do tratador: (para não alterar mantenha em branco)" << endl; - getline(cin, nome); - if (nome.size() == 0) - nome = trt->getNome(); - - cout << "Alterar telefone do tratador: (para não alterar mantenha em branco)" << endl; - getline(cin, telefone); - if (telefone.size() == 0) - telefone = trt->getTelefone(); - - cout << "Alterar e-mail pessoal do tratador: (para não alterar mantenha em branco)" << endl; - getline(cin, email); - if (email.size() == 0) - email = trt->getEmail(); - - cout << "Alterar nível de segurança: (para não alterar mantenha em branco)" << endl; - cout << "V - Verde" << endl; - cout << "A - Azul" << endl; - cout << "M - verMelho" << endl; - getline(cin, uniforme); - bool alterou = true; - if(uniforme == "V" || uniforme == "v") //toupper não cabe por necessariamente ser string, e não um char - un = Verde; - else if(uniforme == "A" || uniforme == "a") - un = Azul; - else if(uniforme == "M" || uniforme == "m") - un = Vermelho; - else - trt->getUniforme(); - - // Checa se o novo uniforme do tratador não entra em conflito com algum animal - if(un != trt->getUniforme()) { - for(auto& animal : this->animais) { - if(animal->getTratador() == *trt) { - string classe = animal->getClasse(animal); - if(animal->getPerigoso() && un != Vermelho) - throw "O tratador possui animais que requerem segurança maior que a informada. Remova os animais de sua cautela e tente novamente."; - else if((classe == "Réptil" || classe == "Mamífero") && (un == Verde)) - throw "O tratador possui animais que requerem segurança maior que a informada. Remova os animais de sua cautela e tente novamente."; - } - } - } - - this->excluirTratador(trt); - delete trt; - - if(this->adicionarTratador(new Tratador(nome, telefone, email, un))) { - cout << "Tratador atualizado com sucesso" << endl; + cout << "Animal atualizado com sucesso" << endl; } else { cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; } - - } catch(char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - } -} - -void Petshop::atualizarAnimal() { - bool perigoso = false, voa = false, cauda = false, pata = false, gestacao = false, adestrado = false; - string nome, especie, perigo, veterinario, tratador, categoria, classe, regiao, local; - Pele pele = Escama; - Veterinario vet; - Tratador trt; - - try { - cout << "Qual o nome do animal ?" << endl; - cin.ignore(); - getline(cin, nome); - if (nome.size() == 0) - throw "Não é possível pesquisar animal sem nome!"; - - cout << "E sua espécie?" << endl; - getline(cin, especie); - if (especie.size() == 0) - throw "Não é possível pesquisar animal sem espécie!"; - - Animal* atualizar = findAnimal(nome, especie); - if(atualizar != nullptr) { - cout << "Animal encontrado!" << endl; - - cout << "Alterar nome: (para não alterar mantenha em branco)" << endl; - getline(cin, nome); - if (nome.size() == 0) - nome = atualizar->getNome(); - - cout << "Alterar especie: (para não alterar mantenha em branco)" << endl; - getline(cin, especie); - if (especie.size() == 0) - especie = atualizar->getEspecie(); - - cout << "Alterar periculosidade para S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, perigo); - if (perigo.size() == 0) - perigoso = atualizar->getPerigoso(); - else if(perigo == "S" || perigo == "s") //toupper não cabe por necessariamente ser string, e não um char - perigoso = true; - else - perigoso = false; - - //Alterar classe - cout << "Alterar classe: (para não alterar mantenha em branco)" << endl; - cout << "A - ave" << endl; - cout << "F - anfíbio" << endl; - cout << "R - réptil" << endl; - cout << "M - mamífero" << endl; - getline(cin, classe); - if(classe == "A" || classe == "a") //toupper não cabe por classe necessariamente ser string, e não um char - classe = "ave"; - else if(classe == "F" || classe == "f") - classe = "anf"; - else if(classe == "R" || classe == "r") - classe = "rep"; - else if(classe == "M" || classe == "m") - classe = "mam"; - else { - try { - string aux = atualizar->getClasse(atualizar); - if(aux == "Mamífero") - classe = "mam"; - else if (aux == "Ave") - classe = "ave"; - else if (aux == "Anfíbio") - classe = "anf"; - else - classe = "rep"; - } - catch(...) { - throw "Falha ao pegar a Classe, verifique se cadastrou o animal em questão corretamente."; - } - } - - string verificarClasse; - //Alterar coisas específicas de cada classe: - if(classe == "ave") { - Ave* teste = dynamic_cast< Ave* >(atualizar); - cout << "Alterar status \"voa?\" S/N: (para não alterar mantenha em branco)" << endl; - - getline(cin, verificarClasse); - if (verificarClasse.size() == 0) - voa = teste->getVoa(); - else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char - voa = true; - else - voa = false; - - } else if(classe == "anf") { - Anfibio* teste = dynamic_cast< Anfibio* >(atualizar); - cout << "Alterar status \"possui cauda?\" S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarClasse); - if (verificarClasse.size() == 0) - cauda = teste->getCauda(); - else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char - cauda = true; - else - cauda = false; - - verificarClasse = ""; - cout << "Alterar status \"possui pata?\" S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarClasse); - if (verificarClasse.size() == 0) - pata = teste->getPata(); - else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char - pata = true; - else - pata = false; - - } else if(classe == "rep") { - Reptil* teste = dynamic_cast< Reptil* >(atualizar); - cout << "Alterar status \"pele?\" S/N: (para não alterar mantenha em branco)" << endl; - cout << "C - carapaça" << endl; - cout << "E - escama" << endl; - cout << "P - placa" << endl; - getline(cin, verificarClasse); - if(verificarClasse == "C" || verificarClasse == "c") //toupper não cabe por necessariamente ser string, e não um char - pele = Carapaca; - else if(verificarClasse == "E" || verificarClasse == "e") - pele = Escama; - else if(verificarClasse == "P" || verificarClasse == "p") - pele = Placa; - else - pele = teste->getPele(); - - } else { - Mamifero* teste = dynamic_cast< Mamifero* >(atualizar); - cout << "Alterar status \"possui gestação?\" S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarClasse); - if (verificarClasse.size() == 0) - gestacao = teste->getGestacao(); - else if(verificarClasse == "S" || verificarClasse == "s") //toupper não cabe por necessariamente ser string, e não um char - gestacao = true; - else - gestacao = false; - } - - //Alterar categoria - cout << "Alterar categoria: (para não alterar mantenha em branco)" << endl; - cout << "D - doméstico" << endl; - cout << "E - exótico" << endl; - cout << "N - nativo" << endl; - getline(cin, categoria); - - if(categoria == "D" || categoria == "d") //validação, toupper não cabe por categoria necessariamente ser string, e não um char - categoria = "D"; - else if (categoria == "E" || categoria == "e") - categoria = "E"; - else if (categoria == "N" || categoria == "n") - categoria = "N"; - else { - try { - string aux = atualizar->getClassificacao(atualizar); - if(aux == "Silvestre Nativo") - categoria = "N"; - else if (aux == "Silvestre Exótico") - categoria = "E"; - else - categoria = "D"; - } - catch(...) { - throw "Falha ao pegar a Classificação, verifique se cadastrou o animal em questão corretamente."; - } - } - - //Alterar coisas específicas de cada categoria: - string verificarCategoria; - if(categoria == "D") { - Domestico* teste = dynamic_cast< Domestico* >(atualizar); - cout << "Alterar status \"adestrado?\" S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarCategoria); - if (verificarCategoria.size() == 0) - adestrado = teste->getAdestrado(); - else if(verificarCategoria == "S" || verificarCategoria == "s") //toupper não cabe por necessariamente ser string, e não um char - adestrado = true; - else - adestrado = false; - } else if(categoria == "E") { - Exotico* teste = dynamic_cast< Exotico* >(atualizar); - cout << "Alterar habitat local: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarCategoria); - if (verificarCategoria.size() == 0) - local = teste->getLocal(); - } else { - Nativo* teste = dynamic_cast< Nativo* >(atualizar); - cout << "Alterar região na qual habita: (para não alterar mantenha em branco)" << endl; - getline(cin, verificarCategoria); - if (verificarCategoria.size() == 0) - regiao = teste->getRegiao(); - } - - //Alterar veterinário ou tratador: - cout << "Alterar veterinário S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, veterinario); - if (veterinario.size() == 0) - vet = atualizar->getVeterinario(); - else if(veterinario != "N" && veterinario != "n") - { - cout << "Digite o número do veterinario responsável: " << endl; - this->listarVeterinarios(); - cout << endl; - int num; - cin >> num; - - try { - vet = *this->veterinarios[num]; - } - catch(...) { - cout << "Não pudemos trocar o veterinário, cheque se o mesmo existe e tente novamente mais tarde." << endl; - vet = atualizar->getVeterinario(); - } - } - - cout << "Alterar tratador S/N: (para não alterar mantenha em branco)" << endl; - getline(cin, tratador); - if (tratador.size() == 0) - trt = atualizar->getTratador(); - else if(tratador != "N" && tratador != "n") - { - cout << "Digite o número do tratador responsável: " << endl; - this->listarTratadores(); - cout << endl; - int num; - cin >> num; - - try { - trt = *this->tratadores[num]; - Uniforme un = trt.getUniforme(); - - if(perigoso && un != Vermelho) - throw "Erro de permissão!"; - else if((classe == "rep" || classe == "mam") && (un == Verde)) - throw "Erro de permissão!"; - } catch(...) { - cout << "Não pudemos trocar o tratador, cheque se o mesmo existe ou possui a permissão necessária e tente novamente mais tarde." << endl; - trt = atualizar->getTratador(); - } - } - - this->excluirAnimal(atualizar); - delete atualizar; - - DadosAnimal dadosNovoAnimal = (DadosAnimal) { - .nome = nome, - .especie = especie, - .veterinario = vet, - .tratador = trt, - .perigoso = perigoso, - .regiao = regiao, - .local = local, - .adestrado = adestrado, - .voa = voa, - .cauda = cauda, - .pata = pata, - .gestacao = gestacao, - .pele = pele, - }; - - string animalControle = classe + categoria; - - if(this->adicionarAnimal(mapa.aMap[animalControle](dadosNovoAnimal))) { - cout << "Animal atualizado com sucesso" << endl; - } else { - cout << "Houve um erro na operação" << endl << "Cancelando..." << endl; - } - } else { - cout << "O animal não se apresenta nos registros" << endl; - } - } - catch (char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } - catch(std::exception& ex) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; + } else { + cout << "O animal não se apresenta nos registros" << endl; } } @@ -973,104 +948,96 @@ void Petshop::listarAnimais() { Veterinario vet; Tratador trt; - try { - if(this->animais.size() == 0) - throw "Não há animais para visualizar no sistema!"; - - cout << "Escolha seu filtro: " << endl << endl; - cout << "Enter - Todos (sem filtro)" << endl; - cout << "A - Apenas aves" << endl; - cout << "F - Apenas anfíbios" << endl; - cout << "R - Apenas répteis" << endl; - cout << "M - Apenas mamíferos" << endl; - cout << "D - Apenas animais domésticos" << endl; - cout << "E - Apenas silvestres exóticos" << endl; - cout << "N - Apenas silvestres nativos" << endl; - cout << "T - Filtrar por tratador" << endl; - cout << "V - Filtrar por veterinário" << endl; - - string filtro; - cin.ignore(); - getline(cin, filtro); - - if(filtro == "T" || filtro == "t") { - if(this->tratadores.size() == 0) - throw "Não há tratadores no sistema!"; + if(this->animais.size() == 0) + throw "Não há animais para visualizar no sistema!"; + + cout << "Escolha seu filtro: " << endl << endl; + cout << "Enter - Todos (sem filtro)" << endl; + cout << "A - Apenas aves" << endl; + cout << "F - Apenas anfíbios" << endl; + cout << "R - Apenas répteis" << endl; + cout << "M - Apenas mamíferos" << endl; + cout << "D - Apenas animais domésticos" << endl; + cout << "E - Apenas silvestres exóticos" << endl; + cout << "N - Apenas silvestres nativos" << endl; + cout << "T - Filtrar por tratador" << endl; + cout << "V - Filtrar por veterinário" << endl; + + string filtro; + cin.ignore(); + getline(cin, filtro); + + if(filtro == "T" || filtro == "t") { + if(this->tratadores.size() == 0) + throw "Não há tratadores no sistema!"; + + cout << "Digite o número do tratador responsável: " << endl; + this->listarTratadores(); + int num; + cin >> num; + + if(num >= 0 && num < this->tratadores.size()) + trt = *this->tratadores[num]; + else + throw "Tratador não existe!"; + } else if(filtro == "V" || filtro == "v") { + if(this->veterinarios.size() == 0) + throw "Não há veterinários no sistema!"; - cout << "Digite o número do tratador responsável: " << endl; - this->listarTratadores(); - int num; - cin >> num; - - if(num >= 0 && num < this->tratadores.size()) - trt = *this->tratadores[num]; - else - throw "Tratador não existe!"; - } else if(filtro == "V" || filtro == "v") { - if(this->veterinarios.size() == 0) - throw "Não há veterinários no sistema!"; + cout << "Digite o número do veterinário responsável: " << endl; + this->listarVeterinarios(); + int num; + cin >> num; + + if(num >= 0 && num < this->veterinarios.size()) + vet = *this->veterinarios[num]; + else + throw "Veterinário não existe!"; + } - cout << "Digite o número do veterinário responsável: " << endl; - this->listarVeterinarios(); - int num; - cin >> num; - - if(num >= 0 && num < this->veterinarios.size()) - vet = *this->veterinarios[num]; - else - throw "Veterinário não existe!"; - } + // Imprime cabeçalho: + cout << endl << "=-=-=-=-=- Lista de animais -=-=-=-=-=-" << endl; - // Imprime cabeçalho: - cout << endl << "=-=-=-=-=- Lista de animais -=-=-=-=-=-" << endl; - - cout << right - << setfill(' ') << setw(19) << "Nome" - << setfill(' ') << setw(19) << "Espécie" - << setfill(' ') << setw(19) << "Veterinário" - << setfill(' ') << setw(19) << "Tratador" - << setfill(' ') << setw(19) << "Perigoso" - << setfill(' ') << setw(19) << "Classificação" - << setfill(' ') << setw(19) << "Classe" - << endl; + cout << setfill(' ') << setw(23) << "Nome" + << setfill(' ') << setw(23) << "Espécie" + << setfill(' ') << setw(23) << "Ameaçado por:" + // << setfill(' ') << setw(23) << "Veterinário" + // << setfill(' ') << setw(23) << "Tratador" + << setfill(' ') << setw(23) << "Perigoso" + << setfill(' ') << setw(23) << "Classificação" + << setfill(' ') << setw(23) << "Classe" + << right<< endl; - for(auto& animal : this->animais) { - if(filtro == "a" || filtro == "A") { - if( Ave* checar_ave = dynamic_cast< Ave* >(animal)) - cout << *animal; - } else if(filtro == "f" || filtro == "F") { - if( Anfibio* checar_anfibio = dynamic_cast< Anfibio* >(animal)) - cout << *animal; - } else if(filtro == "r" || filtro == "R") { - if( Reptil* checar_ave = dynamic_cast< Reptil* >(animal)) - cout << *animal; - } else if(filtro == "m" || filtro == "M") { - if( Mamifero* checar_ave = dynamic_cast< Mamifero* >(animal)) - cout << *animal; - } else if(filtro == "d" || filtro == "D") { - if( Domestico* checar_domestico = dynamic_cast< Domestico* >(animal)) - cout << *animal; - } else if(filtro == "e" || filtro == "E") { - if( Exotico* checar_exotico = dynamic_cast< Exotico* >(animal)) - cout << *animal; - } else if(filtro == "n" || filtro == "N") { - if( Nativo* checar_nativo = dynamic_cast< Nativo* >(animal)) - cout << *animal; - } else if(filtro == "T" || filtro == "t") { - if(animal->getTratador() == trt) - cout << *animal; - } else if(filtro == "V" || filtro == "v") { - if(animal->getVeterinario() == vet) - cout << *animal; - } else + for(auto& animal : this->animais) { + if(filtro == "a" || filtro == "A") { + if( Ave* checar_ave = dynamic_cast< Ave* >(animal)) cout << *animal; - } - cout << endl << "-=-=-=-=-=-=-=-=- Fim -=-=-=-=-=-=-=-=-" << endl << endl; - - } catch(char const* msg) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; - cout << "Erro: " << msg << endl; - } catch(...) { - cout << "Algo de errado ocorreu, verifique os dados informados e tente novamente." << endl; + } else if(filtro == "f" || filtro == "F") { + if( Anfibio* checar_anfibio = dynamic_cast< Anfibio* >(animal)) + cout << *animal; + } else if(filtro == "r" || filtro == "R") { + if( Reptil* checar_ave = dynamic_cast< Reptil* >(animal)) + cout << *animal; + } else if(filtro == "m" || filtro == "M") { + if( Mamifero* checar_ave = dynamic_cast< Mamifero* >(animal)) + cout << *animal; + } else if(filtro == "d" || filtro == "D") { + if( Domestico* checar_domestico = dynamic_cast< Domestico* >(animal)) + cout << *animal; + } else if(filtro == "e" || filtro == "E") { + if( Exotico* checar_exotico = dynamic_cast< Exotico* >(animal)) + cout << *animal; + } else if(filtro == "n" || filtro == "N") { + if( Nativo* checar_nativo = dynamic_cast< Nativo* >(animal)) + cout << *animal; + } else if(filtro == "T" || filtro == "t") { + if(animal->getTratador() == trt) + cout << *animal; + } else if(filtro == "V" || filtro == "v") { + if(animal->getVeterinario() == vet) + cout << *animal; + } else + cout << *animal; } + cout << endl << "-=-=-=-=-=-=-=-=- Fim -=-=-=-=-=-=-=-=-" << endl << endl; } \ No newline at end of file