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() + " 분";
}
}