Giter Site home page Giter Site logo

feup-lpoo's Introduction

LPOO1617_T3G03

Java Project - object oriented programming

Members Group

Carlos Miguel da Silva de Freitas - up201504749
Luís Noites Martins - up201503344



Application Class Diagram

alt text

Setup/Instalação

 Aplicação - Para executar o apk, basta instalar o ficheiro disponibilizado num dispositivo android - versao minima 4.4 (API 19)

Projeto - Para correr o projeto basta abri-lo com o android studio e compilar. Deve existir um dispositivo ligado, ou um dispositvo emulado para que a aplicacao corra.



Padrões de Desenho

Singleton - Existem duas classes que usam este padrão de desenho: DatabaseHelper e DataManager. A primeira classe gere toda a parte de criação e acesso a base de dados. Já a classe DataManager gere a comunicação e transferencia de dados entre a base de dados e as classes de design/cálculo.

Adapter - Foi necessário o uso de Adapters personalizados de forma a que o RecyclerView, que lista todas as transacoes de uma categoria, possa listar a partir de um HashMap.



Decisões Relevantes

Foi implementada uma base de dados para guardar toda a informacao utilizada na aplicacao. Esta base de dados divide-se em 5 classes:
DatabaseHelper - que serve para fazer a criação da base de dados.
TransactionDB - responsável pelas funções de CRUD relativas às transações
TransactionDB - responsável pelas funções de CRUD relativas às transações
CategoryDB responsável pelas funções de CRUD relativas às categorias
TypeDB - responsável pelas funções de CRUD relativas aos tipos de Categorias existentes - “Income”, “Variable Expense” e “Fixed Expense”
UserDB - responsável pelas funções de CRUD relativas ao User.

Para converse entre os tipos de dados da base de dados e os utilizados no projeto ( com divisão por classes) foi utilizada a classe DataManager, responsável pela comunicação com as classes da base de dados e parsing da informação obtida.



Funcionalidades

Para o desenvolvimento da aplicação, achamos pertinente utilizar os seguintes recursos:

Mobile - Para ser possível ao utilizador associar uma imagem da fatura às suas transacções, foi utilizada a câmara do telemóvel.

Inteligência Artificial - Para ajudar o utilizador na sua gestão financeira, foram desenvolvidas algumas funções. Estas funçes baseiam-se no histórico existente e, através deste aconselham-no.

API'S - Foram utilizadas api's externas para a escolha da cor de cada categoria (ColorPicker) e para a apresentação do gráfico circular existente nas estatisticas (MAndroidChart)



Dificuldades Encontradas

Uma das maiores dificuldades foi a estruturação da parte lógica. De facto a articulação da base de dados com a estrutura de classes orientadoras da aplicação não foi muito fácil dado a necessidade de compactação das funções de escrita e leitura na base de dados. Outro dos problemas prendia-se com o facto de os valores de retorno das funções de get da base de dados não ser compatível com as classes do programa e haver portanto necessidade de fazer parsing destes mesmos resultados.



Conclusões

O realização deste projeto contribuiu para o desenvolvimento das nossa capacidades de trabalho em equipa, bem como para a conceção de projetos utilizando Android (linguagem Java) e bases de dados em SQL.



Distribuição do Trabalho

Luis Martins - 40h (50%)
  - Implementação da base de dados
  - Implementação do DataManager
  - Implementação dos testes unitários
  - Implementação das funções de sugestão

Carlos Freitas - (50%)
  - Implementacao de toda a parte gráfica
- Implementacao da ligação entre a logica e a parte grafica do programa
  - Contribuicao na implementação das sugestões



USER MANUAL


Login

1 - O utilizador devera escrever o email da conta que ja existe,ou pretende criar
2 - O utlizador coloca a palavra passe correspondente ao email colocado ou a password da conta que pretende criar
3 - Verifica se a combinacao email + password corresponde a user existente. Se nao existir da mensagem de erro e pede ao user para voltar a escrever email+password,caso contrario, verifica se a conta a ser aberta ja deu os valores previstos gastos nas categorias no mes atual, se nao , o user e dirigido diretamente para o SetMonth, de outra forma, o user e dirigido para o menu principal
4 - Cria o user email+password caso essa combinacao nao existe,ao criar o user abre os settings no "modo" de sign up ou seja de forma o utilizador adicionar os seus expenses e incomes.


Add Fixed Value

1 - Zona correspondente onde o utilizador deverá inserir o titulo do valor fixo que quer guardar (campo obrigatorio), por exemplo, ordenado despesa da luz, etc
2 - Valor que ganha ou gasta por cada "iteracao" do valor fixo
3 - Escolha dos meses do ano atual em que esta transacao e definitivamente realizada, o utilizador ao carregar no "Choose Month" e carregado um Multiple Choice Dialog em que o utilizador escolhe os meses


Settings

Exemplo da view dos Settings quando e criado uma conta.

Atenção pontos 1 e 2 nao sao uteis nesta fase pois so interessa adicionar os Incomes e os Fixed Expense para o utilizador poder fazer o set dos gastos previstos para o mes atual, logo nao e possivel alterar as definicoes de conta nesta fase, para isso e necessario o utilizador abrir os settings a partir do menu principal

1 - Ao carregar e aberto uma dialog em que e pedido o utilzador para verificar a pass, permitindo a alteracao do campo do email
2 - Mesma logica do ponto 1 so que permite a alteracao da password
3 - Apos o user adicionar Incomes e Expenses , atraves dos pontos 4 e 5 ao clicar no Set First Month e aberto a pagina do Month
ATENCAO: este botao so se encontra na primeira fez que um user faz login, em qualquer outra circunstancia este botao e substituido por outro que permite guardar as alteracaos feitas a conta (pontos 1 e 2 )
4 e 5 -Ao carregar no mais e aberto para a janela de AddFixedValue correspondente ao tipo escolhido Income/Expenses. O radioGroup Income/Expense permite escolher quais as transacoes a listar no frameLayout que se encontra na parte inferior


Set Month

1 - Zona que podera aparecer o aviso da AI a dizer que o utilizador gastou demasiado na categoria x
Botao que abre os settings caso o utilizador queira adicionar mais income/expenses nesse mes
2 - Valor total do Income desse mes
3 - Valor total dos Fixed Expenses desse mes
4 - Botao + - permite o utilizador adicionar uma nova categoria na hora
Choose Category - Abre um dialog com todas as categorias existentes o utilizador escolhe uma categoria insere o valor que espera gastar nessa categoria (na caixa de texto amount), e da set desse valor
5 - Balanco estimado no final do mes
6 - Guardar os valores do mes atual


Main Menu

Menu Inicial da App

1 - Campo onde aparece sugestoes dadas pela AI, quando possivel.
2 - See Statistics que quando pressionado e aberto a janela Categories Stats que permite ao user ver uma grafico a demonstrar o gasto em cada categoria,etc...
3 - Balanco do utilizador no mes atual
4 - Botao more que abre o dialog com o resto das categorias existentes de forma o utilizador adicionar transacoes a essas categorias
5 - Botoes das categorias pertencentes ao menu principal, ao ser clicado o utilizador podera adicionar uma transacao a essa categoria
6 - Permite adicionar uma nova categoria


SideBar

1 - Valor total que o utilizador salvou (ou nao) desde que comecou a usar a aplicacao
2 - Email do utilizador
3 - Abre a janela Category Stats (mesma reacao que o My Statistics no menu principal)
4 - Abre uma dialog com as categorias criadas pelo utilizador de forma o utilizador poder altera-las
5 - Abre um dialog que permite o utilizador escolher exatamente 5 categorias (das existentes) que ele queira que aparecam diretamente no menu principal
6 - Abre os settings
7 - Da logout da conta aberta
8 - Sai da aplicacao


Categories Stats

1 - Layout que apresentara o grafico circular
exemplo do grafico em CategoryStatsExample cada setor do grafico corresponde ao valor total gasto numa categoria entre as datas dadas, o utilizador ao clicar num setor abrira a lista com todas as transacoes correspondentes a respetiva categoria
2 - Escolha das datas
3 - Inicializar o grafico com as transacoes entre as datas escolhidas (caso haja alguma);


Categories Overview

Lista de transacoes de uma categoria entre duas datas

Cada item da lista corresponde a uma transacao

1 - Valor gasto nessa transacao
2 - Categoria correspondente + cor carateristica dessa categoria
3 - Data exata quando foi realizada a transacao
4 - Botao que permite editar a respetiva transacao
Se o utilizador carregar num item sem ser no botao descrito em 4, o utilizador podera visualizar as carateristicas da transacao


Add Transaction

Exemplo de Adicionar uma transacao na categoria Eat

1 - O user insere o valor gasto na transacao
2 - Abre um dialog de forma o utilizador escolher a data em que a transacao foi realizado
3 - Descricao (opcional) da transacao realizada
4 - Utilizador escolhe se a transacao foi realizada em dinheiro ou com cartao de credito/multibanco
5 - Abre a camara do telemovel de forma a permitir o utilizador adicionar uma imagem da fatura/recibo da transacao
6 - Faz zoom da imagem tirada pelo utilizador no ponto 5


Add a Category

Janela em que o utilizador adiciona uma nova categoria

1 - Titulo da categoria
2 - Cor carateristica da categoria (visivel na demonstracao do grafico circular), escolhe a cor a partir de um colorpicker
3* - Valor estimado que o utilizador prentende gastar no resto do mes atual
Este parametro nao se encontra presente se o utilizador adicionar uma categoria enquanto se encontra a fazer set do mes
4 - Guarda a nova categoria




UNIT TESTING

Para verificar o código da parte lógica foram realizados vários testes verifição as diferentes funções existentes.

Estes testes encontram-se dentro do projeto na pasta PocketSave/app/src/androidTest/java/lpoo/pocketsave/unitTest

feup-lpoo's People

Contributors

luisnmartins avatar

Watchers

 avatar  avatar  avatar

feup-lpoo's Issues

Em FALTA

  • Por settings no inicio e depois o new month

  • income e expenses no month a irem buscar os valores

  • Cor da categoria

  • Testes para sugestões

  • Sugestões no main a funcionar

  • Valor do balance - o que ainda ha disponível para gastar este mês

  • zoom imagem

  • change categoria e transacao

  • Total saved

  • Overview e estatísticas

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.