Skip to content
Snippets Groups Projects
Commit 1e488d88 authored by Nico's avatar Nico
Browse files

Altera o vetor de obras para utilizar shared_ptr

parent c77d4626
No related branches found
No related tags found
No related merge requests found
No preview for this file type
#include <iostream> #include <iostream>
#include <tuple> #include <tuple>
#include <chrono> #include <chrono>
#include <memory>
#include "doctest.h" #include "doctest.h"
#include "ControladorObras.hpp" #include "ControladorObras.hpp"
#include "ControladorUsuarios.hpp" #include "ControladorUsuarios.hpp"
...@@ -45,18 +46,18 @@ TEST_CASE("Biblioteca") { ...@@ -45,18 +46,18 @@ TEST_CASE("Biblioteca") {
CHECK (3 == p.getMes()); CHECK (3 == p.getMes());
cout << "==> Adicionando a obra" << endl; cout << "==> Adicionando a obra" << endl;
contObras.adicionarObra(p); contObras.adicionarObra(make_shared<Periodico>(p));
contObras.mostrarDetalhes(); contObras.mostrarDetalhes();
auto [total, disponiveis] = contObras.pesquisarObra(p); auto [total, disponiveis] = contObras.pesquisarObra(make_shared<Periodico>(p));
CHECK (1 == total); CHECK (1 == total);
CHECK (1 == disponiveis); CHECK (1 == disponiveis);
cout << "==> Adicionando mais uma unidade da obra" << endl; cout << "==> Adicionando mais uma unidade da obra" << endl;
contObras.adicionarObra(p); contObras.adicionarObra(make_shared<Periodico>(p));
contObras.mostrarDetalhes(); contObras.mostrarDetalhes();
tie(total, disponiveis) = contObras.pesquisarObra(p); tie(total, disponiveis) = contObras.pesquisarObra(make_shared<Periodico>(p));
CHECK (2 == total); CHECK (2 == total);
CHECK (2 == disponiveis); CHECK (2 == disponiveis);
...@@ -71,10 +72,10 @@ TEST_CASE("Biblioteca") { ...@@ -71,10 +72,10 @@ TEST_CASE("Biblioteca") {
CHECK ("Tech Books" == l.getEditora()); CHECK ("Tech Books" == l.getEditora());
cout << "==> Adicionando a obra" << endl; cout << "==> Adicionando a obra" << endl;
contObras.adicionarObra(l); contObras.adicionarObra(make_shared<Livro>(l));
contObras.mostrarDetalhes(); contObras.mostrarDetalhes();
tie(total, disponiveis) = contObras.pesquisarObra(l); tie(total, disponiveis) = contObras.pesquisarObra(make_shared<Livro>(l));
CHECK (1 == total); CHECK (1 == total);
CHECK (1 == disponiveis); CHECK (1 == disponiveis);
cout << "======================================================" << endl; cout << "======================================================" << endl;
...@@ -84,32 +85,32 @@ TEST_CASE("Biblioteca") { ...@@ -84,32 +85,32 @@ TEST_CASE("Biblioteca") {
chrono::year_month_day epoch = chrono::year_month_day{chrono::year{0}, chrono::month{0}, chrono::day{0}}; chrono::year_month_day epoch = chrono::year_month_day{chrono::year{0}, chrono::month{0}, chrono::day{0}};
cout << "=> Usuario que nao existe tenta realizar um emprestimo: " << endl; cout << "=> Usuario que nao existe tenta realizar um emprestimo: " << endl;
chrono::year_month_day dataDevolucao = contUsuarios.registrarEmprestimo("11234", l); chrono::year_month_day dataDevolucao = contUsuarios.registrarEmprestimo("11234", make_shared<Livro>(l));
CHECK (int(epoch.year()) == int(dataDevolucao.year())); CHECK (int(epoch.year()) == int(dataDevolucao.year()));
CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month()));
CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day())); CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day()));
cout << "=> Usuario que nao existe tenta retornar um emprestimo: " << endl; cout << "=> Usuario que nao existe tenta retornar um emprestimo: " << endl;
CHECK (-1 == contUsuarios.retornarEmprestimo("11234", l)); CHECK (-1 == contUsuarios.retornarEmprestimo("11234", make_shared<Livro>(l)));
cout << "=> Tenta emprestar uma obra que nao existe " << endl; cout << "=> Tenta emprestar uma obra que nao existe " << endl;
Periodico p1("Revista de Metodos", 2023, 5, 3); Periodico p1("Revista de Metodos", 2023, 5, 3);
dataDevolucao = contUsuarios.registrarEmprestimo("12345", p1); dataDevolucao = contUsuarios.registrarEmprestimo("12345", make_shared<Periodico>(p1));
CHECK (int(epoch.year()) == int(dataDevolucao.year())); CHECK (int(epoch.year()) == int(dataDevolucao.year()));
CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month()));
CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day())); CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day()));
cout << "=> Tenta retornar uma obra que nao existe " << endl; cout << "=> Tenta retornar uma obra que nao existe " << endl;
CHECK (-1 == contUsuarios.retornarEmprestimo("12345", p1)); CHECK (-1 == contUsuarios.retornarEmprestimo("12345", make_shared<Periodico>(p1)));
cout << "=> Empresta uma obra que existe: " << endl; cout << "=> Empresta uma obra que existe: " << endl;
dataDevolucao = contUsuarios.registrarEmprestimo("12345", p); dataDevolucao = contUsuarios.registrarEmprestimo("12345", make_shared<Periodico>(p));
CHECK (int(hoje.year()) == int(dataDevolucao.year())); CHECK (int(hoje.year()) == int(dataDevolucao.year()));
CHECK (unsigned(hoje.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(hoje.month()) == unsigned(dataDevolucao.month()));
CHECK (unsigned(hoje.day()) == unsigned(dataDevolucao.day())); CHECK (unsigned(hoje.day()) == unsigned(dataDevolucao.day()));
cout << "=> Retorna uma obra que existe: " << endl; cout << "=> Retorna uma obra que existe: " << endl;
CHECK (0 == contUsuarios.retornarEmprestimo("12345", p)); CHECK (0 == contUsuarios.retornarEmprestimo("12345", make_shared<Periodico>(p)));
//obra existe e ja tem tres emprestimos //obra existe e ja tem tres emprestimos
//usuario devolveu com atraso, nao pode emprestar depois //usuario devolveu com atraso, nao pode emprestar depois
......
...@@ -19,7 +19,7 @@ ControladorObras& ControladorObras::getInstance() { ...@@ -19,7 +19,7 @@ ControladorObras& ControladorObras::getInstance() {
void ControladorObras::mostrarDetalhes() const { void ControladorObras::mostrarDetalhes() const {
cout << endl << "> LISTANDO OBRAS DO SISTEMA:" << endl << endl; cout << endl << "> LISTANDO OBRAS DO SISTEMA:" << endl << endl;
for (const auto& obra : this->obras) { for (const auto& obra : this->obras) {
obra.mostrarDetalhes(); obra->mostrarDetalhes();
cout << endl << "-----" << endl << endl; cout << endl << "-----" << endl << endl;
} }
} }
...@@ -28,52 +28,52 @@ void ControladorObras::mostrarDetalhes() const { ...@@ -28,52 +28,52 @@ void ControladorObras::mostrarDetalhes() const {
pair<int, int> ControladorObras::pesquisarObra(shared_ptr<DescricaoObra> descricao){ pair<int, int> ControladorObras::pesquisarObra(shared_ptr<DescricaoObra> descricao){
pair <int, int> p = make_pair(0, 0); pair <int, int> p = make_pair(0, 0);
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) {
return descricao->getTitulo() == d.getTitulo(); return descricao->getTitulo() == obra->getTitulo();
}); });
if (it_obra == this->obras.end()) { if (it_obra == this->obras.end()) {
cout << "> Erro: Obra não encontrada" << endl; cout << "> Erro: Obra não encontrada" << endl;
} else { } else {
p = make_pair(it_obra->getTotal(), it_obra->getDisponiveis()); p = make_pair((*it_obra)->getTotal(), (*it_obra)->getDisponiveis());
} }
return p; return p;
} }
void ControladorObras::adicionarObra(shared_ptr<DescricaoObra> descricao) { void ControladorObras::adicionarObra(shared_ptr<DescricaoObra> descricao) {
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) {
return descricao->getTitulo() == d.getTitulo(); return descricao->getTitulo() == obra->getTitulo();
}); });
if (it_obra == this->obras.end()) { if (it_obra == this->obras.end()) {
this->obras.push_back(Obra(descricao)); this->obras.push_back(make_shared<Obra>(Obra(descricao)));
} else { } else {
it_obra->adicionarObra(); (*it_obra)->adicionarObra();
} }
} }
bool ControladorObras::solicitarEmprestimo(shared_ptr<DescricaoObra> descricao){ bool ControladorObras::solicitarEmprestimo(shared_ptr<DescricaoObra> descricao){
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) {
return descricao->getTitulo() == d.getTitulo(); return descricao->getTitulo() == obra->getTitulo();
}); });
if (it_obra == this->obras.end()) { if (it_obra == this->obras.end()) {
return false; return false;
} }
return it_obra->emprestar(); return (*it_obra)->emprestar();
} }
bool ControladorObras::devolverEmprestimo(shared_ptr<DescricaoObra> descricao){ bool ControladorObras::devolverEmprestimo(shared_ptr<DescricaoObra> descricao){
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) {
return descricao->getTitulo() == d.getTitulo(); return descricao->getTitulo() == obra->getTitulo();
}); });
if (it_obra == this->obras.end()) { if (it_obra == this->obras.end()) {
return false; return false;
} }
return it_obra->devolver(); return (*it_obra)->devolver();
} }
...@@ -14,7 +14,7 @@ class ControladorObras { ...@@ -14,7 +14,7 @@ class ControladorObras {
private: private:
// Constructor // Constructor
ControladorObras(); ControladorObras();
vector<Obra> obras; vector<shared_ptr<Obra>> obras;
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment