Durante as últimas semanas aprendemos muito sobre a linguagem C#, e em muitas ocasiões nossas práticas e exercícios tinham características do que a indústria de software se refere como back-end, aprendendo sobre tipos de dados, variáveis, Arrays, Listas, e Conceitos aplicados à Programação Orientada a Objetos. Que tal construir um sisteminha 100% funcional, sem depender de nenhuma outra tecnologia para exibição?! Vamos construir uma pequena fintech.
A aplicação deve contemplar os seguintes requisitos:
- O sistema deverá ser desenvolvido em C#;
- O sistema deve seguir o Roteiro da Aplicação;
- O desenvolvimento das mensagens de saída da fintech, esperando pela ação do usuário;
- Captura da interação do usuário via entrada padrão;
- O sistema deverá ser apresentado diretamente na linha de comando;
A fintech DEVinBank deseja automatizar todo o seu sistema de armazenamento de informações referentes aos seus clientes. O sistema deve conter os seguintes tipos de contas, cada uma com suas características:
- Conta corrente
- Na conta corrente o cliente tem direito ao cheque especial, ou seja, poderá ficar negativo durante um período de tempo. O sistema deve definir o total do cheque especial, conforme a renda mensal do correntista (10% da renda mensal).
- Extrato das transações.
- Conta poupança
- Na conta poupança o cliente não tem direito ao cheque especial.
- Na conta poupança, o cliente poderá simular quanto o seu valor renderá em um determinado tempo, para isso, o cliente deve informar a quantidade de tempo (em meses) e a rentabilidade anual da poupança.
- Extrato das transações.
- Conta investimento
- Neste tipo de conta, o cliente poderá escolher um tipo de investimento e o sistema deve apresentar o rendimento anual do investimento solicitado, conforme os valores abaixo:
- LCI: 8% ao ano.
- Tempo mínimo de aplicação: 6 meses
- LCA: 9% ao ano.
- Tempo mínimo de aplicação: 12 meses
- CDB: 10% ao ano.
- Tempo mínimo de aplicação: 18 meses
- O cliente pode realizar uma simulação do valor aplicado, para isso, ele deve indicar:
- Valor que será aplicado.
- Tempo que ficará aplicado o valor (em meses).
- Ao final da simulação deve-se apresentar uma mensagem para o cliente perguntando se ele deseja efetuar o investimento.
- Extrato das transações. Neste caso, sempre que o cliente efetuar uma transação deve-se armazenar:
- Valor aplicado.
- Tipo da aplicação.
- Data da aplicação
- Data da retirada do valor.
- A fintech também deseja manter um histórico das transferências, que deverá armazenar (utilizar conceitos de composição):
- Dados Conta Origem.
- Dados Conta Destino.
- Valor.
- Data (pegar a data e hora do sistema).
- O sistema também deverá apresentar os seguintes relatórios:
- Listar todas as contas.
- Contas com saldo negativo.
- Total do valor investido.
- Todas as transações de um determinado cliente.
- É importante que algumas transações não possam ser executadas em caso de problemas percebidos em suas operações:
- Transferência entre contas cujo montante supera o saldo acrescido do limite do cheque especial da conta de origem.
- Operações em momentos anteriores ao dia/hora da transação.
- Transferências durante o final de semana (sábado ou domingo).
- Não é possível fazer transferências para si próprio.
O sistema deve iniciar no dia do seu sistema operacional e você deve pegar essa informação de forma automática. Para simular os valores de investimentos, faça uma função que adiante o tempo no seu algoritmo. Por exemplo: Adiantar em 1 ano o sistema bancário.
- A aplicação é iniciada através da classe SistemaFinanceiro. Esta classe centraliza o menu de interação com o usuário e possui dependências localizadas nas classes Engines. Tais dependências são injetadas no início da classe Project (código de entrada da aplicação).
- O projeto utiliza o padrão de design Repositories. Toda a manipulação de dados de contas e transações se apoiam nos repositórios das respectivas classes. Os repositórios são classes de dependência paras as engines do sistema, e suas injeções também são realizadas no início da classe Program.
- As operações bancárias estão dividas entre:
- Operações realizadas pelo sistema, ou seja, não dependem necessariamente de uma conta de partida. Essas operações são executadas através do menu principal da aplicação. Exs.: "Listar contas negativadas", "Total de investimentos no DEVinBank", "Depósito".
- Operações realizadas por uma conta específica. São executadas a partir do menu "Minha Conta", que pede o número da conta para o acesso. Exs.: "Saque", "Transferência", "Depósito" (depósito é a única operação que pode ser realizada por ambas as rotas).
- As operações de investimento, das contas Investimento, estão separadas nas categorias de aplicação LCI, LCA e CDB, como descrito no roteiro. A escolha do modo de investimento está implícido no tempo de aplicação determinado pelo usuário. Ex.: Uma aplicação com duração de 15 meses, será obrigatoriamente da categoria LCA, uma vez que ultrapassa o mínimo exigido para LCA, porém não alcança a duração mínima de uma aplicação CDB.
As seguintes ferramentas foram usadas na construção do projeto: