JAVA
[Java-개발해보기.1] 카페 키오스크
식빵민
2022. 5. 23. 20:12
핵심 개발 내용
- 커피클래스로 각 메뉴 클래스 객체로 생성
- 각 메뉴별로 이름, 가격, 재고 관리
- 재고에 따라 주문 가능/불가능 여부 판단
- 재고관리를 하는 관리자 모드
키오스크 핵심 기능
- 키오스크 초기화
- 키오스크 주문
- 키오스크 재고관리
class coffee{ //coffee클래스 생성
public coffee(String m,int p,int a) {
menu=m;
price=p;
amount=a;
} //생성자
String menu; //메뉴 이름 변수
int price; //메뉴 가격 변수
int amount; //메뉴 수량 변수
public String getmenu() {return menu;} //menu를 return해주는 get함수
public void setmenu(String m) {menu = m;} //menu를 초기화하는 set함수
public int getprice() {return price;} //price를 return해주는 get함수
public void setprice(int p) {price = p;} //price를 초기화하는 set함수
public int getamount() {return amount;} //amount를 return해주는 get함수
public void setamount(int a) {amount = a;} //amount를 초기화하는 set함수
}
public class Kiosk { //메인함수가 속해있는 키오스크 클래스
public static coffee[] MenuList; //coffee type의 배열 선언
public static void first() { // 키오스크 초기화 함수
System.out.println("[키오스크 초기화]");
Scanner scanner = new Scanner(System.in);
System.out.print("판매하고자 하는 메뉴 종류 수를 입력하시오->");
int num = scanner.nextInt(); //메뉴 종류의 수 변수 선언
MenuList = new coffee[num]; //coffee 형 배열 MenuList동적할당
for(int i=0;i<num;i++) { //메뉴 종류의 수 만큼 반복
MenuList[i] = new coffee("",0,0);
//배열의 i번째마다 새로운 coffee형 변수저장
System.out.print("판매하고자 하는 " + i +"번 메뉴 이름, 가격, 재고를 입력하시오->");
String m = scanner.next();//
MenuList[i].setmenu(m);// i번째의 menu에 이름을 m으로 초기화
int p = scanner.nextInt();
MenuList[i].setprice(p);// i번째의 menu에 가격을 p로 초기화
int a = scanner.nextInt();
MenuList[i].setamount(a);// i번째의 menu에 수량을 a로 초기화
}
System.out.println("[초기화 완료]");
System.out.println(" ");
}
public static void order(){// 키오스크의 핵심, 주문 함수
Scanner scanner = new Scanner(System.in);
String order;//주문을 받기위한 문자열 변수 order선언
do{//최소 한번은 실행 해야 하므로 do while문 사용
int sumPrice = 0;//매번 주문마다 총 금액 재선언
System.out.println("[메뉴판]");
for(int i=0;i<MenuList.length;i++)
{ System.out.println(MenuList[i].getmenu()+":"+MenuList[i].getprice()+"원"+"(재고"+MenuList[i].getamount()+")");
}//MenuList배열에 저장된 값을 기반으로 메뉴판 출력
System.out.println("구매하고자 하는 메뉴를 입력하시오->");
order = scanner.next();//order변수 입력받음
if(order.equals("종료")) {
break;
}//종료가 입력되면 반복문을 멈추고 함수 종료
while(!order.equals("주문")) {
//’주문’이라는 문자열이 입력되기 전까지 반복하여 주문을 받음
if(order.equals("재고관리")) {
admin();
break;
}//재고관리를 입력받으면 관리자 함수 admin()호출후 while문 종료
for(int i=0;i<MenuList.length;i++)
// MenuList의 길이만큼 탐색
{
if(order.equals(MenuList[i].getmenu())) {
//order와 getmenu를 통해 얻어온 MenuList i번째 자료의 메뉴명이 같은 경우
if((MenuList[i].getamount()>0)) {
//getamount함수로 얻어온 해당 자료의 amount가 0보다 크다면
sumPrice+=MenuList[i].getprice();
//합계금액에 getprice함수로 얻어온 해당자료의 price 더함
MenuList[i].setamount(MenuList[i].getamount()-1);
//setamount함수를 이용해 해당 자료의 amount에서 하나를 뺌.
}
else {
// getamount함수로 얻어온 해당 자료의 amount가 0보다 작거나 같다면
System.out.println("재고 소진, 다시 주문해주십시오.");
for(int j=i-1;j>=0;j--) {
MenuList[j].setamount(MenuList[j].getamount()+1);
// 재고가 없는 메뉴를 주문할 경우 이전에 입력된 메뉴도 주문 취소
}
sumPrice = 0;//주문취소했기 때문에 합계금액은 0원
}
}
}
order = scanner.next();//다음 order 입력
}
if(sumPrice != 0) {//주문이 입력 되면
System.out.println("전체 금액은 " + sumPrice +"원입니다.");
}//합계금액 출력
}while(!(order.equals("종료")));//order에 종료가 입력되기 전까지.
scanner.close();
}
public static void admin(){//재고관리 함수
System.out.println("[관리자 모드]");
Scanner scanner = new Scanner(System.in);
String cmd ;//명령어 변수 cmd선언
do{//최소 한번은 실행하기 위해 do-while문 사용
System.out.print("관리자 모드를 나가려면 '종료'를, 재고 변경을 원하면 메뉴 이름을 입력하세요.->");
cmd = scanner.next();//종료 or 재고변경을 원하는 메뉴이름 cmd 입력받음
if(cmd.equals("종료")) {
break;
}//종료입력시 반복문 종료
for(int i=0;i<MenuList.length;i++)
{// MenuList의 길이만큼 탐색
if(cmd.equals(MenuList[i].getmenu())) {
//cmd와 와 getmenu를 통해 얻어온 MenuList i번째 자료의 메뉴명이 같은 경우
System.out.println(MenuList[i].getmenu()+"의 재고는 현재"+MenuList[i].getamount()+"입니다.");
//해당 자료의 amount출력
int new_amount = scanner.nextInt();
//새로운 amount 입력
MenuList[i].setamount(new_amount);
//입력받은 새로운 amount setamount함수 사용해서 재설정
}
}
}while(!cmd.equals("종료"));//cmd가 종료면 종료시킴
}
public static void main(String[] args) {
System.out.println("12211580_컴퓨터공학과_김수환");
first();
order();
System.out.println("종료되었습니다.");
//모든함수가 종료되면 “종료되었습니다” 출력
}
}