자판기 설정 만들기

유요한·2022년 4월 11일
0

자바

목록 보기
20/24

	public class MachineVO {
	private String drink_name;
	private int drink_price;
	private int drink_stock;
	
	
	public MachineVO() {
		this.drink_name = "";
		this.drink_price = 0;
		this.drink_stock = 0;
	}
	
	public MachineVO(String drink_name, int drink_price, int drink_stock) {
		this.drink_name = drink_name;
		this.drink_price = drink_price;
		this.drink_stock = drink_stock;
	}


	public String getDrink_name() {
		return drink_name;
	}


	public void setDrink_name(String drink_name) {
		this.drink_name = drink_name;
	}


	public int getDrink_price() {
		return drink_price;
	}


	public void setDrink_price(int drink_price) {
		this.drink_price = drink_price;
	}


	public int getDrink_stock() {
		return drink_stock;
	}


	public void setDrink_stock(int drink_stock) {
		this.drink_stock = drink_stock;
	}	
}
● 넘겨줄 인터페이스 생성
public interface MachineAct {
	public abstract void insert_Coin(); 	// 동전투입
	public abstract void return_Coin();		// 잔돈반환
	public abstract void enter_Menu();		// 메뉴등록
	public abstract void delete_Menu();		// 메뉴삭제
	public abstract void update_Menu();		// 메뉴수정
	public abstract void enter_Stock();		// 재고등록
	public abstract void print_Menu();		// 메뉴보기
	public abstract void choice_Menu();		// 메뉴선택
}
● 인터페이스를 상속받고 인터페이스 메소드 재정의
		import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class MachineActlmpl implements MachineAct {
	Scanner sc = new Scanner(System.in);
	
	ArrayList<MachineVO> list = new ArrayList<MachineVO>();
	
	private int remain_Money = 0;

	@Override
	// 돈을 투입하는 메소드
	public void insert_Coin() {
		int ch;
		
		System.out.println("1. 5000원");
		System.out.println("2. 1000원");
		System.out.println("3. 500원");
		System.out.println("4. 100원");
		// 사용자에게 입력 
		System.out.print("돈을 넣어주세요 : ");
		ch = sc.nextInt();
		
		switch (ch) {
		case 1:
			remain_Money = remain_Money + 5000;
			System.out.println("투입금액 5000원");
			break;
		case 2:
			remain_Money = remain_Money + 1000;
			System.out.println("투입금액 1000원");
			break;
		case 3:
			remain_Money = remain_Money + 500;
			System.out.println("투입금액 500원");
			break;
		case 4:
			remain_Money = remain_Money + 100;
			System.out.println("투입금액 100원");
			break;
		}
		// 위에서 선택한 금액들의 누적 금액이 나옴
		System.out.println("사용 가능 금액 : " + remain_Money);
	}

	@Override
	// 돈을 반환하는 메소드
	public void return_Coin() {
		// 0원이면 반환할 돈이 없기 때문에 반환 안함
		if(remain_Money == 0) {
			System.out.println("반환할 돈이 없습니다.");
		} else {
			// ① 0원이 아니면 remain_Money를 0원으로 맞춰주고
			// ② 반환완료가 뜸
			// ③ 위에서 0원으로 맞춰준 금액이 나옴
			remain_Money = 0;
			System.out.println("반환완료");
			System.out.println("사용 가능 금액 : " + remain_Money);
		}
	}

	@Override
	// 자판기 메뉴를 등록하는 메소드
	public void enter_Menu() {
		MachineVO vo = new MachineVO();
		System.out.println("== 자판기 메뉴 등록 == ");
		System.out.print("메뉴 이름 : ");
		vo.setDrink_name(sc.next());
		System.out.println("메뉴 가격 (숫자만 입력) : ");
		vo.setDrink_price(sc.nextInt());
		System.out.println("재고등록(채울 개수) : ");
		vo.setDrink_stock(sc.nextInt());
		list.add(vo);
		System.out.println("등록완료");
	}

	@Override
	// 제품 삭제하는 메소드
	public void delete_Menu() {
		System.out.println("삭제할 제품명 입력 : ");
		String s ="";
		// 객체 생성
		MachineVO vo = new MachineVO();
		print_Menu();
		s = sc.next();
		
		// Iterator 생성 및 반복돌림
		Iterator<MachineVO> it = list.iterator();
		while(it.hasNext()) {
			// vo에 대입하여 vo를 반환
			vo = it.next();
			// 사용자가 쓴 음료수이름과 vo에 담긴 음료수이름 확인
			if(s.equals(vo.getDrink_name())) {
				// 같은 이름이면 삭제
				list.remove(vo);
				System.out.println("삭제완료");
				break;
			}
		}
	}

	@Override
	public void update_Menu() {
		System.out.println("수정 할 제품 명 입력 : ");
		String s = "";
		MachineVO vo = new MachineVO();
		print_Menu();
		s = sc.next();
		
		Iterator<MachineVO> it = list.iterator();
		while(it.hasNext()) {
			vo = it.next();
			
			if(s.equals(vo.getDrink_name())) {
				System.out.print("(수정)메뉴 이름 : ");
				vo.setDrink_name(sc.next());
				System.out.print("(수정)메뉴 가격(숫자만 입력) : ");
				vo.setDrink_price(sc.nextInt());
				System.out.println("(수정)재고 입력 : ");
				vo.setDrink_stock(sc.nextInt());
				System.out.println();
				System.out.println("수정완료");
				break;
			}
		}
	}

	@Override
	public void enter_Stock() {
		System.out.println("=== 재고충전 ===");
		System.out.println("충전할 음료명 입력 : ");
		String s ="";
		s = sc.next();
		
		int stock = 0;
		MachineVO vo = new MachineVO();
		print_Menu();
		System.out.println();
		
		
		
		Iterator<MachineVO> it = list.iterator();
		while(it.hasNext()) {
			vo = it.next();
			if(s.equals(vo.getDrink_name())) {				
				System.out.print("충전할 재고 수량 입력 : ");
				stock = sc.nextInt();
				vo.setDrink_stock(vo.getDrink_stock() + stock);
				System.out.println(vo.getDrink_name() + "충전완료재고 : " + vo.getDrink_stock());
				break;
			}
		}
	}

	@Override
	// 메뉴 보여주는 메소드
	public void print_Menu() {
		System.out.println("==== 메뉴 ====");
		
		MachineVO vo = new MachineVO();
		Iterator<MachineVO> it = list.iterator();
		while(it.hasNext()) {
			vo = it.next();
			System.out.println("제품명 : " + vo.getDrink_name());
			System.out.println("가격 : " + vo.getDrink_price());
			System.out.println("재고 개수 : " + vo.getDrink_stock());
		}
	}

	@Override
	public void choice_Menu() {
		System.out.println("==== 메뉴 선택 ====");
		
		print_Menu();
		System.out.println();
		System.out.print("원하는 제품명 입력 : ");
		
		String s = "";
		MachineVO vo = new MachineVO();
		Iterator<MachineVO> it = list.iterator();
		while(it.hasNext()) {
			vo= it.next();
			
			if(s.equals(vo.getDrink_stock())) {
				if(vo.getDrink_stock() == 0) {
					System.out.println("재고가 없습니다.");
					break;
				}
				if(remain_Money - vo.getDrink_price() < 0) {
					System.out.println("잔액이 부족합니다.");
					break;
				}
				remain_Money = remain_Money - vo.getDrink_price();
				vo.setDrink_stock(vo.getDrink_stock() -1);
				System.out.println(vo.getDrink_name() + "출력완료, 남은돈" 
				+ remain_Money + "재고 : " +vo.getDrink_stock());
			}
		}
	}	
}
● 메인
		import java.util.Scanner;

public class MachineApp {

	public static void main(String[] args) {
		MachineActlmpl mc = new MachineActlmpl();
		Scanner sc = new Scanner(System.in);
		
		int ch =0;
		
		while(true) {
			do {
				System.out.println("1. 동전 투입");
				System.out.println("2. 잔돈 반환");
				System.out.println("3. 메뉴 선택");
				System.out.println("4. 관리자 메뉴");
				System.out.println("5. 종료 ▶");
				System.out.print("번호를 고르세요 : ");
				ch = sc.nextInt();
               // 조건문에 틀리면 반복문에서 벗어난다. 
			} while(ch < 1 || ch > 5);
			
            // 5번이면 while(true)문에서 나옴
			if(ch == 5) break;
			
			switch (ch) {
            // ch = 1이면 mc.insert_Coin(); 실행
            // 돈을 넣어주는 메소드 실행
            // 사용금액도 나옴
			case 1:
				mc.insert_Coin();
				break;
                
             //  돈을 반환하는 메소드 
             // 0원 → 반환할 돈이 없습니다.
             // 0원이 x → 0으로 맞춰주고 "반환완료"가 출력 후 사용가능 금액이 0원 출력
			case 2:
				mc.return_Coin();
				break;
             
             // 원하는 메뉴 고르기
             // 입력한 것과 vo에 있는 재고 비교 후 '==0'이면 재고부족
             // remain_Money - vo.getDrink_price() < 0이면 잔액부족뜸
  			 // 등등     
			case 3:
				mc.choice_Menu();
				break;
                
			case 4:
				while(true) {
					do {
						System.out.println("1. 메뉴 등록");
						System.out.println("2. 메뉴 삭제");
						System.out.println("3. 메뉴 수정");
						System.out.println("4. 재고 등록");
						System.out.println("5. 이전 ▶");
						System.out.print("번호를 고르세요 : ");
						ch = sc.nextInt();
					} while(ch <1 || ch >5);
					
					if(ch == 5) break;
					
					switch (ch) {
                    // 자판기 메뉴를 등록하는 메소드
             		// 메뉴이름, 메뉴 가격, 재고등록
					case 1:
						mc.enter_Menu();
						break;
                     
                     // 제품 삭제하는 메소드
					case 2:
						mc.delete_Menu();
						break;
					case 3:
						mc.update_Menu();
						break;
					case 4:
						mc.enter_Stock();
						break;
					}
				}
				break;
			}
		}
	}

}
profile
최선을 다하자!!

0개의 댓글

관련 채용 정보