diff --git a/sources/ControladorObras.cpp b/sources/ControladorObras.cpp index 116e164b45d97b17ad8a31382c39eb1890ec6b9a..8efb5c98b6525fb6f18f6ae2d44400946025baec 100644 --- a/sources/ControladorObras.cpp +++ b/sources/ControladorObras.cpp @@ -28,6 +28,7 @@ void ControladorObras::mostrarDetalhes() const { pair<int, int> ControladorObras::pesquisarObra(shared_ptr<DescricaoObra> descricao){ pair <int, int> p = make_pair(0, 0); + // Search auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) { return descricao->getTitulo() == obra->getTitulo(); }); diff --git a/sources/main.cpp b/sources/main.cpp index 906134d7b5f451953dd8869cd72b1d8a94ded881..bce66b0cfeef7c203c98098d4d244cf63e580ce7 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -3,6 +3,7 @@ #include <limits> #include <memory> #include <chrono> +#include <utility> #include "Biblioteca.hpp" #include "Livro.hpp" @@ -105,6 +106,11 @@ int main(){ string titulo, autor, editora; int ano, volume, mes; + // Retorno dos metodos + int result; + chrono::year_month_day dataDevolucao; + pair<int, int> dadosObra; + switch (option) { case ADDUSER: cin.ignore(); @@ -161,53 +167,59 @@ int main(){ case QUERYWORK: cout << "Entre com o tipo da obra (periodico|livro): "; cin >> tipoObra; cin.ignore(); if (tipoObra == "periodico") { - cout << "Método de busca (titulo|tituloano): "; - cin >> tipoBusca; + cout << "Método de busca (titulo|tituloano): "; cin >> tipoBusca; cin.ignore(); + if (tipoBusca == "titulo"){ + cout << "Entre com o titulo: "; getline(cin, titulo); + dadosObra = contObras.pesquisarObra(make_shared<Periodico>(titulo, 0, 0, 0)); + cout << "Quantidade Total: " << dadosObra.first << endl; + cout << "Quantidade Disponivel: " << dadosObra.second << endl; + } else if (tipoBusca == "tituloano"){ + cout << "Entre com o titulo: "; getline(cin, titulo); + cout << "Entre com o ano: "; cin >> ano; + dadosObra = contObras.pesquisarObra(make_shared<Periodico>(titulo, ano, 0, 0)); + cout << "Quantidade Total: " << dadosObra.first << endl; + cout << "Quantidade Disponivel: " << dadosObra.second << endl; + } else { cerr << "Tipo não reconhecido! ignorando operacao" << endl; } } else if (tipoObra == "livro") { - cout << "Método de busca (titulo|autor): "; - cin >> tipoBusca; + cout << "Método de busca (titulo|autor): "; cin >> tipoBusca; cin.ignore(); + if (tipoBusca == "titulo"){ + cout << "Entre com o titulo: "; getline(cin, titulo); + dadosObra = contObras.pesquisarObra(make_shared<Livro>(titulo, 0, "dummy", "dummy")); + cout << "Quantidade Total: " << dadosObra.first << endl; + cout << "Quantidade Disponivel: " << dadosObra.second << endl; + } else if (tipoBusca == "autor"){ + cout << "Entre com o autor: "; cin >> autor; + dadosObra = contObras.pesquisarObra(make_shared<Livro>("dummy", 0, autor, "dummy")); + cout << "Quantidade Total: " << dadosObra.first << endl; + cout << "Quantidade Disponivel: " << dadosObra.second << endl; + } else { cerr << "Tipo não reconhecido! ignorando operacao" << endl; } } else { cout << "> Erro: Tipo não reconhecido! Ignorando operação" << endl; } - //contObras.pesquisarObra(DescricaoObra &descricao); break; case BORROWWORK: - cout << "Entre com o CPF do usuário: "; cin >> userCPF; - cout << "Entre com o tipo da obra (periodico|livro): "; cin >> tipoObra; cin.ignore(); - if (tipoObra == "periodico") { - cout << "Entre com o titulo: "; getline(cin, titulo); - chrono::year_month_day devolucao = contUsuarios.registrarEmprestimo( - userCPF, make_shared<Periodico>(titulo, 0, 0, 0)); - if (int(devolucao.year()) == 0 && - unsigned(devolucao.month()) == 0 && - unsigned(devolucao.day()) == 0) { - cerr << "> Erro: Falha ao realizar um emprestimo!" << endl; - } else { cout << "> Emprestimo realizado com sucesso!" << endl; } - } else if (tipoObra == "livro") { - cout << "Entre com o titulo: "; getline(cin, titulo); - chrono::year_month_day devolucao = contUsuarios.registrarEmprestimo( - userCPF, make_shared<Livro>(titulo, 0, "dummy", "dummy")); - if (int(devolucao.year()) == 0 && - unsigned(devolucao.month()) == 0 && - unsigned(devolucao.day()) == 0) { - cerr << "> Erro: Falha ao realizar um emprestimo!" << endl; - } else { cout << "> Emprestimo realizado com sucesso!" << endl; } - } else { cout << "> Erro: Tipo não reconhecido! Ignorando operação" << endl; } + cout << "Entre com o CPF do usuário: "; cin >> userCPF; cin.ignore(); + cout << "Entre com o titulo: "; getline(cin, titulo); + dataDevolucao = contUsuarios.registrarEmprestimo(userCPF, make_shared<Periodico>(titulo, 0, 0, 0)); + if ( int(dataDevolucao.year()) == 0 && + unsigned(dataDevolucao.month()) == 0 && + unsigned(dataDevolucao.day()) == 0) { + cerr << "> Erro: Falha ao realizar um emprestimo!" << endl; + } else { + cout << "> Emprestimo realizado com sucesso!" << endl; + } break; case RETURNWORK: - cout << "Entre com o CPF do usuário: "; cin >> userCPF; - cout << "Entre com o tipo da obra (periodico|livro): "; cin >> tipoObra; cin.ignore(); - if (tipoObra == "periodico") { - cout << "Entre com o titulo: "; getline(cin, titulo); - if (contUsuarios.retornarEmprestimo(userCPF, make_shared<Periodico>(titulo, 0, 0, 0)) < 0){ - cout << "> Devolução realizada com sucesso!" << endl; + cout << "Entre com o CPF do usuário: "; cin >> userCPF; cin.ignore(); + cout << "Entre com o titulo: "; getline(cin, titulo); + result = contUsuarios.retornarEmprestimo(userCPF, make_shared<Periodico>(titulo, 0, 0, 0)); + if (result < 0) { cout << "> Erro: Falha ao retornar o emprestimo!" << endl; } + else { + cout << "> Devolução realizada com sucesso!" << endl; + if (result != 0) { + cout << "> Devolução com atraso, aplicando multa de " << result << "R$!" << endl; } - } else if (tipoObra == "livro") { - cout << "Entre com o titulo: "; getline(cin, titulo); - if (contUsuarios.retornarEmprestimo(userCPF, make_shared<Livro>(titulo, 0, "dummy", "dummy")) < 0){ - cout << "> Devolução realizada com sucesso!" << endl; - } - } else { cout << "> Erro: Tipo não reconhecido! Ignorando operação" << endl; } + } break; case FINISH: