Redes Sociais
 Telegram  YouTube
Como fazer aplicativo que calcula juros em Kotlin
14 de julho de 2020

Neste tutorial vamos ver como fazer aplicativo que calcula juros em Kotlin, para ver um pouco sobre os cálculos com programação.

Vamos ver neste aplicativo como se calcula juros simples e juros compostos enviando a informação por EditText e um Button e assim recebendo a resposta em uma nova activity.

Para começar primeiramente vamos criar um projeto novo vazio(Empty) com o nome de br.com.uware.juros para inserir o nosso código.

Vamos então começar a preparar a base de nosso aplicativo para poder inserir as linhas de programação que vamos utilizar no projeto.

Montando a base

Para começar a montar a base de nosso aplicativo vamos então inserir as linhas das strings que vamos utilizar editando assim o arquivo strings.xml.

<resources>
    <string name="app_name">Juros</string>

    <string name="opt">Escolha uma opção:</string>
    <string name="opt_simples">Simples</string>
    <string name="opt_composto">Composto</string>
    <string name="et_valor">Valor:</string>
    <string name="et_parcelas">Quantidade de parcelas:</string>
    <string name="et_juros">Valor dos juros ao mês:</string>
    <string name="btn_enviar">Enviar</string>
    <string name="btn_limpar">Limpar</string>
    <string name="err_vazio">Não pode ter campos vazios.</string>

    <string name="resp_juros">Juros sobre o valor:</string>
    <string name="resp_total">Valor total:</string>
    <string name="resp_parcela">Valor da parcela fixa:</string>
    <string name="resp_total_juro">Valor total cobrado nos juros:</string>

</resources>

Então com nosso arquivo de strings pronto chegou a hora de criar mais uma activity com o nome de RespActivity para receber as informações fazer o cálculo e imprimir a resposta.





Montando o layout

Chegou a hora de inserir o código em nossos 2 arquivos de layout para assim fazer o nosso aplicativo funcionar.

Vamos então começar inserindo o código do nossa arquivo activity_main.xml que vai ficar como o seguinte.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:textStyle="bold"
        android:textSize="40dp"
        android:gravity="center"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/layOpt"/>
    <LinearLayout
        android:id="@+id/layOpt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:id="@+id/tvOptTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/opt" />
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
            <RadioButton
                android:id="@+id/rdbOptSimples"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="@string/opt_simples"/>
            <RadioButton
                android:id="@+id/rdbOptComposto"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/opt_composto"/>
        </RadioGroup>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginStart="50dp"
            android:layout_marginEnd="50dp"
            android:layout_marginTop="30dp">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/et_valor"/>
            <EditText
                android:id="@+id/etValor"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/et_parcelas"/>
            <EditText
                android:id="@+id/etQnt"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/et_juros"/>
            <EditText
                android:id="@+id/etJuros"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"/>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent">
        <Button
            android:id="@+id/btnEnviar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/btn_enviar"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/btnLimpar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/btn_limpar"
            android:layout_weight="1"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Agora vamos então inserir o seguinte código em nosso arquivo activity_resp.xml para que ele possa imprimir a resposta do cálculo.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RespActivity">

    <TextView
        android:id="@+id/tvResp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>
    
</androidx.constraintlayout.widget.ConstraintLayout>

Com os nossos arquivos de layout prontos agora vamos seguir para o próximo passo que é fazer a programação para que tudo funcione.





Como fazer aplicativo que calcula juros em Kotlin

Vamos então editar o nosso arquivo MainActivity.kt para colocar os códigos que vão ler os campos de EditText e o RadioButton para enviar os valores para a próxima activity.

package br.com.uware.juros

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Envia dados para a próxima activity
        btnEnviar.setOnClickListener {
            if(etValor.text.isNotEmpty() && etQnt.text.isNotEmpty() && etJuros.text.isNotEmpty()){
                val intent = Intent(this, RespActivity::class.java).apply {
                    putExtra(
                        "mode",
                            if (rdbOptSimples.isChecked) "simples"
                            else "composto"
                    )
                    putExtra("valor", etValor.text.toString())
                    putExtra("qnt", etQnt.text.toString())
                    putExtra("juros", etJuros.text.toString())
                }
                startActivity(intent)
            }
            else{
                Toast.makeText(this, R.string.err_vazio, Toast.LENGTH_LONG).show()
            }
        }

        // Limpa dados do EditText
        btnLimpar.setOnClickListener {
            etValor.setText("")
            etQnt.setText("")
            etJuros.setText("")
            rdbOptSimples.isChecked = true
        }
    }
}

Logo depois de ter deixado a activity que vai enviar os códigos pronta vamos então fazer a RespActivity.kt que vai receber os valores e fazer o cálculo imprimindo na tela o resultado, e ela deve ficar assim como o seguinte código.

package br.com.uware.juros

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_resp.*
import java.lang.Exception
import java.text.DecimalFormat
import kotlin.math.pow

class RespActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_resp)

        try {
            val valor = intent.getStringExtra("valor").toDouble()
            val qnt = intent.getStringExtra("qnt").toInt()
            val juros = intent.getStringExtra("juros").toDouble()
            val mode = intent.getStringExtra("mode")
            var result: Resultados = Resultados()
            when(mode){
                "simples" -> result = calcSimp(valor,qnt,juros)
                "composto" -> result = calcComp(valor,qnt,juros)
            }
            // Exibindo resposta no TextView
            tvResp.text = getString(R.string.et_valor)+" "+valor+"\n"+
                    getString(R.string.resp_total)+" "+result.totalValor+"\n"+
                    getString(R.string.et_parcelas)+" "+qnt+"\n"+
                    getString(R.string.resp_parcela)+" "+result.parcela+"\n"+
                    getString(R.string.et_juros)+" "+juros+"%\n"+
                    getString(R.string.resp_juros)+" "+result.totalJuros+"%"+"\n"+
                    getString(R.string.resp_total_juro)+" "+result.totalJuroValor
        } catch (e: Exception){
            Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show()
        }
    }

    // Calcula juros e retorna Valor parc, valor total, total de juros e valor dos juros
    private fun calcSimp(valor: Double, qnt: Int, juros: Double): Resultados{
        val result: Resultados = Resultados()
        result.totalJuros = (qnt*juros).format()
        result.totalValor = (valor+(valor*(result.totalJuros.toDouble()/100))).format()
        result.parcela = (result.totalValor.toDouble()/qnt).format()
        result.totalJuroValor = (result.totalValor.toDouble()-valor).format()
        return result
    }
    private fun calcComp(valor: Double, qnt: Int, juros: Double): Resultados{
        val result: Resultados = Resultados()
        val expo = (1+(juros/100)).pow(qnt)
        result.totalValor = (valor*expo).format()
        result.parcela = (result.totalValor.toDouble()/qnt).format()
        val perc = valor/100
        result.totalJuros = ((result.totalValor.toDouble()-valor)/perc).format()
        result.totalJuroValor = (result.totalValor.toDouble()-valor).format()
        return result
    }

    // Formata número double para duas casas
    private fun Double.format(): String {
        val df = DecimalFormat("#.00")
        return df.format(this)
    }

    // Classe para receber os dados
    data class Resultados(
        var parcela: String = "",
        var totalValor: String = "",
        var totalJuroValor: String = "",
        var totalJuros: String = ""
    )
}

Agora é só compilar e rodar o aplicativo e testar para ver se está funcionando tudo perfeitamente.

Se você deseja conhecer mais sobre a linguagem kotlin acesse o kotlinlang.org.

Enfim espero poder ter ajudado com mais este tutorial sobre como fazer aplicativo que calcula juros em Kotlin.





Tags: / / / / /
Autor: Rodrigo Leutz

Desenvolvedor Web e Android ( Kotlin e Java )


Como criar uma Calculadora em kotlin com ViewModel

Neste tutorial irei descrever como criar uma calculadora simples de quatro operações em kotlin mas vamos usar o recurso de[...]

27 de setembro de 2020

Como transformar voz em texto com Kotlin

Nesse tutorial vou demostrar como transformar voz em texto(string) com Kotlin para que você utilize os recursos de voz para inserir strings na[...]

18 de junho de 2020

Como criar mascara do EditText em Kotlin

Nesse tutorial vamos ver como criar mascara do EditText em Kotlin para que assim o usuário possa ter uma aplicação mais[...]

26 de maio de 2020