Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите написать калькулятор на Java


Автор: Помогите 30.5.2004, 13:37
Люди добрые, помогите написать калькулятор на яве, так чтобы он в самом начале спрашивал "User name" "age" "gender" "Reg.No" "Email" , чтобы это спрашивалось когда прога запускалась, в этом окне или где-нибудь другом, и чтобы это все отображалось где-то, плюс нужно сделать так, чтобы инфа проверялось, всмысле, чтобы не было такого типа в поле "age" там написали альфавитными буквами.. очень нужно, буду вечно благодарен если поможите, если можно то желательно английскими буквами и побольше комментариев, я должен научится и обяснить все действия..Заранее огромное спасибо

кстати мне это нужно в течении двух дней, помогите пожалуйта..очень прошу

Автор: LSD 30.5.2004, 18:37
Что то на форуме стало появлятся много народу с срочными вопросам, не иначе как сессия на носу biggrin.gif .
Теперь о программе, четко что она должна делать и как должна быть реализованна (консльное, GUI и т.д.). Мой калькулятор у меня возраст, пол и т.д. не запрашивает. Какого рода проверки надо вставить в него, и что делать в случае неправильного ввода.

Автор: Guest 30.5.2004, 19:03
Делать она должна все то что делает калькулятор, типа спрашивается первое число, потом действие (умножить, делить и т.д.), и потом второе число, и затем результат выходит.
Она должна быть как аппликейшн, можно добавить еще апплетную версию, проверки не знаю какие, просто нужно сделать так, чтобы при вводе альфавитных букв в поле где надо вводить число, прога не принимала это и выводила надпись "Enter number" вот так вот... sad.gif sad.gif

Автор: Помогите 31.5.2004, 15:40
Цитата
и как должна быть реализованна (консльное, GUI и т.д.).

GUI sad.gif

Автор: LSD 31.5.2004, 19:46
Вот код smile.gif, вообще говоря кривоватый, но лучше я ничего не успею сделать. С тебя adv/76.gif !
Код
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class Calc extends JFrame
{
 private JTextField textField;
 private Double op1;
 private Character operation;
 private boolean newInput;

 public Calc()
 {
   super("Calculator");
   setDefaultCloseOperation(EXIT_ON_CLOSE);

   newInput = false;

   Container contentPane = getContentPane();

   textField = new JTextField("0");
   textField.setEditable(false);
   textField.setHorizontalAlignment(JTextField.RIGHT);
   contentPane.add(textField, BorderLayout.NORTH);

   ActionListener numberListener = new NumericButtonsListener();
   ActionListener operationListener = new OperationButtonsListener();

   JPanel buttonsPanel = new JPanel(new GridLayout(4, 3, 5, 5));
   buttonsPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
   for(int i = 9; i > 0; i--)
   {
     JButton numericButton = new JButton(Integer.toString(i));
     numericButton.addActionListener(numberListener);
     buttonsPanel.add(numericButton);
   }

   JButton signButton = new JButton("\u00B1");
   signButton.addActionListener(operationListener);
   buttonsPanel.add(signButton);
   JButton zeroButton = new JButton("0");
   zeroButton.addActionListener(numberListener);
   buttonsPanel.add(zeroButton);
   JButton dotButton = new JButton(".");
   dotButton.addActionListener(operationListener);
   buttonsPanel.add(dotButton);

   contentPane.add(buttonsPanel, BorderLayout.CENTER);

   JPanel operationsPanel = new JPanel(new GridLayout(6, 1, 0, 0));

   JButton plusButton = new JButton("+");
   plusButton.addActionListener(operationListener);
   operationsPanel.add(plusButton);
   JButton minusButton = new JButton("-");
   minusButton.addActionListener(operationListener);
   operationsPanel.add(minusButton);
   JButton multiplyButton = new JButton("*");
   multiplyButton.addActionListener(operationListener);
   operationsPanel.add(multiplyButton);
   JButton divideButton = new JButton("/");
   divideButton.addActionListener(operationListener);
   operationsPanel.add(divideButton);
   JButton equalButton = new JButton("=");
   equalButton.addActionListener(operationListener);
   operationsPanel.add(equalButton);
   JButton clearButton = new JButton("C");
   clearButton.addActionListener(operationListener);
   operationsPanel.add(clearButton);

   contentPane.add(operationsPanel, BorderLayout.EAST);

   pack();
   setLocationRelativeTo(null);
 }

 private void numberPressed(int n)
 {
   if(newInput)
   {
     textField.setText("" + n);
     newInput = false;
   }
   else if(textField.getText().equals("0"))
   {
     textField.setText("" + n);
   }
   else
   {
     textField.setText(textField.getText() + n);
   }
 }

 private void operationPressed(char op)
 {
   switch(op)
   {
     case '+':
     case '-':
     case '*':
     case '/':
       if(newInput)
       {
         op1 = new Double(textField.getText());
         operation = new Character(op);
       }
       else if(operation == null)
       {
         newInput = true;
         op1 = new Double(textField.getText());
         operation = new Character(op);
       }
       else
       {
         enterPressed();
       }
       break;
     case '.':
       String str1 = textField.getText();
       if(str1.indexOf('.') < 0)
         textField.setText(str1 + ".");
       break;
     case '\u00B1':
       String str2 = textField.getText();
       if(str2.charAt(0) == '-')
         textField.setText(str2.substring(1));
       else
         textField.setText("-" + str2);
       break;
     case '=':
       enterPressed();
       break;
     case 'C':
     case 'c':
       clear();
       break;
     default:
   }
 }

 private void clear()
 {
   op1 = null;
   operation = null;
   newInput = false;
   textField.setText("0");
 }

 private void enterPressed()
 {
   newInput = true;
   if(op1 != null && operation != null)
   {
     calc(op1.doubleValue(), Double.parseDouble(textField.getText()), operation.charValue());
     op1 = new Double(textField.getText());
     operation = null;
   }
 }

 private void calc(double op1, double op2, char operation)
 {
   switch(operation)
   {
     case '+':
       textField.setText(Double.toString(op1 + op2));
       break;
     case '-':
       textField.setText(Double.toString(op1 - op2));
       break;
     case '*':
       textField.setText(Double.toString(op1 * op2));
       break;
     case '/':
       textField.setText(Double.toString(op1 / op2));
       break;
     default:
       textField.setText("Error");
   }
 }

 public static void main(String[] args)
 {
   Calc calc = new Calc();
   calc.show();
 }

 private class NumericButtonsListener implements ActionListener
 {
   public void actionPerformed(ActionEvent ev)
   {
     numberPressed(Integer.parseInt( ( (JButton) ev.getSource()).getText()));
   }
 }

 private class OperationButtonsListener implements ActionListener
 {
   public void actionPerformed(ActionEvent ev)
   {
     operationPressed( ( (JButton) ev.getSource()).getText().charAt(0));
   }
 }
}

Автор: Помогите 1.6.2004, 16:14
Наиогромнещее спасибо smile.gif Пыво наверное не получится (т.к. живу я в 4000 км от тебя) , но вот если ты добавишь свои комментарии в этот код (Там не поверят что это я сам написал *вполне ессессно*, поэтому меня могут вызвать на виву, будут проверять методом вопросов и ответов, а если я сам не пойму что здесь значит что, то как я буду отвечать? я совсем чайник на Яве, поэтому ) и отправишь мне на vladik1985@inbox.ru *.class файлы и код, я тебе отправлю 7 значку аську (красивый, с примаком) в ответ, очень жду.. butbut.gif
кстати этот калькулятор спрашивает user name email age reg.no gender? это очень нужно сделать, хоть в другом окне.. plz plz plz plz plz

Автор: LSD 1.6.2004, 19:02
У меня пара встречных вопросов:
1) к какому сроку это надо?
2) насколько хорошо ты разбираешься в Java (комментариев только к методам достаточно)?
3) запросить user name, email, age reg.no, gender я могу а что потом дальше с этим добром делать?

Автор: Помогите 1.6.2004, 19:51
1) Нужно к 5и 3го Июня, т.е. есть еще два дня, но мне самому нужен минимум день, чтобы написать репорт, т.е. там еще кое какие вещи надо написать о проге, только уже не на яве (к счастью )
2) Разрбираюсь не очень, ну плохо можно сказать
знаю что значат эти строки

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
чуть чуть разбираюсь в классах, а так полный ламок
3) А эту информацию желательно отображать где-нибудь рядом с калькулятором
например вот квадратик калькулятор
_______________
| |
| |
| |
| |
| |
------------------------

а инфу можно прям радом где нибудь показывать,
типа
Your info
age:14
gender:male
reg.no: 1
email:lame@too.com
а с боку уже калькулятор, так разницы это не имеет большой, где удобней и все, лиж-бы отображалось и все..


Автор: Помогите 1.6.2004, 19:52
Квадратик получился прям сказать, *не очень* smile.gif

Автор: ElectricalStorm 7.6.2004, 11:34
Вот симпатичный пример
тока малофункциональный но .... если применить воображение ...

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Calculator extends JFrame {
   public Calculator() {
       setTitle("Calculator");
       getContentPane().add(new CalculatorPanel());
   }

   public static void main(String[] args) {
       Calculator frame = new Calculator();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setBounds(400,200,200,200);
       frame.show();
   }
}

class CalculatorPanel extends JPanel {

   private JLabel display;
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;

   public CalculatorPanel() {
       setLayout(new BorderLayout());

       result = 0;
       lastCommand = "=";
       start = true;
       display = new JLabel("0");

       add(display, BorderLayout.NORTH);

       ActionListener insert = new InsertAction();
       ActionListener command = new CommandAction();

       panel = new JPanel();
       panel.setLayout(new GridLayout(4, 4));

       addButton("7", insert);
       addButton("8", insert);
       addButton("9", insert);
       addButton("/", command);

       addButton("4", insert);
       addButton("5", insert);
       addButton("6", insert);
       addButton("*", command);

       addButton("1", insert);
       addButton("2", insert);
       addButton("3", insert);
       addButton("-", command);

       addButton("0", insert);
       addButton(".", insert);
       addButton("=", command);
       addButton("+", command);

       add(panel, BorderLayout.CENTER);
   }

   private void addButton(String label, ActionListener listener) {
       JButton button = new JButton(label);
       button.addActionListener(listener);
       panel.add(button);
   }

   private class InsertAction implements ActionListener {
       public void actionPerformed(ActionEvent event) {
           String input = event.getActionCommand();
           if (start) {
               display.setText("");
               start = false;
           }
           display.setText(display.getText() + input);
       }
   }

   private class CommandAction implements ActionListener {
       public void actionPerformed(ActionEvent evt) {
           String command = evt.getActionCommand();

           if (start) {
               if (command.equals("-")) {
                   display.setText(command);
                   start = false;
               } else
                   lastCommand = command;
           } else {
               calculate(Double.parseDouble(display.getText()));
               lastCommand = command;
               start = true;
           }
       }
   }

   public void calculate(double x) {
       if (lastCommand.equals("+"))
           result += x;
       else if (lastCommand.equals("-"))
           result -= x;
       else if (lastCommand.equals("*"))
           result *= x;
       else if (lastCommand.equals("/"))
           result /= x;
       else if (lastCommand.equals("=")) result = x;
       display.setText("" + result);
   }
}


Автор: Funny's 1.8.2004, 11:06
adv/168.gif х скока таких работ наздали наверно!!!??? за плагиат то не гоняють? adv/abuse.gif

Автор: Frigus 20.12.2012, 23:57
Цитата(ElectricalStorm @ 7.6.2004,  11:34)
Вот симпатичный пример 
тока малофункциональный но .... если применить воображение ... 

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Calculator extends JFrame {
    public Calculator() {
        setTitle("Calculator");
        getContentPane().add(new CalculatorPanel());
    }

    public static void main(String[] args) {
        Calculator frame = new Calculator();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(400,200,200,200);
        frame.show();
    }
}

class CalculatorPanel extends JPanel {

    private JLabel display;
    private JPanel panel;
    private double result;
    private String lastCommand;
    private boolean start;

    public CalculatorPanel() {
        setLayout(new BorderLayout());

        result = 0;
        lastCommand = "=";
        start = true;
        display = new JLabel("0");

        add(display, BorderLayout.NORTH);

        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();

        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));

        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);

        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);

        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);

        addButton("0", insert);
        addButton(".", insert);
        addButton("=", command);
        addButton("+", command);

        add(panel, BorderLayout.CENTER);
    }

    private void addButton(String label, ActionListener listener) {
        JButton button = new JButton(label);
        button.addActionListener(listener);
        panel.add(button);
    }

    private class InsertAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String input = event.getActionCommand();
            if (start) {
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
    }

    private class CommandAction implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            String command = evt.getActionCommand();

            if (start) {
                if (command.equals("-")) {
                    display.setText(command);
                    start = false;
                } else
                    lastCommand = command;
            } else {
                calculate(Double.parseDouble(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
    }

    public void calculate(double x) {
        if (lastCommand.equals("+"))
            result += x;
        else if (lastCommand.equals("-"))
            result -= x;
        else if (lastCommand.equals("*"))
            result *= x;
        else if (lastCommand.equals("/"))
            result /= x;
        else if (lastCommand.equals("=")) result = x;
        display.setText("" + result);
    }
}


Неплохой кодик.
А как добавить в него кнопочку сброса "С" ?
Я конечно понимаю что я опоздал на пару лет с таким вопросом к автору кода но может быть кто нибудь другой сможет мне ответить?
Я буду очень признателен)

Автор: jk1 23.12.2012, 20:58
Годы идут, а с фантазией у преподавателей в ВУЗах все так же туго.
Вот Вам кнопка [c]:

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame {
    public Calculator() {
        setTitle("Calculator");
        getContentPane().add(new CalculatorPanel());
    }
    public static void main(String[] args) {
        Calculator frame = new Calculator();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(400,200,200,200);
        frame.setVisible(true);
    }
}
class CalculatorPanel extends JPanel {
    private JLabel display;
    private JPanel panel;
    private double result;
    private String lastCommand;
    private boolean start;
    public CalculatorPanel() {
        setLayout(new BorderLayout());
        result = 0;
        lastCommand = "=";
        start = true;
        display = new JLabel("0");
        add(display, BorderLayout.NORTH);
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
        ActionListener clear = new ClearAction();
        panel = new JPanel();
        panel.setLayout(new GridLayout(5, 4));
        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);
        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);
        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);
        addButton("0", insert);
        addButton(".", insert);
        addButton("=", command);
        addButton("+", command);
        addButton("C", clear);
        add(panel, BorderLayout.CENTER);
    }

    private void addButton(String label, ActionListener listener) {
        JButton button = new JButton(label);
        button.addActionListener(listener);
        panel.add(button);
    }

    private class InsertAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String input = event.getActionCommand();
            if (start) {
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
    }

    private class ClearAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            display.setText("0");
        }
    }

    private class CommandAction implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            String command = evt.getActionCommand();
            if (start) {
                if (command.equals("-")) {
                    display.setText(command);
                    start = false;
                } else
                    lastCommand = command;
            } else {
                calculate(Double.parseDouble(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
    }

    public void calculate(double x) {
        if (lastCommand.equals("+"))
            result += x;
        else if (lastCommand.equals("-"))
            result -= x;
        else if (lastCommand.equals("*"))
            result *= x;
        else if (lastCommand.equals("/"))
            result /= x;
        else if (lastCommand.equals("=")) 
            result = x;
        display.setText("" + result);
    }
}

Автор: Pawl 23.12.2012, 21:14
Цитата(jk1 @  23.12.2012,  20:58 Найти цитируемый пост)
Годы идут, а с фантазией у преподавателей в ВУЗах все так же туго.

Зря вы так. По-моему они пытаются реализовать в задаче как можно большее число всяческих заморочек, чтобы студент, ломая над ними голову, постигал премудрости программирования и рос над собой! smile Другое дело, создать задачку, чтобы и практическую пользу имела, и все многообразие языка охватывала, и чтобы студент ее решить мог - это таки трудно. А если таких задач надо придумать, к примеру, 20 штук - каждому в группе по варианту - то почти невозможно. Вот и появляются эдакие оторванные от реальности монстры...

Автор: Frigus 27.12.2012, 10:30
Цитата(jk1 @ 23.12.2012,  20:58)
Годы идут, а с фантазией у преподавателей в ВУЗах все так же туго.
Вот Вам кнопка [c]:

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame {
    public Calculator() {
        setTitle("Calculator");
        getContentPane().add(new CalculatorPanel());
    }
    public static void main(String[] args) {
        Calculator frame = new Calculator();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(400,200,200,200);
        frame.setVisible(true);
    }
}
class CalculatorPanel extends JPanel {
    private JLabel display;
    private JPanel panel;
    private double result;
    private String lastCommand;
    private boolean start;
    public CalculatorPanel() {
        setLayout(new BorderLayout());
        result = 0;
        lastCommand = "=";
        start = true;
        display = new JLabel("0");
        add(display, BorderLayout.NORTH);
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
        ActionListener clear = new ClearAction();
        panel = new JPanel();
        panel.setLayout(new GridLayout(5, 4));
        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);
        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);
        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);
        addButton("0", insert);
        addButton(".", insert);
        addButton("=", command);
        addButton("+", command);
        addButton("C", clear);
        add(panel, BorderLayout.CENTER);
    }

    private void addButton(String label, ActionListener listener) {
        JButton button = new JButton(label);
        button.addActionListener(listener);
        panel.add(button);
    }

    private class InsertAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String input = event.getActionCommand();
            if (start) {
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
    }

    private class ClearAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            display.setText("0");
        }
    }

    private class CommandAction implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            String command = evt.getActionCommand();
            if (start) {
                if (command.equals("-")) {
                    display.setText(command);
                    start = false;
                } else
                    lastCommand = command;
            } else {
                calculate(Double.parseDouble(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
    }

    public void calculate(double x) {
        if (lastCommand.equals("+"))
            result += x;
        else if (lastCommand.equals("-"))
            result -= x;
        else if (lastCommand.equals("*"))
            result *= x;
        else if (lastCommand.equals("/"))
            result /= x;
        else if (lastCommand.equals("=")) 
            result = x;
        display.setText("" + result);
    }
}

К моему стыду, с фантазией туго у меня)
Спасибо за кнопочку)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)