[Java] swing -> scanner 변환 연습 (음식 주문 프로그램)

HodooHa·2024년 4월 24일
0
post-thumbnail

Java.swing으로 작업했던 FoodOrder클래스를 Java.scanner로 변환해봤다.

FoodOrder클래스는 음식을 주문하여 총 결제금액을 알려주는 간단한 프로그램이다.
수업에서는 Java.swing을 이용하여 다음과 같이 만들었다.

메뉴는 짬뽕, 우동, 짜장면 총 3개이고 가격은 모두 5천원으로 동일하게 설정했다.

코드는 다음과 같다.

[swing 이용]

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

public class FoodOrder {
    private static int count;
    private static final int PRICE = 5000;
    private static JTextField t1;
    private static JLabel result;
    private static JLabel center;

    private static void btnAction(ActionEvent e) {
        count++;
        t1.setText(count + "개");
        result.setText("결제금액: " + (5000 * count) + "원");
        String imgName = e.getActionCommand();
        ImageIcon img = new ImageIcon("images/" + imgName+ ".png");
        center.setIcon(img);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("음식점 주문 화면");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.getContentPane().setBackground(Color.GREEN);
        f.setSize(823, 574);
        f.getContentPane().setLayout(null);

        JLabel lblNewLabel = new JLabel("개수:");
        lblNewLabel.setFont(new Font("굴림", Font.BOLD, 20));
        lblNewLabel.setBounds(489, 37, 68, 46);

//        JTextField t1 = new JTextField();
        t1 = new JTextField();
        t1.setBackground(Color.YELLOW);
        t1.setFont(new Font("굴림", Font.BOLD, 40));
        t1.setBounds(556, 32, 239, 44);
        t1.setColumns(10);

//        JLabel center = new JLabel("");
        center = new JLabel("");
        ImageIcon img = new ImageIcon("images/짜장면.png");
        center.setIcon(img);
        center.setBounds(124, 96, 559, 368);

//        JLabel result = new JLabel("결제금액: ");
        result = new JLabel("결제금액: ");
        result.setForeground(Color.RED);
        result.setFont(new Font("굴림", Font.BOLD, 30));
        result.setBounds(124, 464, 555, 61);

        JButton btnNewButton = new JButton("짬뽕");
        btnNewButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnAction(e);
//                count++;
//                t1.setText(count + "개");
//                result.setText("결제금액: " + (5000 * count) + "원");
//				  ImageIcon img2 = new ImageIcon("images/짬뽕.png");
//                center.setIcon(img2);
            }
        });

   		btnNewButton.setBackground(Color.MAGENTA);
        btnNewButton.setFont(new Font("굴림", Font.BOLD, 27));
        btnNewButton.setBounds(12, 10, 142, 66);

        JButton btnNewButton_1 = new JButton("우동");
        btnNewButton_1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnAction(e);
//                count++;
//                t1.setText(count + "개");
//                result.setText("결제금액: " + (5000 * count) + "원");
//                ImageIcon img3 = new ImageIcon("images/우동.png");
//                center.setIcon(img3);
            }
        });
        btnNewButton_1.setFont(new Font("굴림", Font.BOLD, 27));
        btnNewButton_1.setBackground(Color.ORANGE);
        btnNewButton_1.setBounds(166, 10, 142, 66);

        JButton btnNewButton_2 = new JButton("짜장면");
        btnNewButton_2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btnAction(e);
//                count++;
//                t1.setText(count + "개");
//                result.setText("결제금액: " + (5000 * count) + "원");
//                center.setIcon(img);
            }
        });
        btnNewButton_2.setFont(new Font("굴림", Font.BOLD, 27));
        btnNewButton_2.setBackground(Color.CYAN);
        btnNewButton_2.setBounds(320, 10, 142, 66);

        f.getContentPane().add(lblNewLabel);
        f.getContentPane().add(t1);
        f.getContentPane().add(center);
        f.getContentPane().add(result);
        f.getContentPane().add(btnNewButton);
        f.getContentPane().add(btnNewButton_1);
        f.getContentPane().add(btnNewButton_2);

        f.setVisible(true);
    }

}

처음에는 각 버튼마다 이벤트를 작성하였는데, 이후
버튼이벤트의 공통 프로세스는 btnAction 메서드로 만들었다. // 기존 코드는 주석 처리함

scanner로 변환하며 하기 내용을 수정, 추가해보았다.

1) Food 클래스 생성
2) Food 타입의 menu 배열 생성
3) 각 메뉴별 가격 다르게 설정

[Scanner 이용]

Food.java

public class Food {

    private String name;
    private int price;
    private int count;

    public Food() {
    }

    public Food(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Food{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", count=" + count +
                '}';
    }
}

FoodOrder2.java

import java.util.Scanner;

public class FoodOrder2 {
    static Food[] menu = new Food[10];

    public static int totalCount;
    public static int totalPrice;

    public static void order(int num) {
        int count = menu[num - 1].getCount();
        menu[num - 1].setCount(count + 1);
        totalCount++;
        totalPrice += menu[num - 1].getPrice();
    }

    public static void main(String[] args) {

        menu[0] = new Food("짜장면", 7000);
        menu[1] = new Food("짬뽕", 8000);
        menu[2] = new Food("우동", 6000);

        while (true) {
            Scanner s = new Scanner(System.in);

            System.out.println("========== 메뉴를 선택하세요. ==========");
            System.out.println("1. 짜장면");
            System.out.println("2. 짬뽕");
            System.out.println("3. 우동");
            System.out.println("4. 주문 메뉴 확인");
            System.out.println("5. 계산하기");
            System.out.println("6. 나가기");
            System.out.println("====================================");

            int choice = s.nextInt();
            s.nextLine();
            switch (choice) {
                case 1, 2, 3:
                    order(choice);
                    break;

                case 4:
                    System.out.println("============ 주문한 메뉴 ============");
                    if (totalCount == 0) {
                        System.out.println("주문하신 메뉴가 없습니다.");
                    } else {
                        for (int i = 0; i < menu.length; i++) {
                            if (menu[i] != null && menu[i].getCount() != 0 ) {
                                System.out.println(menu[i].getName() + ": " + menu[i].getCount());
                            }
                        }
                        System.out.println("결제하실 금액은 " + totalPrice + "원입니다.");
                    }
                    System.out.println("====================================");
                    break;

                case 5:
                    System.out.println("====================================");
                    System.out.println("주문하신 메뉴는 총 "+totalCount+"개입니다.");
                    System.out.println("결제하실 금액은 " + totalPrice + "원입니다. 감사합니다.");
                    System.out.println("====================================");
                    for(int i=0; menu[i] != null; i++){
                        menu[i].setCount(0);
                    }
                    totalCount = 0;
                    totalPrice = 0;
                    for(int i=0; menu[i] != null; i++){
                        System.out.println(menu[i].getCount());
                    }
                    return;

                case 6:
                    System.out.println("주문이 취소되었습니다.");
                    return;

                default:
                    System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");

            }
        }
    }
}

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글