Como um leitor da biblioteca eu gostaria de buscar um livro para achar sua localização física.
Critérios de aceitação:
Busca de um livro por título;
Busca deve retornar em qual estante e qual quarto está o livro, ou se está alugado;
Busca deve retornar todas as informações do livro (título, autor);
Alugar um livro deve alterar a situação dele de forma que identifique que está locado e por quem ele foi locado;
Como um usuário Premium da biblioteca eu gostaria de locar quantos livros eu quiser.
Critérios de aceitação:
Locar número ilimitado de livros sem gerar erros;
Como um usuário Premium da biblioteca eu gostaria de ter acessos a livros, mesmo que limitado, sem ter que pagar pela minha conta.
Critérios de aceitação:
Locar número limitado de livros sem gerar erros;
Não permitir locação de livros acima do limite;
Como um organizador da biblioteca eu gostaria de registrar um novo leitor para que ele possa utilizar a biblioteca;
Critérios de aceitação:
O novo usuário tem que ter nome;
Uma ID de usuário deve ser gerada;
Deve-se informar ao sistema se o usuário pode também fazer o papel de organizador ou só de leitor;
Classe: Usuário | |
---|---|
Responsabilidades | Colaborações |
Username | Free |
Nome | Organizador |
Lista de Livros Alugados | Premium |
Lista de Livros Alugados | Livro |
Classe: Free | |
---|---|
Responsabilidades | Colaborações |
Nome | Livro |
Username | Organizador |
Livros Alugados | |
Alugar Livro | |
Devolver Livro |
Classe: Premium | |
---|---|
Responsabilidades | Colaborações |
Nome | Livro |
Username | Organizador |
Livros Alugados | |
Alugar Livro | |
Devolver Livro |
Classe: Organizador | |
---|---|
Responsabilidades | Colaborações |
Nome | Livro |
Username | |
Registrar Usuário |
Classe: Livro | |
---|---|
Responsabilidades | Colaborações |
Título | Premium |
Autor | Free |
Localização | Organizador |
Locado Por |
Pasta onde se encontra os arquivos .csv utilizados como base de dados para o sistema
onde se localiza o arquivo livros.csv, utilizada como base de dados de livros da bibliotaca
Exemplo de livros existentes na base |
---|
Título |
A REVOLUÇÃO DOS BICHOS |
A ERA DOS IMPÉRIOS |
NEUROMANCER |
1984 |
OS HOMENS QUE NAO AMAVAM AS MULHERES |
1808 |
HARRY POTTER E O ENIGMA DO PRÍNCIPE |
Pasta com quatro arquivos .csv referente ao banco de dados dos usuários:
usuarios.csv: contém username e tipo de usuário de todos os usuários cadastrados
organizadores.csv, premium.csv, free.csv: cada um contém as informações de todos os usuários daquela categoria
Exemplo de organizadores existentes na base |
---|
username |
daniel |
lucas |
Exemplo de usuários premium existentes na base |
---|
username |
valeria |
fernanda |
Exemplo de usuários free existentes na base |
---|
username |
joana |
maria |
Onde se encontra o executável main
onde se encontra os objetos (*.o) utilizados para a construção do executável
Onde se encontram os headers (*.h) de todas as classes e módulos implementados
Onde se encontra o main.c
Onde de encontra a implementação (*.cpp) de todas as classes e módulos implementados
Presente fora das pastas supracitadas, para compilar o programa é importante que o comando make seja feito na mesma pasta onde se encontra o Makefile
Nesta biblioteca existem diferentes tipos de usuários: Organizadores, que além de alugar livros também cadastram outros usuários, Premium, que podem alugar quantos livros quiserem e Free, que tem um limite de locação de três livros. Para a implementação desses diferentes tipos foi criada uma classa mãe, Usuário, e as demais categorias foram colocadas como classes filhas.
É a classe mãe de todos os tipos de usuário, utilizada para manter em um só lugar os atributos e as funções comuns a todos os outros tipos de usuários
Atributos
username: uma string que contém o username do usuário
nome: uma string que contém o nome do usuário
livros_alugados: um vetor de strings que contém os livros que o usuário tem consigo
Métodos
Construtores que recebe tanto nenhum parâmetro, como de parâmetro todos os atributos
Destrutor default
getters e setters para todos os atributos
fazerLogin(std::string username): Método virtual puro implementado nas classes filhas
fazerLogin(std::string username, std::string filepath): Método que busca o usuário pelo username na base de dados passada pelo filepath, cada tipo de usuário tem um arquivo diferente como base de dados, e atualiza o valor de seus atributos dado o resultado da busca. Essa função é chamada dentro da implementação de fazerLogin(std::string username) de cada uma das classes filhas passando o filepath correspondente a base de dados daquela classe
alugarLivro(Livro livro): Método virtual puro implementado nas classes filhas
devolverLivro(Livro livro): Método virtual puro implementado nas classes filhas
É a classe de usuários que pagaram por uma assinatura, podendo assim alugar uma quantidade ilimitada de livros
Atributos
Apenas os herdados da classe mãe
Métodos
Construtores que recebe tanto nenhum parâmetro, como de parâmetro todos os atributos
Destrutor default
fazerLogin(std::string username): Override de método virtual da classe mãe, passa o username e o lugar do arquivo que contém a base de dados dos usuários premium para a função fazerLogin(std::string username, std::string filepath) implementada na classe mãe
alugarLivro(Livro livro): Override de método virtual da classe mãe, busca o livro na base de dados e, caso ele não esteja alugado, aluga ele para o usuário, mudando tanto o atributo livros_alugados, quanto nas bases de dados de livros e de usuários premium
devolverLivro(Livro livro): Override de método virtual da classe mãe, retira o livro tanto do atributo livros_alugados, quanto nas bases de dados de livros e de usuários premium
É a classe de usuários que não pagaram por uma assinatura, podendo assim alugar apenas três livros
Atributos
Apenas os herdados da classe mãe
Métodos
Construtores que recebe tanto nenhum parâmetro, como de parâmetro todos os atributos
Destrutor default
fazerLogin(std::string username): Override de método virtual da classe mãe, passa o username e o lugar do arquivo que contém a base de dados dos usuários free para a função fazerLogin(std::string username, std::string filepath) implementada na classe mãe
alugarLivro(Livro livro): Override de método virtual da classe mãe, busca o livro na base de dados e, caso ele não esteja alugado e o usuário não tenha alugado um total de três livros, aluga ele para o usuário, mudando tanto o atributo livros_alugados, quanto nas bases de dados de livros e de usuários free
devolverLivro(Livro livro): Override de método virtual da classe mãe, retira o livro tanto do atributo livros_alugados, quanto nas bases de dados de livros e de usuários free
É a classe de usuários que atuam como administradores, podendo assim alugar quantos livros quiserem além de cadastrar novos usuários
Atributos
Apenas os herdados da classe mãe
Métodos
Construtores que recebe tanto nenhum parâmetro, como de parâmetro todos os atributos
Destrutor default
fazerLogin(std::string username): Override de método virtual da classe mãe, passa o username e o lugar do arquivo que contém a base de dados dos usuários organizadores para a função fazerLogin(std::string username, std::string filepath) implementada na classe mãe
alugarLivro(Livro livro): Override de método virtual da classe mãe, busca o livro na base de dados e, caso ele não esteja alugado e o usuário não tenha alugado um total de três livros, aluga ele para o usuário, mudando tanto o atributo livros_alugados, quanto nas bases de dados de livros e de usuários organizadores
devolverLivro(Livro livro): Override de método virtual da classe mãe, retira o livro tanto do atributo livros_alugados, quanto nas bases de dados de livros e de usuários organizadores
cadastrarNovoUsuario(std::string username, std::string nome, int tipo): recebe username, nome e tipo de usuário do usuário a ser cadastrado, busca o usuário na base de dados geral (que contém apenas username e tipo de cada usuario), caso não encontre chama a função que cria o novo usuário daquela categoria determinada
cadastrarNovoOrganizador(std::string username, std::string nome): insere usuário no banco de dados de organizadores e no banco de dados geral
cadastrarNovoPremium(std::string username, std::string nome): insere usuário no banco de dados de usuários premium e no banco de dados geral
cadastrarNovoFree(std::string username, std::string nome): insere usuário no banco de dados de usuários free e no banco de dados geral
Esta classe serve para armazenar as informações das obras contidas na biblioteca.
titulo: string que armazena o titulo do livro
autor: string que armazena o autor da obra
localizacao: string que guarda a localização física do livro
alugado_por: string que contém quem está com o livro alugado
Construtores que recebe tanto nenhum parâmetro, como de parâmetro todos os atributos
Destrutor default
getters e setters para todos os atributos
Esta é um módulo que implementa funções úteis que manipulam os arquivos .csv que são usados como base de dados para as informações tanto de usuários quanto de livros
parse_csv(std::string path_arquivo): lê o arquivo e retorna um vetor de vetor de strings, onde cada vetor de strings é uma linha do arquivo, cada string sendo uma informação de um dos campos
encontrarUsuario (std::string username, std::string filepath): retorna um vetor de strings que representa o usuário no banco de dados, ele procura no arquivo passado pela string filepath pelo username, também passado pelo parâmetro, isso é possível pois em todos os arquivos de usuário a coluna de username está na mesma posição
insereUsuario(std::string username, std::string nome, std::string filepath): insere as informações do usuário, com o livros_alugados sendo considerado vazio, no final do arquivo determinado por filepath, usado para os arquivos de um tipo de usuário específico, pois todos tem o mesmo formato
insereUsuario(std::string username, std::string filepath, int tipo): método utilizado para inserir um usuário no final do arquivo da base de dados geral
encontraLivroPorTitulo(std::string titulo): retorna vetor de string wue representa a linha ocupada pelo livro na base de dados, contendo as informações do mesmo
atualiza_csv(std::vector> dados ,std::string path_arquivo): recebe uma linha com as informações a serem atualizadas e atualiza essa linha no arquivo passado pelo path_arquivo
alugaLivro(std::string username, std::string titulo, std::string filepath): muda a informação de alugado_por na base de dados do livro passado para o username passado
devolveLivro(std::string username, std::string titulo, std::string filepath): atualiza as informações do livro removendo o username de quem tinha alugado o livro
Esse é um módulo que implementa funções que tornam possível o acesso do usuário às funcionalidades da biblioteca. Em qualquer momento que o usuário escrever "sair" ele sai da tela atual.
mostraMeusLivros(user): mostra a tela que imprime na tela os livros alugados pelo usuário no momento
mostraMenu(Organizador user): mostra as opções que o usuário pode escolher para utilizar o sistema
mostraAlugarLivro(user): recebe do usuário um título, busca o livro por titulo (como a função de csv procura por substring o nome não precisa estar completo) e retorna o resultado
mostraDevolverLivro(user): apresenta para o usuário a lista de livros que ele têm alugado para que ele escolha qual opção ele irá devolver
mostraCadastrarUsuario(Organizador user): opção que aparece apenas para organizadores, recebe as informações do usuário e retorna o resultado (se conseguiu cadastrar ou se o username já existia)
Imprime para o usuário opções para login, recebe o username, faz o login e chama mostrarMenu() do módulo interface-usuário