// Main Class
import java.util.Scanner;
import OperationMethods.ArithmeticOperators.*;
import OperationMethods.OperationsHistory.*;
import OperationMethods.OtherFunctions.*;
import OperationMethods.TrignometricFunctions.*;
public class ScientificCalculator {
// Using Array of Operations To display the operation Methods serially
// It will help the program for correct readability
public static void ListOfOperations() {
System.out.println("#\tWelcome To The Scientific Calculator\n");
String Operation[] = {"Addition(+)", "Subtraction(-)", "Multipliaction(*)", "Division(/)", "Power", "Square Root", "nth Root", "log", "logn", "sin", "isin", "cos", "icos",
"tan", "itan", "d2b", "b2d", "SIP", "Store", "Stored Operation", "Recall" , "Delete","Exit"};
System.out.println("#\tOperations Methods\n");
for (int i = 1; i < Operation.length + 1; i++) {
System.out.println("[" + i + "]" + ". " + Operation[i - 1]);
}
}
public static void main(String[] args) {
ListOfOperations();
Scanner sc = new Scanner(System.in);
String stor = null;
while (true) {
System.out.print("\nWhat would you like to do? : ");
int choice = sc.nextInt();
// For User Choice Switch Case is Used Because gives more comfort to understnd the program
// The program is design in such a way that calculator has choices ranging from 1 to 23 To operations on the scientific Calcua;tor
// The program will take user input unless an untill user exit from the calculator.
// If user choice wrong choice then the default case is been set to inform the user about it.
switch (choice) {
case 1:
Addition.CalcAddition();
continue;
case 2:
Subtraction.CalcSubtraction();
continue;
case 3:
Multiplication.CalcMultiplication();
continue;
case 4:
Division.CalcDivision();
continue;
case 5:
Power.CalcPower();
continue;
case 6:
SquareRoot.CalcSquareRoot();
continue;
case 7:
nthRoot.CalcnthRoot();
continue;
case 8:
log10.CalcLogarithmicValue();
continue;
case 9:
logn.CalcNaturalLog();
continue;
case 10:
sin.CalcSin();
continue;
case 11:
isin.CalcInverseSin();
continue;
case 12:
cos.CalcCos();
continue;
case 13:
icos.CalcInverseCos();
continue;
case 14:
tan.CalcTan();
continue;
case 15:
itan.CalcInverseTan();
continue;
case 16:
d2b.CalcDecimalToBinary();
continue;
case 17:
b2d.CalcBinaryToDecimal();
continue;
case 18:
SIP.CalcSIP();
continue;
case 19:
System.out.print("Entre The Value : ");
sc.nextLine();
stor = sc.nextLine();
continue;
case 20:
System.out.print("Stored Operation No. : " + stor + "\n");
continue;
case 21:
RecallHistory.RecallData();
continue;
case 22:
DeleteHistory.DeleteAllData();
continue;
case 23:
break;
default:
System.out.println("Invalid Choice !!");
}
}
}
}
// Addition Class
package OperationMethods.ArithmeticOperators;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class Addition {
public static void CalcAddition() {
System.out.println("#\tAddition");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The First Number : ");
double num1 = sc.nextDouble();
System.out.print("Enter The Second Number : ");
double num2 = sc.nextDouble();
String Ans = ("\nAddition = " + num1 + " + " + num2 + " = " + (num1 + num2));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Division Class
package OperationMethods.ArithmeticOperators;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class Division {
public static void CalcDivision() {
System.out.println("#\tDivision");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The First Number : ");
double num1 = sc.nextDouble();
System.out.print("Enter The Second Number : ");
double num2 = sc.nextDouble();
try {
String Ans = ("\nDivision = " + num1 + " / " + num2 + " = " + (num1 / num2));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
e.getLocalizedMessage();
}
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Multiplication Class
package OperationMethods.ArithmeticOperators;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class Multiplication {
public static void CalcMultiplication() {
System.out.println("#\tMultiplication");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The First Number : ");
double num1 = sc.nextDouble();
System.out.print("Enter The Second Number : ");
double num2 = sc.nextDouble();
String Ans = ("\nMultiplication = " + num1 + " x " + num2 + " = " + (num1 * num2));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Subtraction Class
package OperationMethods.ArithmeticOperators;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class Subtraction {
public static void CalcSubtraction() {
System.out.println("#\tSubtraction");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The First Number : ");
double num1 = sc.nextDouble();
System.out.print("Enter The Second Number : ");
double num2 = sc.nextDouble();
String Ans = ("\nSubtraction = " + num1 + " - " + num2 + " = " + (num1 - num2));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Cos Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class cos {
public static void CalcCos() {
System.out.println("#\tCos( )");
try {
Scanner sc = new Scanner(System.in);
System.out.print("Enter The Angle : ");
double num1 = sc.nextDouble();
String Ans = ("\ncos " + num1 + " = " + Math.cos(Math.toRadians(num1)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Cos Inverse Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class icos {
public static void CalcInverseCos() {
System.out.println("#\tCos Inverse( )");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Angle : ");
double num1 = sc.nextDouble();
String Ans = ("\nicos " + num1 + " = " + Math.toDegrees(Math.acos(num1)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Sin Inverse Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class isin {
public static void CalcInverseSin() {
System.out.println("#\tSin Inverse( )");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Angle :");
double ang = sc.nextDouble();
String Ans = ("\nisin " + ang + " = " + Math.toDegrees(Math.asin(ang)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Tan Inverse Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class itan {
public static void CalcInverseTan() {
System.out.println("#\tTan Inverse( ) ");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Angle : ");
double num1 = sc.nextDouble();
String Ans = ("\nitan " + num1 + " = " + Math.toDegrees(Math.atan(num1)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Sin Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class sin {
public static void CalcSin() {
System.out.println("#\tSin( )");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Angle : ");
double ang = sc.nextDouble();
String Ans = ("\nsin " + ang + " = " + Math.sin(Math.toRadians(ang)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Tan Class
package OperationMethods.TrignometricFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class tan {
public static void CalcTan() {
System.out.println("#\tTan( )");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Angle : ");
double ang = sc.nextDouble();
String Ans = ("\ntan " + ang + " = " + Math.tan(Math.toRadians(ang)) + " degree");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// b2d Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class b2d {
public static void CalcBinaryToDecimal() {
System.out.println("#\tsBinary To Decimal");
Scanner sc = new Scanner(System.in);
try {
System.out.println("Enter The Binary Number :");
String num1 = sc.nextLine();
int decimal = Integer.parseInt(num1, 2);
String Ans = ("(Binary) " + num1 + " b2d = " + decimal);
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// d2b Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class d2b {
public static void CalcDecimalToBinary() {
System.out.println("#\tDecimal To Binary");
Scanner sc = new Scanner(System.in);
try {
System.out.println("Enter The Decimal Number :");
int num1 = sc.nextInt();
String Binary = Integer.toBinaryString(num1);
String Ans = ("(Decimal) " + num1 + " d2b = " + Binary);
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// log10 Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class log10 {
public static void CalcLogarithmicValue() {
System.out.println("#\tLogarithmicValue");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Number : ");
double num1 = sc.nextDouble();
String Ans = ("\nlog (base 10) " + num1 + " = " + Math.log10(num1));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// logn Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class logn {
public static void CalcNaturalLog() {
System.out.println("#\tNatural Log");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Number : ");
double num1 = sc.nextDouble();
String Ans = ("\nln" + num1 + " = " + Math.log(num1));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// nth Root Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class nthRoot {
public static void CalcnthRoot() {
System.out.println("#\tnth Root");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Number : ");
double num1 = sc.nextDouble();
System.out.print("Enter Value Of n : ");
double num2 = sc.nextDouble();
String Ans = ("\nThe nth root = " + num1 + "^(1/" + num2 + ")" + " = " + Math.pow(num1, (1 / num2)));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Power Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class Power {
public static void CalcPower() {
System.out.println("#\tRaise To The Power");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Base Number : ");
double Base = sc.nextDouble();
System.out.print("Enter The Exponent Number : ");
double Power = sc.nextDouble();
String Ans = ("\nPower = " + Base + "^" + Power + " = " + Math.pow(Base, Power));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// SIP Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class SIP {
public static void CalcSIP() {
System.out.println("#\tSIP");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter Amount Invested : ");
double amt = sc.nextInt();
System.out.print("Enter The Interest Rate : ");
double rate = sc.nextInt();
System.out.print("Enter Number Of Installments : ");
double ins = sc.nextInt();
double x = rate + 1;
double total = (amt * ((Math.pow(x, ins) - 1)) / rate * x);
String Ans = ("\nSIP = " + total + "\n");
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Square Root Class
package OperationMethods.OtherFunctions;
import java.util.Scanner;
import OperationMethods.OperationsHistory.StoreHistory;
public class SquareRoot {
public static void CalcSquareRoot() {
System.out.println("#\tSquare Root");
Scanner sc = new Scanner(System.in);
try {
System.out.print("Enter The Base Number : ");
double num1 = sc.nextDouble();
String Ans = ("\nSquare Root of = " + num1 + "^(0.5)" + " = " + Math.pow(num1, 0.5));
System.out.println(Ans);
StoreHistory.StoreData(Ans);
} catch (Exception e) {
System.out.println("Invalid Input !!");
e.getMessage();
}
}
}
// Store History Class
package OperationMethods.OperationsHistory;
import java.io.*;
// Store History will Store The Data Which User Want To Store
// It will be store under the file which use has made in StoreData Class
public class StoreHistory {
public static void StoreData(String CalculatorHistory) {
try {
BufferedWriter bw = new BufferedWriter(
new FileWriter("C:\\Users\\ScientificCalculator\\CalculatorHistory\\CalculatorHistory.txt", true));
bw.write(CalculatorHistory);
bw.close();
} catch (IOException e) {
System.out.println("Error !!");
e.printStackTrace();
}
}
}
// Recall History Class
package OperationMethods.OperationsHistory;
import java.io.*;
// If user want to see the calculator which he needs afterwards he can access through RecallData Method
// Recall will read the file and display it to the user
public class RecallHistory {
public static void RecallData() {
try {
BufferedReader br = new BufferedReader(
new FileReader("C:\\Users\\ScientificCalculator\\CalculatorHistory\\CalculatorHistory.txt"));
String History;
while ((History = br.readLine()) != null) {
System.out.println(History);
}
} catch (IOException e) {
System.out.println("Error !!!");
e.printStackTrace();
}
}
}
// Delete History Class
package OperationMethods.OperationsHistory;
import java.io.File;
// To delete the data into the calculator history
// DeleteAllData Method Can be used because by storing values it will lots of junk.
public class DeleteHistory {
public static void DeleteAllData() {
File CalculatorHistory =new File("C:\\Users\\ScientificCalculator\\CalculatorHistory\\CalculatorHistory.txt");
if (CalculatorHistory.delete() == true) {
System.out.println("Calculator History Deleted Successfully");
} else {
System.out.println("Error Ocurred While Deleting Try Again !!");
}
}
}