클래스에 대해 공부해서 다음과 같은 요구사항에 대한 Bus와 Taxi에 대한 클래스를 설계하고 생성하여 깃헙url로 제출
|
따로따로 클래스를 만들려다가 시나리오에서 상위클래스로 교통수단을 묶어 클래스를 만든걸 보고
상속 클래스를 사용해보고 싶어서 상위 클래스를 만들었다. 공통부분을 상위클래스에 두고 하위 클래스로 taxi와 bus를 나누어 만들었다. 그리고 실행은 또 별도의 main함수를 두어 실행하는 구조로 진행
상위 클래스인 Transportation )
package assignment_class_modeling;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Transportaion {
String num; // 차량번호 고유번호
int baseRate; // 기본요금
int refuelAmount; // 주유량
int nowSpeed; // 지금 속력
int stateNum; // 지금 상태 0: 운행불가, 1: 운행가능, 2:제3의상태
String state;
// 생성자
public Transportaion (int refuelAmount){
this.refuelAmount = refuelAmount;
stateNum = 1;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
Calendar dateTime = Calendar.getInstance();
num = sdf.format(dateTime.getTime());
}
// 운행 시작
public void run(){
if(refuelAmount < 10){
stateNum = 0;
} else {
stateNum = 1;
}
}
// 상태변경 메소드 : 0: 운행불가, 1: 운행가능, 2:제3의상태
public void stateChange(int x){
if(x == 1){
if(refuelAmount < 10){
System.out.println("주유가 필요합니다");
stateNum = 0;
} else {
stateNum = 1;
}
} else {
stateNum = x;
}
}
// 승객 탑승
public void passengerRiding(){
}
// 속력변경 메소드 : Operator = '-','+'
public void speedChange(char operator, int speed){
if( stateNum != 0 && refuelAmount >= 10){
if(operator == '+') nowSpeed += speed;
if(operator == '-') nowSpeed -= speed;
} else if (refuelAmount < 10){
System.out.println("주유량을 확인해 주세요.");
}
}
}
하위클래스 1 : Bus )
package assignment_class_modeling;
public class Bus extends Transportaion {
int maxPassengerCnt; // 탑승가능 인원수
int nowPassengerCnt; // 현재 인원수
int remainingSeat; // 남은 자리
String[] stateStr = {"차고지행","운행"};
// 생성자
public Bus(int refuelAmount){
super(refuelAmount);
state = stateStr[stateNum];
maxPassengerCnt = 30;
remainingSeat = 30;
nowPassengerCnt = 0;
}
// 운행 시작
public void run(){
super.run();
state = stateStr[stateNum];
}
// 상태변경 메소드 : 0: 운행불가, 1: 운행가능
public void stateChange(int x){
super.stateChange(x);
state = stateStr[stateNum];
}
// 승객 탑승
public void passengerRiding(int personCnt){
if(stateNum == 1){
if(maxPassengerCnt > (nowPassengerCnt + personCnt)){
nowPassengerCnt += personCnt;
remainingSeat = maxPassengerCnt - nowPassengerCnt;
} else {
System.out.println("최대 승객 수가 초과하여 탑승할 수 없습니다.");
}
}
}
// 속력변경 메소드 : Operator = '-','+'
public void speedChange(char operator, int speed){
super.speedChange(operator, speed);
}
}
하위클래스 2 : Taxi )
package assignment_class_modeling;
public class Taxi extends Transportaion {
String destination;
int basDistance = 3; // 기본 거리 3km
int distanceToDestination; // 목적지까지 거리
int perDistanceRate = 200; // 거리당 요금
int sumDistanceRate; // 거리요금 총합
String[] stateStr = {"운행불가", "일반", "운행중"};
// 생성자
public Taxi (int refuelAmount){
super(refuelAmount);
if(refuelAmount < 10){
stateNum = 0;
}
state = stateStr[stateNum];
baseRate = 3300;
}
// 운행 시작
public void run(){
super.run();
state = stateStr[stateNum];
}
// 상태변경 메소드 : 0: 운행불가, 1: 운행가능, 2:제3의상태
public void stateChange(int x){
super.stateChange(x);
state = stateStr[stateNum];
}
// 승객 탑승
public void passengerRiding(){
if(stateNum == 1){
stateNum = 2;
state = stateStr[stateNum];
} else {
System.out.println("탑승 불가 입니다");
}
}
// 속력변경 메소드 : Operator = '-','+'
public void speedChange(char operator, int speed){
super.speedChange(operator, speed);
}
// 거리당 요금 추가 메소드
public void plusPerRate(String destination, int distanceToDestination){
this.destination = destination;
System.out.println("목적지 : "+this.destination);
if(distanceToDestination > basDistance){
sumDistanceRate = perDistanceRate = (distanceToDestination - basDistance) * perDistanceRate;
}
}
// 최종 요금 출력 메소드
public void finalRateCaculate (){
int finalRate = baseRate + sumDistanceRate;
System.out.println("최종 요금은 " + finalRate + "원 입니다");
}
}
실행클래스 Main )
package assignment_class_modeling;
public class Main {
public static void main(String[] args) {
System.out.println("--------------------------------버스 객체 생성");
Bus bus1 = new Bus(100);
System.out.println("버스1 상태: " + bus1.state);
System.out.println("버스1 번호: " + bus1.num);
Bus bus2 = new Bus(5);
System.out.println("버스2 상태: " + bus2.state);
System.out.println("버스2 번호: " + bus2.num);
System.out.println("--------------------------------버스 상태 변경");
bus1.stateChange(0);
System.out.println("버스 상태: " + bus1.state);
bus1.run();
System.out.println("run() 이후 버스상태: " + bus1.state);
System.out.println("--------------------------------버스 승객 탑승");
bus1.passengerRiding(13);
System.out.println("현재 탑승자 수: " +bus1.nowPassengerCnt);
System.out.println("현재 여유석 수: " +bus1.remainingSeat);
bus1.passengerRiding(20);
System.out.println("현재 탑승자 수: " +bus1.nowPassengerCnt);
System.out.println("현재 여유석 수: " +bus1.remainingSeat);
System.out.println("--------------------------------버스 속도 변경");
bus1.speedChange('+', 100);
System.out.println("버스 현재속력: " + bus1.nowSpeed);
bus1.speedChange('-', 40);
System.out.println("버스 현재속력: " + bus1.nowSpeed);
System.out.println("--------------------------------택시 객체 생성");
Taxi taxi = new Taxi(100);
System.out.println("택시 상태: " + taxi.state);
System.out.println("택시 번호: " + taxi.num);
System.out.println("--------------------------------택시 상태 변경");
taxi.stateChange(0);
System.out.println("택시 상태: " + taxi.state);
taxi.run();
System.out.println("run() 이후 택시상태: " + taxi.state);
taxi.stateChange(2);
System.out.println("택시 상태: " + taxi.state);
taxi.stateChange(1);
System.out.println("택시 상태: " + taxi.state);
System.out.println("--------------------------------택시 승객 탑승");
taxi.passengerRiding();
System.out.println("택시 상태: " + taxi.state);
System.out.println("--------------------------------택시 속도 변경");
taxi.speedChange('+', 150);
System.out.println("택시 현재속력: " + taxi.nowSpeed);
taxi.speedChange('-', 100);
System.out.println("택시 현재속력: " + taxi.nowSpeed);
System.out.println("--------------------------------택시 거리당 요금 추가");
taxi.plusPerRate("서울", 74);
System.out.println("목적지 " + taxi.destination + "까지 거리당 추가 요금은 " + taxi.sumDistanceRate + "원 입니다." );
System.out.println("--------------------------------택시 최종 요금");
taxi.finalRateCaculate();
System.out.println("종료");
}
}
깃헙 주소:
더 나은 개선을 위해 참고하라고 주신 링크들:
'Experience > 항해99' 카테고리의 다른 글
017 - 본수업 11일차 / 1-2 SpringBoot 및 서버 이해 (0) | 2022.11.25 |
---|---|
017 - 본수업 11일차 / Spring 1-1 웹 동작 방식 이해하기 (1) | 2022.11.25 |
016 - 항해 알고리즘 본 테스트 (0) | 2022.11.24 |
007-010 본수업 1주차/ 풀스택 미니 프로젝트 (0) | 2022.11.23 |
항해 알고리즘 모의고사 (0) | 2022.11.22 |