기록

*16일차 실습 본문

학원/실습

*16일차 실습

pringspring 2022. 2. 14. 18:56

*포인트 관리 시스템

@실습문제 - 포인트관리시스템의 entity클라스의 상속관계만들기
회원등급을 추상화하여 Member클래스를 작성해 중복을 제거하세요.

 

package member.model.vo;

public class Silver extends Member{
	
	public Silver() {}
	
	public Silver(String name, String grade, int point) {
		super(name, grade, point);
	}
	
	@Override
	public double getEjapoint(){ 
		return super.getPoint() * 0.02;
	}
}
---------------------------------------------
package member.model.vo;

public class Gold extends Member{

	public Gold() {}

	public Gold(String name, String grade, int point) {

		super(name, grade, point);
	}
	@Override
	public double getEjapoint(){ 
		return super.getPoint()*0.05;
	}
	
}
---------------------------------------------
package member.model.vo;

public class Vip extends Member{

	public Vip(){}
	
	public Vip(String name, String grade, int point){
		super(name, grade, point);
	}
	
	@Override
	public double getEjapoint(){ 
		return super.getPoint() * 0.1;
	}
}
---------------------------------------------
package member.model.vo;

public class VVip  extends Member {
	
	public VVip(){}
	
	public VVip(String name, String grade, int point){
		super(name, grade, point);
	}
	
	@Override
	public double getEjapoint(){ 
		return super.getPoint()*0.15;
	}
}
---------------------------------------------
package member.model.vo;

public class Member {
	
	/* 
	 * protected로 지정하면 자식 클래스에서 직접 접근 가능하다. 
	 * Member의 자식클래스 Gold Silver Vip VVip에서는 직접 접근할 수 있다.
	 * 
	 * 단, 커스텀클래스를 상속하는 경우에는 protected 지정가능하지만, 
	 * jdk가 제공하는 어떤 캡슐화된 클래스를 상속한다면, protected로 변경할 수 없다. 
	 * -> super생성자를 통해 값세팅 & getter,setter 이용
	 * 
	 */
	private String name;
	private String grade;
	private int point;

	public Member(){}

	public Member(String name, String grade, int point) {
		this.name = name;
		this.grade = grade;
		this.point = point;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGrade() {
		return grade;
	}
	public void setGrade(String grade) {
		this.grade = grade;
	}
	public int getPoint() {
		return point;
	}
	public void setPoint(int point) {
		this.point = point;
	}
	
	//부모타입에서는 등급별 이자율을 구체화할 수 없기 때문에 기본이자율(Silver)로 계산해두고, 자식객체쪽에서 구현하게 한다.
	public double getEjapoint(){
		return point * 0.02;
	}
	
	
}
---------------------------------------------
package member.controller;

import member.model.vo.Gold;
import member.model.vo.Silver;
import member.model.vo.VVip;
import member.model.vo.Vip;

public class MemberManager {
	Silver[] s= new Silver[10];
	Gold[] g = new Gold[10];
	Vip[] v = new Vip[10];
	VVip[] vv = new VVip[10];
	
	int silverIndex = 0;
	int goldIndex = 0;
	int vipIndex = 0;
	int vvipIndex = 0;
	
	
	public void silverInsert(Silver s) {
		this.s[silverIndex++] = s;
	}
	public void goldInsert(Gold g) {
		this.g[goldIndex++] = g;
	}
	public void vipInsert(Vip v){
		this.v[vipIndex++] =  v;
	}
	public void vvipInsert(VVip vv){
		this.vv[vvipIndex++] =  vv;
	}
	
	public void printData() {
		System.out.println("----------------------------------------<<회원정보>>-----------------------------------------");
		System.out.printf("%-15s %-15s %-15s %-15s\n", "이름","등급","포인트","이자포인트");
		System.out.println("------------------------------------------------------------------------------------------------");
		for(int i=0; i<silverIndex;i++) {
			System.out.printf("%-15s %-15s %-15d %-15.2f\n", s[i].getName(), s[i].getGrade(), s[i].getPoint(), s[i].getEjapoint());			
		}
		for(int i=0; i<goldIndex;i++) {
			System.out.printf("%-15s %-15s %-15d %-15.2f\n", g[i].getName(), g[i].getGrade(), g[i].getPoint(), g[i].getEjapoint());
		}
		for(int i=0; i<vipIndex; i++){
			System.out.printf("%-15s %-15s %-15d %-15.2f\n", v[i].getName(), v[i].getGrade(), v[i].getPoint(), v[i].getEjapoint());
		}
		for(int i=0; i<vvipIndex; i++){
			System.out.printf("%-15s %-15s %-15d %-15.2f\n", vv[i].getName(), vv[i].getGrade(), vv[i].getPoint(), vv[i].getEjapoint());
		}
	}
}
---------------------------------------------
package member.run;

import member.controller.MemberManager;
import member.model.vo.Gold;
import member.model.vo.Silver;
import member.model.vo.VVip;
import member.model.vo.Vip;

public class Run {
	public static void main(String[] args){
		MemberManager m = new MemberManager();
		m.silverInsert(new Silver("홍길동", "Silver",1000));
		m.silverInsert(new Silver("김말똥", "Silver",2000));
		m.silverInsert(new Silver("고길동", "Silver",3000));
		m.goldInsert(new Gold("김회장", "Gold",1000));
		m.goldInsert(new Gold("이회장", "Gold",2000));
		m.goldInsert(new Gold("오회장", "Gold",3000));
		
		//vip추가
		m.vipInsert(new Vip("최순실", "Vip",10000));
		
		//vvip추가
		m.vvipInsert(new VVip("박근혜", "VVip",100000));
		
		
		
		m.printData();
	}
}

 

 

 

 

 


* getEjaPoint메소드는 부모클래스에 정의한후, 각 회원별로 오버라이딩 할것

 

@실습문제 : SmartPhone, Desktop의 공통요소를 부모클래스 Computer로
작성하기( 생략)
상속관계 다시 설정하기
* java에서는 다중상속은 지원하지 않는다. 

package kh.java.inheritance.product.after;

public class Desktop extends Computer {

	private String monitor;
	private String keyboard;
	private String mouse;
	
	public Desktop() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Desktop(String brand, String code, String name, int price,
			String os, String monitor, String keyboard, String mouse) {
//		this.brand = brand;
//		this.code = code;
//		this.name = name;
//		this.price = price;
		
		// 1.setter 이용해서 private필드에 값대입하기
//		setBrand(brand);
//		setCode(code);
//		setName(name);
//		setPrice(price);
		
		// 2.부모생성자를 호출 : 생성자에 딱한번, 맨위줄에서만 사용가능
		// this와 같이 사용불가. 생략해도 자동으로 super() 호출된다.
		super(brand, code, name, price, os);
		
		this.monitor = monitor;
		this.keyboard = keyboard;
		this.mouse = mouse;
	}

	public String getMonitor() {
		return monitor;
	}

	public void setMonitor(String monitor) {
		this.monitor = monitor;
	}

	public String getKeyboard() {
		return keyboard;
	}

	public void setKeyboard(String keyboard) {
		this.keyboard = keyboard;
	}

	public String getMouse() {
		return mouse;
	}

	public void setMouse(String mouse) {
		this.mouse = mouse;
	}
	
	/**
	 * brand, code, name, price는 상속받았지만, private필드라 직접접근할 수 없다.
	 * public method를 통해 접근할 수 있다.
	 * @return
	 */
	public String getDesktopInfo() {
		return this.getComputerInfo() + ", " + this.monitor + ", " + this.keyboard + ", " + this.mouse;
	}
}
--------------------------------------------------------
package kh.java.inheritance.product.after;

public class SmartPhone extends Computer {

	private String carrier; // 통신사
	
	public SmartPhone() {
		super();
		// TODO Auto-generated constructor stub
	}

	// source - generate constructor using fields - super constructor to invoke
	public SmartPhone(String brand, String code, String name, int price, String os, String carrier) {
		super(brand, code, name, price, os);
		this.carrier = carrier;
	}

	public String getCarrier() {
		return carrier;
	}

	public void setCarrier(String carrier) {
		this.carrier = carrier;
	}
	
	public String getSmartPhoneInfo() {
		return this.getComputerInfo() + ", " + carrier;
	}
	
	
	
}

 

'학원 > 실습' 카테고리의 다른 글

*18일차 실습  (0) 2022.02.16
*17일차 실습  (0) 2022.02.15
*15일차 실습 (객체배열 실습문제)  (0) 2022.02.11
*14일차 실습  (0) 2022.02.10
*13일차 실습  (0) 2022.02.09