1. 程式人生 > >面向對象-汽車租賃系統

面向對象-汽車租賃系統

技術 abstract 面向對象 days n) tco package void sed

最近學了面向對象知識,用汽車租賃系統作為練習,如有寫得不好之處請指正。

首先,創建一個汽車類作為父類,汽車類裏包含了三個屬性和一個方法

 1 package com.ketang.rental;
 2 
 3 /**
 4  * 汽車類
 5  * @author 
 6  *
 7  */
 8 public abstract class Automobile {
 9     private String brand;  //品牌
10     private String plateNum;  //車牌號
11     private int dayRent;  //日租金
12     
13     //
無參構造方法 14 public Automobile() {} 15 16 //包含汽車品牌、車牌號、日租金三個參數的構造方法 17 public Automobile(String brand, String plateNum, int dayRent) { 18 this.brand = brand; 19 this.plateNum = plateNum; 20 this.dayRent = dayRent; 21 } 22 23 public String getBrand() {
24 return brand; 25 } 26 public void setBrand(String brand) { 27 this.brand = brand; 28 } 29 public String getPlateNum() { 30 return plateNum; 31 } 32 public void setPlateNum(String plateNum) { 33 this.plateNum = plateNum; 34 } 35 public
int getDayRent() { 36 return dayRent; 37 } 38 public void setDayRent(int dayRent) { 39 this.dayRent = dayRent; 40 } 41 42 //計算租金 43 public abstract float Rent(int days); 44 45 }

創建完父類,接著建兩個子類:轎車類和客車類,轎車類和客車類都有特有的屬性,因各自計算租金的方法不一樣,所以重新父類方法

 1 package com.ketang.rental;
 2 
 3 /**
 4  * 轎車類
 5  * @author 
 6  *
 7  */
 8 public class Sedan extends Automobile {
 9 
10     private String type;  //轎車型號
11     
12     //無參構造方法
13     public Sedan() {
14         super();
15     }
16 
17     //轎車類帶品牌、車牌號、日租金、型號四個參數的構造方法
18     public Sedan(String brand, String plateNum, int dayRent, String type) {
19         super(brand, plateNum, dayRent);
20         this.type=type;
21     }
22 
23     public String getType() {
24         return type;
25     }
26 
27     public void setType(String type) {
28         this.type = type;
29     }
30 
31     //轎車類重寫父類計算租金方法
32     public float Rent(int days) {
33         float price=super.getDayRent()*days;
34         if(days>7 && days<=30) {
35             price*=0.9f;
36         }else if(days>30 && days<=150) {
37             price*=0.8f;
38         }else if(days>150) {
39             price*=0.7f;
40         }
41         return price;
42     }
43 
44 }
 1 package com.ketang.rental;
 2 
 3 /**
 4  * 客車類
 5  * @author 
 6  *
 7  */
 8 public class Bus extends Automobile {
 9 
10     private int seatCount;  //座位數
11     
12     public Bus() {
13         super();
14     }
15 
16     //包含汽車品牌、車牌號、日租金、座位數四個參數的構造方法
17     public Bus(String brand, String plateNum, int dayRent,int seatCount) {
18         super(brand, plateNum, dayRent);
19         this.seatCount=seatCount;
20     }
21 
22     public int getSeatCount() {
23         return seatCount;
24     }
25 
26     public void setSeatCount(int seatCount) {
27         this.seatCount = seatCount;
28     }
29 
30     //客車類重寫父類計算租金的方法
31     public float Rent(int days) {
32         float price=super.getDayRent()*days;
33         if(days>=3 && days<7) {
34             price*=0.9f;
35         }else if(days>=7 && days<30) {
36             price*=0.8f;
37         }else if(days>=30 && days<150) {
38             price*=0.7f;
39         }else if(days>=150){
40             price*=0.6f;
41         }
42         return price;
43     }
44 
45 }

接著是汽車業務類,業務類是存儲汽車信息並初始化

 1 package com.ketang.rental;
 2 
 3 /**
 4  * 汽車業務類
 5  * @author 
 6  *
 7  */
 8 public class CarOperation {
 9     //創建汽車類型數組,將該數組生命為父類類型
10     public Automobile[] ats=new Automobile[8];
11     
12     //初始化汽車信息
13     public void init() {
14         ats[0]=new Sedan("別克","粵B89894",300,"林蔭大道");
15         ats[1]=new Sedan("別克","粵B96968",600,"GL8");
16         ats[2]=new Sedan("寶馬","粵B88888",800,"X6");
17         ats[3]=new Sedan("寶馬","粵B89894",600,"550i");
18         ats[4]=new Bus("金杯","粵B11111",800,16);
19         ats[5]=new Bus("金杯","粵B22222",1500,34);
20         ats[6]=new Bus("金龍","粵B33333",800,16);
21         ats[7]=new Bus("金龍","粵B44444",1500,34);
22     }
23 
24     //租車:根據用戶提供的條件去汽車數組中查找相應車輛並返回
25     //如果租賃的是客車  需要的條件:品牌  座位數  型號null
26     //如果租賃的是轎車  需要的條件:品牌  型號  座位數0
27     public Automobile rentCar(String brand,String type,int seat) {
28         Automobile auto=null;
29         for( Automobile at:ats) {
30             if(at instanceof Sedan) {
31                 Sedan sedan=(Sedan)at;  //向下轉型
32                 if(sedan.getBrand().equals(brand) && sedan.getType().equals(type)) {
33                     auto=sedan;
34                     break;
35                 }
36             }else if(at instanceof Bus) {
37                 Bus bus=(Bus)at;
38                 if(bus.getBrand().equals(brand) && bus.getSeatCount()==seat) {
39                     auto=bus;
40                     break;
41                 }
42             }
43             
44         }
45         return auto;  // 返回一個汽車對象
46     }
47     
48     //計算租多臺車總價格方法
49     public float totalPrice(Automobile[] automobile,int day ) {
50         float sumPrice=0;
51         for(Automobile auto:automobile) {
52             if(auto!=null) {
53                 sumPrice+=auto.Rent(day);
54             }
55         }
56         return sumPrice;
57     }
58 }

最後一個是汽車租賃管理類,實現租車管理

 1 package com.ketang.rental;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 汽車租賃管理
 7  * @author 
 8  *
 9  */
10 public class CarRetalMrg2 {
11     public static void main(String[] args) {
12         Scanner input=new Scanner(System.in);
13         CarOperation co=new CarOperation();
14         Automobile[] automobile=new Automobile[3];
15         //租賃公司首先需要購置汽車
16         co.init();
17         
18         System.out.println("********************歡迎光臨快租汽車租賃公司*******************");
19         //客戶租車的條件
20         String brand="";  //品牌
21         String type="";  //型號
22         int seat=0;  //座位數
23         String answer="";
24         int i=0;
25         //收集用戶條件
26         do {
27             System.out.println("1、轎車   2、客車");
28             System.out.print("請選擇你要租賃的汽車類型:");
29             int chooseCar=input.nextInt();
30             switch(chooseCar){
31             //租賃轎車
32             case 1:
33                 System.out.print("請選擇你要租賃的汽車品牌:1、別克  2、寶馬");
34                 int chooseBrand=input.nextInt();
35                 if(chooseBrand==1) {
36                     brand="別克";
37                     System.out.print("請選擇你要租賃的汽車型號:1、林蔭大道  2、GL8");
38                     type=input.nextInt()==1?"林蔭大道":"GL8";
39                 }else if(chooseBrand==2) {
40                     brand="寶馬";
41                     System.out.print("請選擇你要租賃的汽車型號:1、X6  2、550i");
42                     type=input.nextInt()==1?"X6":"550i";
43                 }
44                 break;
45             //租賃客車
46             case 2:
47                 System.out.print("請選擇你要租賃的汽車品牌:1、金龍  2、金杯");
48                 brand=input.nextInt()==1?"金龍":"金杯";
49                 System.out.print("請選擇你要租賃的汽車座位數:1、16座  2、34座");
50                 seat=input.nextInt()==1?16:34;
51                 break;
52             default:
53                 break;
54             }
55             //每租一輛車就放到租車數組裏
56             automobile[i]=co.rentCar(brand, type, seat);
57             System.out.println("租車成功,你的車牌號是:"+automobile[i].getPlateNum());
58             i++;
59             System.out.print("是否繼續租賃?(y/n)");
60             answer=input.next();
61             System.out.println();
62         }while("y".equalsIgnoreCase(answer));
63 
64         System.out.print("請輸入要租賃的天數:");
65         int day=input.nextInt();
66 
67         float sum=co.totalPrice(automobile, day);
68         System.out.println("租賃總費用是"+sum+"元");
69     }
70 }

以下是運行結果,本次選擇租賃一輛別克GL8,一輛寶馬X6,一輛34座金杯,一起租賃2天,總計價格是5800元。

技術分享圖片

本案例涉及到了繼承、封裝、多態、對象數組等知識。謝謝觀看!

面向對象-汽車租賃系統