Tugas 5 - Simple Calculator

 Nama : Widian Sasi Disertasiani

NRP : 5025211024

Kelas : PPB D 

Materi : Membuat aplikasi simple Calculator


Ini yang saya kerjakan berdasarkan contoh yang diberikan:


Ini yang telah dimodifikasi: 

Berikut codenya: 

package com.example.simplecalculator

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
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.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.simplecalculator.ui.theme.SimpleCalculatorTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
SimpleCalculatorTheme {
CalculatorApp()
}
}
}
}

@Composable
fun CalculatorApp() {
var input by remember { mutableStateOf("") }
var result by remember { mutableStateOf<String?>(null) }

Column(
modifier = Modifier
.fillMaxSize()
.background(Color(0xFFB3E5FC))
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Top
) {
Box(
modifier = Modifier
.fillMaxWidth()
.height(160.dp)
.padding(16.dp)
.background(Color.White, shape = RoundedCornerShape(16.dp)),
contentAlignment = Alignment.CenterEnd
) {
Column(modifier = Modifier.padding(16.dp)) {
if (result == null) {
Text(text = input, fontSize = 42.sp, textAlign = TextAlign.End)
} else {
Text(text = input, fontSize = 18.sp, color = Color.Gray, textAlign = TextAlign.End)
Text(text = result!!, fontSize = 42.sp, textAlign = TextAlign.End)
}
}
}

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

// Buttons layout
val buttons = listOf(
listOf("AC", "C", "%", "/"),
listOf("7", "8", "9", "*"),
listOf("4", "5", "6", "-"),
listOf("1", "2", "3", "+"),
listOf("0", "", "", "=")
)

buttons.forEach { row ->
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
row.forEach { label ->
if (label.isNotEmpty()) {
Button(
onClick = {
when (label) {
"AC" -> { input = ""; result = null }
"C" -> if (input.isNotEmpty()) input = input.dropLast(1)
"=" -> {
result = try {
val expression = input.split(" ")
if (expression.size == 3) {
val num1 = expression[0].toDouble()
val operator = expression[1]
val num2 = expression[2].toDouble()
when (operator) {
"+" -> (num1 + num2).toString()
"-" -> (num1 - num2).toString()
"*" -> (num1 * num2).toString()
"/" -> if (num2 != 0.0) (num1 / num2).toString() else "Error"
"%" -> (num1 * num2 / 100).toString()
else -> "Error"
}
} else {
"Error"
}
} catch (e: Exception) {
"Error"
}
}
else -> input += if (label in listOf("+", "-", "*", "/", "%")) " $label " else label
}
},
colors = ButtonDefaults.buttonColors(
containerColor = when {
label in listOf("AC", "C") -> Color(0xFFFF6F61)
label in listOf("+", "-", "*", "/", "=", "%") -> Color(0xFFFFD700)
else -> Color(0xFFFFC1CC)
}
),
shape = RoundedCornerShape(12.dp),
modifier = Modifier
.size(90.dp)
.clickable {}
) {
Text(label, fontSize = 28.sp, color = Color.Black)
}
} else {
Spacer(modifier = Modifier.size(90.dp))
}
}
}
Spacer(modifier = Modifier.height(8.dp))
}
}
}

@Preview(showBackground = true)
@Composable
fun CalculatorPreview() {
SimpleCalculatorTheme {
CalculatorApp()
}
}
Github: Tugas 5
Demo : Demo



Komentar

Postingan populer dari blog ini

Tugas 2 - PPB D