diff --git a/main.cpp b/main.cpp index 1473889c72c5a104c98fdd6f67179da3436e562f..0eefe5f69ccc6aa9112bdd551acdef879cf1ae01 100644 --- a/main.cpp +++ b/main.cpp @@ -9,10 +9,27 @@ using namespace std; typedef enum { START, + LISTUSERS, + QUERYFEES, + PAYFEES, FINISH } states; +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; + return option; +} + int main(){ // Cria Usuarios @@ -20,38 +37,78 @@ int main(){ ControladorUsuarios contUsuarios; cout << "> Criando Usuarios" << endl; - string nome, CPF, endereco, telefone, email; - for (int i=0; i<3 ;i++){ - cout << "Entre com o nome: "; cin >> nome; - cout << "Entre com o CPF: "; cin >> CPF; - cout << "Entre com o endereco: "; cin >> endereco; - cout << "Entre com o telefone: "; cin >> telefone; - cout << "Entre com o email: "; cin >> email; - - if (contUsuarios.adicionarUsuario(nome, CPF, endereco, telefone, email)) - cout << "> Usuario " << nome << " adicionado com sucesso" << endl; - else - cout << "Falha ao adicionar o usuario " << nome << endl; - } - contUsuarios.mostrarDetalhes(); - - // 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); + //string nome, CPF, endereco, telefone, email; + //for (int i=0; i<3 ;i++){ + // cout << "Entre com o nome: "; cin >> nome; + // cout << "Entre com o CPF: "; cin >> CPF; + // cout << "Entre com o endereco: "; cin >> endereco; + // cout << "Entre com o telefone: "; cin >> telefone; + // cout << "Entre com o email: "; cin >> email; + + // if (contUsuarios.adicionarUsuario(nome, CPF, endereco, telefone, email)) + // cout << "> Usuario " << nome << " adicionado com sucesso" << endl; + // else + // cout << "> Falha ao adicionar o usuario " << nome << endl; + //} + + contUsuarios.adicionarUsuario("Muriki", "12345", "Casa", "9999", "murikigy@gmail.com"); + contUsuarios.adicionarUsuario("Nico", "54321", "Apartamento", "8888", "nico@gmail.com"); + contUsuarios.adicionarUsuario("Marcus", "12345", "Casa", "9988", "marcus@gmail.com"); + + // 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; + } + 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; + } } + 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(); @@ -76,5 +133,3 @@ int main(){ //cout << "==> Instanciando o Controlador de Obras: " << endl; //ControladorObras obras; - return 0; -} diff --git a/sources/ControladorUsuarios.cpp b/sources/ControladorUsuarios.cpp index 9e393bec822ee0435f12ba353bdb2ac835cc5cee..36b48ecd867bc87366b0a9dbc7db0403cef39903 100644 --- a/sources/ControladorUsuarios.cpp +++ b/sources/ControladorUsuarios.cpp @@ -1,6 +1,8 @@ #include <iostream> +#include <algorithm> #include "./ControladorUsuarios.hpp" +#include "Usuario.hpp" using namespace std; @@ -20,11 +22,13 @@ void ControladorUsuarios::mostrarDetalhes() const { bool ControladorUsuarios::adicionarUsuario(string nome, string CPF, string endereco, string telefone, string email){ // Check if the user does not exist - for (auto& usuario: this->usuarios) { - if (usuario.getCPF() == CPF){ - cout << "Erro: Usuario com esse CPF já existe, ignorando inserção" << endl; - return false; - } + auto it = find_if(this->usuarios.begin(), this->usuarios.end(), [CPF](Usuario& u) { + return u.getCPF() == CPF; + }); + + if (it != this->usuarios.end()){ + cout << "> Erro: Usuario com esse CPF já existe, ignorando inserção" << endl; + return false; } // Create and add a new user @@ -47,12 +51,31 @@ int ControladorUsuarios::retornarEmprestimo(string CPF, DescricaoObra descricao) int ControladorUsuarios::recuperarMultas(string CPF){ + // Search for user + auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) { + return u.getCPF() == CPF; + }); - return 0; + if (it == usuarios.end()) { + cout << "> Erro: Usuario não encontrado" << endl; + return -1; + } + + return it->getMulta(); } bool ControladorUsuarios::registrarMultaPaga(string CPF, int valor){ - return true; + // Search for user + auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) { + return u.getCPF() == CPF; + }); + + if (it == usuarios.end()) { + cout << "> Erro: Usuario não encontrado" << endl; + return false; + } + + return it->pagarMulta(valor); } diff --git a/sources/Usuario.cpp b/sources/Usuario.cpp index 37a137a9c0e3cda46ed0b6075038b3484d99474b..1b323714c6ca4d3304e167039e05a675eeba29fc 100644 --- a/sources/Usuario.cpp +++ b/sources/Usuario.cpp @@ -8,7 +8,7 @@ using namespace std; Usuario::Usuario(const string& nome, const string& cpf, const string& end, const string& tel, const string&email) : nome(nome), CPF(cpf), endereco(end), telefone(tel), email(email) { - this->multas = 0; + this->multas = 10; } void Usuario::mostrarDetalhes() const { @@ -32,6 +32,7 @@ bool Usuario::devolver(DescricaoObra descricao){ return 0; } +// Increase fees int Usuario::atualizarMulta(int valor){ return 0; @@ -42,12 +43,26 @@ string Usuario::getCPF(){ } int Usuario::getMulta(){ - - return 0; + return this->multas; } bool Usuario::pagarMulta(int valor){ - - return 0; + // Check if the user has fees + if (this->multas <= 0) { + cout << "> Aviso: Usuario não possui multas!" << endl; + return false; + } + + // Check if the value is suficient + if (this->multas > valor) { + cout << "> Error: Valor insuficiente para pagar as multas!" << endl; + return false; + } + + cout << "> Pagamento de multas realizado!" << endl; + cout << "Troco: " << (valor - this->multas) << " R$" << endl; + + this->multas = 0; + return true; } diff --git a/sources/Usuario.hpp b/sources/Usuario.hpp index 978addab26dfd025dcc6b17300289df699a315a3..99b7c8119037f7d125a57eb0f61899f2d58a4560 100644 --- a/sources/Usuario.hpp +++ b/sources/Usuario.hpp @@ -27,7 +27,7 @@ class Usuario { // Methods bool emprestar(DescricaoObra descricao); bool devolver(DescricaoObra descricao); - int atualizarMulta(int valor); + int atualizarMulta(int valor); // Increase fee string getCPF(); int getMulta(); bool pagarMulta(int valor);