Coder Social home page Coder Social logo

salgado2004 / trabalho-final-lpoo-ufpr Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 1.0 917 KB

Trabalho prático final de Linguagem de Programação Orientada a Objetos do curso de Análise de Desenvolvimento de Sistemas da UFPR

Home Page: https://salgado2004.github.io/Trabalho-Final-LPOO-UFPR/

License: MIT License

Java 100.00%
analise-desenvolvimento-sistemas java junit4 kanban-board poo swing-gui ufpr

trabalho-final-lpoo-ufpr's Introduction

trabalho-final-lpoo-ufpr's People

Contributors

alissongabrielsantos avatar pedro-h108 avatar raulbana avatar salgado2004 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

pedro-h108

trabalho-final-lpoo-ufpr's Issues

Application of Design Patterns

I reviewed and identified parts of your code that can be improved by applying design patterns, such as:

Factory Method (Creational):

This pattern was chosen because it involves creating two subclasses that inherit from the superclass. The Factory Method is a creational design pattern that provides an interface for creating objects in a superclass while allowing subclasses to alter the type of objects that will be created. In this case, since we have a Conta class that has two subclasses, ContaCorrente and ContaInvestimento, it is advisable to use this design pattern.

Creacional (1)

Decorator (Structural):

The Decorator pattern is used to add functionalities to objects by placing these objects inside other objects, encapsulating these special objects with their functionalities. In this code, this design pattern can be implemented in the Conta class to add functionalities either in the short or long term. We can add more functionalities to the Conta class, such as setting transaction limits and other features.

Decorator (1)

Observer (Behavioral):

This design pattern is used when you want to notify about a change or event that happens to an object, and this notification is sent to the object that observes it. In the context of the code, we can see that the Conta class has two methods, deposita() and saca(). These methods are responsible for updating the user's account state. To obtain the account balance, there is getSaldo(), and the rest of the methods provide additional information. With the Observer design pattern, the Cliente will observe the Conta, and the former will be notified whenever a change or action occurs in the account.

Observable

(This is for a homework btw)

Correção no carregamento dos ícones no arquivo jar

Bug

O arquivo jar gerado não carregas as imagens corretamente.

Todos os ícones não estão sendo rederizados quando executado o arquivo .jar.

Causa

Provavelmente é um detalhe ao passar o caminho relativo das imagens. O arquivo .jar deve buscar diferente.

Adicionar funcionalidade de navegação nas telas

Tarefas

  • Fazer a funcionalidade de navegação
  • Implementar uma pilha
  • Criar as classes para cada tela
  • Criar métodos públicos de navegação

Nota

Por ser uma tarefa mais complexa, é interessante já criar o Javadoc e marcar uma reunião de alinhamento para explicar seu funcionamento.

Criar tela Manter Cliente

Tela Manter Cliente

  • Deve ser possível listar todos os clientes (Use AbstractTableModel)
  • Deve ser possível atualizar os dados de um cliente.
  • Deve ser possível excluir um cliente. Quando isso acontecer uma tela deve ser mostrada para confirmar o procedimento.
  • Deve-se avisar que todas as contas do cliente serão apagadas. Todas as contas vinculadas este cliente devem ser apagadas.
  • Deve ser possível listar os clientes por nome (ou parte do nome), por sobrenome (ou parte), por RG ou por CPF.
  • Deve ser possível ordenar a lista por nome, sobrenome(ordem alfabética) ou salário (do maior para o menor). Implemente a interface Comparable.

Criar classe Conta

Requisitos

Criar uma super classe Conta

  • A classe deve ser abstrata
  • A classe deve implementar a interface ContaI
  • A classe deve ter os métodos deposita e saca
  • A classe deve ter testes unitários, com pelo menos 95% de cobertura

Atributos

  • int numero;
  • Cliente dono;
  • double saldo;
  • double limite;

Interface ContaI

boolean deposita(double valor): O valor depositado deve ser positivo. Caso contrário o método retorna false.
boolean saca(double valor): O valor sacado deve ser positivo e não deve ser maior que que o saldo disponível + limite. Caso contrário retorna false
Cliente getDono()
int getNumero()
double getSaldo()
void remunera()

Corrigir função de deletar cliente por CPF

Bug

Quando o usuário informar um CPF e clicar no botão excluir, não deve importar se ele informou com "." e "-" ou não

Atualmente, ao informar o CPF com "." e "-", o sistema não exclui corretamente o cliente

Causa

A comparação de string é feita sem formatar o CPF. O CPF no "banco de dados" esta armazenado somente com números.

Corrigir investimento com saldo negativo

Bug

Quando o saldo da conta for menor que 0, não deve ser permitido realizar investimentos na tela Manipular Conta.

Ao investir com o saldo negativo, o saldo fica mais negativo (matemática básica)

Causa

Falta de validação do saldo antes de fazer o investimento.

Criar classe Endereço

Requisitos

  • A classe deve ter os atributos abaixo
  • Todos os atributos devem ter getters
  • A classe deve ter pelo menos 1 teste unitário

Atributos

  • logradouro: String
  • bairro: String
  • numero: int
  • cidade: String

Criar README do projeto

Adicionar um README ao projeto

  • Nome dos integrantes
  • Apresentação do curso
  • Apresentação do sistema

Criar Interface ContaI

Interface ContaI

boolean deposita(double valor): O valor depositado deve ser positivo. Caso contrário o método retorna false.
boolean saca(double valor): O valor sacado deve ser positivo e não deve ser maior que que o saldo disponível + limite. Caso contrário retorna false
Cliente getDono()
int getNumero()
double getSaldo()
void remunera()

Criar classe ContaCorrente

Requisitos

Criar uma classe ContaCorrente

  • A classe deve herdar a super Conta
  • A classe deve ter os métodos saca() e remunera() conforme R1
  • A classe deve ter testes unitários, com pelo menos 95% de cobertura

R1

  • public boolean saca(double valor): Antes de efetuar o saque deve-se verificar se o valor sacado não ultrapassa o limite da conta. Ou seja, a conta poderá ficar negativa até o limite estipulado na sua criação. Mostrar mensagem na tela informando o usuário.
  • public void remunera(): Aplicar remuneração de 1% ao saldo da conta.

Criar Tela Manipular conta

Tela Manipular conta

  • Deve ser possível selecionar a conta de um cliente pelo CPF.
  • Deve mostrar as opções: Saque, Depósito, Ver Saldo e Remunera

Criar tela Vincular Cliente à conta

Tela Vincular Cliente à conta

  • Deve ser possível selecionar um cliente
  • Os tipos de conta vinculados ao cliente podem ser selecionadas de uma combobox. Os tipos de conta serão: Conta Corrente e Conta Investimento
  • Uma vez selecionado o cliente e o tipo de conta a tela deve apresentar os campos para criação da conta de acordo com a R1
  • Se o cliente selecionado já possuir uma conta, deve aparecer um aviso "Este cliente já possui uma conta" e dois botões: excluirConta() e irParaTelaManipularConta()

R1

  • Se o tipo de conta selecionada for Conta Corrente
    • Depósito Inicial (valor em R$)
    • Limite (valor em R$)
    • O número da conta gerado automaticamente pelo sistema
  • Se o tipo da conta selecionada for Conta Investimento
    • Montante Mínimo
    • Depósito Mínimo
    • Depósito Inicial

Criar Classe Cliente

Requisitos

  • A classe deve ter os atributos abaixo
  • Todos os atributos devem ter getters e setters
  • A classe deve ter pelo menos 3 testes unitários

Atributos

  • nome: String
  • sobrenome: String
  • endereco: Endereço
  • rg: String
  • cpf: String
  • conta: Conta

Criar classe ContaInvestimento

Requisitos

Criar uma classe ContaInvestimento

  • A classe deve herdar a super Conta
  • A classe deve ter os métodos deposita(), saca() e remunera() conforme R1
  • A classe deve ter testes unitários, com pelo menos 95% de cobertura

R1

  • public boolean deposita(double valor): Recebe como parâmetro o valor a ser depositado. Se o valor a ser depositado for maior ou igual ao depositoMinimo então, o depósito deve ser efetuado. Para isso chame o método deposita da classe pai (Conta) e retorne true. Caso contrário, deve-se retornar false. Mostrar mensagem na tela informando usuário.
  • public boolean saca(double valor): Recebe como parâmetro o valor a ser sacado. Se o novo valor do saldo (considerando o saque) for maior ou igual ao montanteMinimo, o saque deve ser efetuado. Para isso invoque o método saque da classe pai (Conta) e retorne true. Caso contrário, deve-se retornar false. Mostrar mensagem na tela informando usuário.
  • public void remunera(): Aplicar remuneração de 2% ao saldo da conta.

Corrigir seleção de cliente durante criação da conta

Bug

No momento de criação da conta, ao informar algum campo incorretamente o usuário recebe uma mensagem de aviso. Ao fechar a mensagem, o cliente selecionado da tabela deixa de existir.

Isso causa ArrayIndexOutOfBoundsException quando o cliente tenta criar a conta

Causa

Na linha 132 e 146 da classe VincularCliente, o sistema busca o cliente selecionado da tabela para adicionar uma conta. Se não tiver um cliente selecionado, retornará uma exception

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.