Tugas PPB - Aplikasi Kalkulator

Nama : Mavaldi Rizqy Hazdi

NRP : 5025211086

Kelas : Pemrograman Perangkat Bergerak D


    Tugas kali ini adalah membuat aplikasi kalkulator pada android studio menggunakan kotlin. Serta untuk pengayaan pada tugas kali ini adalah kalkulator luas persegi dan lingkaran.


File MainActivity.kt :

package com.example.calculatorapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.calculatorapp.ui.theme.CalculatorappTheme
import kotlin.math.PI

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

@Composable
fun CalculatorScreen() {
var number1 by remember { mutableStateOf("") }
var number2 by remember { mutableStateOf("") }
var result by remember { mutableStateOf(0.0) }

var areaInput by remember { mutableStateOf("") }
var areaResult by remember { mutableStateOf(0.0) }


Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
Divider(modifier = Modifier.padding(vertical = 5.dp))

// Basic Calculator Section
Text("Basic Calculator", style = MaterialTheme.typography.headlineSmall)

OutlinedTextField(
value = number1,
onValueChange = { number1 = it },
label = { Text("First number") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

OutlinedTextField(
value = number2,
onValueChange = { number2 = it },
label = { Text("Second number") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
Button(
onClick = {
result = (number1.toDoubleOrNull() ?: 0.0) + (number2.toDoubleOrNull() ?: 0.0)
},
modifier = Modifier.weight(1f)
) {
Text("+")
}

Button(
onClick = {
result = (number1.toDoubleOrNull() ?: 0.0) - (number2.toDoubleOrNull() ?: 0.0)
},
modifier = Modifier.weight(1f)
) {
Text("-")
}

Button(
onClick = {
result = (number1.toDoubleOrNull() ?: 0.0) * (number2.toDoubleOrNull() ?: 0.0)
},
modifier = Modifier.weight(1f)
) {
Text("×")
}

Button(
onClick = {
val num2 = number2.toDoubleOrNull() ?: 1.0
result = if (num2 != 0.0) {
(number1.toDoubleOrNull() ?: 0.0) / num2
} else {
Double.NaN // Handle division by zero
}
},
modifier = Modifier.weight(1f)
) {
Text("÷")
}
}

Text(text = "Result:", style = MaterialTheme.typography.bodyLarge)
Text(
text = "$result",
style = MaterialTheme.typography.headlineMedium.copy(
fontWeight = FontWeight.Bold
),
fontSize = 30.sp
)

Divider(modifier = Modifier.padding(vertical = 20.dp))

// Area Calculator Section
Text("Area Calculator", style = MaterialTheme.typography.headlineSmall)

OutlinedTextField(
value = areaInput,
onValueChange = { areaInput = it },
label = { Text("Square side/Circle radius") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
Button(
onClick = {
val input = areaInput.toDoubleOrNull() ?: 0.0
areaResult = input * input // Square area
},
modifier = Modifier.weight(1f)
) {
Text("Square Area □")
}

Button(
onClick = {
val input = areaInput.toDoubleOrNull() ?: 0.0
areaResult = PI * input * input // Circle area
},
modifier = Modifier.weight(1f)
) {
Text("Circle Area ◯")
}
}

Text(text = "Area Result:", style = MaterialTheme.typography.bodyLarge)
Text(
text = "$areaResult",
style = MaterialTheme.typography.headlineMedium.copy(
fontWeight = FontWeight.Bold
),
fontSize = 30.sp
)
}
}

@Preview(showBackground = true)
@Composable
fun CalculatorScreenPreview() {
CalculatorappTheme {
CalculatorScreen()
}
}


Tampilan Aplikasi pada Android Studio




Tampilan Aplikasi pada Emulator




*pengayaan pada tugas atau aplikasi kali ini adalah menambahkan kalkulator yang bisa menghitung luas persegi dan luas lingkaran yang nantinya akan terletak dibawah kalkulator biasa



Link Repositori : Github


Vidio Presentasi



Komentar

Postingan populer dari blog ini

Tugas PPB - Membuat Aplikasi Sederhana Menggunakan Jetpack Compose

ETS PPB - Aplikasi Galeri (MyGallery)

QUIZ 1 Pemrograman Web B