Bem, vamos lá, eu já uso uma calculadora de despesas minha e a medida que fui usando acabei fazendo over engineering, vou manter simples aqui.
Mobills, Organizze, PicPay, todos os apps de finanças BR usam centavos como inteiro internamente, para nao ter problema no float.
Algoritmo:
total_centavos = 0
lista_despesas = [] # guardar para mostrar no final
repetir:
entrada = pedir("valor da despesa (ou 'fim' para encerrar)")
se entrada == "fim":
sair do loop
valor_centavos = converter_para_centavos(entrada)
se valor_centavos é inválido ou < 0:
avisar erro e continuar
adicionar (categoria, valor_centavos) em lista_despesas
total_centavos = total_centavos + valor_centavos
mostrar lista_despesas
mostrar "Total: R$ " + formatar(total_centavos)
A próxima evolução natural é guardar categoria por despesa (mercado, transporte, lazer):
lista_despesas = []
...
categoria = pedir("categoria")
lista_despesas.adicionar((categoria, valor))
Edição e remoção
Por último, permitir corrigir um valor digitado errado (digitou 1500 em vez de 150) sem recomeçar. Aqui já entra
estado mais complexo índice da despesa, confirmação, recálculo do total.
- Comece com o total igual a 0.
- Solicite a categoria.
- Solicite um valor de despesa ao usuário.
- Verifique se o valor digitado é válido:
a. Se não for um número, avise o erro e volte ao passo 2.
b. Se for um número negativo, avise o erro e volte ao passo 2.
c. Confirmar valor com o usuário. - Se o valor for igual a 0, vá para o passo 7.
- Caso contrário:
a. Some o valor ao total.
b. Volte ao passo 2. - Exiba o total acumulado para o usuário.