Small Grey Outline Pointer Java 영화관 키오스크 만들기
본문 바로가기
Dev./java

Java 영화관 키오스크 만들기

by sso. 2022. 5. 16.

 

 

헬로메세지 설정하기

package cgv;

import javax.swing.JOptionPane;

public class CGV {
	public static void main(String[] args) {
		String helloMsg="★어서오세요 CGV 입니다.★\n";
		String menuMsg = "①예매하기\n②구매하기\n③나가기\n";
		JOptionPane.showInputDialog(helloMsg+menuMsg); 
	}
}

 

 

 

 

-while문 무한반복으로 메뉴를 계속 보여주게 한다 잘못 누르면 메인메뉴를 다시 띄워주도록 하기 위해

-while문 내부에서 switch문을 사용하여 영화선택하기 

package cgv;

import javax.swing.JOptionPane;

public class CGV {
	public static void main(String[] args) {
		String helloMsg="★어서오세요 CGV 입니다.★\n";
		String menuMsg = "①예매하기\n②구매하기\n③나가기\n";
		String films ="①라이온킹(08:00)\n②스파이더맨(12:00)\n③사일런스(23:00)[청소년관람불가]\n④뒤로가기\n";
		int choice = 0;
		while(true) {
		//메인 메뉴이므로 무한반복문 안에 들어가서 그래야 매번 메뉴가 뜨게 된다
			choice = Integer.parseInt(JOptionPane.showInputDialog(helloMsg+menuMsg));
			if(choice == 3) break; //뷰단에서 3번을 선택할 시 나가기 메뉴를 선택하므로 창이 꺼진다
			//3번 나가기는 위의 if문으로 걸러졌으니, 1과 2번이 아닐 경우 컨티뉴로 되돌아가도록 설정한다
			if(!(choice ==1 || choice ==2)) continue; 
			//괄호안의 전제를 부정하는 not 연산으로 1 또는 2가 아닐 경우 => 트루 => 컨티뉴!
				
			switch(choice) {
			//예매하기
			case 1 :
				choice=Integer.parseInt(JOptionPane.showInputDialog(films));
				//choice의 역할은 위에서 이미 다 사용되었기 때문에 여기서 다시 사용 가능하다 "변수의 재사용" 메모리를 아낄 수 있다
				if(choice==1) {
					
				}
				else if(choice ==2) {
					
				}
				else if(choice==3) {
					
				}
				else {
					JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
					continue;
				}
				break;
			//구매하기
			case 2 :
				break;
				
			}
		
		}
	}
}

switch문으로 영화 선택하기

 

 

else {
JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
continue;
}

 

 

메인메뉴 이동 전 메세지로 알려준다

 

 

중간중간 새로 생겨나는 변수들은 선언부에 추가로 기입하여

선언부에 어떤 변수들이 있는지 한눈에 파악하기 좋게 작성한다

 

 

 

 

플래그

예매 확인을 위해

choice == 1,2,3 에 값을 넣어주기 보다는 청소년불가 상품에만 boolean=false 값을 넣어주는것이 간략하다

-선언부에 boolean t_check; 작성

-while 문 내부에 t_check=true; 선언

 

-else //내부에 false값 넣어주기

{
 t_check = false; 
 //여기서 처음으로 false로 만들어줬다면 다시 true로 안바뀐다 왜냐? while문 밖에서 선언했기 때문에 
 //따라서 선언부에 초기화로 선언하고 while문 안에서 true값을 넣어준다 => 매 반복마다 true로 초기화 된다
JOptionPane.showMessageDialog(null, "다시 시도해 주세요");
}

 

 

 

 

돈 빠져나가게 만들기

				else {
					JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
					continue;
				}
				if(t_check) { //t_check 예매확인이 되었을 때 영화비 빠져나감
					money -= t_price;
					JOptionPane.showMessageDialog(null, "현재 잔액: " +money+"원");
				}
				break;

 

 

 

잔액부족 설정하기

 

if(money < t_price) {
					JOptionPane.showMessageDialog(null, "잔액이 부족 합니다");
					continue;
				}

단순히 money < t_price 라고 생각할 수 있는 부분이지만,

 

	if(money - t_price < 0) {
					JOptionPane.showMessageDialog(null, "잔액이 부족 합니다");
					continue;
				}

이렇게 수정해주는 것이 좋다

money - t_price 이 값이 음수여야 한다

추후의 오류발생을 줄이기 위함!

 

 

 

money를 10원으로 설정해놓고 다시 예매하기를 들어가보면 잔액부족창이 뜬다

 

 

 

 

여기까지의 최종 코드

package cgv;

import javax.swing.JOptionPane;

public class CGV {
	public static void main(String[] args) {
		String helloMsg="★어서오세요 CGV 입니다.★\n";
		String menuMsg = "①예매하기\n②구매하기\n③나가기\n";
		String ageMsg="[청소년 구매 불가 상품]\n나이를 입력하세요\n";
		String films ="①라이온킹(08:00)\n②스파이더맨(12:00)\n③사일런스(23:00)[청소년관람불가]\n④뒤로가기\n";
		int choice = 0;
		int age =0;
		int money = 10;
		int point=0;
		int t_price = 10000;
		boolean t_check; //예매완료인지 아닌지 확인하기 
		
		while(true) {
		//메인 메뉴이므로 무한반복문 안에 들어가서 그래야 매번 메뉴가 뜨게 된다
			t_check=true;
			choice = Integer.parseInt(JOptionPane.showInputDialog(helloMsg+menuMsg));
			if(choice == 3) break; //뷰단에서 3번을 선택할 시 나가기 메뉴를 선택하므로 창이 꺼진다
			//3번 나가기는 위의 if문으로 걸러졌으니, 1과 2번이 아닐 경우 컨티뉴로 되돌아가도록 설정한다
			if(!(choice ==1 || choice ==2)) continue; 
			//괄호안의 전제를 부정하는 not 연산으로 1 또는 2가 아닐 경우 => 트루 => 컨티뉴!
				
			switch(choice) {
			//예매하기
			case 1 :
				//변수의 재사용
				if(money - t_price < 0) {
					JOptionPane.showMessageDialog(null, "잔액이 부족 합니다");
					continue;
				}
				choice=Integer.parseInt(JOptionPane.showInputDialog(films));
				//choice의 역할은 위에서 이미 다 사용되었기 때문에 여기서 다시 사용 가능하다 "변수의 재사용" 메모리를 아낄 수 있다
				if(choice==1) {
					
					JOptionPane.showMessageDialog(null, "라이온킹 예매 완료(08:00)");
				}
				else if(choice ==2) {
					JOptionPane.showMessageDialog(null, "스파이더맨 예매 완료(12:00)");
				}
				else if(choice==3) {
					age = Integer.parseInt(JOptionPane.showInputDialog(ageMsg)); //나이를 입력받아 비교해야하므로 정수로 변환 Integer.parseInt
					if(age > 19) {
						JOptionPane.showMessageDialog(null, "사일런스 예매 완료(23:00)");						
					}
					else {
						 t_check = false; 
						 //여기서 처음으로 false로 만들어줬다면 다시 true로 안바뀐다 왜냐? while문 밖에서 선언했기 때문에 
						 //따라서 선언부에 초기화로 선언하고 while문 안에서 true값을 넣어준다
						JOptionPane.showMessageDialog(null, "다시 시도해 주세요");		
					}
					
				}
				else {
					JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
					continue;
				}
				if(t_check) { //t_check 예매확인이 되었을 때 영화비 빠져나감
					money -= t_price;
					JOptionPane.showMessageDialog(null, "현재 잔액: " +money+"원");
				}
				break;
			//구매하기
			case 2 :
				break;
				
			}
		
		}
	}
}

 

 

 

 

포인트 적립하기

		String menuMsg = "①예매하기\n②구매하기\n③포인트조회\n④나가기\n";

-포인트적립을 추가로 생성하고 싶다면 메뉴에 새로 추가

 

if(!(choice >=1 && choice <=3)) continue;

-조건식 새로 수정

 

 

포인트가 적립 된다

 

 

 

 

 

최종 코드

2) 구매하기

매점 푸드도 추가함!

package cgv;

import javax.swing.JOptionPane;

public class CGV {
	public static void main(String[] args) {
		String helloMsg="★어서오세요 CGV 입니다.★\n";
		String menuMsg = "①예매하기\n②구매하기\n③포인트조회\n④나가기\n";
		String ageMsg="[청소년 구매 불가 상품]\n나이를 입력하세요\n";
		String films ="①라이온킹(08:00)\n②스파이더맨(12:00)\n③사일런스(23:00)[청소년관람불가]\n④뒤로가기\n";
		String foods ="①팝콘\n②콜라\n③맥주\n④뒤로가기\n";
		int choice = 0;
		int age =0;
		int money = 10000000;
		int point=0;
		int t_price = 10000;
		int f_price = 3000;
		boolean t_check; //예매완료인지 아닌지 확인하기 
		
		/*
		 * 구매하기
		 * 1.팝콘
		 * 2.콜라
		 * 3.맥주
		 * 4.뒤로가기
		 */
		
		
		while(true) {
		//메인 메뉴이므로 무한반복문 안에 들어가서 그래야 매번 메뉴가 뜨게 된다
			t_check=true;
			choice = Integer.parseInt(JOptionPane.showInputDialog(helloMsg+menuMsg));
			if(choice == 4) break; //뷰단에서 3번을 선택할 시 나가기 메뉴를 선택하므로 창이 꺼진다
			//3번 나가기는 위의 if문으로 걸러졌으니, 1과 2번이 아닐 경우 컨티뉴로 되돌아가도록 설정한다
			if(!(choice >=1 && choice <=3)) continue; 
			
				
			switch(choice) {
			//예매하기 영역
			case 1 :
				//변수의 재사용
				if(money - t_price < 0) {
					JOptionPane.showMessageDialog(null, "잔액이 부족 합니다");
					continue;
				}
				choice=Integer.parseInt(JOptionPane.showInputDialog(films));
				//choice의 역할은 위에서 이미 다 사용되었기 때문에 여기서 다시 사용 가능하다 "변수의 재사용" 메모리를 아낄 수 있다
				if(choice==1) {
					
					JOptionPane.showMessageDialog(null, "라이온킹 예매 완료(08:00)");
				}
				else if(choice ==2) {
					JOptionPane.showMessageDialog(null, "스파이더맨 예매 완료(12:00)");
				}
				else if(choice==3) {
					age = Integer.parseInt(JOptionPane.showInputDialog(ageMsg)); //나이를 입력받아 비교해야하므로 정수로 변환 Integer.parseInt
					if(age > 19) {
						JOptionPane.showMessageDialog(null, "사일런스 예매 완료(23:00)");						
					}
					else {
						 t_check = false; 
						 //청불 영화 나이 체크하기
						 //여기서 처음으로 false로 만들어줬다면 다시 true로 안바뀐다 왜냐? while문 밖에서 선언했기 때문에 
						 //따라서 선언부에 초기화로 선언하고 while문 안에서 true값을 넣어준다
						JOptionPane.showMessageDialog(null, "다시 시도해 주세요");		
					}
					
				}
				else {
					JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
					continue;
				}
				if(t_check) { //t_check 예매확인이 되었을 때 영화비 빠져나감
					if(point > 0) {
						if(point - t_price >= 0) {
							point -= t_price; //포인트로 티켓을 구매할 수 있음
						}else {
							money -= (t_price-point); //티켓 가격에서 포인트를 뺀 다음 그 남은 차액은 내 돈에서 빼준다
							point = 0; //point를 0으로 초기화
						}
					}else {
						money -= t_price;
						point += (int)(t_price * 0.5); //point 50% 적립
					}
					JOptionPane.showMessageDialog(null, "현재 잔액: " +money+"원");						
					
				}
				break;
			//구매하기 영역 (매점)
			case 2 :
				if(money - f_price < 0) {
					JOptionPane.showMessageDialog(null, "잔액이 부족 합니다");
					continue;
				}
				choice=Integer.parseInt(JOptionPane.showInputDialog(foods));
				//choice의 역할은 위에서 이미 다 사용되었기 때문에 여기서 다시 사용 가능하다 "변수의 재사용" 메모리를 아낄 수 있다
				if(choice==1) {
					
					JOptionPane.showMessageDialog(null, "팝콘 구매 완료");
				}
				else if(choice ==2) {
					JOptionPane.showMessageDialog(null, "콜라 구매 완료");
				}
				else if(choice==3) {
					JOptionPane.showMessageDialog(null, "맥주 구매 완료");
				}
				else {
					JOptionPane.showMessageDialog(null, "메인메뉴로 이동 합니다.");
					continue;
				}
	
				if(point > 0) {
					if(point - f_price >= 0) {
						point -= f_price; //포인트로 티켓을 구매할 수 있음
					}else {
						money -= (f_price-point); //티켓 가격에서 포인트를 뺀 다음 그 남은 차액은 내 돈에서 빼준다
						point = 0; //point를 0으로 초기화
					}
				}else {
					money -= f_price;
					point += (int)(f_price * 0.5); //point 50% 적립
				}
				JOptionPane.showMessageDialog(null, "현재 잔액: " +money+"원");						
				break;
				
		
				//포인트 조회 영역
			case 3 :
				JOptionPane.showMessageDialog(null, "잔여 포인트: "+ point + "점");
				break;
				
			}
				
		}		
	}
}
728x90

'Dev. > java' 카테고리의 다른 글

Java 배열  (0) 2022.05.21
Java class/method 연습문제  (0) 2022.05.16
Java 계산기 만들기  (0) 2022.05.15
반복문  (0) 2022.05.15
조건문  (0) 2022.05.14

댓글