Skip to content

Latest commit

 

History

History
379 lines (334 loc) · 15.1 KB

README.md

File metadata and controls

379 lines (334 loc) · 15.1 KB

Documentação: Gerenciamento de Biblioteca

User Stories

User Story 01:

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;

User Story 02:

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;

User Story 03:

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;

User Story 04:

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;

Cartões CRC:

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

Organização dos arquivos

Pasta Database

Pasta onde se encontra os arquivos .csv utilizados como base de dados para o sistema

Pasta Livros

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 Usuarios

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

Pasta bin

Onde se encontra o executável main

Pasta build

onde se encontra os objetos (*.o) utilizados para a construção do executável

Pasta include

Onde se encontram os headers (*.h) de todas as classes e módulos implementados

Pasta program

Onde se encontra o main.c

Pasta src

Onde de encontra a implementação (*.cpp) de todas as classes e módulos implementados

Makefile

Presente fora das pastas supracitadas, para compilar o programa é importante que o comando make seja feito na mesma pasta onde se encontra o Makefile

Implementação

Usuários

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.

Classe Usuário

É 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

Classe Premium

É 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

Classe Free

É 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

Classe Organizador

É 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

Classe Livro

Esta classe serve para armazenar as informações das obras contidas na biblioteca.

Atributos

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

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

Módulo Csv

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

Funções

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

Módulo interface-usuario

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.

Funções

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)

main

Imprime para o usuário opções para login, recebe o username, faz o login e chama mostrarMenu() do módulo interface-usuário