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.
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.
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.
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:
Activity Calcular for Juros Kotlin LoopPosts relacionados: