diff --git a/sources/ControladorObras.cpp b/sources/ControladorObras.cpp index 7449a1eff0c080c5b9fbcbb1ddbd59c3ae17bdfe..0cee3026758609c96279363f584dabe97336a7c8 100644 --- a/sources/ControladorObras.cpp +++ b/sources/ControladorObras.cpp @@ -13,19 +13,19 @@ ControladorObras::ControladorObras() {} void ControladorObras::mostrarDetalhes() const { for (const auto& obra : this->obras) { obra.mostrarDetalhes(); + cout << endl; } } // Methods -pair<int, int> ControladorObras::pesquisarObra(DescricaoObra descricao){ +pair<int, int> ControladorObras::pesquisarObra(DescricaoObra& descricao){ pair <int, int> p = make_pair(0, 0); auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - d.mostrarDetalhes(); - return descricao == d.getDescricaoObra(); + return descricao.getTitulo() == d.getTitulo(); }); - if (it_obra != this->obras.end()) { + if (it_obra == this->obras.end()) { cout << "> Erro: Obra não encontrada" << endl; } else { p = make_pair(it_obra->getTotal(), it_obra->getDisponiveis()); @@ -34,9 +34,9 @@ pair<int, int> ControladorObras::pesquisarObra(DescricaoObra descricao){ return p; } -void ControladorObras::adicionarObra(DescricaoObra descricao){ +void ControladorObras::adicionarObra(DescricaoObra& descricao){ auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao == d.getDescricaoObra(); + return descricao.getTitulo() == d.getTitulo(); }); if (it_obra == this->obras.end()) { @@ -47,13 +47,13 @@ void ControladorObras::adicionarObra(DescricaoObra descricao){ } } -bool ControladorObras::solicitarEmprestimo(DescricaoObra descricao){ +bool ControladorObras::solicitarEmprestimo(DescricaoObra& descricao){ return true; } -bool ControladorObras::devolverEmprestimo(DescricaoObra descricao){ +bool ControladorObras::devolverEmprestimo(DescricaoObra& descricao){ return true; } diff --git a/sources/ControladorObras.hpp b/sources/ControladorObras.hpp index 82958e76242fc100225426bd57c686e9895e1554..10a8fa0152e3e3dc2b85217b7fe98dc0184f17d4 100644 --- a/sources/ControladorObras.hpp +++ b/sources/ControladorObras.hpp @@ -19,10 +19,10 @@ class ControladorObras { void mostrarDetalhes() const; // Methods - pair<int, int> pesquisarObra(DescricaoObra descricao); - void adicionarObra(DescricaoObra descricao); - bool solicitarEmprestimo(DescricaoObra descricao); - bool devolverEmprestimo(DescricaoObra descricao); + pair<int, int> pesquisarObra(DescricaoObra& descricao); + void adicionarObra(DescricaoObra& descricao); + bool solicitarEmprestimo(DescricaoObra& descricao); + bool devolverEmprestimo(DescricaoObra& descricao); }; diff --git a/sources/ControladorObras.o b/sources/ControladorObras.o deleted file mode 100644 index 908ec4754d9bc2991fa28aca9bb1c84aded298be..0000000000000000000000000000000000000000 Binary files a/sources/ControladorObras.o and /dev/null differ diff --git a/sources/DescricaoObra.hpp b/sources/DescricaoObra.hpp index 738ece8156600221299dd1ddec7ca62c37085814..b290b38ad5b0d4c7f5ebf650f8cc884f5fc11bad 100644 --- a/sources/DescricaoObra.hpp +++ b/sources/DescricaoObra.hpp @@ -17,7 +17,7 @@ class DescricaoObra { // Contructor DescricaoObra(); DescricaoObra(const string& tipo, const string& titulo, int ano); - virtual void mostrarDetalhes() const; + virtual void mostrarDetalhes() const = 0; // Operators bool operator==(const DescricaoObra& other) const; diff --git a/sources/DescricaoObra.o b/sources/DescricaoObra.o deleted file mode 100644 index 8a180334ad540b9d1c4abe036f150cdf7b5ce5f2..0000000000000000000000000000000000000000 Binary files a/sources/DescricaoObra.o and /dev/null differ diff --git a/sources/Livro.o b/sources/Livro.o deleted file mode 100644 index e2a8e858996ace76a6dbe9851711ee800ca7d531..0000000000000000000000000000000000000000 Binary files a/sources/Livro.o and /dev/null differ diff --git a/sources/Obra.cpp b/sources/Obra.cpp index e42f919f2bf8ba3f1703126cb373e48f2e6fbe83..3a967a149a03199311dcd39f62551f884594b6be 100644 --- a/sources/Obra.cpp +++ b/sources/Obra.cpp @@ -6,7 +6,7 @@ #include "./Periodico.hpp" // Constructor -Obra::Obra(DescricaoObra descricao) +Obra::Obra(DescricaoObra& descricao) : descricao(descricao), disponiveis(1), total(1) {} void Obra::mostrarDetalhes() const { @@ -29,14 +29,8 @@ void Obra::adicionarObra(){ this->disponiveis++; } -DescricaoObra Obra::getDescricaoObra() { - if (this->descricao.getTipo() == "livro") { - Livro l = static_cast<Livro&>(this->descricao); - return Livro(l.getTitulo(), l.getAnoPublicacao(), l.getAutor(), l.getEditora()); - } else { - Periodico p = static_cast<Periodico&>(this->descricao); - return Periodico(p.getTitulo(), p.getAnoPublicacao(), p.getVolume(), p.getMes()); - } +string Obra::getTitulo() { + return this->descricao.getTitulo(); } int Obra::getDisponiveis(){ diff --git a/sources/Obra.hpp b/sources/Obra.hpp index f550c6aa3e07b7ca73da6cc8d10bb777adaeff4f..22971ccd019999a37d984ef80e63247c01d1e7cf 100644 --- a/sources/Obra.hpp +++ b/sources/Obra.hpp @@ -5,21 +5,21 @@ class Obra { private: - DescricaoObra descricao; + DescricaoObra& descricao; int disponiveis; int total; public: // Contructor Obra(); - Obra(DescricaoObra descricao); + Obra(DescricaoObra& descricao); virtual void mostrarDetalhes() const; // Methods bool emprestar(); void devolver(); void adicionarObra(); - DescricaoObra getDescricaoObra(); + string getTitulo(); int getDisponiveis(); int getTotal(); diff --git a/sources/Obra.o b/sources/Obra.o deleted file mode 100644 index 98833e4698d1967dcbd20e21b94a2e47ce8bb644..0000000000000000000000000000000000000000 Binary files a/sources/Obra.o and /dev/null differ diff --git a/sources/Periodico.o b/sources/Periodico.o deleted file mode 100644 index e8d98d8378267cd2fc90b85ef330841542419b1b..0000000000000000000000000000000000000000 Binary files a/sources/Periodico.o and /dev/null differ diff --git a/tdd/obras-test.cpp b/tdd/obras-test.cpp index 40cb268f8cf7692afdf5b700e1cbf20ddf29de79..b5feaf36fd92d32ef0fa4badf3fc7b718922d5be 100644 --- a/tdd/obras-test.cpp +++ b/tdd/obras-test.cpp @@ -1,11 +1,12 @@ #include <iostream> +#include <tuple> #include "doctest.h" #include "../sources/ControladorObras.hpp" #include "../sources/Livro.hpp" #include "../sources/Periodico.hpp" -TEST_CASE("Adicionar Periodico") { - cout << "==================> Adicionar Periodico <==================" << endl; +TEST_CASE("Adicionar Obras") { + cout << "==================> Adicionar Obras <==================" << endl; cout << "> Instanciando o Controlador de Obras" << endl; ControladorObras contObras; @@ -21,20 +22,35 @@ TEST_CASE("Adicionar Periodico") { cout << "==> Adicionando a obra" << endl; contObras.adicionarObra(p); contObras.mostrarDetalhes(); - cout << endl; auto [total, disponiveis] = contObras.pesquisarObra(p); CHECK (1 == total); CHECK (1 == disponiveis); - cout << "======================================================" << endl; - //adicionar um que ja existe, incrementar -} + cout << "==> Adicionando mais uma unidade da obra" << endl; + contObras.adicionarObra(p); + contObras.mostrarDetalhes(); + + tie(total, disponiveis) = contObras.pesquisarObra(p); + CHECK (2 == total); + CHECK (2 == disponiveis); + + cout << "=> Instanciando um Livro: " << endl; + Livro l("C++ Programming", 2022, "John Doe", "Tech Books"); + l.mostrarDetalhes(); + cout << endl; -//cadastrar periodico - // cout << "==> Instanciando um Livro: " << endl; - // Livro l("C++ Programming", 2022, "John Doe", "Tech Books"); - // l.mostrarDetalhes(); - // contObras.adicionarObra("livro", l); - // cout << endl; + CHECK ("C++ Programming" == l.getTitulo()); + CHECK (2022 == l.getAnoPublicacao()); + CHECK ("John Doe" == l.getAutor()); + CHECK ("Tech Books" == l.getEditora()); + cout << "==> Adicionando a obra" << endl; + contObras.adicionarObra(l); + contObras.mostrarDetalhes(); + + tie(total, disponiveis) = contObras.pesquisarObra(l); + CHECK (1 == total); + CHECK (1 == disponiveis); + cout << "======================================================" << endl; +}