[자바] 판매관리 (다형성)

오늘·2021년 3월 15일
0

문제풀기

목록 보기
18/24

요구사항

: 강원, 경인, 제주, 서울지사가 있다
: 제품은 컴퓨터(200만원), 프린터(50만원) 두 종류

요구 출력모습
1.

2.


1. 상위 클래스

-제품과 가격, 지사를 배열에 넣어 관리

public class Branch {
	String[] productName = {"컴퓨터", "프린터"};
	int[] productPrice = {200, 50};
	
	// 제품별 판매량
	// 인덱스를 구분해 넣어준다
	// 0 컴퓨터, 1 프린터
	int[] saleNum = new int[2];
	// 지사별로 인덱스 넣기
	// 0 강원, 1 경인, 2 제주, 3 서울
	Branch[] branchCode = new Branch[4];
}

2. 각 지사별 클래스

-최상위 클래스인 Object에서 받아와서 오버라이딩
-출력시 각 지사별 이름을 리턴해줄 toString() 메소드 작성

// 강원지사
public class Gangwon extends Branch {
	@Override
	public String toString() {
		return "강원지사";
	}
}


// 경인지사
public class Gyeongin extends Branch{
	@Override
	public String toString() {
		return "경인지사";
	}
}


// 제주지사
public class Jeju extends Branch{
	@Override
	public String toString() {
		return "제주지사";
	}
}


// 서울지사
public class Seoul extends Branch{
	@Override
	public String toString() {
		return "서울지사";
	}
}

3. 메인 클래스

-출력화면을 구성
-입력 처리 메소드 1 (지사 선택)
-입력 처리 메소드 2 (제품 입력값이 컴퓨터인지 프린터인지 판단하여 판매량을 누적)
-출력처리 메소드

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	// 여러 클래스에서 사용할 객체라 static으로 설정
	static Branch br = new Branch();
	static Gangwon gw = new Gangwon();
	static Gyeongin gin = new Gyeongin();
	static Jeju jj = new Jeju();
	static Seoul seoul = new Seoul();
	// 여러 클래스에서 사용할거라 static으로 설정
	static int selectBr;
	
	public static void main(String[] args) {
		int selectNo;
		// 첫 화면 출력
		boolean flag = true;
		
		do {
			System.out.println("--------------------------");
			System.out.println("판매량 관리 프로젝트");
			System.out.println("--------------------------");
			System.out.println("1.입력 | 2.출력 | 3.종료");
			System.out.print(">>");
			selectNo = sc.nextInt();
			
			switch (selectNo) {
			case 1:
				input();
				break;
				
			case 2:
				output();
				break;
			
			case 3:
				flag = false;
				System.out.println("프로그램을 종료합니다");
				break;

			default:
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
				break;
			}
		} while(flag);
	}

	
	// 입력 처리 메소드
	private static void input() {
		String ok = null;
		boolean flag = false;
		
		do {
			System.out.println("지사를 선택하세요");
			System.out.println("1.강원 | 2.경인 | 3.제주 | 4.서울");
			System.out.print(">>");
			selectBr = sc.nextInt();
			
			switch (selectBr) {
			// 지사별로 참조변수를 해당 배열에 넣는다
			case 1:
				br.branchCode[0] = gw;
				input2();
				break;
			
			case 2:
				br.branchCode[1] = gin;
				input2();
				break;
				
			case 3:
				br.branchCode[2] = jj;
				input2();
				break;
				
			case 4:
				br.branchCode[3] = seoul;
				input2();
				break;
			}
			System.out.println("계속 하시겠습니까? (y/n)");
			System.out.print(">>");
			ok = sc.next();
			
			if(ok.equals("n") || ok.equals("no")) {
				flag = false;
			} else if(ok.equals("y") || ok.equals("yes")) {
				flag = true;
			} else {
				System.out.println("입력을 확인해주세요");
			}
		} while(flag);
	}

	private static void input2() {
		System.out.println("어떤 제품인가요");
		System.out.print(">>");
		String pd = sc.next();
		
		System.out.println(br.branchCode[selectBr - 1].toString() + " " + pd + " 판매량 입력");
		System.out.print(">>");
		int amount = sc.nextInt();
		
		// 제품 입력값이 컴퓨터인지 프린터인지 판단하여 해당 인덱스를 구한다
		// 구한 인덱스에 판매량을 누적해 넣는다
		if(pd.equals(br.productName[0])) {
			br.branchCode[selectBr - 1].saleNum[0] += amount;
		} else if(pd.equals(br.productName[1])) {
			br.branchCode[selectBr - 1].saleNum[1] += amount;
		} else {
			System.out.println("제품명을 확인해 주세요");
		}
	}


	// 출력처리 메소드
	private static void output() {
		System.out.println("------------------------------------------------");
		System.out.println("\t \t 각 지사별 판매 현황");
		System.out.println("------------------------------------------------");
		System.out.println("지사명 \t 제품명 \t 제품가격 \t 판매량 \t 매출현황");
		System.out.println("------------------------------------------------");

		for (int i = 0; i < br.branchCode.length; i++) {
			// 만약 입력값이 없다면 건너뛰고 처리
			// 이 처리를 안해줄시
			// 모든 지사의 컴퓨터와 프린터 판매량을 입력해주지 않으면 에러난다
			if (br.branchCode[i] == null) {
				continue;
			}else {
				System.out.println(br.branchCode[i].toString() + "\t" + br.branchCode[i].productName[0] + "\t"
						+ br.branchCode[i].productPrice[0] + "\t" + br.branchCode[i].saleNum[0] + "\t"
						+ (br.branchCode[i].productPrice[0] * br.branchCode[i].saleNum[0]));
				System.out.println(br.branchCode[i].toString() + "\t" + br.branchCode[i].productName[1] + "\t"
						+ br.branchCode[i].productPrice[1] + "\t" + br.branchCode[i].saleNum[1] + "\t"
						+ (br.branchCode[i].productPrice[1] * br.branchCode[i].saleNum[1]));
			}
		}
	}
}

실행화면

입력화면

출력 & 종료

0개의 댓글