일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- emmet환경설정
- 국비학원
- 관리자회원조회
- 별찍기
- live server 환경설정
- 회원정보수정
- jsp기본
- 페이징
- 비밀번호암호화
- 내일배움카드
- jdbc환경설정
- 국취제
- 배열
- redirect
- 내배카
- 정처기
- 회원탈퇴
- mvc
- 검색기능
- 비밀번호변경
- 국민취업지원제도
- forward
- jdbc설정
- 로그아웃
- 입력메소드
- github
- 권한변경
- 인코딩
- 페이지 재사용
- Git
- Today
- Total
기록
*18일차 실습 본문
@실습문제: 포인트관리시스템
1. Member#getEjaPoint를 자식클래스에서 의무적으로 재작성할수 있도록 하세요.
2.각 등급별 물건구매시 차등할인율을 적용한 실제구매금액을 구하라.
구매할인율은 등급별 이자포인트율과 동일함.
* 인터페이스 Buyable
* 추상메소드 int buy(int price)
* 컨틀롤클래스 MemberManager
* 회원별구매내역출력메소드 void printBuyInfo(int price)출력 : Silver등급회원 홍길동는 10000원 상품을 9800원에 구매합니다.
Silver등급회원 고길동는 10000원 상품을 9800원에 구매합니다.
Silver등급회원 홍동민는 10000원 상품을 9800원에 구매합니다.
Gold등급회원 김회장는 10000원 상품을 9500원에 구매합니다.
Gold등급회원 이회장는 10000원 상품을 9500원에 구매합니다.
Gold등급회원 오회장는 10000원 상품을 9500원에 구매합니다.
Vip등급회원 이순신는 10000원 상품을 9000원에 구매합니다.
VVip등급회원 신사임당는 10000원 상품을 8500원에 구매합니다.@실습문제3 : 이자포인트율이 30%인 Ruby등급을 추가하고, 출력메소드에 함께 출력되게하세요.출력:
---------------------- 정보출력 ------------------------
이름 등급 포인트 이자포인트
홍길동 Silver 1000 20.00
고길동 Silver 2000 40.00
홍동민 Silver 3000 60.00
김회장 Gold 1000 50.00
이회장 Gold 2000 100.00
오회장 Gold 3000 150.00
이순신 Vip 10000 1000.00
신사임당 VVip 100000 15000.00
세종 Ruby 500000 150000.00
-----------------------------------------------------------
Silver등급회원 홍길동는 10000원 상품을 9800원에 구매합니다.
Silver등급회원 고길동는 10000원 상품을 9800원에 구매합니다.
Silver등급회원 홍동민는 10000원 상품을 9800원에 구매합니다.
Gold등급회원 김회장는 10000원 상품을 9500원에 구매합니다.
Gold등급회원 이회장는 10000원 상품을 9500원에 구매합니다.
Gold등급회원 오회장는 10000원 상품을 9500원에 구매합니다.
Vip등급회원 이순신는 10000원 상품을 9000원에 구매합니다.
VVip등급회원 신사임당는 10000원 상품을 8500원에 구매합니다.
Ruby등급회원 세종는 10000원 상품을 7000원에 구매합니다.
-----------------------------------------------------------
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;
}
@Override
public int buy(int price) {
return price - (int) (price * 0.02);
}
}
------------------------------------------------
package member.model.vo;
public class Ruby extends Member {
public Ruby() {
}
public Ruby(String name, String grade, int point) {
super(name, grade, point);
}
@Override
public double getEjapoint() {
return super.getPoint() * 0.3;
}
@Override
public int buy(int price) {
return price - (int) (price * 0.3);
}
}
--------------------------------------------------
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;
}
@Override
public int buy(int price) {
return price - (int) (price * 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;
}
@Override
public int buy(int price) {
return price - (int) (price * 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;
}
@Override
public int buy(int price) {
return price - (int) (price * 0.15);
}
}
package member.model.vo;
/**
* 추상메소드와 상수필드로만 구성된 추상클래스의 변형체.
*
* 추상메소드 : 클래스에 추상메소드를 추가
* 인터페이스 : 메소드의 통일성을 부여하기 위해 추상메소드만 모음.
*
*
*/
public interface Buyable {
int buy(int price);
}
----------------------------------------
package member.model.vo;
public abstract class Member implements Buyable{
/*protected*/
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;
}
// 추상메소드를 통한 메소드 구현을 강제화
public abstract double getEjapoint();
}
package member.controller;
import member.model.vo.Member;
public class MemberManager {
public static final int MAX_MEMBER = 40;
private Member[] memberArr = new Member[MAX_MEMBER];
private int memberIndex = 0;
//다형성
public void insertMember(Member m){
this.memberArr[memberIndex++] = m;
}
public void printData() {
System.out.println("-----------정보출력-------------");
System.out.printf("%-15s %-15s %-15s %-15s\n", "이름","등급","포인트","이자포인트");
for(int i = 0; i < memberIndex; i++){
Member m = memberArr[i];
System.out.printf("%-15s %-15s %-15d %-15.2f\n",
m.getName(),
m.getGrade(),
m.getPoint(),
m.getEjapoint());
}
}
//인터페이스:
//Member타입이 Buyable인터페이스를 구현하고 있으므로, 별도의 형변환 없이 buy메소드 사용가능
public void printBuyInfo(int price) {
for(int i = 0; i < memberIndex; i++)
System.out.printf("%s등급회원 %s는 %d원 상품을 %d원에 구매합니다.\n",
memberArr[i].getGrade(),
memberArr[i].getName(),
price,
memberArr[i].buy(price)
);
}
}
-----------------------------------------------------------------
package member.run;
import member.controller.MemberManager;
import member.model.vo.Gold;
import member.model.vo.Ruby;
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));
// m.vipInsert(new Vip("최순실", "Vip",10000));
// m.vvipInsert(new VVip("박근혜", "VVip",100000));
m.insertMember(new Silver("홍길동", "Silver",1000));
m.insertMember(new Silver("고길동", "Silver",2000));
m.insertMember(new Silver("홍동민", "Silver",3000));
m.insertMember(new Gold("김회장", "Gold",1000));
m.insertMember(new Gold("이회장", "Gold",2000));
m.insertMember(new Gold("오회장", "Gold",3000));
m.insertMember(new Vip("최순실", "Vip",10000));
m.insertMember(new VVip("박근혜", "VVip",100000));
//@실습문제3 : Ruby등급추가
m.insertMember(new Ruby("문재인", "Ruby", 500000));
m.printData();
//[[4]] 물건구매시 할인된 가격출력
m.printBuyInfo(10000);
}
}
#다형성 실습문제2
@실습문제 1
패키지명 : com.oop.shape.model
부모 클래스명 : Shape --------------------------------------
추상메서드 :
public abstract double area(); //면적 계산 리턴용
public abstract double perimeter(); //둘레 계산 리턴용
파생클래스 1 : Rectangle -----------------------------------
Field : double width, height;
Method : getter/setter 작성
생성자 작성 : default, 가로,세로 값 초기화 생성자
파생클래스 2 : Circle -----------------------------------------
Field : 원주율은 Math.PI 사용
double radius;
Method : getter/setter 작성
생성자 작성 : default, 반지름값 초기화 생성자
패키지명 : com.oop.shape.controller
테스트 클래스 : TestShape ---------------------------------
메인에서 다형성 사용 원객체와 사각형객체 생성하고,
면적과 둘레 출력
{
Shape s;
s = new Circle(15.5);
System.out.println("원면적 : " + s.area());
System.out.println("원둘레 : " + s.perimeter());
s = new Rectangle(34.5, 42.7);
System.out.println("사각형면적 : " + s.area());
System.out.println("사각형둘레 : " + s.perimeter());
}
package com.oop.shape.model;
import java.math.*;
public class Circle extends Shape{
private double radius; //반지름
public Circle(double radius) {
this.radius=radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
/**
* 원 넓이
* 반지름*반지름*PI
*/
@Override
public double area() {
return Math.PI*Math.pow(radius,2);
}
/**
* 지름*PI
*/
@Override
public double perimeter() {
return ((2*Math.PI)*radius);
}
}
----------------------------------------------
package com.oop.shape.model;
public class Rectangle extends Shape{
private double width;
private double height;
public Rectangle(double width, double height) {
super();
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public double area() {
return (width * height);
}
@Override
public double perimeter() {
return 2*(width+height);
}
}
------------------------------------------------
package com.oop.shape.model;
public abstract class Shape { //추상클래스
public abstract double area(); //면적 계산 리턴용
public abstract double perimeter(); //둘레 계산 리턴용
}