본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 11일차 (2023-06-07) 자바 기초 DAY9_개인프로젝트 - 마트 물품 관리 시스템

by prometedor 2023. 6. 7.

개인 프로젝트 - 마트 물품 관리 시스템

App.java

package bitcamp.report;

import bitcamp.report.handler.itemHandler;
import bitcamp.util.Prompt;

public class App {

    public static void main(String[] args) {

        printTitle();

        while (itemHandler.available()) {
            itemHandler.inputMember();
            if (!promptContinue()) {
                break;
            }
        }

        itemHandler.printMembers();

        Prompt.close();
    }

    static void printTitle() {
        System.out.println("마트 물품 관리 시스템");
        System.out.println("---------------------------------------------------------------------");
    }

    // static boolean promptContinue() {
    //    String response = Prompt.inputString("계속 하시겠습니까?(Y/n) ");
    //    if (!response.equals("") && !response.equalsIgnoreCase("Y")) {
    //        return false;
    //    }
    //    return true;
    //}
}

 

itemHandler.java

package bitcamp.report.handler;

import bitcamp.util.Prompt;

public class itemHandler {

    static final int MAX_SIZE = 100;
    static int[] no = new int[MAX_SIZE];
    static String[] name = new String[MAX_SIZE];
    static String[] price = new String[MAX_SIZE];
    static String[] type = new String[MAX_SIZE];
    static int itemId = 1;
    static int length = 0;

    static final String FOOD = "식료품";
    static final String HOUSEHOLD_SUPPLIES = "생활용품";
    static final String CLOTHES = "의류";
    static final String HOME_APPLIANCES = "가전제품";
    static final String LIVING = "리빙";

    public static void inputMember() {
        name[length] = Prompt.inputString("물품 이름? ");
        price[length] = Prompt.inputString("물품 가격? ");

        loop: while (true) {
            String typeNo = Prompt.inputString("종류:\n" +
                    "  1. 식료품\n" +
                    "  2. 생활용품\n" +
                    "  3. 의류\n" +
                    "  4. 가전제품\n" +
                    "  5. 리빙\n" +
                    "> ");

            switch (typeNo) {
                case "1":
                    type[length] = FOOD;
                    break loop;
                case "2":
                    type[length] = HOUSEHOLD_SUPPLIES;
                    break loop;
                case "3":
                    type[length] = CLOTHES;
                    break loop;
                case "4":
                    type[length] = HOME_APPLIANCES;
                    break loop;
                case "5":
                    type[length] = LIVING;
                    break loop;
                default:
                    System.out.println("무효한 번호입니다.");
            }
        }

        no[length] = itemId++;
        length++;
    }

    public static void printMembers() {
        System.out.println("---------------------------------------------------------------------");
        System.out.println("물품 번호, 물품 이름, 물품 가격, 종류");
        System.out.println("---------------------------------------------------------------------");

        for (int i = 0; i < length; i++) {
            System.out.printf("%d, %s, %s, %s\n", no[i], name[i], price[i], type[i]);
        }
    }

    public static boolean available() {
        return length < MAX_SIZE;
    }
}

 

Prompt.java

package bitcamp.util;

import java.util.Scanner;

public class Prompt {

  static Scanner scanner = new Scanner(System.in);

  public static String inputString(String title) {
    System.out.print(title);
    return scanner.nextLine();
  }

  public static void close() {
    scanner.close();
  }

}

 

 

App.java 수정

while (itemHandler.available()) {
itemHandler.inputMember();
    if (!promptContinue()) {
        break;
    }
}

itemHandler.printMembers();

ㄴ 해당 while 문을 제거하고 아래와 같이 메뉴 만들기

 

시스템 메뉴 만들기

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("> ");

 

시스템 메뉴 만들기 코드 수정 - 시스템 메뉴 번호 입력 받아 출력하기

System.out.println("1. 물품 등록");
System.out.println("2. 물품 목록");
System.out.println("3. 물품 조회");
System.out.println("4. 물품 변경");
System.out.println("5. 물품 삭제");
System.out.println("6. 종료");
String menuNo = Prompt.inputString("> "); // 시스템 메뉴 번호 입력받기
System.out.println(menuNo); // 입력한 번호 출력

 

시스템 메뉴 만들기 코드 수정 - menu 라는 문자열을 입력 받으면 시스템 메뉴 목록 다시 노출시키기

public static void main(String[] args) {

        printTitle();

        System.out.println("1. 물품 등록");
        System.out.println("2. 물품 목록");
        System.out.println("3. 물품 조회");
        System.out.println("4. 물품 변경");
        System.out.println("5. 물품 삭제");
        System.out.println("6. 종료");

        while (true) {
            String menuNo = Prompt.inputString("> ");
            if (menuNo.equals("6")) {
                break;
            } else if (menuNo.equals("menu")) {
                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(menuNo);
        }

        Prompt.close();
    }

ㄴ while 문은 6을 입력받아 종료될 때까지 계속 반복

ㄴ 겹치는 코드가 존재하므로 이는 메소드로 추출

 

시스템 메뉴 만들기 코드 수정 - 겹치는 코드 메소드로 추출

static void printMenu() {
    System.out.println("1. 물품 등록");
    System.out.println("2. 물품 목록");
    System.out.println("3. 물품 조회");
    System.out.println("4. 물품 변경");
    System.out.println("5. 물품 삭제");
    System.out.println("6. 종료");
}

ㄴ 겹치는 부분 printMenu() 라는 메소드로 추출

 

시스템 메뉴 만들기 코드 수정 - itemHandler 의 inputItem() 메서드 사용하기

public static void main(String[] args) {

    printTitle();

    printMenu();

    while (true) {
        String menuNo = Prompt.inputString("> ");
        if (menuNo.equals("6")) {
            break;
        } else if (menuNo.equals("menu")) {
            printMenu();
        } else if (menuNo.equals("1")) {
            itemHandler.inputItem();
        } else {
            System.out.println(menuNo);
        }
    }

    Prompt.close();
}

ㄴ 시스템 메뉴에서 1번은 물품 등록이므로 inputItem() 이라는 이름의 메서드를 사용할 것임

ㄴ itemHandler.inputItem() 코드 추가

 

itemHandler.java 수정

inputItem() 메서드 수정 - available() 이용

public static boolean available() {
    return length < MAX_SIZE;
}

ㄴ 해당 메서드를 inputMember() 안에서 활용

 

if (!available()) {
    System.out.println("더이상 입력할 수 없습니다!");
    return;
}

ㄴ length 가 MAX_SIZE 를 넘어서면 "더이상 입력할 수 없습니다!" 메시지 출력

 

 

App.java 수정

시스템 메뉴 만들기 코드 수정 - itemHandler 의 printItems() 메서드 사용하기

public static void main(String[] args) {

    printTitle();

    printMenu();

    while (true) {
        String menuNo = Prompt.inputString("> ");
        if (menuNo.equals("6")) {
            break;
        } else if (menuNo.equals("menu")) {
            printMenu();
        } else if (menuNo.equals("1")) {
            itemHandler.inputItem();
        } else if (menuNo.equals("2")) {
            itemHandler.printItems();
        } else {
            System.out.println(menuNo);
        }
    }

    Prompt.close();
}

ㄴ 시스템 메뉴에서 2번은 물품 목록 출력이므로 printItem() 이라는 이름의 메서드를 사용할 것임

ㄴ itemHandler.printItem() 코드 추가

 

시스템 메뉴 만들기 코드 수정 - itemHandler 의 viewItem() 메서드 추가

public static void main(String[] args) {

    printTitle();

    printMenu();

    while (true) {
    	// 세부 선택을 하는 '>' 와 구분하기 어려우므로 메인 이라는 문자 추가
        String menuNo = Prompt.inputString("메인> ");
        if (menuNo.equals("6")) {
            break;
        } else if (menuNo.equals("menu")) {
            printMenu();
        } else if (menuNo.equals("1")) {
            itemHandler.inputItem();
        } else if (menuNo.equals("2")) {
            itemHandler.printItems();
        } else if (menuNo.equals("3")) {
            itemHandler.viewItems();
        } else {
            System.out.println(menuNo);
        }
    }

    Prompt.close();
}

ㄴ 시스템 메뉴에서 3번은 물품 조회이므로 viewItem() 이라는 이름의 메서드를 사용할 것임

ㄴ itemHandler.viewItem() 코드 추가

 

 

itemHandler.java 수정

viewItem() 메서드 추가

# 이렇게 출력되도록 만들 것

물품 번호? 1
물품 이름:
물품 가격:
물품 종류
>
물품 번호? 2
해당 번호의 물품이 없습니다.
public static void viewItem() {
	// 입력 받은 번호를 가지고 배열에서 해당 물품을 찾아야 함
    String itemNo = Prompt.inputString("물품 번호? ");
    for (int i = 0; i < length; i++) {
    	// i 번째 항목에 저장된 물품 정보 출력
        if (no[i] == Integer.parseInt(itemNo)) {
            System.out.printf("물품 이름: %s\n", name[i]);
            System.out.printf("물품 가격: %s\n", price[i]);
            System.out.printf("물품 종류: %c\n", type[i]);
            return;
        }
    }
    System.out.println("해당 번호의 물품이 없습니다!");
}

ㄴ 물품 번호를 받아서 해당 번호가 존재하는지 여부를 확인하고 없으면 "해당 번호의 물품이 없습니다!" 출력하고 있으면 해당 번호의 물품 정보를 출력

 

** type[i] 부분이 gender[i] 라면

- 아래 조건식도 사용 가능(M or W 2가지 이므로)

- print 메서드 부분도 아래와 같이 사용 가능

- toGenderString 메서드 생성하여 간편화 가능

 

App.java 수정

시스템 메뉴 만들기 코드 수정 - itemHandler 의 updateItem() 메서드 추가

public static void main(String[] args) {

    printTitle();

    printMenu();

    while (true) {
    	// 세부 선택을 하는 '>' 와 구분하기 어려우므로 메인 이라는 문자 추가
        String menuNo = Prompt.inputString("메인> ");
        if (menuNo.equals("6")) {
            break;
        } else if (menuNo.equals("menu")) {
            printMenu();
        } else if (menuNo.equals("1")) {
            itemHandler.inputItem();
        } else if (menuNo.equals("2")) {
            itemHandler.printItems();
        } else if (menuNo.equals("3")) {
            itemHandler.viewItems();
        } else if (menuNo.equals("4")) {
            itemHandler.updateItems();
        } else {
            System.out.println(menuNo);
        }
    }

    Prompt.close();
}

ㄴ 시스템 메뉴에서 4번은 물품 변경이므로 updateItem() 이라는 이름의 메서드를 사용할 것임

ㄴ itemHandler.updateItem() 코드 추가

 

ItemHandler.java 수정

updateItem() 메서드 추가

# 이렇게 출려되도록 만들 것

메인> 4
번호? 1
이름(홍길동)? 임꺽정
이메일(hong@test.com)? leem@test.com
새암호? 1212
성별(여자)?
1. 남자
2. 여자
> 1
public static void updateItem() {
        String itemNo = Prompt.inputString("물품 번호? ");
        for (int i = 0; i < length; i++) {
            if (no[i] == Integer.parseInt(itemNo)) {
                System.out.printf("물품 이름(%s)? ", name[i]);
                name[i] = Prompt.inputString("");
                System.out.printf("물품 가격(%s)? ", price[i]);
                price[i] = Prompt.inputString("");

                loop: while (true) {
                    String typeNo = Prompt.inputString("종류(" + type[i] + ")?\n" +
                            "  1. 식료품\n" +
                            "  2. 생활용품\n" +
                            "  3. 의류\n" +
                            "  4. 가전제품\n" +
                            "  5. 리빙\n" +
                            "> ");

                    switch (typeNo) {
                        case "1":
                            type[length] = FOOD;
                            break loop;
                        case "2":
                            type[length] = HOUSEHOLD_SUPPLIES;
                            break loop;
                        case "3":
                            type[length] = CLOTHES;
                            break loop;
                        case "4":
                            type[length] = HOME_APPLIANCES;
                            break loop;
                        case "5":
                            type[length] = LIVING;
                            break loop;
                        default:
                            System.out.println("무효한 번호입니다.");
                    }
                }

                return;
            }
        }
        System.out.println("해당 번호의 물품이 없습니다!");
    }

ㄴ viewItem() 메서드의 물품 번호를 묻는 부분 참고하여 작성

ㄴ inputItem() 메서드 참고하여 작성

 

 

inputType(String type) 메서드 추가

private static String inputType(String type) {
    String label;
    if (type == null) {
        label = "물품 종류?\n";
    } else {
        label = String.format("물품 종류(%s)?\n", type);
    }
    loop: while (true) {
        String typeNo = Prompt.inputString(label +
                "  1. 식료품\n" +
                "  2. 생활용품\n" +
                "  3. 의류\n" +
                "  4. 가전제품\n" +
                "  5. 리빙\n" +
                "> ");

        switch (typeNo) {
            case "1":
                return FOOD;
            case "2":
                return HOUSEHOLD_SUPPLIES;
            case "3":
                return CLOTHES;
            case "4":
                return HOME_APPLIANCES;
            case "5":
                return LIVING;
            default:
                System.out.println("무효한 번호입니다.");
        }
    }
}

ㄴ inputItem(), updateItem() 메서드에서 사용할 것 => inputItem(), updateItem() 메서드 리팩토링

=> type[i] = inputItem(type[i]);

 

리팩토링 된 inputItem(), updateItem() 메서드

public static void inputItem() {
    if (!available()) {
        System.out.println("더이상 입력할 수 없습니다!");
        return;
    }

    name[length] = Prompt.inputString("물품 이름? ");
    price[length] = Prompt.inputString("물품 가격? ");
    // System.out.print("한정 판매(true/false)? ");
    // limited_Sale[i] = scanner.nextBoolean();
    type[length] = inputType(null);

    no[length] = itemId++;
    length++;
}
public static void updateItem() {
    String itemNo = Prompt.inputString("물품 번호? ");
    for (int i = 0; i < length; i++) {
        if (no[i] == Integer.parseInt(itemNo)) {
            System.out.printf("물품 이름(%s)? ", name[i]);
            name[i] = Prompt.inputString("");
            System.out.printf("물품 가격(%s)? ", price[i]);
            price[i] = Prompt.inputString("");
            type[i] = inputType(type[i]);
            return;
        }
    }
    System.out.println("해당 번호의 물품이 없습니다!");
}

 

App.java 수정

시스템 메뉴 만들기 코드 수정 - itemHandler 의 deleteItem() 메서드 추가

public static void main(String[] args) {

    printTitle();

    printMenu();

    while (true) {
    	// 세부 선택을 하는 '>' 와 구분하기 어려우므로 메인 이라는 문자 추가
        String menuNo = Prompt.inputString("메인> ");
        if (menuNo.equals("6")) {
            break;
        } else if (menuNo.equals("menu")) {
            printMenu();
        } else if (menuNo.equals("1")) {
            itemHandler.inputItem();
        } else if (menuNo.equals("2")) {
            itemHandler.printItems();
        } else if (menuNo.equals("3")) {
            itemHandler.viewItems();
        } else if (menuNo.equals("4")) {
            itemHandler.updateItems();
        } else if (menuNo.equals("5")) {
            itemHandler.deleteItems();
        } else {
            System.out.println(menuNo);
        }
    }

    Prompt.close();
}

ㄴ 시스템 메뉴에서 5번은 물품 삭제이므로 deleteItem() 이라는 이름의 메서드를 사용할 것임
ㄴ itemHandler.deleteItem() 코드 추가

 

deleteItem() 메서드 추가

# 이렇게 출려되도록 만들 것

메인> 5
번호? 7
해당 번호의 회원이 없습니다!
메인> 5
번호? 2
삭제했습니다.
메인>
1. 삭제하려는 회원의 정보가 들어있는 인덱스를 알아내기
2. 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화시키기
3. 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
4. length를 하나 줄이기

 

String 으로 선언된 itemNo 를 int 로 변경하기 및 for 문을 if 문으로 변경하기

String itemNo = Prompt.inputString("물품 번호? ");

int deletedIndex = indexOf(Integer.parseInt(itemNo));

// 입력 받은 번호를 가지고 배열에서 해당 회원을 찾아야 함
for (int i = 0; i < length; i++) {
    if (no[i] == Integer.parseInt(itemNo)) {
        deletedIndex = i;
        break;
    }
}

=> 

// 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기

int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));

int deletedIndex = indexOf(itemNo);

// // 입력 받은 번호를 가지고 배열에서 해당 물품을 찾아야 함
// for (int i = 0; i < length; i++) {
// if (no[i] == Integer.parseInt(itemNo)) {
// deletedIndex = i;
// break;
// }
// }

if (deletedIndex == -1) {
    System.out.println("해당 번호의 물품이 없습니다!");
    return;
}

 

 indexOf(int itemNo) 메서드 생성

private static int indexOf(int itemNo) {
    for (int i = 0; i < length; i++) {
        if (no[i] == itemNo) {
            return i;
        }
    }
    return -1;
}

ㄴ 배열에서 특정 항목을 찾는 과정에서 일치하는 항목이 없으면 일반적으로 -1을 반환하는 관례가 있으므로 해당 메서드 생성

ㄴ 이는 배열의 인덱스는 0부터 시작하기 때문에, 0 또는 양수인 인덱스는 유효한 배열 요소를 나타내고, -1은 일치하는 항목이 없음을 나타내는 것

 

public static void deleteItem() {
    // 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기

    int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));

    int deletedIndex = indexOf(itemNo);

    // // 입력 받은 번호를 가지고 배열에서 해당 물품을 찾아야 함
    // for (int i = 0; i < length; i++) {
    // if (no[i] == Integer.parseInt(itemNo)) {
    // deletedIndex = i;
    // break;
    // }
    // }

    if (deletedIndex == -1) {
        System.out.println("해당 번호의 물품이 없습니다!");
        return;
    }

    if (deletedIndex < (length - 1)) {
        // 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
        no[deletedIndex] = 0;
        name[deletedIndex] = null;
        price[deletedIndex] = null;
        type[deletedIndex] = null;
    } else {
        // 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
        for (int i = deletedIndex; i < length - 1; i++) {
            no[i] = no[i + 1];
            name[i] = name[i + 1];
            price[i] = price[i + 1];
            type[i] = type[i + 1];
        }

        // 배열의 맨 마지막 초기화
        no[length - 1] = 0;
        name[length - 1] = null;
        price[length - 1] = null;
        type[length - 1] = null;
    }
    // length 하나 줄이기
    length--;

    System.out.println("삭제했습니다.");
    return;
}

ㄴ 여기서 배열의 맨 마지막 초기화 부분 코드가 겹치므로 아래와 같이 리팩토링 필요

 

리팩토링 된 배열의 맨 마지막 초기화 코드 수정

public static void deleteItem() {
    // 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기

    int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));

    int deletedIndex = indexOf(itemNo);

    // // 입력 받은 번호를 가지고 배열에서 해당 물품을 찾아야 함
    // for (int i = 0; i < length; i++) {
    // if (no[i] == Integer.parseInt(itemNo)) {
    // deletedIndex = i;
    // break;
    // }
    // }

    if (deletedIndex == -1) {
        System.out.println("해당 번호의 물품이 없습니다!");
        return;
    }

    // if (deletedIndex < (length - 1)) {
    // // 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
    // no[deletedIndex] = 0;
    // name[deletedIndex] = null;
    // price[deletedIndex] = null;
    // type[deletedIndex] = null;
    // } else {
    // 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
    for (int i = deletedIndex; i < length - 1; i++) {
        no[i] = no[i + 1];
        name[i] = name[i + 1];
        price[i] = price[i + 1];
        type[i] = type[i + 1];
    }

    // 배열의 맨 마지막 초기화
    no[length - 1] = 0;
    name[length - 1] = null;
    price[length - 1] = null;
    type[length - 1] = null;
    // }
    // length 하나 줄이기
    length--;

    System.out.println("삭제했습니다.");
    return;
}

 

Prompt 클래스에 inputInt(String title) 추가하기

public class Prompt {

  static Scanner scanner = new Scanner(System.in);

  public static String inputString(String title) {
    System.out.print(title);
    return scanner.nextLine();
  }

  public static int inputInt(String title) {
    // System.out.print(title);
    // return scanner.nextLine();
    return Integer.parseInt(inputString(title));
  }

  public static void close() {
    scanner.close();
  }

}

 

 

총정리

App.java

import bitcamp.report.handler.itemHandler;
import bitcamp.util.Prompt;

public class App {

    public static void main(String[] args) {

        printTitle();

        printMenu();

        while (true) {
            String menuNo = Prompt.inputString("메인> ");
            if (menuNo.equals("6")) {
                break;
            } else if (menuNo.equals("menu")) {
                printMenu();
            } else if (menuNo.equals("1")) {
                itemHandler.inputItem();
            } else if (menuNo.equals("2")) {
                itemHandler.printItems();
            } else if (menuNo.equals("3")) {
                itemHandler.viewItem();
            } else if (menuNo.equals("4")) {
                itemHandler.updateItem();
            } else {
                System.out.println(menuNo);
            }
        }

        Prompt.close();
    }

    static void printMenu() {
        System.out.println("1. 물품 등록");
        System.out.println("2. 물품 목록");
        System.out.println("3. 물품 조회");
        System.out.println("4. 물품 변경");
        System.out.println("5. 물품 삭제");
        System.out.println("6. 종료");
    }

    static void printTitle() {
        System.out.println("마트 물품 관리 시스템");
        System.out.println("---------------------------------------------------------------------");
    }

    //static boolean promptContinue() {
    //    String response = Prompt.inputString("계속 하시겠습니까?(Y/n) ");
    //    if (!response.equals("") && !response.equalsIgnoreCase("Y")) {
    //        return false;
    //    }
    //    return true;
    //}
}

 

ItemHandler.java

import bitcamp.util.Prompt;

public class itemHandler {

    static final int MAX_SIZE = 100;
    static int[] no = new int[MAX_SIZE];
    static String[] name = new String[MAX_SIZE];
    static String[] price = new String[MAX_SIZE];
    // static boolean[] limited_Sale = new boolean[MAX_SIZE];
    static String[] type = new String[MAX_SIZE];
    static int itemId = 1;
    static int length = 0;

    static final String FOOD = "식료품";
    static final String HOUSEHOLD_SUPPLIES = "생활용품";
    static final String CLOTHES = "의류";
    static final String HOME_APPLIANCES = "가전제품";
    static final String LIVING = "리빙";

    public static void inputItem() {
        if (!available()) {
            System.out.println("더이상 입력할 수 없습니다!");
            return;
        }

        name[length] = Prompt.inputString("물품 이름? ");
        price[length] = Prompt.inputString("물품 가격? ");
        // System.out.print("한정 판매(true/false)? ");
        // limited_Sale[i] = scanner.nextBoolean();
        type[length] = inputType("0");

        no[length] = itemId++;
        length++;
    }

    public static void printItems() {
        System.out.println("---------------------------------------------------------------------");
        System.out.println("물품 번호, 물품 이름, 물품 가격, 종류");
        System.out.println("---------------------------------------------------------------------");

        for (int i = 0; i < length; i++) {
            System.out.printf("%d, %s, %s, %s\n", no[i], name[i], price[i], type[i]);
        }
    }

    public static void viewItem() {
        String itemNo = Prompt.inputString("물품 번호? ");
        for (int i = 0; i < length; i++) {
            if (no[i] == Integer.parseInt(itemNo)) {
                System.out.printf("물품 이름: %s\n", name[i]);
                System.out.printf("물품 가격: %s\n", price[i]);
                System.out.printf("물품 종류: %s\n", type[i]);
                return;
            }
        }
        System.out.println("해당 번호의 물품이 없습니다!");
    }

    public static void updateItem() {
        String itemNo = Prompt.inputString("물품 번호? ");
        for (int i = 0; i < length; i++) {
            if (no[i] == Integer.parseInt(itemNo)) {
                System.out.printf("물품 이름(%s)? ", name[i]);
                name[i] = Prompt.inputString("");
                System.out.printf("물품 가격(%s)? ", price[i]);
                price[i] = Prompt.inputString("");
                type[i] = inputType(type[i]);
                return;
            }
        }
        System.out.println("해당 번호의 물품이 없습니다!");
    }

    private static String inputType(String type) {
        String label;
        if (type == "0") {
            label = "물품 종류?\n";
        } else {
            label = String.format("물품 종류(%s)?\n", type);
        }
        loop: while (true) {
            String typeNo = Prompt.inputString(label +
                    "  1. 식료품\n" +
                    "  2. 생활용품\n" +
                    "  3. 의류\n" +
                    "  4. 가전제품\n" +
                    "  5. 리빙\n" +
                    "> ");

            switch (typeNo) {
                case "1":
                    return FOOD;
                case "2":
                    return HOUSEHOLD_SUPPLIES;
                case "3":
                    return CLOTHES;
                case "4":
                    return HOME_APPLIANCES;
                case "5":
                    return LIVING;
                default:
                    System.out.println("무효한 번호입니다.");
            }
        }
    }

    public static void deleteItem() {
        // 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기

        int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));

        int deletedIndex = indexOf(itemNo);

        // // 입력 받은 번호를 가지고 배열에서 해당 물품을 찾아야 함
        // for (int i = 0; i < length; i++) {
        // if (no[i] == Integer.parseInt(itemNo)) {
        // deletedIndex = i;
        // break;
        // }
        // }

        if (deletedIndex == -1) {
            System.out.println("해당 번호의 물품이 없습니다!");
            return;
        }

        // if (deletedIndex < (length - 1)) {
        // // 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
        // no[deletedIndex] = 0;
        // name[deletedIndex] = null;
        // price[deletedIndex] = null;
        // type[deletedIndex] = null;
        // } else {
        // 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
        for (int i = deletedIndex; i < length - 1; i++) {
            no[i] = no[i + 1];
            name[i] = name[i + 1];
            price[i] = price[i + 1];
            type[i] = type[i + 1];
        }

        // 배열의 맨 마지막 초기화
        no[length - 1] = 0;
        name[length - 1] = null;
        price[length - 1] = null;
        type[length - 1] = null;
        // }
        // length 하나 줄이기
        length--;

        System.out.println("삭제했습니다.");
        return;
    }

    private static int indexOf(int itemNo) {
        for (int i = 0; i < length; i++) {
            if (no[i] == itemNo) {
                return i;
            }
        }
        return -1;
    }

    public static boolean available() {
        return length < MAX_SIZE;
    }
}

 

Prompt.java

public class Prompt {

  static Scanner scanner = new Scanner(System.in);

  public static String inputString(String title) {
    System.out.print(title);
    return scanner.nextLine();
  }

  public static int inputInt(String title) {
    return Integer.parseInt(inputString(title));
  }

  public static void close() {
    scanner.close();
  }
}