일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 우아한테크
- 데이터베이스
- 함수 선언
- 함수
- 숫자형식오류
- 예외
- 자바
- DoitSQL
- Doit입문SQL
- 숫자 형식
- SQL입문
- 자바 오류
- 생성자
- 배열 예제
- 크롤링 오류
- HTML역사
- 웹브라우저 수용도
- DoitSQL입문
- 크롤링
- 예제
- R1C3
- 웹 브라우저 전쟁
- 키-값 데이터베이스
- dbms
- DoIt
- 자바 예외
- 배열 3요소
- SQL
- 페이지분석
- html
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 우아한테크
- 데이터베이스
- 함수 선언
- 함수
- 숫자형식오류
- 예외
- 자바
- DoitSQL
- Doit입문SQL
- 숫자 형식
- SQL입문
- 자바 오류
- 생성자
- 배열 예제
- 크롤링 오류
- HTML역사
- 웹브라우저 수용도
- DoitSQL입문
- 크롤링
- 예제
- R1C3
- 웹 브라우저 전쟁
- 키-값 데이터베이스
- dbms
- DoIt
- 자바 예외
- 배열 3요소
- SQL
- 페이지분석
- html
Archives
- Today
- Total
프로그래밍
[자바 기초] day04 : 자판기 프로그램 만들기 본문
728x90
반응형
2023.05.08.월
자판기 프로그램
[프로그램 개요]
1. 상품은 4개이다
2. 이름은 정하되
3. 가격,재고 랜덤으로 설정한다
4. 1-구매, 2-종료
5. 상품목록을 재고와 함께 출력한다
단, 재고가 없는 상품은 출력하지않는다
ex) 1-콜라[3] 2-사이다[재고없음] 3-환타[4]
1 입력시 -> 몇개구매하는지 선택
2 입력시 -> 재고가 없어서 구매가 불가능
4 입력시 -> 없는 상품
6. 상품 값 입력 받는다
7. 거스름돈 출력
자판기 프로그램
package class02;
import java.util.Random;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random rand = new Random();
int N = 4; // 상품은 4개이다
String[] mName = new String[N]; // 메뉴이름 배열
int[] mPrice = new int[N]; // 메뉴 가격 배열
int[] mCnt = new int[N];
// 메뉴 입력
int index = 0;
while (true) {
if (index == N) {// 메뉴를 전부 입력시 종료
break;
}
System.out.print((index + 1) + "번째 메뉴명 입력: ");
mName[index] = sc.next();
// sc.nextLine() 버퍼 청소
System.out.println(mName[index] + "이(가) 맞나요?");
System.out.println("1.YES 2.NO");
System.out.println();
int ans = sc.nextInt();
if (ans != 1) {
System.out.println("다시 입력하세요");
continue;
}
System.out.println();
index++; // 올바르게 입력하여 1 답변시 배열 길이 증가
}
// 가격 입력
for (int i = 0; i < mCnt.length; i++) {
System.out.print((i + 1) + "번째 메뉴 가격 입력: ");
mPrice[i] = sc.nextInt();
System.out.println(mName[i] + " 상품 입력 완료");
System.out.println();
}
// 재고 입력
for (int i = 0; i < mCnt.length; i++) {
System.out.print((i + 1) + "번째 메뉴 재고 입력: ");
mCnt[i] = sc.nextInt();
System.out.println(mName[i] + " 상품 입력 완료");
System.out.println();
}
// 구매
while (true) {
System.out.println("1.구매 2.종료");
System.out.print("입력) ");
int action = sc.nextInt();
if (action == 2) {
System.out.println("종료합니다");
System.out.println();
break;
} else if (action < 1 || 2 < action) { // 유효성 검사 : 1,2도 아니라면
System.out.println("잘못된 입력값입니다.");
System.out.println("확인후 다시 이용해주세요!~~");
System.out.println();
continue;
}
// 구매할 상품 선택
int num;
while (true) {
for (int i = 0; i < mName.length; i++) {
System.out.println();
System.out.print((i + 1) + "." + mName[i] + "[");
if (mCnt[i] == 0) {// 재고가 0인 경우
System.out.print("재고없음]");
} else {
System.out.print(mCnt[i] + "]");
}
System.out.println();
}
System.out.println("====================");
System.out.print("구매할 상품의 번호를 입력) ");
num = sc.nextInt();
// 올바른 상품 번호 입력
if ((1 <= num && num <= N) && (mCnt[num - 1] > 0)) {
break;
}
// 없는 상품번호를 입력한 경우
if (num < 1 || N < num) {
System.out.print("없는 상품입니다");
}
// 구매하려는 상품이 재고가 0일 경우
else if (mCnt[num - 1] == 0) {
System.out.print("재고가 없어서 구매가 불가능합니다");
}
}
//재고 확인
int cnt; // 지역변수의 특성
while (true) { // 유효성 검사 : 구매할 개수가 음수이거나, 재고보다 많으면 안됨!
System.out.println("선택한 상품은 " + mName[num - 1] + "입니다.");
System.out.println("가격: " + mPrice[num - 1] + "원 재고: " + mCnt[num - 1] + "개");
System.out.print("구매할 개수를 입력) ");
cnt = sc.nextInt();
// 올바른 재고값을 입력(재고가 구매할 상품 수량보다 많음)
if (0 <= cnt && cnt <= mCnt[num - 1]) {
break;
}
// 구매하려는 상품 수가 재고보다 부족할 경우
System.out.println("잘못된 입력입니다!");
System.out.println("다시 입력해주세요!~~");
System.out.println();
}
//상품 값 계산
int res = mPrice[num - 1] * cnt;
int money;
System.out.println("금액: " + res + "원");
while (true) {
System.out.print("돈 입력) ");
money = sc.nextInt();
if (res <= money) {//올바른 입력시 종료
break;
}
//잘못된 값일 경우 다시 입력받음
System.out.println("잘못된 입력입니다!");
System.out.println("새로 입력해주세요!");
System.out.println();
}
//거스름돈 계산
res = money - res;
if (res != 0) {
System.out.println("거스름돈 " + res + "원 반환 완료!");
}
System.out.println("구매 성공!");
System.out.println();
//재고 차감
mCnt[num - 1] -= cnt; // "장바구니 이슈"를 생각해볼것!
}
}
}
위의 코드에서는 생략되었지만 메뉴 가격, 재고를 입력받을때에도 "이(가) 맞습니까?" 식의 유효성 검사를 해주면 좋다
실행 후 콘솔
1번째 메뉴명 입력: 아메리카노
아메리카노이(가) 맞나요?
1.YES 2.NO
1
2번째 메뉴명 입력: 라떼
라떼이(가) 맞나요?
1.YES 2.NO
2
다시 입력하세요
2번째 메뉴명 입력: 카페라떼
카페라떼이(가) 맞나요?
1.YES 2.NO
1
3번째 메뉴명 입력: 아이스티
아이스티이(가) 맞나요?
1.YES 2.NO
1
4번째 메뉴명 입력: 스무디
스무디이(가) 맞나요?
1.YES 2.NO
1
1번째 메뉴 가격 입력: 2000
아메리카노 상품 입력 완료
2번째 메뉴 가격 입력: 3000
카페라떼 상품 입력 완료
3번째 메뉴 가격 입력: 3000
아이스티 상품 입력 완료
4번째 메뉴 가격 입력: 4000
스무디 상품 입력 완료
1번째 메뉴 재고 입력: 30
아메리카노 상품 입력 완료
2번째 메뉴 재고 입력: 1
카페라떼 상품 입력 완료
3번째 메뉴 재고 입력: 0
아이스티 상품 입력 완료
4번째 메뉴 재고 입력: 16
스무디 상품 입력 완료
1.구매 2.종료
입력) 1
1.아메리카노[30]
2.카페라떼[1]
3.아이스티[재고없음]
4.스무디[16]
====================
구매할 상품의 번호를 입력) 3
재고가 없어서 구매가 불가능합니다
1.아메리카노[30]
2.카페라떼[1]
3.아이스티[재고없음]
4.스무디[16]
====================
구매할 상품의 번호를 입력) 5
없는 상품입니다
1.아메리카노[30]
2.카페라떼[1]
3.아이스티[재고없음]
4.스무디[16]
====================
구매할 상품의 번호를 입력) 2
선택한 상품은 카페라떼입니다.
가격: 3000원 재고: 1개
구매할 개수를 입력) 2
잘못된 입력입니다!
다시 입력해주세요!~~
선택한 상품은 카페라떼입니다.
가격: 3000원 재고: 1개
구매할 개수를 입력) 1
금액: 3000원
돈 입력) 2800
잘못된 입력입니다!
새로 입력해주세요!
돈 입력) 4600
거스름돈 1600원 반환 완료!
구매 성공!
1.구매 2.종료
입력) 2
종료합니다
728x90
반응형
'자바 > 자바 기초' 카테고리의 다른 글
[자바 기초] day05 : 함수 생성 방식 (1) | 2023.05.09 |
---|---|
[자바 기초] day04 : 함수 (0) | 2023.05.08 |
[자바 기초] day03 : 난수 생성하기(Random 클래스 활용) (0) | 2023.05.06 |
[자바 기초] day03 : 배열(array) (0) | 2023.05.04 |
[자바 기초] day02 : 이중 반복문(예제 중심) (0) | 2023.05.03 |
Comments