메모장

[자판기 프로그램] 본문

JAVA/[실습문제]

[자판기 프로그램]

Itchild 2024. 4. 8. 17:39
728x90
반응형

 

[자판기 프로그램 제작]

"프로그램"

: 특정 데이터에 대해 CRUD 기능을 제공하는 것

C 데이터 생성

ex) 회원가입 사진업로드 학생추가 메뉴추가

R 데이터 읽어오기(==출력)

ex) 로그인 피드1개보기,피드목록보기,친구스토리보기 학생목록출력,학생1명의정보출력 메뉴출력

U 데이터 변경

ex) 마이페이지 글변경 학생점수변경 메뉴구매(재고줄어듦),메뉴의상태변경(가격변경)

D 데이터 삭제

ex) 회원탈퇴 글삭제

 

--------------------------------------------------------------------------------

 

자판기 프로그램에서 어떤 데이터를 다룰지?

▶ class 상품

상품명

재고

가격

상품번호 ★ ex) 주민등록번호,등록번호,학번,아이디,...

★ 데이터는 항상 유일해야한다!

=> 중복 xxxxx

=> 우연히 이름이 같은 데이터가 존재할수도있음!!!!!

=> 이 데이터가 정말 그 데이터가 맞아? "식별이 가능할수있도록" PK(기본키)

 

▶ 메서드

상품판매()

재고가 줄어들어야함

총 가격을 안내해야함

가격변경()

가격을 변경해야함

 

▶ main()

상품배열[]

상품배열에 상품추가하기

상품배열에 저장된 상품들을 출력하기

 

 

 

Q1) 상품판매(),가격변경() -> 메서드 : 인스턴스변수에 변화가 발생할땐 메서드로 선언

VS

상품'배열'에 상품추가하기, 상품'배열'에 저장된 상품들을 출력하기

-> main() 배열에 관련 된 일들은 main에 선언

 

package class01;

import java.util.Scanner;

class Product{
   // 1. 멤버변수 - 순서 첫번째
   int num; // PK
   String name;
   int cnt;
   int price;

   // 3. 생성자 - 순서 세번째
   Product(int num,String name,int price){
      this.num=num;
      this.name=name;
      this.cnt=5; // 재고의 디폴트값은 5
      this.price=price;
      System.out.println(this.name+" 생성완료!");
   }

   // 2. 메서드 - 순서 두번째
   //  1) 기능파악
   // : 사용자가 3개구매할건데, 구매가능한가요?
   // : 가능하다면 재고 마이너스
   // : 총 가격안내
   // : 불가능하다면 구매실패
   //  2) 메서드 시그니처 파악
   // : INPUT -> int 구매할상품의개수
   // : OUTPUT -> int 총가격, boolean
   //          => int 총가격(구매실패시 0원)
   //  3) 기능구현

   int sell(int cnt) {
      int sum=0;
      if(this.cnt>=cnt) {
         this.cnt-=cnt;
         sum=cnt*this.price;
         System.out.println("총 금액은 "+sum+"원 입니다.");
      }
      else {
         System.out.println(this.name+" 재고가 부족합니다.");
      }
      return sum;
   }
   // 1) 관리자가 ㅁㅁㅁ원으로 가격을 변경
   //    변경되었습니다!
   // 2) INPUT -> int 가격
   //    OUTPUT -> void
   // 3) 
   void setPrice(int price) { // 멤버변수(인스턴스변수)의 값을 새로 정의하는 것 == setter
      this.price=price;
      System.out.println(this.name+" 가격변경완료!");
   }
   void printInfo() {
      System.out.println(this.name+" ["+this.cnt+"] "+this.price+"원");
   }
}

public class Test01 {
   public static void main(String[] args) {
      // ※ main()에서 객체의 멤버변수에 직접적으로 접근 xxxxx

      Product[] data=new Product[3];
      // 현재 상품배열 data[]에 저장된 상품의 개수는 0개!
      // data[]의 크기 == 3
      int index=0; // 상품배열에 저장되어있는 상품의 개수

      Scanner sc=new Scanner(System.in);
      while(true) {
         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("===============");
         System.out.print("입력) ");
         int action=sc.nextInt();

         if(action==5) {
            System.out.println("프로그램종료...");
            break;
         }
         else if(action==1) { // C
            // 상품 객체를 생성해서,
            System.out.println("생성할 상품의 이름입력");
            System.out.print("입력) ");
            String name=sc.next();
            System.out.println("생성할 상품의 가격입력");
            System.out.print("입력) ");
            int price=sc.nextInt();
            
            // 상품 객체 배열에 저장해줘~
            data[index++]=new Product(index,name,price);
         }
         else if(action==2) { // R
            // 상품배열에 저장되어있는 상품만큼 화면에 출력해줘~
            for(int i=0;i<index;i++) { // 상품배열에 저장되어있는 상품의 개수
               ///// System.out.println((i+1)+". "+data[i].name+" ["+data[i].cnt+"] "+data[i].price+"원");
               ///// 안정성(보안)의 문제로, 이렇게 코딩 xxxxx
               System.out.print((i+1)+". ");
               data[i].printInfo();
            }
         }
         else if(action==3) { // U
            // 사용자가 구매할상품번호입력
            // 해당상품구매를 진행
            System.out.println("구매할 상품의 번호입력");
            System.out.print("입력) ");
            int num=sc.nextInt();
            System.out.println("구매할 상품의 개수입력");
            System.out.print("입력) ");
            int cnt=sc.nextInt();
            data[num-1].sell(cnt);
         }
         else if(action==4) { // U
            System.out.println("가격변경할 상품의 번호입력");
            System.out.print("입력) ");
            int num=sc.nextInt();
            System.out.println("상품의 가격입력");
            System.out.print("입력) ");
            int price=sc.nextInt();
            data[num-1].setPrice(price);
         }
         else { // 유효성 검사(사용자의 입력값 검사)
            System.out.println("잘못된 번호입니다! 확인후 다시이용해주세요!");
         }
   }
}
 

 

 

728x90
반응형

'JAVA > [실습문제]' 카테고리의 다른 글

[실습문제] 상속 (예제 만들기)  (0) 2024.04.08
[실습 문제] 상속 (포켓몬)  (0) 2024.04.08
포켓몬 문제 ( class 만들기 )  (0) 2024.04.08
[과제] Class  (0) 2024.04.08
[실습] 자동차 class를 코딩하기  (0) 2024.04.08