Notice
Recent Posts
Recent Comments
Link
Tags
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

JongDDA의 한걸음 한걸음씩

[Java] 제어문을 통한 영화관 예매 프로그램 만들기 본문

개발/Java

[Java] 제어문을 통한 영화관 예매 프로그램 만들기

종따 2021. 7. 5. 18:05
728x90

 

이번엔 제어문을 통해 예매 프로그램을 만들어 볼게요

조건은 다음과 같아요

 

매인메뉴엔

1. 예매하기 2. 구매하기 3. 포인트 조회 4. 나가기

 

예매하기 메뉴엔 영화 3개 와 뒤로가기

영화 구매 시 돈 빠져나가기 & 구매가격 20% 포인트 적립

 

구매하기 메뉴엔 상품 3개 와 뒤로가기

마찬가지로 구매 시 돈 빠져나가고 포인트 적립

 

포인트는 구매 상품보다 많으면 전부쓰고 적으면 할인 금액으로 적용

청소년 구매 불가 상품인 경우 나이 확인

 

저는 이렇게 조건을 설정했어요

 

코드를 짜기 저는 JOptionPane을 사용할 거라 간단하게 설명하고 넘어갈게요

JOptionPane사용자에게 값을 묻거나 정보를 알려주는 표준 대화 상자를 쉽게 팝업해서 이용할 수 있게 해주는 클래스입니다.

여러 메소드가 있은나 저는 showInputDialog(입력값을 받을 수 있는 팝업), showMessageDialog(정보를 알려주는 메세지 상자 팝업) 2개를 사용해 보려 해요

 

코드는 다음과 같아요.

 

package theater;

import javax.swing.JOptionPane;

public class Theater {
	public static void main(String[] args) {
		int choice = 0;
		int age = 0;
		int money = 1_000_00;
		int point = 0;
		int ticket_price = 10000;
		int snack_price = 0;
		boolean ticket_check;
		boolean snack_check;
		
		String helloMsg = "★어서오세요 영화관입니다.★\n";
		String menuMsg = "①예매하기\n②구매하기\n③포인트 조회\n④나가기\n";
		String films = "①토이스토리(8:00)\n②스파이더맨(12:00)\n③아가씨(23:00)[청소년 관람 불가]\n④뒤로가기\n";
		String ageMsg = "[청소년 구매 불가 상품]\n나이를 입력하세요";
		String snack = "①팝콘(5000원)\n②콜라(2000원)\n③맥주[청소년 구매 불가](3000원)\n④뒤로가기\n";
		
		while(true) {
			ticket_check = true; // 플래그라 한다
			snack_check = true;
			choice = Integer.parseInt(JOptionPane.showInputDialog(helloMsg + menuMsg));
			// JOptionPane.showInputDialog() : 대화상자 띄우기 
			// JOptionPane.showInputDialog()는 문자열 타입이므로 정수로 받기 위해 parseInt를 사용해 정수형으로 바꿔준다.
			if(choice == 4) break; // 나가기 선택하면 종료
			if(!(choice >= 1 && choice <= 3)) continue;
			// 잘못 입력했을 때 continue
			switch(choice) {
			// 예매하기 영역
			case 1:
				if(money - ticket_price < 0) {
					JOptionPane.showMessageDialog(null, "잔액이 부족합니다.");
					continue;
				}
				// 변수의 재사용
				choice = Integer.parseInt(JOptionPane.showInputDialog(films));
				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));
					if(age > 19) {
					JOptionPane.showMessageDialog(null,"아가씨 예매 완료(23:00)");
					}else {
					JOptionPane.showMessageDialog(null, "다시 시도해 주세요");
					}
				}else {
					ticket_check = false;
					JOptionPane.showMessageDialog(null, "메인 메뉴로 이동합니다.");
					continue;
				}
				if(ticket_check) {// ticket_check이 true 가 되면 잔액 빠져나가기
					if(point > 0) {
						if(point - ticket_price >=0) { // 포인트가 티켓 가격보다 많으면 포인트 전부 사용
							point -= ticket_price;
						}else {
							money -= (ticket_price - point); // 포인트로 할인
							point = 0;
						}
					}else {
						money -= ticket_price;
						point += (int)(ticket_price*0.2);// 형변환
					}
					JOptionPane.showMessageDialog(null, "현재 잔액 : "+ money+"원");
				}
				break;
			// 구매하기 영역 
			case 2:
				choice = Integer.parseInt(JOptionPane.showInputDialog(snack));
				if(choice == 1) {
					snack_price = 5000;
					if(money - snack_price < 0) {
						JOptionPane.showMessageDialog(null, "잔액이 부족합니다.");
						continue;
					}else {
					JOptionPane.showMessageDialog(null,"팝콘 구매 완료");
					}
				}else if(choice == 2) {
					snack_price = 2000;
					if(money - snack_price < 0) {
						JOptionPane.showMessageDialog(null, "잔액이 부족합니다.");
						continue;
					}else { 
					JOptionPane.showMessageDialog(null,"콜라 구매 완료");
					}
				}else if(choice == 3){
					snack_price = 3000;
					age = Integer.parseInt(JOptionPane.showInputDialog(ageMsg));
					if(age > 19) {
						if(money - snack_price < 0) {
							JOptionPane.showMessageDialog(null, "잔액이 부족합니다.");
							continue;
						}else { 
							JOptionPane.showMessageDialog(null,"맥주 구매 완료");
						}
					}else {
					JOptionPane.showMessageDialog(null, "다시 시도해 주세요");
					}
				}else {
					snack_check = false;
					JOptionPane.showMessageDialog(null, "메인 메뉴로 이동합니다.");
					continue;
				}
				if(snack_check) {// snack_check이 true 가 되면 잔액 빠져나가기
					if(point > 0) {
						if(point - snack_price >=0) { // 포인트가 상품 가격보다 많으면 포인트 전부 사용
							point -= snack_price;
						}else {
							money -= (ticket_price - point); // 포인트로 할인
							point = 0;
						}
					}else {
						money -= snack_price;
						point += (int)(snack_price*0.2);// 형변환
					}
					JOptionPane.showMessageDialog(null, "현재 잔액 : "+ money+"원");
				}
				break;
			// 포인트 조회 영역	
			case 3:
				JOptionPane.showMessageDialog(null, "잔여 포인트 : "+ point +"점");
				break;
			}
		}
	}
}

정상적으로 동작하네요

 

이렇게 JOptionPane을 활용해 간단한 영화관 예매 프로그램을 만들어 봤어요

뭔가 조건을 좀 더 추가하면 그럴듯한 예매 프로그램이 될텐데 살짝 아쉬운 감도 있네요

 

 

 

728x90
반응형

'개발 > Java' 카테고리의 다른 글

[Java] 메서드(Method)  (0) 2021.07.07
[Java] 배열(Array)  (0) 2021.07.06
[Java] 제어문을 통한 계산기 예제  (0) 2021.07.05
[Java] 제어문(반복문)  (0) 2021.02.28
[Java] 제어문(조건문)  (0) 2021.02.08
Comments