ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22041_JAVA_문제풀어보기(자판기프로그램2)
    1. JAVA/1.3 문제 2022. 4. 10. 19:16

    기존에 했던 것에서 재고를 추가해서 다시 코드를 짜보았는데..

    원하는 대로는 나오긴 했는데...코드가 좀 미흡한거같다.. 다시 더 짜봐야겠다..

    일단 패키지는 이렇게 구성해보았고, 겉에서는 보이지 않는 BACK, 자판기의 종류(음료수자판기), FRONT 패키지에는 자판기 겉모습과 소비자 클래스를 넣어주었다.

    package drinkvend.back;
    
    import java.util.Scanner;
    
    import drinkvend.drink.Cola;
    import drinkvend.drink.Drink;
    import drinkvend.drink.GreenTea;
    import drinkvend.drink.Juice;
    import drinkvend.front.Drinkvending;
    //자판기 내부 재고 관리하는 프로그램.. 소비자가 구매하면 1개씩 차감 .
    public class Stock {
    	private int qty,price,num;
    	Drink[] d = new Drink[] {new Cola(),new GreenTea(),new Juice()};
    	VendingSystem v1;
    	Scanner sc = new Scanner(System.in);
    	private String name;
    	public Stock(){
    		
    	}
    	public Stock(Drinkvending v1) {
    		
    	}
    	
    	
    	public void setNum(int num) {
    		this.num = num;
    	}
    	
    	public void setStock(VendingSystem v1) {
    		v1= new VendingSystem();
    		System.out.println("재고관리 프로그램");
    		drinkPrint();
    		if(d[num].getQty()<=0) {
    			System.out.println("재고를 보충하시겠습니까? 1번 : Y , 2번 : N");
    			int no = sc.nextInt();
    			if(no==1) {
    				insertStock(num);
    			}
    			else {
    				System.out.println("빠른 시일내로 재고를 보충해주세요");
    					return;	
    			}
    			
    			
    		}
    	}
    	
    
    	public String setName(int num) {
    		name = d[num].getName();
    		return name;
    	}
    	
    	public int setQty(int num) {
    		qty = d[num].getQty();
    		
    		return qty;
    	}
    	public int setPrice(int num) {
    		price = d[num].getPrice();
    		
    		return price;
    	}
    
    	public int minusQty(int num) {
    		qty -=1;
    		d[num].setQty(qty);
    		qty = d[num].getQty();
    		return qty;
    	}
    
    	public void insertStock(int num) {
    		drinkPrint();
    		System.out.println(d[num].getName()+"에 보충하고 싶은 수량을 입력하세요");
    		int num2 = sc.nextInt();
    		int qty = d[num].getQty()+num2;
    		d[num].setQty(qty);
    		System.out.println("****** 결과 ******");
    		drinkPrint();
    		
    	}
    	
    	public void drinkPrint() {
    		
    		for(int i = 0; i<d.length;i++) {
    			System.out.println((i+1)+"번 : "+d[i]);
    		}
    	}
    
    
    
    }
    package drinkvend.back;
    
    import java.util.Scanner;
    
    import drinkvend.front.Buyer;
    import drinkvend.front.Drinkvending;
    //자판기 내부 프로그램 (수입, 재고관리).
    public class VendingSystem {
    	int price, qty, money;
    	static int income;
    	Stock s = new Stock();
    	
    	Scanner sc = new Scanner(System.in);
    
    	public VendingSystem(){
    	
    	}
    	public VendingSystem(Drinkvending v1){
    		
    	}
    	
    	//구매(소비자를 매개변수로 받음)
    	public void buy(Buyer b) {
    		while(true) {
    			System.out.println("아래 품목 중에 원하는 것을 선택해주세요");
    			s.drinkPrint();
    			System.out.print("입력 : ");
    			int num =sc.nextInt();
    			System.out.println();
    			num = num-1;
    			choose(b,num);
    			if(money<0||qty<0) {
    				if(qty<0) {
    					System.out.println("재고부족으로 구매 불가.");
    					
    				}
    				if(money<0) {
    					System.out.println("금액 부족으로 구매불가.");
    				}
    					
    				break;
    			}
    			System.out.println("\t  "+s.setName(num)+"를 받아가세요");
    			setIncome(num);
    			System.out.println("추가구매를 원하십니까? 1번 : 예 , 2번 :아니오");
    			int choice = sc.nextInt();
    			if(choice==2) {
    				System.out.println("\t["+money+"원] 을 받아가세요");
    				break;
    			}
    		
    		
    
    			
    		}
    		sc.close();
    		System.out.println("총 수입 : "+income);
    		System.out.println("\t프로그램을 종료합니다.");
    		
    		
    	}
    
    	//물건 중에서 고르는 메소드
    	public void choose(Buyer b,int num) {
    		System.out.println("\t#### ["+s.setName(num)+"] 선택! ####");
    		calmoney(b,num);
    	
    		qty = s.setQty(num);
    		qty = s.minusQty(num);
    		
    	}
    	
    	
    	
    	public int calmoney(Buyer b,int num) {
    		b.setMoney(b.getMoney()-s.setPrice(num));
    		money = b.getMoney();
    		if(money<0) {
    			System.out.println("돈이 부족합니다. 돈을 추가하시겠습니까?\n 1번: Y 2번: N");
    			int no = sc.nextInt();
    			if(no==1) {
    			System.out.println("보충할 돈을 넣어주세요");
    			money+=sc.nextInt();
    			System.out.println("총액 : "+money);
    			}
    			}
    		System.out.println("\t  잔액 : "+money);
    		
    		return money;
    	}
    	
    	
    	
    	public int setIncome(int num) {
    		income+=s.setPrice(num);
    		return income;
    	}
    	
    
    
    	
    }
    package drinkvend.drink;
    
    public class Drink{
    	private int qty, price;
    	private String name;
    	
    	//
    	Drink(String name, int price, int qty){
    		this.name = name;
    		this.price = price;
    		this.qty = qty;
    		
    		
    	}
    	
    
    	public int getQty() {
    		return qty;
    	}
    
    	
    	public void setQty(int qty) {
    		this.qty = qty;
    	}
    
    	public int getPrice() {
    		return price;
    	}
    
    	public void setPrice(int price) {
    		this.price = price;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public String toString() {
    		return name+", 가격 : "+price+"원 (재고 : "+qty+"개)";
    	}
    
    }
    package drinkvend.drink;
    
    public class Cola extends Drink{
    	public Cola(){//
    		super("콜라",1000,5);
    	}
    	
    	
    }
    package drinkvend.drink;
    
    public class GreenTea extends Drink {
    	public GreenTea(){
    		super("녹차",800,3);
    	}//
    	
    	
    }
    package drinkvend.drink;
    
    public class Juice extends Drink {
    	public Juice(){
    		super("쥬스",1400,4);
    	}
    	//
    }
    package drinkvend.front;
    
    import java.util.Scanner;
    //소비자 클래스 . 가지고 있는 돈을 입력 후 진행..
    public class Buyer {
    	Scanner sc = new Scanner(System.in);
    	private int money;
    	public Buyer() {
    	System.out.print("가지고 있는 돈 입력 : ");
    	this.money= sc.nextInt();
    	System.out.print("["+money+"원]");
    	System.out.println();
    	setMoney(money);
    	}
    	public int getMoney() {
    		return money;
    	}
    	public void setMoney() {
    		this.money = money;
    	}
    	public void setMoney(int money) {
    		this.money = money;
    	}
    	
    
    }
    package drinkvend.front;
    
    import drinkvend.back.VendingSystem;
    
    public class Drinkvending {
    	VendingSystem system = new VendingSystem();
    	//외부 보여지는 자판기 프로그램....
    	public Drinkvending(Buyer b) {
    		
    	}
    	
    	public void buyDrink(Buyer b) {
    		system.buy(b);
    		
    	}
    	
    	
    	
    	
    
    	public static void main(String[] args) {
    		Buyer b1 = new Buyer();
    		Drinkvending v1 =new Drinkvending(b1);
    		v1.buyDrink(b1);
    		
    	}
    
    }

    각 객체와의 협력하도록 코드를 짜는것이 너무 어려웠다..ㅠ 다시한번 부족함을 느끼고 또 짜보아야겠다.

Designed by Tistory.