티스토리 뷰

JAVA

상속 예제2

springpark 2025. 3. 26. 16:40
반응형

 

 

 

 

 

상속 예제2

 

1. 쇼핑몰

 

< 상속예제 총정리 1>
 1. 홍길동은 쇼핑몰을 운영하려 한다.
   쇼핑몰 판매 상품을 상속을 이용하여 프로그램하기

   요구사항
	- 판매 제품: 화장품(Cosmetics), 청바지(Jeans),
	           책(Book)에 대한 클래스를 만든다.
	- 코드가 중복되지 않도록 상속 관계를 사용한다.
	- 부모 클래스는 공통 속성을 담고 있는 
	   Item이라는 클래스 이다.
	
	<속성=필드>
	- 공통 속성 : name, price
	- 화장품(Cosmetics) : 브랜드(brand), 색상(cololr)
	- 청바지 (Jeans) : 사이즈(size)
	- 책(Book) : 저자(author), 출판사(publisher)



 <출력형태>
***************
이름 : 립스틱
가격 : 25000
브랜드 : 아모레퍼시픽
색상 : Red
***************
이름 : 기모청바지
가격 : 35000
사이즈 : 77
***************
이름 : JAVA
가격 : 35000
저자 : 홍길동
출판사 : 홍길동
=============================
오늘 판매 금액: 95,000원
=============================
판매 제품 이름 : 립스틱 , 기모청바지 , JAVA

 

package day12.exam;

public class Item {
  //1. 인스턴스 필드 - 외부에 노출하지 않음
  private String name;
  private int price;

  //2. 생성자
  public Item(String name, int price) {
    this.name = name;
    this.price = price;
  }

  public String getName() {
    return name;
  }

  public int getPrice() {
    return price;
  }

  public void print(){
    System.out.println("이름 : " + name);
    System.out.println("가격 : " + price);
  }
}
//===========================

package day12.exam;

public class Cosmetics extends Item {
  private String brand;
  private String color;

  public Cosmetics(String name, int price, String brand, String color) {
    super(name, price);
    this.brand = brand;
    this.color = color;
  }

  @Override  //재정의
  public void print(){
    System.out.println("******************");
    super.print();//부모의 메서드 호출
    //System.out.println("이름 : " + super.getName());
    System.out.println("브랜드 : " + brand);
    System.out.println("색상 : " + color);
  }

}

//===============================
package day12.exam;

public class Jeans extends Item{
    private int size;

  public Jeans(String name, int price, int size) {
    super(name, price);
    this.size = size;
  }

  @Override
  public void print(){
    System.out.println("***************");
    super.print();
    System.out.println("사이즈 : " + size);
  }
}

//=================================
package day12.exam;

public class Book extends Item {
  private String author;
  private String publisher;

  public Book(String name, int price, String publisher, String author) {
    super(name, price);
    this.publisher = publisher;
    this.author = author;
  }

  @Override
  public void print(){
    System.out.println("***************");
    super.print();
    System.out.println("저  자 : " + author);
    System.out.println("출판사 : " + publisher);
  }

}

//==============================
package day12.exam;

import day11.exam2.Cosmatics;
import day11.exam2.Jeans;

import java.text.DecimalFormat;

public class WebMain {
  public static void main(String[] args) {
    int sum = 0;
    String nameTotal="";
    Cosmatics cos = new Cosmatics("립스틱", 25000,"아모레", "Red");
    Jeans jean = new Jeans("기모청바지",35000,77);
    Book book = new Book("Java", 35000, "홍길동", "중앙");

    cos.print();
    jean.print();
    book.print();
    System.out.println();
    System.out.println("======================================");
    //총합
    DecimalFormat f = new DecimalFormat("#,##0원");
    sum = cos.getPrice() + jean.getPrice() + book.getPrice();
    System.out.println("오늘 판매 금액 : " + f.format(sum));

    System.out.println("======================================");
    //제품 이름 나열
    nameTotal = cos.getName() + ", " +
                jean.getName() + ", " +
                book.getName();
    System.out.println("판매 제품 이름 : " + nameTotal);

  }
}

 

2. 고객 정보

 

 

 1. 중앙인터내셜에서는 고객 정보를 가지고 맞춤 서비스
    를 제공하려합니다.
    그래서 고객관리 프로그램을 구현하기로 하였습니다.

<요구사항>
   1) 고객 클래스에는 아이디, 이름, 등급, 포인트,
      포인트 적립비율이 필요하다.
      
   2) 고객의 기본 등급을 SIVER로 한다.
   
   3) 고객이 제품을 구매할 경우 누적되는 
      보너스 포인트가 있다.
   
   4) 고객이 제품을 구매할 때 구매 금액의 
      일정 비율이 보너스 포인트로 적립되고, 
      이때 계산되는 적립 비율이 보너스 포인트 
      적립 비율이다.
   
   5) 기본 적립 비율은 0.1%로 한다.
      10000원을 사면 10원이 적립되는 것이다.
   
   6) 우수 고객의 등급은 VIP이다.
   
   7) vip 고객에게는 제품을 살 때 항상 
      10%할인을 한다.
   
   8) 보너스 포인트를 0.5% 적립해 준다

 

package day11.exam3;

public class CustomerMain {

  public static void main(String[] args) {
    Vip vip = new Vip(123, "홍길동", "VIP");
    General gn = new General(321, "김자바", "general");


    vip.showInfo(100_000);
    System.out.println();
    gn.showInfo(100_000);

  }

}

//===================================
package day11.exam3;

public class Customer {
  private int cid;  //고객아이디
  private String name; //고객명
  private String grade; //등급
  int point; // 보너스 포인트
  int paymentAmount; //결제 금액
  double ratio;  //적립금
  double discountRate;//할인율

//	public Customer() {
//		grade = "GENERAL"; //기본 등급
//		ratio = 0.01; // 기본 적립금
//	}

  public Customer(int cid, String name, String grade, double ratio, double discountRate) {
    super();
    this.cid = cid;
    this.name = name;
    this.grade = grade;
    this.ratio = ratio;
    this.discountRate = discountRate;
  }

  private void calcPoint(int price) {
    point += (int)(price * ratio);
    System.out.println(name + "님의 현재 포인트 누적액은 " + point + "입니다.");
  }


  private void calcPrice(int price) {
    paymentAmount =price - (int)(price*discountRate);
    System.out.println(name + "님의 결제금액은 " + paymentAmount  + "입니다.");
  }

  public void showInfo(int price) {
    System.out.println(name + "님의 등급은 " + grade + "입니다.");
    calcPoint(price);
    calcPrice(price);

  }
}

//===========================
package day11.exam3;

public class General extends Customer{
  final static double DISCOUNTRATE = 0.05;
  final static double RATIO = 0.001;

  public General(int cid, String name, String grade) {
    super(cid, name, grade, RATIO, DISCOUNTRATE);
  }
}

//=====================
package day11.exam3;

public class Vip extends Customer{

  final static double DISCOUNTRATE = 0.1;
  final static double RATIO = 0.005;

  public Vip(int cid, String name, String grade) {
    super(cid, name, grade, RATIO, DISCOUNTRATE);
  }
}

 

 

3. 위 2번 내용 upgrade

 

 

 

 

 

package day11.exam5;

import static day11.exam5.Grade.*;

public class CustomerMain {

  public static void main(String[] args) {
    //Customer hong = new Customer(123,"홍길동",Grade.VIP);
    Customer hong = new Customer(123,"홍길동",VIP);
    hong.showInfo(5000);
    System.out.println();

    Customer kim = new Customer(124,"김자바",SILVER);
    kim.showInfo(5000);
    System.out.println();

    Customer lee = new Customer(125,"이하늘",VIP);
    lee.showInfo(5000);
    System.out.println();

  }

}
//=======================
package day11.exam5;

public enum Grade {
  VIP(10, 0.5), SILVER(5, 0.1);  //할인율(10%, 5%), 적립률(0.5%, 0.1%)

  private final int discountRate; //할인율
  private final double ratio; //적립금 비율

  Grade(int discountRate, double ratio) {
    this.discountRate = discountRate;
    this.ratio = ratio;
  }

  public int discountRatePrice(int price) {
    return price - (price * discountRate) / 100;
  }

  public int pointRatio(int price) {
    return (int)(price * ratio / 100);
  }

}

//===================
package day11.exam5;

public class Customer {
  //#1. 필드
  private int cid; //고객아이디
  private String name; //고객명
  Grade grade; //고객의 등급

  //결제와 관련된 것은 다른 class로 분리하는 것도 고려
  private int paymentAmount; //결제 금액
  private int point ; //포인트

  //#2. 생성자
  public Customer(int cid, String name,Grade grade) {
    super();
    this.cid = cid;
    this.name = name;
    this.grade = grade;
  }

  //#3. 메소드
  //#3-1. 포인트 계산, 결제금액
  private void calcPrice(int price) {
    point += grade.pointRatio(price);
    paymentAmount = grade.discountRatePrice(price);

  }//end of calcPrice

  //#3-2. 출력 처리
  private void printInfo() {
    System.out.println(name + "님의 등급은 " + grade + "입니다.");
    System.out.println(name + "님의 현재 포인트 누적액은 " + point + "입니다.");
    System.out.println(name + "님의 결제 금액은 " + paymentAmount + "입니다.");
  }

  //#3-3. 정보 출력-외부에서 호출해서 사용
  public void showInfo(int price) {
    calcPrice(price);
    printInfo();
  }//end of showInfo

}//end of class

 

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

추상 클래스  (0) 2025.03.27
상속(inheritance)  (0) 2025.03.26
상속 기초 예제1  (1) 2025.03.26
상속 및 다형성  (1) 2025.03.25
접근 제한자 /패키지/임포드/final 제어자  (1) 2025.03.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/10   »
일 월 화 수 목 금 토
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
글 보관함