CodeStates_BE_44/과제

편의점 발주 프로그램 만들기

조화이트 2023. 2. 23. 19:49
728x90

⚙ 본 프로그램은 명령 프롬프트를 열어 실행할 수 있도록 합니다.

였지만,, 한글 인코딩이 어떻게 해도 안돼서 포기 ,,

 

기능 설명

showMenu() : 선택할 메뉴를 보여준다.
selectMenu() : 번호를 입력 받아서 return한다.
 - 이 때 1~6 외의 숫자가 들어오면 다시 선택하게 한다.
prod_input() : 등록할 상품명을 입력 받아서 List에 add
prod_remove() : 삭제할 상품명을 입력 받아서 isCorrect() 호출
- 상품명이 List에 존재하면 제거, 존재하지 않으면 다시 입력
prod_amount_add() : 입고할 상품명, 수량을 입력 받아서 isCorrect() 호출
- 상품명이 List에 존재하면 해당 상품의 수량 추가, 존재하지 않으면 다시 입력
prod_amount_decrease() : 출고할 상품명, 수량을 입력 받아서 isCorrect() 호출
- 이 때 상품명 불일치, 입력받은 수량이 출고할 상품 수량보다 크거나 0보다 작은 경우 다시 실행
prod_search() : 재고(상품명, 수량) 출력

추가가 필요한 기능
- 예외처리(메뉴 선택 시 int 외의 타입으로 들어올 경우)
- 생각 중

결과

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class MyStorage {
  static String[] prodList = new String[10];
  static int[] prodCount = new int[10];
  static String name;
  static int count;
  // showMenu() 메서드가 호출되면 프로그램의 기능들을 보여줄 수 있도록 정의합니다.
  static void showMenu(){
    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("-".repeat(25));
  }
  // selectMenu() 메서드는 사용자가 프로그램의 기능을 선택할 수 있도록 합니다.
  // 인자는 입력을 받기 위한 Scanner 클래스의 객체(s) 를 전달받습니다.
  static int selectMenu(BufferedReader br) throws IOException{
    int select;

    System.out.print("[System] 원하는 기능의 번호를 입력하세요 : ");
    select = Integer.parseInt(br.readLine());

    return select;
  }

  //1. 물건 정보(제품명) 등록
  static void prod_input(BufferedReader br) throws IOException{
    System.out.print("[System] 등록을 원하는 제품명을 입력하세요 : ");
    name = br.readLine();
    System.out.println("[System] 등록이 완료됐습니다.");

    for(int i=0; i<prodList.length; i++) {
      if(prodList[i].equals("등록 가능")) {
        prodList[i] = name;
        break;
      }
    }

    System.out.println("[System] 현재 등록된 제품 목록 ▼");
    for(int i=0; i<prodList.length; i++) {
      System.out.println("> "+prodList[i]);
    }
    System.out.println("-".repeat(25));
  }

  //2. 물건 정보(제품명) 등록 취소하기
  static void prod_remove(BufferedReader br) throws IOException{
    System.out.print("[System] 제품 등록 취소를 원하는 제품명을 입력하세요 : ");
    name = br.readLine();
    if(isCorrect(name)==false) prod_remove(br);
    else {
      for(int i=0; i<prodList.length; i++) {
        if(prodList[i].equals(name)) {
          for(int k=i+1; k<prodList.length; k++) {
            prodList[k-1] = prodList[k];
            prodCount[k-1] = prodCount[k];
          }
          if(prodList[prodList.length-1]==prodList[prodList.length-2]) {
            prodList[prodList.length-1] = "등록 가능";
          }
          break;
        }
      }
    }

    System.out.println("[System] 제품 취소가 완료됐습니다.");
  }

  //3. 물건 넣기 (제품 입고)
  static void prod_amout_add(BufferedReader br) throws IOException {
    System.out.println("[System] 물건의 수량을 추가합니다. (입고)");
    prod_search();
    System.out.print("[System] 수량을 추가할 제품명을 입력하세요 : ");
    name = br.readLine();
    if(isCorrect(name)==false) prod_amout_add(br);
    else {
      System.out.print("[System] 추가할 수량을 입력해주세요 : ");
      count = Integer.parseInt(br.readLine());

      for(int i=0; i<prodList.length; i++) {
        if(prodList[i].equals(name)) {
          prodCount[i] += count;
        }
      }
      System.out.println("[Clear] 정상적으로 제품의 수량 추가가 완료되었습니다.");
      prod_search();
    }
  }

  //4. 물건 빼기 (제품 출고)
  static void prod_amount_decrease(BufferedReader br) throws IOException{
    System.out.println("[System] 제품의 출고를 진행합니다.");
    prod_search();
    System.out.print("[System] 출고를 진행할 제품명을 입력하세요 : ");
    name = br.readLine();
    if(isCorrect(name)==false) prod_amount_decrease(br);
    else {
      System.out.print("[System] 원하는 출고량을 입력하세요 : ");
      count = Integer.parseInt(br.readLine());
      if(isCorrect(count)==false) prod_amount_decrease(br);
      else {
        for(int i=0; i<prodList.length; i++) {
          if(prodList[i].equals(name)) {
            prodCount[i] -= count;
          }
        }
        System.out.println("[Clear] 출고가 완료되었습니다.");
        prod_search();
      }
    }
  }

  //5. 재고 조회
  static void prod_search() {
    System.out.println("[System] 현재 등록된 제품 및 수량 ▼");
    for(int i=0; i<prodList.length; i++) {
      System.out.println("> "+prodList[i]+" : "+prodCount[i]+"개");
    }
    System.out.println("-".repeat(25));
  }

  //입력된 상품명, 수량이 올바른지 검사
  static boolean isCorrect(String name) {
    for(int i=0; i<prodList.length; i++) {
      if(prodList[i].equals(name)) return true;
    }
    System.out.println("[System] 등록되지 않은 상품입니다.");
    System.out.println("[System] 해당 메뉴를 다시 실행합니다.");
    return false;
  }
  static boolean isCorrect(int count) {
    for(int i=0; i<prodCount.length; i++) {
      if(prodCount[i]>=count) return true;
      if(prodCount[i]<0) {
        System.out.println("[System] 상품 수량은 0보다 커야 합니다.");
        System.out.println("[System] 해당 메뉴를 다시 실행합니다.");
        return false;
      }
    }
    System.out.println("[System] 상품 수량이 부족합니다.");
    System.out.println("[System] 해당 메뉴를 다시 실행합니다.");
    return false;
  }

  // main() 메서드는 점장님의 이름을 인자(args)로 전달 받습니다.
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Arrays.fill(prodList,"등록 가능");
    Arrays.fill(prodCount,0);
    // 해당 프로그램의 버전, 점장님의 이름, 프로그램의 기능을 출력합니다.
    //TODO:
    System.out.println("[Item_Stroage_V3]");
    System.out.println("-".repeat(25));
    System.out.println("[System] "+args+" 점장님 어서오세요.");
    System.out.println("[system] 해당 프로그램의 기능입니다.");

    program : while(true) {
      showMenu();
      switch(selectMenu(br)) {
        case 1 : {
          prod_input(br);
          break;
        }
        case 2 : {
          prod_remove(br);
          break;
        }
        case 3 : {
          prod_amout_add(br);
          break;
        }
        case 4 : {
          prod_amount_decrease(br);
          break;
        }
        case 5 : {
          prod_search();
          break;
        }
        case 6 : {
          System.out.println("[System] 프로그램을 종료합니다.");
          System.out.println("[System] 감사합니다.");
          break program;
        }
        default : {
          System.out.println("[System] 없는 번호를 선택하셨습니다.");
          System.out.println("[System] 프로그램이 다시 시작됩니다.");
          br.close();
          break;
        }
      }
    }
  }
}
[Item_Stroage_V3]
-------------------------
[System] [Ljava.lang.String;@7ef20235 점장님 어서오세요.
[system] 해당 프로그램의 기능입니다.
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 1
[System] 등록을 원하는 제품명을 입력하세요 : 사이다
[System] 등록이 완료됐습니다.
[System] 현재 등록된 제품 목록 ▼
> 사이다
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 1
[System] 등록을 원하는 제품명을 입력하세요 : 콜라
[System] 등록이 완료됐습니다.
[System] 현재 등록된 제품 목록 ▼
> 사이다
> 콜라
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 1
[System] 등록을 원하는 제품명을 입력하세요 : 커피
[System] 등록이 완료됐습니다.
[System] 현재 등록된 제품 목록 ▼
> 사이다
> 콜라
> 커피
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 1
[System] 등록을 원하는 제품명을 입력하세요 : 아이스크림
[System] 등록이 완료됐습니다.
[System] 현재 등록된 제품 목록 ▼
> 사이다
> 콜라
> 커피
> 아이스크림
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
> 등록 가능
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 3
[System] 물건의 수량을 추가합니다. (입고)
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 콜라 : 0개
> 커피 : 0개
> 아이스크림 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
[System] 수량을 추가할 제품명을 입력하세요 : 쥬스
[System] 등록되지 않은 상품입니다.
[System] 해당 메뉴를 다시 실행합니다.
[System] 물건의 수량을 추가합니다. (입고)
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 콜라 : 0개
> 커피 : 0개
> 아이스크림 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
[System] 수량을 추가할 제품명을 입력하세요 : 아이스크림
[System] 추가할 수량을 입력해주세요 : 50
[Clear] 정상적으로 제품의 수량 추가가 완료되었습니다.
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 콜라 : 0개
> 커피 : 0개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 3
[System] 물건의 수량을 추가합니다. (입고)
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 콜라 : 0개
> 커피 : 0개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
[System] 수량을 추가할 제품명을 입력하세요 : 커피
[System] 추가할 수량을 입력해주세요 : 64
[Clear] 정상적으로 제품의 수량 추가가 완료되었습니다.
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 콜라 : 0개
> 커피 : 64개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 2
[System] 제품 등록 취소를 원하는 제품명을 입력하세요 : 콜라
[System] 제품 취소가 완료됐습니다.
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 2
[System] 제품 등록 취소를 원하는 제품명을 입력하세요 : 쥬스
[System] 등록되지 않은 상품입니다.
[System] 해당 메뉴를 다시 실행합니다.
[System] 제품 등록 취소를 원하는 제품명을 입력하세요 : 등록 가능
[System] 제품 취소가 완료됐습니다.
[System] 제품 취소가 완료됐습니다.
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 5
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 커피 : 64개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 4
[System] 제품의 출고를 진행합니다.
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 커피 : 64개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
[System] 출고를 진행할 제품명을 입력하세요 : 커피
[System] 원하는 출고량을 입력하세요 : 80
[System] 상품 수량이 부족합니다.
[System] 해당 메뉴를 다시 실행합니다.
[System] 제품의 출고를 진행합니다.
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 커피 : 64개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
[System] 출고를 진행할 제품명을 입력하세요 : 커피
[System] 원하는 출고량을 입력하세요 : 30
[Clear] 출고가 완료되었습니다.
[System] 현재 등록된 제품 및 수량 ▼
> 사이다 : 0개
> 커피 : 34개
> 아이스크림 : 50개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
> 등록 가능 : 0개
-------------------------
1. 물건 정보(제품명) 등록하기
2. 물건 정보(제품명) 등록 취소하기
3. 물건 넣기 (제품 입고)
4. 물건 빼기 (제품 출고)
5. 재고 조회
6. 프로그램 종료
-------------------------
[System] 원하는 기능의 번호를 입력하세요 : 6
[System] 프로그램을 종료합니다.
[System] 감사합니다.
728x90
반응형