본문 바로가기
국비학원/숙제

Day18_단순연산 계산기

by 루팽 2022. 12. 27.

연습-1, 2만 쓰는 단순연산 계산기

package dev_java.week4;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import java.awt.GridLayout;
import java.awt.Font;

public class Operator12Form implements ActionListener {
  Vector<Integer> vTest = new Vector<>();
  static int i;
  static int j;

  JFrame jf = new JFrame();
  JPanel jp_north = new JPanel();
  JPanel jp_center = new JPanel();
  JPanel jp_south = new JPanel();
  JButton jbtn_account = new JButton("연산");
  JButton jbtn_exit = new JButton("종료");
  JButton jbtn_first = new JButton("1");
  JLabel jlb_oper = new JLabel("연산자");
  JButton jbtn_plus = new JButton("+");
  JButton jbtn_minus = new JButton("-");
  JButton jbtn_mult = new JButton("*");
  JButton jbtn_div = new JButton("/");
  JButton jbtn_second = new JButton("2");
  JTextField jtf_result = new JTextField("");
  Font f = new Font("Paryrus", Font.BOLD, 40);

  double account(String oper) {
    double tot = 0;
    if ("+".equals(oper)) {
      for (int i = 0; i < vTest.size(); i++) {
        tot += vTest.get(i);
      }
    } else if ("-".equals(oper)) {
      tot = vTest.get(0);
      for (int i = 1; i < vTest.size(); i++) {
        tot -= vTest.get(i);
      }
    } else if ("*".equals(oper)) {
      tot = vTest.get(0);
      for (int i = 1; i < vTest.size(); i++) {
        tot *= vTest.get(i);
      }
    } else if ("/".equals(oper)) {
      tot = vTest.get(0);
      for (int i = 1; i < vTest.size(); i++) {
        tot /= vTest.get(i);
      }
    }
    vTest.clear();
    return tot;
  }

  public void initDisplay() {
    jbtn_first.setFont(f);
    jbtn_second.setFont(f);
    jbtn_plus.setFont(f);
    jbtn_minus.setFont(f);
    jbtn_mult.setFont(f);
    jbtn_div.setFont(f);
    jbtn_plus.addActionListener(this);
    jbtn_minus.addActionListener(this);
    jbtn_mult.addActionListener(this);
    jbtn_div.addActionListener(this);
    jbtn_account.addActionListener(this);
    jbtn_exit.addActionListener(this);
    jbtn_first.addActionListener(this);
    jbtn_second.addActionListener(this);
    jtf_result.addActionListener(this);
    jlb_oper.setHorizontalAlignment(SwingConstants.CENTER);
    jlb_oper.setVerticalAlignment(SwingConstants.CENTER);
    jp_south.add(jbtn_account);
    jp_south.add(jbtn_exit);
    jp_center.setLayout(new GridLayout(1, 4));
    jp_center.add(jbtn_plus);
    jp_center.add(jbtn_minus);
    jp_center.add(jbtn_mult);
    jp_center.add(jbtn_div);
    jp_north.setLayout(new GridLayout(1, 4));
    jp_north.add(jbtn_first);
    jp_north.add(jlb_oper);
    jp_north.add(jbtn_second);
    jp_north.add(jtf_result);
    jf.add("North", jp_north);
    jf.add("Center", jp_center);
    jf.add("South", jp_south);
    jf.setTitle("계산기구현");
    jf.setSize(400, 200);
    jf.setVisible(true);
  }

  public static void main(String[] args) {
    Operator12Form op1 = new Operator12Form();
    op1.initDisplay();
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    Object obj = e.getSource();
    // 이벤트가 발생하기 전에 첫번째 숫자와 두번째 숫자를 담는 이유는 무엇입니까?
    i = Integer.parseInt(jbtn_first.getText());
    j = Integer.parseInt(jbtn_second.getText());

    if (jbtn_account == obj) {// 연산 버튼
      System.out.println("연산버튼 클릭");
      if (jtf_result.getText().contains("+")) {
        jtf_result.setText(jtf_result.getText() + " = " + (account("+")));
      } else if (jtf_result.getText().contains("-")) {
        jtf_result.setText(jtf_result.getText() + " = " + (account("-")));
      } else if (jtf_result.getText().contains("*")) {
        jtf_result.setText(jtf_result.getText() + " = " + (account("*")));
      } else if (jtf_result.getText().contains("/")) {
        jtf_result.setText(jtf_result.getText() + " = " + (account("/")));
      }

    } else if (jbtn_first == obj) {
      System.out.println("사용자가 입력한 값1 : " + jbtn_first.getText());
      if (jtf_result.getText().contains("=")) {
        jtf_result.setText("" + String.valueOf(i));
      } else {
        jtf_result.setText(jtf_result.getText() + String.valueOf(i));
      }
      vTest.add(i);

    } else if (jbtn_second == obj) {
      System.out.println("사용자가 입력한 값 2: " + jbtn_second.getText());
      if (jtf_result.getText().contains("=")) {
        jtf_result.setText("" + String.valueOf(j));
      } else {
        jtf_result.setText(jtf_result.getText() + String.valueOf(j));
      }
      vTest.add(j);

    } else if (jtf_result == obj) {
      System.out.println("jtf_result : ");

    } else if (jbtn_exit == obj) {
      System.exit(0);

    } else if (jbtn_plus == obj) {// 더하기 연산자
      // insert here
      jtf_result.setText(jtf_result.getText() + jbtn_plus.getText());

    } else if (jbtn_minus == obj) {// 빼기 연산자
      // insert here
      jtf_result.setText(jtf_result.getText() + jbtn_minus.getText());

    } else if (jbtn_mult == obj) {// 곱하기 연산자
      // insert here
      jtf_result.setText(jtf_result.getText() + jbtn_mult.getText());

    } else if (jbtn_div == obj) {// 나누기 연산자
      // insert here
      jtf_result.setText(jtf_result.getText() + jbtn_div.getText());
    }
  }// end of actionPerformed
}

 

숙제-단순 연산 계산기

package dev_java.week4;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class CalculatorApp extends JFrame implements ActionListener {
  // 선언부
  Vector<String> vSetNum = new Vector<>();
  Vector<Double> vOneNum = new Vector<>();
  double total = 0;
  JTextField jtf_display = new JTextField(10);
  JPanel jp_center = new JPanel();
  JButton jbtn_plus = new JButton("+");
  JButton jbtn_minus = new JButton("-");
  JButton jbtn_mult = new JButton("*");
  JButton jbtn_div = new JButton("/");
  JButton jbtn_equal = new JButton("=");
  JButton jbtn_clear = new JButton("C");
  JButton jbtn_one = new JButton("1");
  JButton jbtn_two = new JButton("2");
  JButton jbtn_three = new JButton("3");
  JButton jbtn_four = new JButton("4");
  JButton jbtn_five = new JButton("5");
  JButton jbtn_six = new JButton("6");
  JButton jbtn_seven = new JButton("7");
  JButton jbtn_eight = new JButton("8");
  JButton jbtn_nine = new JButton("9");
  JButton jbtn_zero = new JButton("0");
  JButton jbtn_dot = new JButton(".");
  Font f = new Font("Paryrus", Font.BOLD, 40);

  // 생성부
  public CalculatorApp() {
    initDisplay();
  }

  // 화면처리기
  public void initDisplay() {
    jbtn_clear.setForeground(Color.BLUE);
    jbtn_plus.setFont(f);
    jbtn_minus.setFont(f);
    jbtn_mult.setFont(f);
    jbtn_div.setFont(f);
    jbtn_equal.setFont(f);
    jbtn_clear.setFont(f);
    jbtn_one.setFont(f);
    jbtn_two.setFont(f);
    jbtn_three.setFont(f);
    jbtn_four.setFont(f);
    jbtn_five.setFont(f);
    jbtn_six.setFont(f);
    jbtn_seven.setFont(f);
    jbtn_eight.setFont(f);
    jbtn_nine.setFont(f);
    jbtn_zero.setFont(f);
    jbtn_dot.setFont(f);
    jp_center.setBackground(Color.cyan);
    jp_center.setLayout(new GridLayout(5, 4, 2, 2));
    jbtn_plus.addActionListener(this);
    jbtn_minus.addActionListener(this);
    jbtn_mult.addActionListener(this);
    jbtn_div.addActionListener(this);
    jbtn_equal.addActionListener(this);
    jbtn_clear.addActionListener(this);
    jbtn_one.addActionListener(this);
    jbtn_two.addActionListener(this);
    jbtn_three.addActionListener(this);
    jbtn_four.addActionListener(this);
    jbtn_five.addActionListener(this);
    jbtn_six.addActionListener(this);
    jbtn_seven.addActionListener(this);
    jbtn_eight.addActionListener(this);
    jbtn_nine.addActionListener(this);
    jbtn_zero.addActionListener(this);
    jbtn_dot.addActionListener(this);
    jp_center.add(jbtn_seven);
    jp_center.add(jbtn_eight);
    jp_center.add(jbtn_nine);
    jp_center.add(jbtn_div);
    jp_center.add(jbtn_four);
    jp_center.add(jbtn_five);
    jp_center.add(jbtn_six);
    jp_center.add(jbtn_mult);
    jp_center.add(jbtn_one);
    jp_center.add(jbtn_two);
    jp_center.add(jbtn_three);
    jp_center.add(jbtn_minus);
    jp_center.add(jbtn_zero);
    jp_center.add(jbtn_dot);
    jp_center.add(jbtn_equal);
    jp_center.add(jbtn_plus);
    jp_center.add(jbtn_clear);
    jtf_display.setEditable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add("North", jtf_display);
    this.add("Center", jp_center);
    this.setTitle("내가 만든 계산기");
    this.setSize(350, 400);
    this.setVisible(true);
  }

  // 연산 작업
  double calc(String str) {
    total = 0;
    if ("+".equals(str)) {
      for (int i = 0; i < vOneNum.size(); i++) {
        total += vOneNum.get(i);
      }
    } else if ("-".equals(str)) {
      total = vOneNum.get(0);
      for (int i = 1; i < vOneNum.size(); i++) {
        total -= vOneNum.get(i);
      }
    } else if ("*".equals(str)) {
      total = vOneNum.get(0);
      for (int i = 1; i < vOneNum.size(); i++) {
        total *= vOneNum.get(i);
      }
    } else if ("/".equals(str)) {
      total = vOneNum.get(0);
      for (int i = 1; i < vOneNum.size(); i++) {
        total /= vOneNum.get(i);
      }
    }
    return total;
  }

  // 숫자세팅
  void setNum() {
    if (vSetNum.size() != 0) {
      String sNum = vSetNum.get(0);
      for (int i = 1; i < vSetNum.size(); i++) {
        sNum += vSetNum.get(i);
      }
      vOneNum.add(Double.parseDouble(sNum));
      vSetNum.clear();
    } else {
      return;
    }
  }

  // = 연산 후 자동 지우기
  void clearDisplay() {
    if (jtf_display.getText().contains("=")) {
      jtf_display.setText(" ");
    }
  }

  public static void main(String[] args) {
    new CalculatorApp();
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    Object obj = e.getSource();
    // 연산자
    if (obj == jbtn_plus) {
      if (jtf_display.getText().contains("=")) {
        clearDisplay();
        jtf_display.setText(String.valueOf(total));
        vOneNum.add(total);
      }
      jtf_display.setText(jtf_display.getText() + "+");
      setNum();
    } else if (obj == jbtn_minus) {
      if (jtf_display.getText().contains("=")) {
        clearDisplay();
        jtf_display.setText(jtf_display.getText() + total);
        vOneNum.add(total);
      }
      jtf_display.setText(jtf_display.getText() + "-");
      setNum();
    } else if (obj == jbtn_mult) {
      if (jtf_display.getText().contains("=")) {
        clearDisplay();
        jtf_display.setText(jtf_display.getText() + total);
        vOneNum.add(total);
      }
      jtf_display.setText(jtf_display.getText() + "*");
      setNum();
    } else if (obj == jbtn_div) {
      if (jtf_display.getText().contains("=")) {
        clearDisplay();
        jtf_display.setText(jtf_display.getText() + total);
        vOneNum.add(total);
      }
      jtf_display.setText(jtf_display.getText() + "/");
      setNum();
    } else if (obj == jbtn_equal) {
      setNum();
      if (jtf_display.getText().contains("*")) {
        jtf_display.setText(jtf_display.getText() + " = " + calc("*"));
        vOneNum.clear();
      } else if (jtf_display.getText().contains("/")) {
        jtf_display.setText(jtf_display.getText() + " = " + calc("/"));
        vOneNum.clear();
      } else if (jtf_display.getText().contains("+")) {
        jtf_display.setText(jtf_display.getText() + " = " + calc("+"));
        vOneNum.clear();
      } else if (jtf_display.getText().contains("-")) {
        jtf_display.setText(jtf_display.getText() + " = " + calc("-"));
        vOneNum.clear();
      }
    } else if (obj == jbtn_clear) {
      jtf_display.setText("");
      vOneNum.clear();

      // 숫자와 도트
    } else if (obj == jbtn_one) {
      clearDisplay();
      String disNum = "1";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("1");
    } else if (obj == jbtn_two) {
      clearDisplay();
      String disNum = "2";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("2");
    } else if (obj == jbtn_three) {
      clearDisplay();
      String disNum = "3";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("3");
    } else if (obj == jbtn_four) {
      clearDisplay();
      String disNum = "4";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("4");
    } else if (obj == jbtn_five) {
      clearDisplay();
      String disNum = "5";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("5");
    } else if (obj == jbtn_six) {
      clearDisplay();
      String disNum = "6";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("6");
    } else if (obj == jbtn_seven) {
      clearDisplay();
      String disNum = "7";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("7");
    } else if (obj == jbtn_eight) {
      clearDisplay();
      String disNum = "8";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("8");
    } else if (obj == jbtn_nine) {
      clearDisplay();
      String disNum = "9";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("9");
    } else if (obj == jbtn_zero) {
      clearDisplay();
      String disNum = "0";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add("0");
    } else if (obj == jbtn_dot) {
      clearDisplay();
      String disNum = ".";
      jtf_display.setText(jtf_display.getText() + disNum);
      vSetNum.add(".");
    }
  }
}

'국비학원 > 숙제' 카테고리의 다른 글

DAY26_오라클 연습문제  (0) 2023.01.02
Day19_중복체크  (0) 2022.12.27
Day14_자바 연습문제  (0) 2022.12.27
Day13_랜덤 숫자 게임  (0) 2022.12.27
Day12_성적 관리 테이블  (0) 2022.12.27

댓글