Challenge

Project

Create a Scientific Calculator with the following operations-

"+"-plus or addition"-" -minus or subtraction"*" -multiply by"/" -divided by"^"-raised to the power of- x raised to the y"Sqrt"- square root"Nrt"- nth root"log"- Logarithmic value"logn"- Natural log"sin"- Sine"isin" -Inverse sine"cos"- Cosine"icos"- Inverse cosine"tan"- Tangent"itan"- Inverse tan"stor" -place a number in memory for later use"recall"-recover the number from memory for immediate use"d2b" -Decimal to Binary number"b2d" -Binary to Decimal number"sip"- Calculations of monthly, quarterly and yearly SIP calculations for compounding investments.

It should run on an infinite loop and take inputs from the user for any operation they select based on the operation number on the list displayed to them. Save all the inputs, calculations and results in a file named “CalculationsHistory.txt”. Your code should follow all principles of Object-Oriented Programming. Create a report on how your software uses all the OOPs principles with examples from your code.

Ans.import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import javax.swing.event.*;

public class ScientificCalculator extends JFrame implements ActionListener {

JTextField tfield;

double temp, temp1, result, a;

static double m1, m2;

int k = 1, x = 0, y = 0, z = 0;

char ch;

JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, zero, clr, pow2, pow3, exp,

fac, plus, min, div, log, rec, mul, eq, addSub, dot, mr, mc, mp,

mm, sqrt, sin, cos, tan;

Container cont;

JPanel textPanel, buttonpanel;

ScientificCalculator() {

cont = getContentPane();

cont.setLayout(new BorderLayout());

JPanel textpanel = new JPanel();

tfield = new JTextField(25);

tfield.setHorizontalAlignment(SwingConstants.RIGHT);

tfield.addKeyListener(new KeyAdapter() {

public void keyTyped(KeyEvent keyevent) {

char c = keyevent.getKeyChar();

if (c >= '0' && c <= '9') {

} else {

keyevent.consume();

}

}

});

textpanel.add(tfield);

buttonpanel = new JPanel();

buttonpanel.setLayout(new GridLayout(8, 4, 2, 2));

boolean t = true;

mr = new JButton("MR");

buttonpanel.add(mr);

mr.addActionListener(this);

mc = new JButton("MC");

buttonpanel.add(mc);

mc.addActionListener(this);

mp = new JButton("M+");

buttonpanel.add(mp);

mp.addActionListener(this);

mm = new JButton("M-");

buttonpanel.add(mm);

mm.addActionListener(this);

b1 = new JButton("1");

buttonpanel.add(b1);

b1.addActionListener(this);

b2 = new JButton("2");

buttonpanel.add(b2);

b2.addActionListener(this);

b3 = new JButton("3");

buttonpanel.add(b3);

b3.addActionListener(this);

b4 = new JButton("4");

buttonpanel.add(b4);

b4.addActionListener(this);

b5 = new JButton("5");

buttonpanel.add(b5);

b5.addActionListener(this);

b6 = new JButton("6");

buttonpanel.add(b6);

b6.addActionListener(this);

b7 = new JButton("7");

buttonpanel.add(b7);

b7.addActionListener(this);

b8 = new JButton("8");

buttonpanel.add(b8);

b8.addActionListener(this);

b9 = new JButton("9");

buttonpanel.add(b9);

b9.addActionListener(this);

zero = new JButton("0");

buttonpanel.add(zero);

zero.addActionListener(this);

plus = new JButton("+");

buttonpanel.add(plus);

plus.addActionListener(this);

min = new JButton("-");

buttonpanel.add(min);

min.addActionListener(this);

mul = new JButton("*");

buttonpanel.add(mul);

mul.addActionListener(this);

div = new JButton("/");

div.addActionListener(this);

buttonpanel.add(div);

addSub = new JButton("+/-");

buttonpanel.add(addSub);

addSub.addActionListener(this);

dot = new JButton(".");

buttonpanel.add(dot);

dot.addActionListener(this);

eq = new JButton("=");

buttonpanel.add(eq);

eq.addActionListener(this);

rec = new JButton("1/x");

buttonpanel.add(rec);

rec.addActionListener(this);

sqrt = new JButton("Sqrt");

buttonpanel.add(sqrt);

sqrt.addActionListener(this);

log = new JButton("log");

buttonpanel.add(log);

log.addActionListener(this);

sin = new JButton("SIN");

buttonpanel.add(sin);

sin.addActionListener(this);

cos = new JButton("COS");

buttonpanel.add(cos);

cos.addActionListener(this);

tan = new JButton("TAN");

buttonpanel.add(tan);

tan.addActionListener(this);

pow2 = new JButton("x^2");

buttonpanel.add(pow2);

pow2.addActionListener(this);

pow3 = new JButton("x^3");

buttonpanel.add(pow3);

pow3.addActionListener(this);

exp = new JButton("Exp");

exp.addActionListener(this);

buttonpanel.add(exp);

fac = new JButton("n!");

fac.addActionListener(this);

buttonpanel.add(fac);

clr = new JButton("AC");

buttonpanel.add(clr);

clr.addActionListener(this);

cont.add("Center", buttonpanel);

cont.add("North", textpanel);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

if (s.equals("1")) {

if (z == 0) {

tfield.setText(tfield.getText() + "1");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "1");

z = 0;

}

}

if (s.equals("2")) {

if (z == 0) {

tfield.setText(tfield.getText() + "2");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "2");

z = 0;

}

}

if (s.equals("3")) {

if (z == 0) {

tfield.setText(tfield.getText() + "3");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "3");

z = 0;

}

}

if (s.equals("4")) {

if (z == 0) {

tfield.setText(tfield.getText() + "4");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "4");

z = 0;

}

}

if (s.equals("5")) {

if (z == 0) {

tfield.setText(tfield.getText() + "5");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "5");

z = 0;

}

}

if (s.equals("6")) {

if (z == 0) {

tfield.setText(tfield.getText() + "6");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "6");

z = 0;

}

}

if (s.equals("7")) {

if (z == 0) {

tfield.setText(tfield.getText() + "7");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "7");

z = 0;

}

}

if (s.equals("8")) {

if (z == 0) {

tfield.setText(tfield.getText() + "8");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "8");

z = 0;

}

}

if (s.equals("9")) {

if (z == 0) {

tfield.setText(tfield.getText() + "9");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "9");

z = 0;

}

}

if (s.equals("0")) {

if (z == 0) {

tfield.setText(tfield.getText() + "0");

} else {

tfield.setText("");

tfield.setText(tfield.getText() + "0");

z = 0;

}

}

if (s.equals("AC")) {

tfield.setText("");

x = 0;

y = 0;

z = 0;

}

if (s.equals("log")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.log(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("1/x")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = 1 / Double.parseDouble(tfield.getText());

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("Exp")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.exp(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("x^2")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.pow(Double.parseDouble(tfield.getText()), 2);

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("x^3")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.pow(Double.parseDouble(tfield.getText()), 3);

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("+/-")) {

if (x == 0) {

tfield.setText("-" + tfield.getText());

x = 1;

} else {

tfield.setText(tfield.getText());

}

}

if (s.equals(".")) {

if (y == 0) {

tfield.setText(tfield.getText() + ".");

y = 1;

} else {

tfield.setText(tfield.getText());

}

}

if (s.equals("+")) {

if (tfield.getText().equals("")) {

tfield.setText("");

temp = 0;

ch = '+';

} else {

temp = Double.parseDouble(tfield.getText());

tfield.setText("");

ch = '+';

y = 0;

x = 0;

}

tfield.requestFocus();

}

if (s.equals("-")) {

if (tfield.getText().equals("")) {

tfield.setText("");

temp = 0;

ch = '-';

} else {

x = 0;

y = 0;

temp = Double.parseDouble(tfield.getText());

tfield.setText("");

ch = '-';

}

tfield.requestFocus();

}

if (s.equals("/")) {

if (tfield.getText().equals("")) {

tfield.setText("");

temp = 1;

ch = '/';

} else {

x = 0;

y = 0;

temp = Double.parseDouble(tfield.getText());

ch = '/';

tfield.setText("");

}

tfield.requestFocus();

}

if (s.equals("*")) {

if (tfield.getText().equals("")) {

tfield.setText("");

temp = 1;

ch = '*';

} else {

x = 0;

y = 0;

temp = Double.parseDouble(tfield.getText());

ch = '*';

tfield.setText("");

}

tfield.requestFocus();

}

if (s.equals("MC")) {

m1 = 0;

tfield.setText("");

}

if (s.equals("MR")) {

tfield.setText("");

tfield.setText(tfield.getText() + m1);

}

if (s.equals("M+")) {

if (k == 1) {

m1 = Double.parseDouble(tfield.getText());

k++;

} else {

m1 += Double.parseDouble(tfield.getText());

tfield.setText("" + m1);

}

}

if (s.equals("M-")) {

if (k == 1) {

m1 = Double.parseDouble(tfield.getText());

k++;

} else {

m1 -= Double.parseDouble(tfield.getText());

tfield.setText("" + m1);

}

}

if (s.equals("Sqrt")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.sqrt(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("SIN")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.sin(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("COS")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.cos(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("TAN")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = Math.tan(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

if (s.equals("=")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

temp1 = Double.parseDouble(tfield.getText());

switch (ch) {

case '+':

result = temp + temp1;

break;

case '-':

result = temp - temp1;

break;

case '/':

result = temp / temp1;

break;

case '*':

result = temp * temp1;

break;

}

tfield.setText("");

tfield.setText(tfield.getText() + result);

z = 1;

}

}

if (s.equals("n!")) {

if (tfield.getText().equals("")) {

tfield.setText("");

} else {

a = fact(Double.parseDouble(tfield.getText()));

tfield.setText("");

tfield.setText(tfield.getText() + a);

}

}

tfield.requestFocus();

}

double fact(double x) {

int er = 0;

if (x < 0) {

er = 20;

return 0;

}

double i, s = 1;

for (i = 2; i <= x; i += 1.0)

s *= i;

return s;

}

public static void main(String args[]) {

try {

UIManager

.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (Exception e) {

}

ScientificCalculator f = new ScientificCalculator();

f.setTitle("ScientificCalculator");

f.pack();

f.setVisible(true);

}

}

Output:Exception in thread "main" java.awt.HeadlessException:

No X11 DISPLAY variable was set, but this program performed an operation which requires it.

at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(Unknown Source)

at java.desktop/java.awt.Window.<init>(Unknown Source)

at java.desktop/java.awt.Frame.<init>(Unknown Source)

at java.desktop/java.awt.Frame.<init>(Unknown Source)

at java.desktop/javax.swing.JFrame.<init>(Unknown Source)

at ScientificCalculator.<init>(ScientificCalculator.java:18)

at ScientificCalculator.main(ScientificCalculator.java:486)

[Program finished]

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.