1. 程式人生 > >抽象類和物件的上轉型物件

抽象類和物件的上轉型物件

答答租車系統(面向物件綜合練習)

Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic  Discuss

Problem Description

各位面向物件的小夥伴們,在學習了面向物件的核心概念——類的封裝、繼承、多型之後,答答租車系統開始營運了。

請你充分利用面向物件思想,為公司解決智慧租車問題,根據客戶選定的車型和租車天數,來計算租車費用,最大載客人數,最大載載重量。

公司現有三種車型(客車、皮卡車、貨車),每種車都有名稱和租金的屬性;其中:客車只能載人,貨車只能載貨,皮卡車是客貨兩用車,即可以載人,也可以載貨。

下面是答答租車公司的可用車型、容量及價目表:
序號     名稱     載客量      載貨量        租金
                           (人)     (噸)    (元/天)
  1          A            5                                 800
  2          B            5                                 400
  3          C            5                                 800
  4          D            51                             1300
  5          E            55                             1500
  6          F             5            0.45             500
  7         G             5             2.0               450
  8         H                            3                  200
  9          I                             25              1500
 10        J                             35              2000

要求:根據客戶輸入的所租車型的序號及天數,計算所能乘載的總人數、貨物總數量及租車費用總金額。

Input

首行是一個整數:代表要不要租車 1——要租車(程式繼續),0——不租車(程式結束);

第二行是一個整數,代表要租車的數量N;

接下來是N行資料,每行2個整數m和n,其中:m表示要租車的編號,n表示租用該車型的天數。

Output

若成功租車,則輸出一行資料,資料間有一個空格,含義為:

載客總人數 載貨總重量(保留2位小數) 租車金額(整數)

若不租車,則輸出: 

0 0.00 0(含義同上)

Example Input

1
2
1 1
2 2

Example Output

15 0.00 1600

  
import java.util.Scanner;
abstract class car                   //抽象類
{
	String name;
	int rentPrice;
	abstract int getPerson();    //抽象成員函式在繼承的子類中必須被重寫
	abstract double getPickup();
	abstract int getPrice();
	
}
class KCar extends car
{
	int person;
	KCar(String name,int person,int rentPrice)
	{
		this.name=name;
		this.person=person;
		this.rentPrice=rentPrice;
	}
	String getName()
	{
		return this.name;
	}
	int getPerson()
	{
		return this.person;
	}
	int getPrice()
	{
		return this.rentPrice;
	}
	@Override
	double getPickup() {
		// TODO Auto-generated method stub
		return 0;
	}
}
class PCar extends car
{
	int person;
	double pickup;
	PCar(String name,int person,double pickup,int rentPrice)
	{
		this.name=name;
		this.person=person;
		this.pickup=pickup;
		this.rentPrice=rentPrice;
	}
	String getName()
	{
		return this.name;
	}
	int getPerson()
	{
		return this.person;
	}
	double getPickup()
	{
		return this.pickup;
	}
	int getPrice()
	{
		return this.rentPrice;
	}
}
class HCar extends car
{
	double pickup;
	HCar(String name,double pickup,int rentPrice)
	{
		this.name=name;
		this.pickup=pickup;
		this.rentPrice=rentPrice;
	}
	String getName()
	{
		return this.name;
	}
	double getPickup()
	{
		return this.pickup;
	}
	int getPrice()
	{
		return this.rentPrice; 
	}
	@Override
	int getPerson() {
		// TODO Auto-generated method stub
		return 0;
	}
}
public class Main {

	public static void main(String[] args) {
	Scanner in=new Scanner(System.in);
	car[]rentCar={                                 //物件的上轉型物件的定義
			new KCar("A",5,800),
			new KCar("B",5,400),
			new KCar("C",5,800),
			new KCar("D",51,1300),
			new KCar("E",55,1500),
			new PCar("F",5,0.45,500),
			new PCar("G",5,2.0,450),
			new HCar("H",3,200),
			new HCar("I",25,1500),
			new HCar("J",35,2000)
		};
	int f=in.nextInt();
	int sumPerson=0;
	double sumPickup=0;
	int sumPrice=0;
	int n;
	int N,m;
	if(f==1)
	{
		N=in.nextInt();
		while(N>0)
		{
			N--;
			m=in.nextInt();
			n=in.nextInt();
			sumPerson+=rentCar[m-1].getPerson()*n;
			sumPickup+=rentCar[m-1].getPickup()*n;
			sumPrice+=rentCar[m-1].getPrice()*n;
		}
	}
	System.out.printf("%d %.2f %d",sumPerson,sumPickup,sumPrice);
	}
}