0% found this document useful (0 votes)
7 views12 pages

Practical 4

The document outlines the development of a standard calculator Android application that performs basic arithmetic operations such as addition, subtraction, multiplication, and division. It includes the XML layout for the user interface and the Java code for the main activity, detailing the functionality of buttons and operations. The application features a display for results and previous calculations, along with handling user input and performing calculations.

Uploaded by

2022002638.gcet
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views12 pages

Practical 4

The document outlines the development of a standard calculator Android application that performs basic arithmetic operations such as addition, subtraction, multiplication, and division. It includes the XML layout for the user interface and the Java code for the main activity, detailing the functionality of buttons and operations. The application features a display for results and previous calculations, along with handling user input and performing calculations.

Uploaded by

2022002638.gcet
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Mobile Application Development (202046712) 12202080501067

Practical – 4
Aim : Develop a standard calculator android application to perform basic
calculations like addition, subtraction, multiplication, and division.
Code:

activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
android:background="@drawable/gradient_background"
tools:context=".MainActivity">

<!-- Result Display at Top -->


<LinearLayout
android:id="@+id/display_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical"
android:padding="16dp"
android:background="@drawable/display_background">

<TextView
android:id="@+id/previous_calculation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#80FFFFFF"
android:textSize="18sp"
android:gravity="end"
android:maxLines="1"/>

<TextView
android:id="@+id/display"
GCET 15
Mobile Application Development (202046712) 12202080501067

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:textColor="#FFFFFF"
android:textSize="36sp"
android:gravity="end"
android:maxLines="1"/>
</LinearLayout>

<!-- Calculator Buttons at Bottom -->


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="16dp"
android:orientation="vertical">

<GridLayout
android:id="@+id/gridLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:columnCount="4"
android:rowCount="5">

<!-- Row 1 -->


<Button
android:id="@+id/btn_clear"
style="@style/CalculatorButton.Operator"
android:text="C" />

<Button
android:id="@+id/btn_plus_minus"
style="@style/CalculatorButton.Operator"
android:text="±" />

<Button
android:id="@+id/btn_percent"

GCET 16
Mobile Application Development (202046712) 12202080501067

style="@style/CalculatorButton.Operator"
android:text="%" />

<Button
android:id="@+id/btn_divide"
style="@style/CalculatorButton.Operator"
android:text="÷" />

<!-- Row 2 -->


<Button
android:id="@+id/btn_7"
style="@style/CalculatorButton.Number"
android:text="7" />

<Button
android:id="@+id/btn_8"
style="@style/CalculatorButton.Number"
android:text="8" />

<Button
android:id="@+id/btn_9"
style="@style/CalculatorButton.Number"
android:text="9" />

<Button
android:id="@+id/btn_multiply"
style="@style/CalculatorButton.Operator"
android:text="×" />

<!-- Row 3 -->


<Button
android:id="@+id/btn_4"
style="@style/CalculatorButton.Number"
android:text="4" />

<Button
android:id="@+id/btn_5"
style="@style/CalculatorButton.Number"

GCET 17
Mobile Application Development (202046712) 12202080501067

android:text="5" />

<Button
android:id="@+id/btn_6"
style="@style/CalculatorButton.Number"
android:text="6" />

<Button
android:id="@+id/btn_subtract"
style="@style/CalculatorButton.Operator"
android:text="-" />

<!-- Row 4 -->


<Button
android:id="@+id/btn_1"
style="@style/CalculatorButton.Number"
android:text="1" />

<Button
android:id="@+id/btn_2"
style="@style/CalculatorButton.Number"
android:text="2" />

<Button
android:id="@+id/btn_3"
style="@style/CalculatorButton.Number"
android:text="3" />

<Button
android:id="@+id/btn_add"
style="@style/CalculatorButton.Operator"
android:text="+" />

<!-- Row 5 -->


<Button
android:id="@+id/btn_0"
style="@style/CalculatorButton.Number"
android:layout_columnSpan="2"

GCET 18
Mobile Application Development (202046712) 12202080501067

android:text="0" />

<Button
android:id="@+id/btn_decimal"
style="@style/CalculatorButton.Number"
android:text="." />

<Button
android:id="@+id/btn_equals"
style="@style/CalculatorButton.Equals"
android:text="=" />
</GridLayout>
</LinearLayout>

</RelativeLayout>

MainActivity.java:
package com.example.calculator;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private TextView display, previousCalculation;


private String currentNumber = "";
private String previousNumber = "";
private String operation = "";
private boolean isNewOperation = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

GCET 19
Mobile Application Development (202046712) 12202080501067

setContentView(R.layout.activity_main);

display = findViewById(R.id.display);
previousCalculation = findViewById(R.id.previous_calculation);

// Number buttons
int[] numberButtonIds = {
R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4,
R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9
};

for (int id : numberButtonIds) {


findViewById(id).setOnClickListener(this::onNumberClick);
}

// Operation buttons
int[] operationButtonIds = {
R.id.btn_add, R.id.btn_subtract, R.id.btn_multiply, R.id.btn_divide
};

for (int id : operationButtonIds) {


findViewById(id).setOnClickListener(this::onOperationClick);
}

// Other buttons

findViewById(R.id.btn_equals).setOnClickListener(this::onEqualsClick);
findViewById(R.id.btn_clear).setOnClickListener(this::onClearClick);

findViewById(R.id.btn_decimal).setOnClickListener(this::onDecimalClick);

findViewById(R.id.btn_plus_minus).setOnClickListener(this::onPlusMinusCl
ick);

findViewById(R.id.btn_percent).setOnClickListener(this::onPercentClick);
}

private void onNumberClick(View view) {

GCET 20
Mobile Application Development (202046712) 12202080501067

Button button = (Button) view;


String number = button.getText().toString();

if (isNewOperation) {
currentNumber = number;
isNewOperation = false;
} else {
if (currentNumber.equals("0")) {
currentNumber = number;
} else {
currentNumber += number;
}
}

updateDisplay();
}

private void onOperationClick(View view) {


Button button = (Button) view;
String newOperation = button.getText().toString();

if (!currentNumber.isEmpty()) {
if (!previousNumber.isEmpty() && !operation.isEmpty() &&
!isNewOperation) {
calculateResult();
}

operation = newOperation;
previousNumber = currentNumber;
currentNumber = "";

updatePreviousCalculationDisplay();
} else if (!previousNumber.isEmpty()) {
operation = newOperation;
}

isNewOperation = false;
}

GCET 21
Mobile Application Development (202046712) 12202080501067

private void onEqualsClick(View view) {


if (!previousNumber.isEmpty() && !currentNumber.isEmpty() &&
!operation.isEmpty()) {
calculateResult();
operation = "";
isNewOperation = true;
}
}

private void onClearClick(View view) {


currentNumber = "";
previousNumber = "";
operation = "";
isNewOperation = true;
display.setText("0");
previousCalculation.setText("");
}

private void onDecimalClick(View view) {


if (isNewOperation) {
currentNumber = "0.";
isNewOperation = false;
} else if (!currentNumber.contains(".")) {
currentNumber += ".";
}
updateDisplay();
}

private void onPlusMinusClick(View view) {


if (currentNumber.isEmpty() && !previousNumber.isEmpty()) {
currentNumber = previousNumber;
previousNumber = "";
}

if (!currentNumber.isEmpty() && !currentNumber.equals("0")) {


if (currentNumber.startsWith("-")) {
currentNumber = currentNumber.substring(1);

GCET 22
Mobile Application Development (202046712) 12202080501067

} else {
currentNumber = "-" + currentNumber;
}
updateDisplay();
}
}

private void onPercentClick(View view) {


if (!currentNumber.isEmpty()) {
double num = Double.parseDouble(currentNumber) / 100;
currentNumber = String.valueOf(num);

// Remove trailing .0 if it's an integer


if (currentNumber.endsWith(".0")) {
currentNumber = currentNumber.substring(0,
currentNumber.length() - 2);
}

updateDisplay();
}
}

private void calculateResult() {


if (previousNumber.isEmpty() || currentNumber.isEmpty() ||
operation.isEmpty()) {
return;
}

double num1 = Double.parseDouble(previousNumber);


double num2 = Double.parseDouble(currentNumber);
double result = 0;

switch (operation) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;

GCET 23
Mobile Application Development (202046712) 12202080501067

break;
case "×":
result = num1 * num2;
break;
case "÷":
if (num2 != 0) {
result = num1 / num2;
} else {
display.setText("Error");
return;
}
break;
}

// Format the result


if (result == (long) result) {
currentNumber = String.format("%d", (long) result);
} else {
currentNumber = String.format("%s", result);
}

previousNumber = "";
updateDisplay();
updatePreviousCalculationDisplay();
}

private void updateDisplay() {


if (currentNumber.isEmpty()) {
display.setText("0");
} else {
display.setText(currentNumber);
}
}

private void updatePreviousCalculationDisplay() {


String text = previousNumber + " " + operation;
previousCalculation.setText(text);

GCET 24
Mobile Application Development (202046712) 12202080501067

}
}

Output:

GCET 25
Mobile Application Development (202046712) 12202080501067

GCET 26

You might also like