일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예제
- DoitSQL입문
- DoIt
- 키-값 데이터베이스
- 웹 브라우저 전쟁
- 크롤링
- SQL입문
- Doit입문SQL
- 생성자
- 배열 3요소
- dbms
- 배열 예제
- HTML역사
- 자바
- html
- R1C3
- 웹브라우저 수용도
- 예외
- 함수 선언
- 우아한테크
- 숫자 형식
- 자바 예외
- 데이터베이스
- DoitSQL
- 자바 오류
- 함수
- 크롤링 오류
- 숫자형식오류
- 페이지분석
- SQL
- Today
- Total
프로그래밍
[자바 기초] day11 : 추상화/ 캡슐화 예제 본문
[ 연습문제 ]
class Player
최대 3마리의 포켓몬을 소유할수있다.
Player 생성시 최초 소지 포켓몬은 무조건 피카츄이다.
final static int maxIndex=3;
int preIndex; // 1
Pokemon[] data; // new Pokemon[maxIndex]
// data[0]=new 피카츄();
void play()
// data에 저장된 포켓몬을 랜덤으로 2마리 선택하여 게임을 진행
// 단, 2마리의 포켓몬이 서로 같은 포켓몬이면 더이상 진행하지않음 [Object최상위클래스->equals() 오버라이딩]
클래스 타입이 같으면 같은 포켓몬
// 서로 다른 포켓몬이면 포켓몬.game()을 진행함
// 이긴 포켓몬의 울음소리가 console에 출력됨
// 포켓몬.hello()
class Pokemon [abstract]
String name;
int win; // 이긴횟수
void hello() // 울음소리. 하위클래스에 따라 수행되는 기능이 다름에 유의 [오버라이딩 강제->추상메서드]
boolean game(Pokemon pokemon)
// win이 홀홀일때는 작은쪽이 이김
// win이 짝짝일때는 큰쪽이 이김
// win이 홀짝일때는 홀수가 이김
// win이 동일하다면 주어(주체)가 이김
// 이후 이긴쪽의 win이 1 증가
package class01;
import java.util.ArrayList;
import java.util.Scanner;
class Product {
Scanner sc = new Scanner(System.in);
private int num; // 상품 PK
private String name; // 상품명
private int price; // 상품 가격
private int cnt; // 상품 재고
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
// 생성자 이름, 가격을 사용자가 입력
Product(int num, String name, int price) {
this(num, name, price, 0);
}
// 생성자 이름, 가격, 재고를 사용자가 입력
Product(int num, String name, int price, int cnt) {
this.num = num;
this.name = name;
this.price = price;
this.cnt = cnt;
}
// 구매 메서드
boolean sell(int cnt) {
if (this.cnt >= cnt) {
System.out.println("가격은 " + (this.price * cnt) + "원 입니다");
System.out.println("돈을 입력해주세요");
System.out.println("입력: ");
while (true) {
int money = sc.nextInt();
if (money >= (this.price * cnt)) {
System.out.println("잔돈: " + (money - (this.price * cnt)));
this.cnt -= cnt;
System.out.println("구매완료");
break;
} else {
System.out.println("다시 입력해주세요");
}
}
return true;
// 재고가 부족할시
} else {
System.out.println("재고가 부족합니다");
return false;
}
}
@Override
public String toString() { // toString 오버라이딩
if (this.cnt <= 0) {
return this.num + ". " + this.name + " 가격: " + this.price + "원 재고: " + "[품절]";
}
return this.num + ". " + this.name + " 가격: " + this.price + "원 재고: " + this.cnt + "개";
}
}
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Product> data = new ArrayList<Product>();
int numPK = 1001; // 1001번부터 순서대로 부여
// 유저 선택창
String userMsg = "1. 상품목록출력\n" + "2. 구매하기\n" + "3. 프로그램종료\n";
// 관리자 선택창
String managerMsg = "1. 상품추가\n" + "2. 상품재고변경\n" + "3. 상품삭제\n" + "4. 관리자모드종료\n";
while (true) { // 종료할때까지 반복
System.out.println(userMsg);
System.out.print("입력: ");
int action = sc.nextInt(); // 사용자의 행동을 입력받을 변수
if (action == 1) {
System.out.println("1. 상품목록출력");
for (Product product : data) {
System.out.println(product);
}
}
// 상품 번호와 구매수량을 입력 받아 구매
else if (action == 2) {
System.out.println("2. 구매하기");
System.out.println("구매하실 상품 번호를 입력해주세요");
System.out.print("입력: ");
int num = sc.nextInt();
System.out.println("얼마나 구매하시겠습니까?");
System.out.print("입력: ");
int cnt = sc.nextInt();
// 입력받은 수와 PK가 같으면 구매 메서드 실행
for (int i = 0; i < data.size(); i++) {
if (num == data.get(i).getNum()) {
data.get(i).sell(cnt);
}
}
} else if (action == 3) { // break로 프로그램 종료
System.out.println("프로그램을 종료합니다...");
break;
} else if (action == 1234) { // 관리자 모드 진입
while (true) { // 관리자 모드 종료을 선택하지 않으면 반복
System.out.println("관리자 모드 비밀번호를 입력해주세요");
System.out.print("입력: ");
action = sc.nextInt();
if (action != 5678) {
System.out.println("비밀번호가 일치하지 않습니다");
continue;
}
System.out.println(managerMsg);
System.out.print("입력: ");
action = sc.nextInt();
for (Product product : data) {
System.out.println(product);
}
// 상품 추가 PK는 자동입력
if (action == 1) {
System.out.println("1. 상품추가");
System.out.println("추가하실 상품 이름을 입력해주세요");
System.out.print("입력: ");
String name = sc.next();
System.out.println("해당 상품의 가격을 입력해주세요");
System.out.print("입력: ");
int price = sc.nextInt();
System.out.println("재고도 입력하시겠습니까?");
System.out.println("1. 재고 입력 없음 2. 재고 입력");
action = sc.nextInt();
if (action == 1) { // 재고 입력 안할 시 재고: 0
data.add(new Product(numPK++, name, price));
System.out.println(data);
} else if (action == 2) { // 사용자가 입력한 값으로 등록
System.out.println("해당 상품의 재고를 입력해주세요");
System.out.print("입력: ");
int cnt = sc.nextInt();
data.add(new Product(numPK++, name, price, cnt));
System.out.println("추가되었습니다");
}
}
// 사용자
else if (action == 2) {
System.out.println("2. 상품재고변경");
System.out.println("재고를 변경하실 상품의 번호를 입력해주세요");
System.out.print("입력: ");
int num = sc.nextInt();
System.out.println("재고를 몇으로 변경하시겠습니까?");
System.out.println("입력: ");
int cnt = sc.nextInt();
for (int i = 0; i < data.size(); i++) {
if (num == data.get(i).getNum()) {
data.get(i).setCnt(cnt);
System.out.println("변경되었습니다");
break;
}
}
} else if (action == 3) {
System.out.println("3. 상품삭제");
System.out.println("삭제하실 상품의 번호를 입력해주세요");
System.out.print("입력: ");
int num = sc.nextInt();
for (int i = 0; i < data.size(); i++) {
if (num == data.get(i).getNum()) {
data.remove(i);
System.out.println("삭제되었습니다");
break;
}
}
} else if (action == 4) {
System.out.println("4. 관리자모드종료");
System.out.println("관리자 모드를 종료합니다...");
break;
}
}
}
}
}
}
'자바 > 자바 기초' 카테고리의 다른 글
[자바 기초] day13 : 예외와 예외처리 (1) | 2023.05.19 |
---|---|
[자바 기초] day12 : 컬렉션 프레임워크 (0) | 2023.05.19 |
[자바 기초] day11 : 추상화(abstract) (0) | 2023.05.18 |
[자바 기초] day11 : 캡슐화(private-getter, setter) (0) | 2023.05.18 |
[자바 기초] day10 : 상속 오버라이딩 예제 (0) | 2023.05.18 |