App acessado via terminal usado para converter moedas como USD -> BRL utilizando uma API ExchangeRate-API externa para receber os valores das cotações em tempo real. Escolhendo as paridades através dos números de 1 a 6 no formato 2,5
por exemplo, é possível converter valores entre estas paridades que são "BRL", "USD", "GBP", "CNY", "CHF" e "EUR".
Java21
InteliJ IDEA
S.O. Windows 10
Esta aplicação Java é feita com Maven(mvn).
Então certifique-se de ter mvn instalado na sua máquina
mvn -version
Certifique-se de ter esta config de plugin no seu pom.xml para executar a aplicação.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>br.com.conversor.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Com tudo ok, execute o comando abaixo
mvn exec:java
CLASSES E INTERFACE
Class Main
Class Menu
Class CotacaoAtual
Class ConectorExchangeRate
Interface CalculoConversor
A classe é usada para iniciar a aplicação. Uma instância menu
da classe Menu
usando a função inicia()
FUNÇÕES
main()
O que faz: Inicia a aplicação Modificador de acesso:public
Parâmetros:String[] args
Retorno:void
A classe é usada para gerar o menu e rodar a aplicação
FUNÇÕES
clearConsole()
O que faz: Limpa tela do console
Modificador de acesso:private
Retorno:void
Code:
private static void clearConsole() {
// Usar códigos de escape ANSI para portabilidade
System.out.print("\033[H\033[2J");
}
menuInicio()
O que faz: Exibe o menu de inicio
Modificador de acesso:private
Retorno:void
menuConversor()
O que faz: Processa dados e Exibe resultados
Modificador de acesso:private
Parâmetros: int moedaBaseId, int moedaCotacaoId
Retorno:void
inicia()
O que faz: Inicia o aplicativo
Modificador de acesso:public
Retorno:void
Classe usada para trazer as cotas e fazer o calculo de cotação por meio da impementação da interface CalculoConversor
ATRIBUTOS
private final moedaBase: String
CONSTRUTORES
Usado para receber um valor necessário para as consultas e calculos, a moeda base para cotação
public CotacaoAtual(String moedaBase) {
this.moedaBase = moedaBase;
}
FUNÇÕES
valorCotaContra()
O que faz: Consulta dados na API ExenchangeRate-API e retorna o valor da cotação da moeda base contra a moeda de cotação
Modificador de acesso:public
Parâmetros: String moedaCotacao
Retorno:double
mapeia()
O que faz: Mapea todos os valores de um objeto JSON da consulta da moeda base feita pela classe ConectorExchangeRate usando o método respostaAPI() retornado umMap<String, Double>
Modificador de acesso:private
Retorno:Map<String, Double>
Parâmetros: ConectorExchangeRate conn
Code:
private Map<String, Double> mapeia(ConectorExchangeRate conn) {
// Capturar o json da request
String jsonString = conn.respostaAPI().body();
// Transformando num elemento
JsonElement elementoJson = JsonParser.parseString(jsonString);
// Transformar num obj
JsonObject objJson = elementoJson.getAsJsonObject();
// Pega o array dentro do Json
JsonObject conversionRates = objJson.getAsJsonObject("conversion_rates");
// Convertendo the JsonObject to a Map
Map<String, Double> ratesMap = new HashMap<>();
for (String key : conversionRates.keySet()) {
ratesMap.put(key, conversionRates.get(key).getAsDouble());
}
return ratesMap;
}
forteContra()
O que faz: Usa a funçãomapeia()
para fazer a filtragem e capturar a moeda mais FORTE contra a moeda base retornado umMap<String, Double>
Modificador de acesso:public
Retorno:Map<String, Double>
Parâmetros: String moedaBase
Code:
// Forte contra
public Map.Entry<String, Double> forteContra(String moedaBase){
ConectorExchangeRate conn = new ConectorExchangeRate(moedaBase);
Map<String, Double> ratesMap = mapeia(conn);
return Collections.max(ratesMap.entrySet(), Map.Entry.comparingByValue());
}
fracoContra()
O que faz: Usa a funçãomapeia()
para fazer a filtragem e capturar a moeda mais FRACA contra a moeda base retornado umMap<String, Double>
Modificador de acesso:public
Retorno:Map<String, Double>
Parâmetros: String moedaBase
Code:
// Fraco Contra
public Map.Entry<String, Double> fracoContra(String moedaBase){
ConectorExchangeRate conn = new ConectorExchangeRate(moedaBase);
Map<String, Double> ratesMap = mapeia(conn);
return Collections.min(ratesMap.entrySet(), Map.Entry.comparingByValue());
}
converteValor()
O que faz: Conteverte o valor fornecido de cotação multiplicando pela moeda base e retornado umdouble
Modificador de acesso:public
Retorno:double
Parâmetros: String moedaCotacao, double valorMoedaBase
Code:
@Override
public double converteValor(String moedaCotacao, double valorMoedaBase) {
double cotacao = valorCotaContra(moedaCotacao);
return cotacao * valorMoedaBase;
}
Esta classe irá tratar das requisições e conexão com a API
ATRIBUTOS
private final key: String
private code: String
private uri: String
CONSTRUTORES
Todos os construtores irão crirar uma URI dinânmica
ConectorExchangeRate()
Este contrutor irá criar uma uri automatica de conexão que irá capturar todos os códigos disponíveis da API
public ConectorExchangeRate() {
this.uri = "https://v6.exchangerate-api.com/v6/" + key + "/latest/" + code;
}
ConectorExchangeRate(String code)
Este contrutor irá criar uma uri automatica de conexão que irá capturar totodos dados de uma moeda
public ConectorExchangeRate(String code) {
this.uri = "https://v6.exchangerate-api.com/v6/" + key + "/latest/" + code;
}
ConectorExchangeRate(String code1, String code2)
Este contrutor irá criar uma uri automatica de conexão que irá capturar dados de uma moeda contra outra moeda, uma moeda base e uma moeda de cotação ex: USD/BRL
public ConectorExchangeRate(String code1, String code2){
this.uri = "https://v6.exchangerate-api.com/v6/" + key + "/pair/" + code1 + "/" + code2;
}
FUNÇÕES
respostaAPI()
O que faz: Faz a conexão com a API e retorna uma resposta JSON em STR
Modificador de acesso:public
Retorno:HttpResponse<String>
Code:
public HttpResponse<String> respostaAPI() {
// Cria um cliente HTTP
HttpClient client = HttpClient.newHttpClient();
// Fazer requisição GET
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(this.uri))
.GET()
.build();
try {
// capturando resposta
return client.send(request, BodyHandlers.ofString());
} catch (Exception err) {
System.out.println("Houve um erro na requisição: " + err);
return null;
}
}
Tratará de garantir que a função de calculo converteValor(String moedaCotacao, double valorMoedaBase)
esja implementada
CODE:
public interface CalculoConversor {
double converteValor(String moedaCotacao, double valorMoedaBase);
}
João Victor |
---|