Project
import java.io.FileWriter;
import java.io.IOException;
interface Calculator {
double calculate(double x, double y);
}
class Addition implements Calculator {
@Override
public double calculate(double x, double y) {
return x + y;
}
}
class Subtraction implements Calculator {
@Override
public double calculate(double x, double y) {
return x - y;
}
}
class Multiplication implements Calculator {
@Override
public double calculate(double x, double y) {
return x * y;
}
}
class Division implements Calculator {
@Override
public double calculate(double x, double y) {
return x / y;
}
}
class Power implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.pow(x, y);
}
}
class SquareRoot implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.sqrt(x);
}
}
class NthRoot implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.pow(x, 1 / y);
}
}
class Logarithm implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.log10(x);
}
}
class NaturalLogarithm implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.log(x);
}
}
class Sine implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.sin(x);
}
}
class InverseSine implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.asin(x);
}
}
class Cosine implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.cos(x);
}
}
class InverseCosine implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.acos(x);
}
}
class Tangent implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.tan(x);
}
}
class InverseTangent implements Calculator {
@Override
public double calculate(double x, double y) {
return Math.atan(x);
}
}
class Memory {
private double number;
public void store(double number) {
this.number = number;
}
public double recall() {
return number;
}
}
class DecimalToBinary implements Calculator {
@Override
public double calculate(double x, double y) {
return Integer.parseInt(Integer.toBinaryString((int) x));
}
}
class BinaryToDecimal implements Calculator {
@Override
public double calculate(double x, double y) {
return Integer.parseInt(Double.toString(x), 2);
}
}
class SIPCalculator implements Calculator {
private static final int MONTHS_IN_YEAR = 12;
private static final int QUARTERS_IN_YEAR = 4;
@Override
public double calculate(double x, double y) {
double monthlyInterestRate = x / 100 / MONTHS_IN_YEAR;
double quarterlyInterestRate = x / 100 / QUARTERS_IN_YEAR;
double yearlyInterestRate = x / 100;
double monthlySIP = y * ((Math.pow(1 + monthlyInterestRate, MONTHS_IN_YEAR) - 1) / monthlyInterestRate);
double quarterlySIP = y * ((Math.pow(1 + quarterlyInterestRate, QUARTERS_IN_YEAR) - 1) / quarterlyInterestRate);
double yearlySIP = y * (Math.pow(1 + yearlyInterestRate, 1));
System.out.println("Monthly SIP: " + monthlySIP);
System.out.println("Quarterly SIP: " + quarterlySIP);
System.out.println("Yearly SIP: " + yearlySIP);
return 0;
}
}
class CalculationLogger {
private FileWriter fileWriter;
public CalculationLogger() {
try {
fileWriter = new FileWriter("CalculationsHistory.txt", true);
} catch (IOException e) {
e.printStackTrace();
}
}
public void log(String message) {
try {
fileWriter.write(message + "\n");
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ScientificCalculator {
private Calculator[] operations;
private Memory memory;
private CalculationLogger logger;
public ScientificCalculator() {
operations = new Calculator[19];
operations[0] = new Addition();
operations[1] = new Subtraction();
operations[2] = new Multiplication();
operations[3] = new Division();
operations[4] = new Power();
operations[5] = new SquareRoot();
operations[6] = new NthRoot();
operations[7] = new Logarithm();
operations[8] = new NaturalLogarithm();
operations[9] = new Sine();
operations[10] = new InverseSine();
operations[11] = new Cosine();
operations[12] = new InverseCosine();
operations[13] = new Tangent();
operations[14] = new InverseTangent();
operations[15] = new Memory();
operations[16] = new DecimalToBinary();
operations[17] = new BinaryToDecimal();
operations[18] = new SIPCalculator();
memory = new Memory();
logger = new CalculationLogger();
}
public void performOperation(int operationNumber, double x, double y) {
if (operationNumber >= 0 && operationNumber < operations.length) {
Calculator operation = operations[operationNumber];
double result = operation.calculate(x, y);
String message = "Operation: " + operation.getClass().getSimpleName() + ", x = " + x + ", y = " + y +
", Result = " + result;
logger.log(message);
System.out.println("Result: " + result);
} else {
System.out.println("Invalid operation number.");
}
}
public void storeNumber(double number) {
memory.store(number);
System.out.println("Number stored in memory: " + number);
}
public void recallNumber() {
double number = memory.recall();
System.out.println("Number recalled from memory: " + number);
}
}
public class ScientificCalculatorApp {
public static void main(String[] args) {
ScientificCalculator calculator = new ScientificCalculator();
// Infinite loop to take inputs from the user
while (true) {
System.out.println("Select an operation:");
System.out.println("0. Addition (+)");
System.out.println("1. Subtraction (-)");
System.out.println("2. Multiplication (*)");
System.out.println("3. Division (/)");
System.out.println("4. Power (^)");
System.out.println("5. Square Root (Sqrt)");
System.out.println("6. Nth Root (Nrt)");
System.out.println("7. Logarithm (log)");
System.out.println("8. Natural Logarithm (logn)");
System.out.println("9. Sine (sin)");
System.out.println("10. Inverse Sine (isin)");
System.out.println("11. Cosine (cos)");
System.out.println("12. Inverse Cosine (icos)");
System.out.println("13. Tangent (tan)");
System.out.println("14. Inverse Tangent (itan)");
System.out.println("15. Store Number (stor)");
System.out.println("16. Recall Number (recall)");
System.out.println("17. Decimal to Binary (d2b)");
System.out.println("18. Binary to Decimal (b2d)");
System.out.println("19. SIP Calculation (sip)");
int operationNumber = Integer.parseInt(System.console().readLine("Enter the operation number: "));
if (operationNumber >= 0 && operationNumber <= 14) {
double x = Double.parseDouble(System.console().readLine("Enter the value of x: "));
double y = Double.parseDouble(System.console().readLine("Enter the value of y: "));
calculator.performOperation(operationNumber, x, y);
} else if (operationNumber == 15) {
double number = Double.parseDouble(System.console().readLine("Enter the number to store: "));
calculator.storeNumber(number);
} else if (operationNumber == 16) {
calculator.recallNumber();
} else if (operationNumber == 17 || operationNumber == 18) {
double number = Double.parseDouble(System.console().readLine("Enter the number: "));
calculator.performOperation(operationNumber, number, 0);
} else if (operationNumber == 19) {
double interestRate = Double.parseDouble(System.console().readLine("Enter the interest rate: "));
double investmentAmount = Double.parseDouble(System.console().readLine("Enter the investment amount: "));
calculator.performOperation(operationNumber, interestRate, investmentAmount);
} else {
System.out.println("Invalid operation number. Please try again.");
}
}
}
}