package scientificcalculator;
import java.io.*;
import java.util.Scanner;
import basicOperations.*;
import calculationfiles.CalculationFile;
import conversions.Conversions;
import logarithmicOperations.LogarithemicOperations;
import trigonametricOmerations.TrigonametricOperations;
public class Calculator extends SetGet {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
File file = new File("CalculationsHistory.txt");
FileWriter fw = new FileWriter(file, true);
try (PrintWriter pw = new PrintWriter(fw, true)) {
int x = 0, y = 0;
double val = 0;
double c = 0;
try {
while (true) {
System.out.println("Calculate Operations : ");
System.out.println("1. Addition 2. Subtraction 3. Multiplication 4. Devidation");
System.out.println("5. Power 6. Squareroot 7. Nth Root 8. log");
System.out.println("9. Nlog 10. sin 11. asin 12. cos");
System.out.println("13. acos 14. tan 15. atan 16. store+");
System.out.println("17. recall 18. D2B 19. B2D 20. store file\n");
System.out.println("Enter your choice What you want?");
int choice = sc.nextInt();
ArethmeticOperations ao = new ArethmeticOperations();
BasicOperations bo = new BasicOperations();
LogarithemicOperations lo = new LogarithemicOperations();
TrigonametricOperations to = new TrigonametricOperations();
Conversions co = new Conversions();
CalculationFile cf = new CalculationFile();
SetGet sg = new SetGet();
switch (choice) {
case 1:
System.out.print("Enter first value : ");
x = sc.nextInt();
System.out.print("Enter second value : ");
y = sc.nextInt();
c = ao.addition(x, y);
sg.setX(c);
System.out.println("Answer : " + c);
pw.println(x + " + " + y);
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 2:
System.out.print("Enter first value : ");
x = sc.nextInt();
System.out.print("Enter second value : ");
y = sc.nextInt();
c = ao.subtraction(x, y);
System.out.println("Answer : " + c);
pw.println(x + " - " + y);
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 3:
System.out.print("Enter first value : ");
x = sc.nextInt();
System.out.print("Enter second value : ");
y = sc.nextInt();
c = ao.multiplication(x, y);
System.out.println("Answer : " + c);
pw.println(x + " * " + y);
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 4:
System.out.print("Enter first value : ");
x = sc.nextInt();
System.out.print("Enter second value : ");
y = sc.nextInt();
c = ao.devidation(x, y);
System.out.println("Answer : " + c);
pw.println(x + " / " + y);
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 5:
System.out.print("Enter first value : ");
x = sc.nextInt();
System.out.print("Enter second value : ");
y = sc.nextInt();
c = bo.power(x, y);
System.out.println("Answer : " + c);
pw.println(x + " pow " + y);
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 6:
System.out.print("Enter Number for Square root : ");
x = sc.nextInt();
c = bo.squareroot(x);
System.out.println("Answer : " + c);
pw.println(x + " squareroot ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 7:
System.out.print("Enter Base Number for nth Root : ");
int base = sc.nextInt();
System.out.print("Enter Exponant number : ");
double exp = sc.nextDouble();
double nthroot = bo.nthRoot(base, exp);
System.out.println("Answer : " + Math.round(nthroot * 1000.0) / 1000.0);
pw.println(base + " nthroot " + exp);
pw.println("Answer : " + Math.round(nthroot * 1000.0) / 1000.0);
pw.println();
System.out.println();
break;
case 8:
System.out.print("Enter number to find Log value : ");
val = sc.nextInt();
c = lo.log(val);
System.out.println("Answer : " + c);
pw.println(val + " log ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 9:
System.out.print("Enter number to find natural Log value : ");
val = sc.nextInt();
c = lo.log(val);
System.out.println("Answer : " + c);
pw.println(val + " nlog ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 10:
System.out.print("Enter angle to find Sine value : ");
x = sc.nextInt();
c = to.sin(x);
System.out.println("Answer : " + c);
pw.println(x + " sin ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 11:
System.out.print("Enter angle to find Inverse Sine value : ");
x = sc.nextInt();
c = to.inverssin(x);
System.out.println("Answer : " + c);
pw.println(x + " isin ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 12:
System.out.print("Enter angle to find Cosine value : ");
x = sc.nextInt();
c = to.cos(x);
System.out.println("Answer : " + c);
pw.println(x + " cos ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 13:
System.out.print("Enter angle to find Inverse Cosine value : ");
x = sc.nextInt();
c = to.inverscos(x);
System.out.println("Answer : " + c);
pw.println(x + " icos ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 14:
System.out.print("Enter angle to find Sine value : ");
x = sc.nextInt();
c = to.tan(x);
System.out.println("Answer : " + c);
pw.println(x + " tan ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 15:
System.out.print("Enter angle to find Sine value : ");
x = sc.nextInt();
c = to.inverstan(x);
System.out.println("Answer : " + c);
pw.println(x + " itan ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 16:
sg.setX(c);
break;
case 17:
c = sg.getAns();
System.out.println(c);
System.out.println();
break;
case 18:
System.out.print("Enter Decimal number to binary conversion : ");
x = sc.nextInt();
c = co.decimalToBinary(x);
System.out.println("Answer : " + c);
pw.println(x + " D2B ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 19:
System.out.print("Enter Binary number to Decimal conversion : ");
x = sc.nextInt();
c = co.binaryToDecimal(x);
System.out.println("Answer : " + c);
pw.println(x + " B2D ");
pw.println("Answer : " + c);
pw.println();
System.out.println();
break;
case 20:
System.out.println("Calculation History : \n");
cf.history();
break;
default:
System.out.println("Choose correct option... Try again ....!");
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Do an Operations only in Number Format ");
}
}
sc.close();
}
}