Implementando um sistema de equalização de pagamentos (rachid)
- #Java
Neste artigo eu explico um pequeno projeto que desenvolvi para facilitar o cálculo de acerto de pagamentos, quando um grupo de pessoa faz pagamentos, mas no final os valores devem a serem pagos devem ser partilhados igualmente entre si. Por exemplo, pessoas vivendo numa república, com vários membros fazendo pagamentos que no fim do mês todos devem participar dos custos.Utilizei 2 classes para modelar as entidades.
Classe Pessoa, com seguintes atributos:
private String nome;
private Map<String, Double> aPagar = new HashMap<String, Double>();
private Map<String, Double> aReceber = new HashMap<>();
Essa classe identifica a pessoa do grupo, e cada Collection identifica os valores a pagar e a receber usando a chave nome da pessoa que tem a receber e a que tem a pagar
Classe Pagamento, com os seguintes atributos:
private double valor = 0;
private String descricao = null;
private String quemPagou = null;
Onde identifico a pessoa que pagou, descrição e valor do pagamento
Na classe Application (onde chamo o main()) eu defino as seguintes variáveis:
List<Pagamento> listaPagamentos = new ArrayList<>();
Map<String, Pessoa> listaPessoas = new HashMap<String, Pessoa>();
List<String> nomeDasPessoas = new ArrayList<String>();
listaPagamentos armazena todos os pagamentos (objetos da classe Pagamemento) feitos pelo grupo de pessoas. A listaPessoas é um map (não pode haver duas pessoas iguais) onde armazeno as pessoas (objeto da classe Pessoa), e a lista. Finalmente a lista nomeDasPessoas, é uma lista de nome de String de nome das pessoas que fazem parte do grupo, eu preciso dessa variável pois eu faço um loop dentro de um loop para consolidar os valores a pagar e a receber de cada membro do grupo. No final eu imprimo as mensagens de quem deve para quem. Um exemplo abaixo:
***CADASTRO DAS PESSOAS A FAZEREM PARTE DO RACHID***
Entre com o nome das pessoas que vão fazer o rachid [até 5 letras]: MARIO
Entre com o nome das pessoas que vão fazer o rachid [até 5 letras]: SANDR
Entre com o nome das pessoas que vão fazer o rachid [até 5 letras]: ANNA
Entre com o nome das pessoas que vão fazer o rachid [até 5 letras]: PAULO
Entre com o nome das pessoas que vão fazer o rachid [até 5 letras]:
***CADASTRO DE PAGAMENTOS***
Entre quem pagou [PAULO/SANDR/ANNA/MARIO [case sensitive] : MARIO
Entre com a descrição do pagamento: ALUGUEL APTO REF MARCO
Entre com o valor do pagamento: 1200
Entre quem pagou [PAULO/SANDR/ANNA/MARIO [case sensitive] : SANDR
Entre com a descrição do pagamento: INTERNET E TELEFONE
Entre com o valor do pagamento: 269,90
Entre quem pagou [PAULO/SANDR/ANNA/MARIO [case sensitive] : ANNA
Entre com a descrição do pagamento: CONDOMINIO
Entre com o valor do pagamento: 567,89
Entre quem pagou [PAULO/SANDR/ANNA/MARIO [case sensitive] : ANNA
Entre com a descrição do pagamento: MERCADO MAT LIMPEZA
Entre com o valor do pagamento: 127,34
Entre quem pagou [PAULO/SANDR/ANNA/MARIO [case sensitive] :
***LISTA DE PAGAMENTOS***
Pagamento [valor=1200.0, descricao=ALUGUEL APTO REF MARCO, quemPagou=MARIO]
Pagamento [valor=269.9, descricao=INTERNET E TELEFONE, quemPagou=SANDR]
Pagamento [valor=567.89, descricao=CONDOMINIO, quemPagou=ANNA]
Pagamento [valor=127.34, descricao=MERCADO MAT LIMPEZA, quemPagou=ANNA]
***RACHID CONSOLIDADO***
PAULO deve a MARIO o valor de R$ 300,00
SANDR deve a MARIO o valor de R$ 232,53
ANNA deve a MARIO o valor de R$ 126,19
PAULO deve a SANDR o valor de R$ 67,48
SANDR deve a ANNA o valor de R$ 106,33
PAULO deve a ANNA o valor de R$ 173,81
PROGRAMA FINALIZADO
O código fonte está aqui: