TUGAS 5 PPB - KEYSA ANADEA 5025211028

  

TUGAS 5 PPB

Deskripsi Proyek: Kalkulator App

Nama: Keysa Anadea Aqiva Ajie

NRP: 5025211028

Kelas: PPB A


Membangun Aplikasi Kalkulator Sederhana di Android Studio Menggunakan Jetpack Compose

Pada tugas kali ini, saya membuat sebuah aplikasi kalkulator sederhana menggunakan Jetpack Compose di Android Studio.
Aplikasi ini dapat melakukan operasi matematika dasar, yaitu:

  • Penjumlahan ➕

  • Pengurangan ➖

  • Perkalian ✖️

  • Pembagian ➗

  • Clear input (Tombol C)

 Langkah-Langkah Pembuatan Aplikasi

1. Membuat Project Baru

Saya membuat project Android Studio baru dengan konfigurasi:

  • Template: Empty Activity (Compose aktif)

  • Nama project: KalkulatorApp

  • Bahasa: Kotlin

  • Minimum SDK: API 24 (Android 7.0 Nougat)

2. Membuat Tampilan Kalkulator

Semua tampilan dibuat menggunakan fungsi @Composable.
Tampilan kalkulator terdiri dari:

  • Display Area: Menampilkan angka input dan hasil perhitungan.

  • Tombol Angka dan Operator: Disusun dalam grid 4x4.

  • Tombol Clear (C): Untuk menghapus seluruh input.


 Struktur Program

a) Mainactivity.kt 

Semua logika aplikasi ditempatkan di MainActivity.kt.
Berikut fitur utamanya:

  • Display: Menampilkan input angka dan hasil perhitungan.

  • State Management:

    • displayText ➔ Menyimpan teks yang tampil di layar.

    • firstNumber ➔ Menyimpan angka pertama sebelum operasi.

    • operator ➔ Menyimpan operasi yang dipilih.

  • Button Handling:

    • Klik angka ➔ menambahkan ke displayText.

    • Klik operator ➔ menyimpan angka pertama dan operator.

    • Klik = ➔ menghitung hasil berdasarkan angka pertama dan kedua.

    • Klik C ➔ membersihkan seluruh input.

b) Fungsi Perhitungan

Terdapat fungsi calculate() untuk memproses hasil sesuai operator yang dipilih.

Contoh implementasi fungsi:


HASIL KODE:




KODE:

MainActivity.kt

package com.example.kalkulatorapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.kalkulatorapp.ui.theme.KalkulatorAppTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
KalkulatorAppTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
KalkulatorScreen()
}
}
}
}
}

@Composable
fun KalkulatorScreen() {
var displayText by remember { mutableStateOf("") }
var operator by remember { mutableStateOf<String?>(null) }
var firstNumber by remember { mutableStateOf("") }

Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally
) {
// ➡️ Display layar kalkulator
Box(
modifier = Modifier
.fillMaxWidth()
.height(150.dp)
.background(Color.LightGray)
.padding(16.dp),
contentAlignment = Alignment.CenterEnd
) {
Text(
text = if (displayText.isEmpty()) "0" else displayText,
fontSize = 48.sp,
textAlign = TextAlign.End
)
}

Spacer(modifier = Modifier.height(16.dp))

// ➡️ Tombol Clear "C"
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.End
) {
Button(
onClick = {
displayText = ""
operator = null
firstNumber = ""
},
modifier = Modifier
.padding(8.dp)
.size(width = 100.dp, height = 60.dp)
) {
Text("C", fontSize = 24.sp)
}
}

Spacer(modifier = Modifier.height(8.dp))

// ➡️ Tombol-tombol kalkulator
val buttons = listOf(
listOf("7", "8", "9", "÷"),
listOf("4", "5", "6", "×"),
listOf("1", "2", "3", "-"),
listOf("0", ".", "=", "+")
)

buttons.forEach { row ->
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
horizontalArrangement = Arrangement.SpaceEvenly
) {
row.forEach { buttonText ->
Button(
onClick = {
when (buttonText) {
"÷", "×", "-", "+" -> {
if (displayText.isNotEmpty() && operator == null) {
operator = buttonText
firstNumber = displayText
displayText += buttonText
}
}
"=" -> {
if (operator != null && firstNumber.isNotEmpty()) {
val parts = displayText.split(operator!!)
if (parts.size == 2) {
val secondNumber = parts[1]
val result = calculate(firstNumber, secondNumber, operator!!)
displayText = result
operator = null
firstNumber = ""
}
}
}
else -> {
displayText += buttonText
}
}
},
modifier = Modifier
.padding(8.dp)
.size(80.dp)
) {
Text(buttonText, fontSize = 24.sp)
}
}
}
}
}
}

fun calculate(number1: String, number2: String, operator: String): String {
val num1 = number1.toDoubleOrNull() ?: return ""
val num2 = number2.toDoubleOrNull() ?: return ""

return when (operator) {
"+" -> (num1 + num2).toString()
"-" -> (num1 - num2).toString()
"×" -> (num1 * num2).toString()
"÷" -> if (num2 != 0.0) (num1 / num2).toString() else "Error"
else -> ""
}
}

Komentar

Postingan populer dari blog ini

TUGAS 2 PPB - KEYSA ANADEA 5025211028

TUGAS 7 PPB - KEYSA ANADEA 5025211028

ETS PPL A_KEYSA ANADEA