面向對象-汽車租賃系統
阿新 • • 發佈:2018-12-03
技術 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 publicint 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元。
本案例涉及到了繼承、封裝、多態、對象數組等知識。謝謝觀看!
面向對象-汽車租賃系統