From d2b3975d1d7625ed826d8af5449d21e29bd3e39f Mon Sep 17 00:00:00 2001 From: Muriki <mgy20@inf.ufpr.br> Date: Fri, 6 Dec 2024 22:12:47 -0300 Subject: [PATCH] Implementado interface com usuario --- main.cpp | 246 +++++++++++++++++++++-------------- sources/ControladorObras.cpp | 13 +- 2 files changed, 153 insertions(+), 106 deletions(-) diff --git a/main.cpp b/main.cpp index 966f5a1..4c593a0 100644 --- a/main.cpp +++ b/main.cpp @@ -1,36 +1,93 @@ +#include <cstdio> #include <cstdlib> #include <iostream> +#include <limits> #include "./sources/Biblioteca.hpp" -#include "./sources/Livro.cpp" +#include "./sources/Periodico.hpp" +#include "./sources/Livro.hpp" using namespace std; typedef enum { START, - LISTUSERS, - QUERYFEES, - PAYFEES, + ADDUSER, // Cadastrar usuario + LISTUSERS, // Listar usuarios + QUERYFEES, // Listar multas de um usuario + PAYFEES, // Pagar multas de um usuario + ADDWORK, // Adicionar uma Obra + LISTWORKS, // Listar Obras + QUERYWORK, // Pesquisar Obra + BORROWWORK, // Emprestar Obra + RETURNWORK, // Devolver Obra FINISH } states; - -int show_options () { +int show_options() { int option; - cout << endl; - cout << "> Entre com um comando:" << endl; - cout << "1 - Listar usuarios" << endl; - cout << "2 - Consultar Multas" << endl; - cout << "3 - Pagar Multa" << endl; - cout << "4 - Finalizar" << endl; - cout << "> "; - cin >> option; + + while (true) { + cout << endl; + cout << "> Entre com um comando:" << endl; + cout << "1 - Cadastrar usuario " << endl; + cout << "2 - Listar usuarios " << endl; + cout << "3 - Listar multas de um usuario " << endl; + cout << "4 - Pagar multas de um usuario " << endl; + cout << "5 - Adicionar uma Obra " << endl; + cout << "6 - Listar Obras " << endl; + cout << "7 - Pesquisar Obra " << endl; + cout << "8 - Emprestar Obra " << endl; + cout << "9 - Devolver Obra " << endl; + cout << "10 - Finalizar programa " << endl; + cout << "-> "; + + cin >> option; + + // Check if the input is valid + if (cin.fail()) { + cin.clear(); // Clear the error flag + cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Ignore the invalid input + cout << "Entrada inválida! Por favor, insira um número entre 1 e 10." << endl; + continue; // Restart the loop + } + + // Check if the option is within the valid range + if (option >= 1 && option <= 10) { break; } // Valid option, exit the loop + else { + cout << "Opção inválida! Por favor, insira um número entre 1 e 10." << endl; + } + } return option; } +//int show_options () { +// int option; +// while (true) { +// cout << endl; +// cout << "> Entre com um comando:" << endl; +// cout << "1 - Cadastrar usuario " << endl; +// cout << "2 - Listar usuarios " << endl; +// cout << "3 - Listar multas de um usuario " << endl; +// cout << "4 - Pagar multas de um usuario " << endl; +// cout << "5 - Adicionar uma Obra " << endl; +// cout << "6 - Listar Obras " << endl; +// cout << "7 - Pesquisar Obra " << endl; +// cout << "8 - Emprestar Obra " << endl; +// cout << "9 - Devolver Obra " << endl; +// cout << "10 - Finalizar programa " << endl; +// cout << "-> "; +// cin >> option; +// if (option >= 1 && option <= 10) +// break; +// } +// +// return option; +//} + + int main(){ system("clear"); @@ -46,98 +103,87 @@ int main(){ contUsuarios.adicionarUsuario("Marcus", "12345", "Casa", "9988", "marcus@gmail.com"); // Cria Obras - cout << ": Criando Obras" << endl; ControladorObras contObras = bib.getContObras(); - string titulo, autor, editora; int ano; - for (int i=0; i<2 ;i++) { - cin >> titulo; cin >> ano; cin >> autor; cin >> editora; - Livro liv(titulo, ano, autor, editora); - contObras.adicionarObra(liv); - } + + // Cria Periodicos + cout << "> Criando Periodicos" << endl; + Periodico p("Revista de Ciência", 2023, 5, 3); + contObras.adicionarObra(p); + + // Cria Livros + cout << "> Criando Livros" << endl; + Livro l("C++ Programming", 2022, "John Doe", "Tech Books"); + contObras.adicionarObra(l); contObras.mostrarDetalhes(); - //// Interation Loop - //int option = START; - //while (option != FINISH) { - // option = show_options(); - // string userCPF; int valor; - - // switch (option) { - // case LISTUSERS: - // contUsuarios.mostrarDetalhes(); - // break; - - // case QUERYFEES: - // cout << "Entre com o CPF do usuário: "; cin >> userCPF; - // valor = contUsuarios.recuperarMultas(userCPF); - // if (valor > 0) { - // cout << "\nUsuario: " << userCPF << endl; - // cout << "Valor a pagar: " << valor << endl; - // } else { - // cout << "Aviso: Usuario não possui multas" << endl; - // } - // break; - - // case PAYFEES: - // cout << "Entre com o CPF do usuário: "; cin >> userCPF; - // cout << "Entre com o valor a pagar: "; cin >> valor; - // contUsuarios.registrarMultaPaga(userCPF, valor); - // break; - - // case FINISH: - // cout << "> Finalizando programa!" << endl; - // return 0; - - // default: - // cout << "Comando não reconhecido!" << endl; - // break; - // } + //cout << ": Criando Obras" << endl; + //ControladorObras contObras = bib.getContObras(); + //string titulo, autor, editora; int ano; + //for (int i=0; i<2 ;i++) { + // cin >> titulo; cin >> ano; cin >> autor; cin >> editora; + // Livro liv(titulo, ano, autor, editora); + // contObras.adicionarObra(liv); //} + //contObras.mostrarDetalhes(); + + // Interation Loop + int option = START; + while (option != FINISH) { + option = show_options(); + string userCPF; int valor; + + switch (option) { + case ADDUSER: + break; + + case LISTUSERS: + contUsuarios.mostrarDetalhes(); + break; + + case QUERYFEES: + cout << "Entre com o CPF do usuário: "; cin >> userCPF; + valor = contUsuarios.recuperarMultas(userCPF); + if (valor > 0) { + cout << "\nUsuario: " << userCPF << endl; + cout << "Valor a pagar: " << valor << endl; + } else { + cout << "Aviso: Usuario não possui multas" << endl; + } + break; + + case PAYFEES: + cout << "Entre com o CPF do usuário: "; cin >> userCPF; + cout << "Entre com o valor a pagar: "; cin >> valor; + contUsuarios.registrarMultaPaga(userCPF, valor); + break; + + case ADDWORK: + break; + + case LISTWORKS: + contObras.mostrarDetalhes(); + break; + + case QUERYWORK: + break; + + case BORROWWORK: + break; + + case RETURNWORK: + break; + + case FINISH: + cout << "> Finalizando programa!" << endl; + return 0; + + default: + cout << "Comando não reconhecido!" << endl; + break; + } + } return 0; } - - - //// Cria Obras - //cout << "> Instanciando Controlador de Obras" << endl; - //ControladorObras contObras; - - //cout << "> Criando Obras" << endl; - //string titulo, tipo; int ano, qtDisp, total; - //for (int i=0; i<3 ;i++){ - // cout << "Entre com o titulo da obra: "; cin >> titulo; - // cout << "Entre com o ano da obra: "; cin >> ano; - // cout << "Entre com o tipo da obra: "; cin >> tipo; - // cout << "Entre com a quantidade Disponivel: "; cin >> qtDisp; - // cout << "Entre com a quantidade Total: "; cin >> total; - // - // DescricaoObra descricao(titulo, ano); - // contObras.adicionarObra(tipo, descricao); - //} - - //cout << "==> Instanciando uma Descricao de Obra: " << endl; - //DescricaoObra desc("Mochileiro das galáxias", 1999); - //desc.mostrarDetalhes(); - //cout << endl; - - //cout << "==> Instanciando um Periodico: " << endl; - //Periodico p("Revista de Ciência", 2023, 5, 3); - //p.mostrarDetalhes(); - //cout << endl; - - //cout << "==> Instanciando um Livro: " << endl; - //Livro l("C++ Programming", 2022, "John Doe", "Tech Books"); - //l.mostrarDetalhes(); - //cout << endl; - - //cout << "==> Instanciando uma Obra: " << endl; - //int disponiveis = 10, total = 14; - //Obra ob(desc, disponiveis, total); - //ob.mostrarDetalhes(); - //cout << endl; - - //cout << "==> Instanciando o Controlador de Obras: " << endl; - //ControladorObras obras; - diff --git a/sources/ControladorObras.cpp b/sources/ControladorObras.cpp index 0cee302..23747c4 100644 --- a/sources/ControladorObras.cpp +++ b/sources/ControladorObras.cpp @@ -11,10 +11,11 @@ ControladorObras::ControladorObras() {} // Method to display all Obras details void ControladorObras::mostrarDetalhes() const { - for (const auto& obra : this->obras) { - obra.mostrarDetalhes(); - cout << endl; - } + cout << endl << "> LISTANDO OBRAS DO SISTEMA:" << endl << endl; + for (const auto& obra : this->obras) { + obra.mostrarDetalhes(); + cout << endl << "-----" << endl << endl; + } } // Methods @@ -22,7 +23,7 @@ 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) { - return descricao.getTitulo() == d.getTitulo(); + return descricao.getTitulo() == d.getTitulo(); }); if (it_obra == this->obras.end()) { @@ -36,7 +37,7 @@ pair<int, int> ControladorObras::pesquisarObra(DescricaoObra& descricao){ void ControladorObras::adicionarObra(DescricaoObra& descricao){ auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao.getTitulo() == d.getTitulo(); + return descricao.getTitulo() == d.getTitulo(); }); if (it_obra == this->obras.end()) { -- GitLab