In this project you will create a basic calculator program. The calculator can o
ID: 3603517 • Letter: I
Question
In this project you will create a basic calculator program.
The calculator can operate in two modes: Standard and Scientific modes. The Standard mode will allow the user to perform the following operations: add, subtract, multiply, and divide. The Scientific mode will allow the user to perform the same functionality as the Standard plus the following: sin x, cos x, tan x.
• The calculator program will first ask the user for the mode to operate in (Standard or Scientific) Sample Output: Enter the calculator mode: Standard/Scientific? Standard
• The program should then ask the user for the operation to execute (+, -, *, /, sin x, cos x, tan x) Sample Output: Enter '+' for addition, '-' for subtractions, '*' for multiplication, '/' for division, 'sin' for sin x, 'cos' for cos x, 'tan' for tan x: -
• If the user enters an invalid operation, output a message telling the user the input is invalid and re-prompt the user for the operation again. Enter '+' for addition, '-' for subtractions, '*' for multiplication, '/' for division, 'sin' for sin x, 'cos' for cos x, 'tan' for tan x: division Invalid operation entered Enter '+' for addition, '-' for subtractions, '*' for multiplication, '/' for division, 'sin' for sin x, 'cos' for cos x, 'tan' for tan x: /
• In order to know how many times the user will need to perform the operation, prompt the user for the number of double values they want to enter (All numbers in this program are double), then ask the user to enter the numbers. Sample Output: How many numbers do you want to subtract: 3 Enter 3 numbers: 4 35 9
Note: In this example the calculator will calculate 4 + 35 + 9. The result will be 48. •
As an example, the calculator should be able to perform addition, subtraction, multiplication, and division of two or more numbers but perform sin x, cos x, and tan x of one number only (the number is in radians). For example, the calculator should be able to perform the following operations: 2+3 = 5 2+6+1+1+1 = 11 1-2-90 = -91 10*2*3 = 60 10/2/5 = 1 cos(0) = 1 sin(0) = 0 tan(0) = 0 Note: This calculator does NOT support multiple operations in the expressions like: 10+2-8
• Create a separate method for each operation types (add, subtract, multiply, divide, sin, cos, tan) and call the corresponding method to execute the operation’s logic. For example, if the user enters ‘+’, the program will call the addition method, if the user enters ‘-‘, the program will call the subtraction method …..
• Finally, output the result to the user and ask the user if he/she want to start over. Sample Output: Result: 50.0 Start over? Y/N Y
Extra Credit:
Extend the functionality to allow for multiple operations in the expressions. For example, the program will be able to perform the following expression: 10+2-8
Explanation / Answer
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 SwingCalculator {
public static void main(String[] args) {
JFrame frame = new Calculator();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.