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
Posting Komentar