The following is for a simple calculator; a scientific calculator is more complicated. I will assume the user will press keys to have a number appear on the display; to (for example) add this with another number, the user presses "+" followed by the second number, followed by "=".
You would use a visual interface, with the number display, the digits, the equal sign, and a few operations (plus, minus, multiply, divide, ...).
As soon as the user types the second number, the first number will disappear from the screen; therefore, you have to save it into some variable.
Every time a key is pressed, you have to decide whether you should add a digit to the number in the display (if it is a digit, or a period), or whether to do a calculation (if it is +, -, *, /). If it is an operation, do the operation (conditionally, depending on the selected operation), and replace the number displayed by the new value.
This is my sample code using JAVA:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.text.*;
import javax.swing.border.*;
class Calc extends JFrame implements ActionListener
{
private static final Font BIGGER_FONT = new Font("Tahoma", Font.BOLD, 13);
private JRadioButton decimalb,binaryb,octalb,hexab,enableb, disableb;
private JTextField _displayField, decimalTF, binaryTF, octalTF, hexaTF;
private JLabel decimalL,binaryL,octalL,hexaL;
private JButton exitb, convertb, clearb, backSpace, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, b11, b12, b13;
private JButton b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25;
private JPanel cbPanel, upperButtonPanel;
private ButtonGroup group, group2;
private boolean pluz = false;
private boolean subs = false;
private boolean multiply = false;
private boolean divide = false;
private boolean _startNumber = true;
private boolean dotCheck = false;
private String firstValue, Secondvalue;
private String _previousOp = "=";
private DecimalFormat df = new DecimalFormat("###,###,###.##");
private CalculatorLogic calLogic = new CalculatorLogic();
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception unused) {
;
}
Calc window = new Calc();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
public Calc()
{
super("Calculator With Number System Converter");
_displayField = new JTextField("", 15);
_displayField.setHorizontalAlignment(JTextField.RIGHT);
_displayField.setFont(BIGGER_FONT);
_displayField.setEditable(false);
_displayField.setBackground(Color.WHITE);
upperButtonPanel = new JPanel();
upperButtonPanel.setLayout(new FlowLayout());
upperButtonPanel.setBackground(Color.lightGray);
upperButtonPanel.setPreferredSize(new Dimension(170, 300));
decimalb = new JRadioButton("Decimal", false);
binaryb = new JRadioButton("Binary", false);
octalb = new JRadioButton("Octal", false);
hexab = new JRadioButton("Hexadecimal", false);
decimalb.setFont(BIGGER_FONT);
binaryb.setFont(BIGGER_FONT);
octalb.setFont(BIGGER_FONT);
hexab.setFont(BIGGER_FONT);
decimalb.addActionListener(this);
binaryb.addActionListener(this);
octalb.addActionListener(this);
hexab.addActionListener(this);
group = new ButtonGroup();
group.add(decimalb);
group.add(binaryb);
group.add(octalb);
group.add(hexab);
upperButtonPanel.add(decimalb);
upperButtonPanel.add(binaryb);
upperButtonPanel.add(octalb);
upperButtonPanel.add(hexab);
upperButtonPanel.setVisible(false);
JPanel panel = new JPanel(new GridLayout(10, 1));
panel.setPreferredSize(new Dimension(300, 300));
panel.setBorder(new BevelBorder(BevelBorder.LOWERED));
decimalTF = new JTextField(20);
binaryTF = new JTextField(20);
octalTF = new JTextField(20);
hexaTF = new JTextField(20);
decimalTF.setEditable(false);
binaryTF.setEditable(false);
octalTF.setEditable(false);
hexaTF.setEditable(false);
decimalTF.setBackground(Color.WHITE);
binaryTF.setBackground(Color.WHITE);
octalTF.setBackground(Color.WHITE);
hexaTF.setBackground(Color.WHITE);
decimalTF.setFont(BIGGER_FONT);
binaryTF.setFont(BIGGER_FONT);
octalTF.setFont(BIGGER_FONT);
hexaTF.setFont(BIGGER_FONT);
decimalTF.setVisible(false);
binaryTF.setVisible(false);
octalTF.setVisible(false);
hexaTF.setVisible(false);
decimalL = new JLabel("Decimal Value");
binaryL = new JLabel("Binary Value");
octalL = new JLabel("Octal Value");
hexaL = new JLabel("Hexadecimal Value");
decimalL.setFont(BIGGER_FONT);
binaryL.setFont(BIGGER_FONT);
octalL.setFont(BIGGER_FONT);
hexaL.setFont(BIGGER_FONT);
decimalL.setVisible(false);
binaryL.setVisible(false);
octalL.setVisible(false);
hexaL.setVisible(false);
panel.add(decimalL);
panel.add(decimalTF);
panel.add(binaryL);
panel.add(binaryTF);
panel.add(octalL);
panel.add(octalTF);
panel.add(hexaL);
panel.add(hexaTF);
upperButtonPanel.add(panel);
add(upperButtonPanel, BorderLayout.NORTH);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(5, 2, 5, 5));
buttonPanel.setBackground(Color.lightGray);
buttonPanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
b9 = new JButton("9");
b8 = new JButton("8");
b7 = new JButton("7");
b6 = new JButton("6");
b5 = new JButton("5");
b4 = new JButton("4");
b3 = new JButton("3");
b2 = new JButton("2");
b1 = new JButton("1");
b0 = new JButton("0");
b11 = new JButton(".");
b12 = new JButton("/");
b13 = new JButton("*");
b14 = new JButton("-");
b15 = new JButton("+");
b16 = new JButton("A");
b17 = new JButton("B");
b18 = new JButton("C");
b19 = new JButton("D");
b20 = new JButton("E");
b21 = new JButton("F");
b22 = new JButton("=");
b23 = new JButton("sqrt");
b24 = new JButton("x\u00B2");
b25 = new JButton("x\u00B3");
b1.setFont(BIGGER_FONT);
b2.setFont(BIGGER_FONT);
b3.setFont(BIGGER_FONT);
b4.setFont(BIGGER_FONT);
b5.setFont(BIGGER_FONT);
b6.setFont(BIGGER_FONT);
b7.setFont(BIGGER_FONT);
b8.setFont(BIGGER_FONT);
b9.setFont(BIGGER_FONT);
b0.setFont(BIGGER_FONT);
b11.setFont(BIGGER_FONT);
b12.setFont(BIGGER_FONT);
b13.setFont(BIGGER_FONT);
b14.setFont(BIGGER_FONT);
b15.setFont(BIGGER_FONT);
b16.setFont(BIGGER_FONT);
b17.setFont(BIGGER_FONT);
b18.setFont(BIGGER_FONT);
b19.setFont(BIGGER_FONT);
b20.setFont(BIGGER_FONT);
b21.setFont(BIGGER_FONT);
b22.setFont(BIGGER_FONT);
b23.setFont(BIGGER_FONT);
b24.setFont(BIGGER_FONT);
b25.setFont(BIGGER_FONT);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
b18.addActionListener(this);
b19.addActionListener(this);
b20.addActionListener(this);
b21.addActionListener(this);
b22.addActionListener(this);
b23.addActionListener(this);
b24.addActionListener(this);
b25.addActionListener(this);
b16.setEnabled(false);
b17.setEnabled(false);
b18.setEnabled(false);
b19.setEnabled(false);
b20.setEnabled(false);
b21.setEnabled(false);
buttonPanel.add(b7);
buttonPanel.add(b8);
buttonPanel.add(b9);
buttonPanel.add(b12);
buttonPanel.add(b13);
buttonPanel.add(b15);
buttonPanel.add(b4);
buttonPanel.add(b5);
buttonPanel.add(b6);
buttonPanel.add(b15);
buttonPanel.add(b14);
buttonPanel.add(b11);
buttonPanel.add(b1);
buttonPanel.add(b2);
buttonPanel.add(b3);
buttonPanel.add(b0);
buttonPanel.add(b22);
buttonPanel.add(b16);
buttonPanel.add(b17);
buttonPanel.add(b18);
buttonPanel.add(b11);
buttonPanel.add(b23);
buttonPanel.add(b19);
buttonPanel.add(b20);
buttonPanel.add(b21);
buttonPanel.add(b24);
buttonPanel.add(b25);
add(buttonPanel);
group2 = new ButtonGroup();
disableb = new JRadioButton("Disable Converter", true);
enableb = new JRadioButton("Enable Converter", false);
disableb.setFont(BIGGER_FONT);
enableb.setFont(BIGGER_FONT);
disableb.addActionListener(this);
enableb.addActionListener(this);
group2.add(disableb);
group2.add(enableb);
cbPanel = new JPanel(new GridLayout(3, 3));
cbPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
cbPanel.add(disableb);
cbPanel.add(enableb);
convertb = new JButton("Convert");
clearb = new JButton("Clear");
exitb = new JButton("Exit");
backSpace = new JButton("BackSpace");
convertb.addActionListener(this);
clearb.addActionListener(this);
exitb.addActionListener(this);
backSpace.addActionListener(this);
convertb.setFont(BIGGER_FONT);
clearb.setFont(BIGGER_FONT);
exitb.setFont(BIGGER_FONT);
backSpace.setFont(BIGGER_FONT);
cbPanel.add(convertb);
cbPanel.add(clearb);
cbPanel.add(backSpace);
cbPanel.add(exitb);
convertb.setEnabled(false);
JPanel content2 = new JPanel();
content2.setLayout(new BorderLayout(5, 5));
content2.add(_displayField, BorderLayout.NORTH);
content2.add(buttonPanel , BorderLayout.CENTER);
content2.add(cbPanel, BorderLayout.SOUTH);
add(content2, BorderLayout.SOUTH);
this.setSize(340, 300);
this.setResizable(false);
this.setLocationRelativeTo(null);
}
public void actionPerformed(ActionEvent e)
{
try{
if(decimalb.isSelected())
{
b0.setEnabled(true);
b1.setEnabled(true);
b2.setEnabled(true);
b3.setEnabled(true);
b4.setEnabled(true);
b5.setEnabled(true);
b6.setEnabled(true);
b7.setEnabled(true);
b8.setEnabled(true);
b9.setEnabled(true);
b16.setEnabled(false);
b17.setEnabled(false);
b18.setEnabled(false);
b19.setEnabled(false);
b20.setEnabled(false);
b21.setEnabled(false);
}
else if(binaryb.isSelected())
{
b2.setEnabled(false);
b3.setEnabled(false);
b4.setEnabled(false);
b5.setEnabled(false);
b6.setEnabled(false);
b7.setEnabled(false);
b8.setEnabled(false);
b9.setEnabled(false);
b16.setEnabled(false);
b17.setEnabled(false);
b18.setEnabled(false);
b19.setEnabled(false);
b20.setEnabled(false);
b21.setEnabled(false);
}
else if(octalb.isSelected())
{
b0.setEnabled(true);
b1.setEnabled(true);
b2.setEnabled(true);
b3.setEnabled(true);
b4.setEnabled(true);
b5.setEnabled(true);
b6.setEnabled(true);
b7.setEnabled(true);
b16.setEnabled(false);
b17.setEnabled(false);
b18.setEnabled(false);
b19.setEnabled(false);
b20.setEnabled(false);
b21.setEnabled(false);
b8.setEnabled(false);
b9.setEnabled(false);
}
else if(hexab.isSelected())
{
b0.setEnabled(true);
b1.setEnabled(true);
b2.setEnabled(true);
b3.setEnabled(true);
b4.setEnabled(true);
b5.setEnabled(true);
b6.setEnabled(true);
b7.setEnabled(true);
b8.setEnabled(true);
b9.setEnabled(true);
b16.setEnabled(true);
b17.setEnabled(true);
b18.setEnabled(true);
b19.setEnabled(true);
b20.setEnabled(true);
b21.setEnabled(true);
}
if((e.getActionCommand().equals("Convert")) && decimalb.isSelected())
{
String input, bin="",oct="",hex="";
int rem,rem2,rem3,len;
char x;
input = _displayField.getText().trim();
try{
if(input.equals(""))
throw new Exception("Error");
else
len = input.length();
int num = Integer.parseInt(input);
while(num>0)
{
rem = num%2;
num/=2;
bin = rem + bin;
}
binaryTF.setText(bin);
decimalTF.setText(input);
int num2 = Integer.parseInt(input);
while(num2>0)
{
rem2 = num2%8;
oct = rem2 + oct;
num2/=8;
}
octalTF.setText(oct);
int num3 = Integer.parseInt(input);
while(num3>0)
{
rem3 = num3%16;
if(rem3<10)
hex = rem3 + hex;
else if(rem3 0)
{
JOptionPane.showMessageDialog(null,"Can't divide by zero", "Error Message", JOptionPane.ERROR_MESSAGE);
return 0;
}
else
return (a / b);
}
public double stringToDouble(String a)
{
return Double.parseDouble(a);
}
}
Chat with our AI personalities
Source code comes from the programmer...
'.java' files contain java source code. One can access these files on windows by using 'notepad'.
The Java compiler translates Java source code to Java byte code.
It is created by the Java compiler, based on the source code (the .java file).
If the software is open source then generally they will provide the code in a separate link. I don't think it is possible to reverse-engineer the code of a program.