24일차

|
package Week03.day0726;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;

public class practice0726 {

	public static void main(String[] args) {
		
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//		
//		String s1 = "2019-07-26 13:00:45";
		
		Food fd1 = new Noodle(1, "팟타이", 1500000);
		Food fd2 = new FriedRice(2, "XO게살볶음밥", 1000);
		Food fd3 = new FriedRice(3, "김치볶음밥", 300000);
		
		AutoFood af = new AutoFood(1, Date.valueOf("2019-07-26"));
		
		af.orderFood(fd1);
		af.orderFood(fd2);
		af.orderFood(fd3);
		
		System.out.println("====주문된  음식====");
		af.printOrderFood();
		
		af.serviceFood(fd1);
		
		System.out.println("====제공된  음식====");
		af.printServiceFood();
		
		af.printTotalCount();
		
	}

}

class AutoFood{
	private int orderFoodNo; //주문번호
	private Date orderDt; // 주문시간 - 분까지 넣어라.
	private LinkedList foods = new LinkedList(); // 주문음식
	private ArrayList serviceFoods = new ArrayList(); //제공된 음식
	private static int fdcnt;
	
	public AutoFood(int orderFoodNo, Date orderDt) {
		this.orderFoodNo = orderFoodNo;
		this.orderDt = orderDt;
	}

	public void orderFood(Food f) { // 음식을 주문한다
//         주문 시 조리시간을 기준으로 정렬한다(조리시간이 짧은음식을 상위로)
//         주문된 음식유형(클래스)별로 총 주문 수량을 Count한다 ex. 국수몇개, 볶음밥 몇개(클래스별로)
//		     수량 자식클래스에 static 공통변수 만들어서 카운트 되도록 하고 출력만 하면 됨.
		this.foods.add(f);
		Collections.sort(foods);
	}
	
	public void printOrderFood() { // 주문된 음식을 출력한다(주문시간이 짧은 걸 기준으로?)
		
//		LinkedList<Food> list = new LinkedList<Food>();
//		list.addAll(foods);
//		Collections.sort(list);
//	    for(Food f : list) {
//	    	System.out.println(f.toString());
//	    }
	    
	    Iterator it = foods.iterator();
	    while(it.hasNext()){
	    	System.out.println(it.next());
	    }
		
	}
	
	public void serviceFood(Food f) { // 주문음식에서 삭제하고 제공된 음식으로 이동시킨다
		foods.remove(f);
		serviceFoods.add(f);
	}
	
	public void printServiceFood() { // 제공된 음식을 출력한다
		
		LinkedList<Food> list = new LinkedList<Food>();
		list.addAll(serviceFoods);
		Collections.sort(list);
	    for(Food f : list) {
	    	System.out.println(f.toString());
	    }
		
	}
	
	public void printTotalCount() { // 음식유형(클래스)별로 총 주문 수량을 출력한다
		System.out.println("====음식별 총 주문 수량====");
		System.out.println("누들 : " + Noodle.getFdcnt() + " 개");
		System.out.println("볶음밥 : " + FriedRice.getFdcnt() + " 개");
	}
	
}

abstract class Food implements Comparable<Food>{ // 추상클래스로 만들어라.
	private int foodNo; //음식번호
	private String foodNm; // 음식이름
	private int time; // 조리시간
	private static int fdcnt;
	
	public Food(int foodNo, String foodNm) {
		this.foodNo = foodNo;
		this.foodNm = foodNm;
	}

	public int getFoodNo() {
		return foodNo;
	}

	public void setFoodNo(int foodNo) {
		this.foodNo = foodNo;
	}

	public String getFoodNm() {
		return foodNm;
	}

	public void setFoodNm(String foodNm) {
		this.foodNm = foodNm;
	}

	public int getTime() {
		return time;
	}

	public void setTime(int time) {
		this.time = time;
	}
	
}

class Noodle extends Food{
	static int fdcnt; // 주문수량 카운트
	private int time;
	
	public int getTime() {
		return time;
	}

	public void setTime(int time) {
		this.time = time;
	}

	public Noodle(int foodNo, String foodNm, int time) {
		super(foodNo, foodNm);
		this.time = time;
		fdcnt++; // 생성자에 카운트를 넣음으로써 자동카운트 가능.
	}

	public static int getFdcnt() {
		return fdcnt;
	}

	public static void setFdcnt(int fdcnt) {
		Noodle.fdcnt = fdcnt;
	}
	
	@Override
	public int compareTo(Food f) {
		// 주문 시 조리시간을 기준으로 정렬한다(조리시간이 짧은음식을 상위로)
		if(this.time > f.getTime()) {
			return 1;
		} else if (this.time < f.getTime()) {
			return -1;
		}
		return 0;
	}
	
	public String toString() { // int foodNo, String foodNm, int time
		return "음식번호 : " + this.getFoodNo() + "번 / 음식이름 : " + this.getFoodNm() + " / 조리시간: " + this.getTime() + " 분";
	}
}

class FriedRice extends Food{
	static int fdcnt; // 주문수량 카운트
	private int time;

	public FriedRice(int foodNo, String foodNm, int time) {
		super(foodNo, foodNm);
		this.time = time;
		fdcnt++;
		// TODO Auto-generated constructor stub
	}
	
	public static int getFdcnt() {
		return fdcnt;
	}

	public static void setFdcnt(int fdcnt) {
		FriedRice.fdcnt = fdcnt;
	}
	
	public int getTime() {
		return time;
	}

	public void setTime(int time) {
		this.time = time;
	}
	
	@Override
	public int compareTo(Food f) {
		// 주문 시 조리시간을 기준으로 정렬한다(조리시간이 짧은음식을 상위로)
		if(this.time > f.getTime()) {
			return 1;
		} else if (this.time < f.getTime()) {
			return -1;
		}
		return 0;
	}
	
	public String toString() { // int foodNo, String foodNm, int time
		return "음식번호 : " + this.getFoodNo() + "번 / 음식이름 : " + this.getFoodNm() + " / 조리시간: " + this.getTime() + " 분";
	}
}

'Bitcamp > BITCAMP - Java' 카테고리의 다른 글

23일차  (0) 2019.07.25
10일차 - 추상  (0) 2019.07.05
10일차 - 상속  (0) 2019.07.05
9일차 - 과제  (0) 2019.07.05
9일차  (0) 2019.07.04
And