배열을 활용하여 구현하기
고객은 현재 5명입니다. VIP 1명, GOLD2명, SILVER 2명 일 때, 각 고객이 10000원 짜리 제품을 구매한 경우 지불한 금액과 적립된 보너스 포인트를 출력해보세요.
ArrayList를 활용하여 구현해봅니다.
//VIPCustomer클래스
//2번
public VIPCustomer(int customerId, String custoemrName, int agentID) {
super(customerId, custoemrName);
salesRatio = 0.1;
bonusRatio = 0.05;
customerGrade = "VIP";
this.agentID=agentID;
}
//1번
@Override
public String showCustomerInfo() {
return super.showCustomerInfo() + "담당 상담자 번호는 "+agentID+"입니다";
}
VIPCustomer 클래스에 agentID변수를 활용하기 위해서 showCustomerInfo를 오버라이딩하여 출력문을 추가합니다. 이전 return값이 출력문이기에 뒤에 +를 통해 출력문을 이어서 작성합니다.
VIPCustomer 인스턴스를 생성할때 agentID를 함께 입력받기 위하여 생성자를 수정합니다.
import java.util.ArrayList;
public class CustomerTest {
public static void main(String[] args) {
//1번
Customer customerKim = new Customer(10010,"김유신");
Customer customerLee = new Customer(10020,"이바다");
Customer customerPark = new GoldCustomer(10030,"박유식");
Customer customerChoi = new GoldCustomer(10040,"조은빈");
Customer customerNa = new VIPCustomer(10050,"나안해",12345);
//2번
ArrayList<Customer> customerList = new ArrayList<Customer>();
customerList.add(customerKim);
customerList.add(customerLee);
customerList.add(customerPark);
customerList.add(customerChoi);
customerList.add(customerNa);
//3번
System.out.println("===========고객정보출력===========");
for(Customer customer : customerList) {
System.out.println(customer.showCustomerInfo());
}
//4번
System.out.println("===============물건 구입 후 정보 ===========");
int price = 10000;
for(Customer customer : customerList) {
int afterPrice = customer.calPrice(price);
System.out.println(customer.getCustomerName() +"님이 현재"+afterPrice+"원 지불하셨습니다.");
System.out.println(customer.showCustomerInfo());
}
}
}
===========고객정보출력===========
김유신님의 등급은 silver이며, 적립된 보너스 포인트는 0점 입니다.
이바다님의 등급은 silver이며, 적립된 보너스 포인트는 0점 입니다.
박유식님의 등급은 Gold이며, 적립된 보너스 포인트는 0점 입니다.
조은빈님의 등급은 Gold이며, 적립된 보너스 포인트는 0점 입니다.
나안해님의 등급은 VIP이며, 적립된 보너스 포인트는 0점 입니다. 담당 상담자 번호는 12345입니다
===============물건 구입 후 정보 ===========
김유신님이 현재10000원 지불하셨습니다.
김유신님의 등급은 silver이며, 적립된 보너스 포인트는 100점 입니다.
이바다님이 현재10000원 지불하셨습니다.
이바다님의 등급은 silver이며, 적립된 보너스 포인트는 100점 입니다.
박유식님이 현재9000원 지불하셨습니다.
박유식님의 등급은 Gold이며, 적립된 보너스 포인트는 200점 입니다.
조은빈님이 현재9000원 지불하셨습니다.
조은빈님의 등급은 Gold이며, 적립된 보너스 포인트는 200점 입니다.
나안해님이 현재9000원 지불하셨습니다.
나안해님의 등급은 VIP이며, 적립된 보너스 포인트는 500점 입니다. 담당 상담자 번호는 12345입니다
1번 : 테스트를 위해 CustomerTest 클래스를 생성하고 5명의 고객의 인스턴스를 생성합니다.
2번 : 5명의 고객을 배열에 담기 위해 ArrayList를 생성하고 .add메서드를 통해서 배열에 담습니다.
3번: 고객정보 출력을 위해 향상된for문을 사용하여 배열의 값을 하나씩불러와 .showInfo메서드를 사용해서 고객정보를 출력합니다.
4번: 물건값 10000원을 price 변수에 대입하고 향상된 for문을 통해 calPrice 메서드를 사용해서 고객들의 구매과정을 처리한 후 다시한번 showInfo를 통해 고객정보를 출력합니다.
상속, 오버라이딩, 배열, 향상된for문을 통하여서 다형성을 구현하여 구매처리와 고객정보 출력을 효율적으로 할 수 있었습니다.