JAVA PRORGRAMMING Objective Create a scientific calculator I
JAVA PRORGRAMMING
Objective:
Create a scientific calculator. It should behave like any other scientific calculator where the user presses keys and stuff happens. This must have a graphical user interface (GUI), and include the following features:
Current total display
Number pad
Arithmetic functions
Addition
Subtraction
Multiplication
Division
You may disregard order of operations
Trigonometric functions
Sine
Cosine
Tangent
Arcsine
Arccosine
Arctangent
Additional mathematic functions
Exponent
Square root
Logarithm
Additional functions
Clear – Zeroes out the current total
Equals – Gives the running total
Furthermore every time a user enters a number first it should set the running total to said number. If an operation is entered then that operation is applied to the current total. If it is a binary operation like addition, subtraction, multiplication, division, and exponent then the following number will be the second number in that function, and applied as soon as the user presses equals.
Solution
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class Calculator extends JFrame {
private final Font BIGGER_FONT = new Font(\"monspaced\",Font.PLAIN, 20);
private JTextField textfield;
private boolean number = true;
private String equalOp = \"=\";
private CalculatorOp op = new CalculatorOp();
public Calculator() {
textfield = new JTextField(\"\", 12);
textfield.setHorizontalAlignment(JTextField.RIGHT);
textfield.setFont(BIGGER_FONT);
ActionListener numberListener = new NumberListener();
String buttonOrder = \"1234567890 \";
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4, 4, 4));
for (int i = 0; i < buttonOrder.length(); i++) {
String key = buttonOrder.substring(i, i+1);
if (key.equals(\" \")) {
buttonPanel.add(new JLabel(\"\"));
} else {
JButton button = new JButton(key);
button.addActionListener(numberListener);
button.setFont(BIGGER_FONT);
buttonPanel.add(button);
}
}
ActionListener operatorListener = new OperatorListener();
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 4, 4, 4));
String[] opOrder = {\"+\", \"-\", \"*\", \"/\",\"=\",\"C\",\"sin\",\"cos\",\"log\"};
for (int i = 0; i < opOrder.length; i++) {
JButton button = new JButton(opOrder[i]);
button.addActionListener(operatorListener);
button.setFont(BIGGER_FONT);
panel.add(button);
}
JPanel pan = new JPanel();
pan.setLayout(new BorderLayout(4, 4));
pan.add(textfield, BorderLayout.NORTH );
pan.add(buttonPanel , BorderLayout.CENTER);
pan.add(panel , BorderLayout.EAST);
this.setContentPane(pan);
this.pack();
this.setTitle(\"Calculator\");
this.setResizable(false);
}
private void action() {
number = true;
textfield.setText(\"\");
equalOp = \"=\";
op.setTotal(\"\");
}
class OperatorListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String displayText = textfield.getText();
if (e.getActionCommand().equals(\"sin\"))
{
textfield.setText(\"\" + Math.sin(Double.valueOf(displayText).doubleValue()));
}else
if (e.getActionCommand().equals(\"cos\"))
{
textfield.setText(\"\" + Math.cos(Double.valueOf(displayText).doubleValue()));
}
else
if (e.getActionCommand().equals(\"log\"))
{
textfield.setText(\"\" + Math.log(Double.valueOf(displayText).doubleValue()));
}
else if (e.getActionCommand().equals(\"C\"))
{
textfield.setText(\"\");
}
else
{
if (number)
{
action();
textfield.setText(\"\");
}
else
{
number = true;
if (equalOp.equals(\"=\"))
{
op.setTotal(displayText);
}else
if (equalOp.equals(\"+\"))
{
op.add(displayText);
}
else if (equalOp.equals(\"-\"))
{
op.subtract(displayText);
}
else if (equalOp.equals(\"*\"))
{
op.multiply(displayText);
}
else if (equalOp.equals(\"/\"))
{
op.divide(displayText);
}
textfield.setText(\"\" + op.getTotalString());
equalOp = e.getActionCommand();
}
}
}
}
class NumberListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String digit = event.getActionCommand();
if (number) {
textfield.setText(digit);
number = false;
} else {
textfield.setText(textfield.getText() + digit);
}
}
}
public class CalculatorOp {
private int total;
public CalculatorOp() {
total = 0;
}
public String getTotalString() {
return \"\"+total;
}
public void setTotal(String n) {
total = convertToNumber(n);
}
public void add(String n) {
total += convertToNumber(n);
}
public void subtract(String n) {
total -= convertToNumber(n);
}
public void multiply(String n) {
total *= convertToNumber(n);
}
public void divide(String n) {
total /= convertToNumber(n);
}
private int convertToNumber(String n) {
return Integer.parseInt(n);
}
}
}
class ScientificCalculator {
public static void main(String[] args) {
JFrame frame = new Calculator();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}



