为了账号安全,请及时绑定邮箱和手机立即绑定

写完了,对老师讲的面向对象的三个特性确实有了更深的理解,贴上代码,请大神指点


package prj6;

public class InputInvalidException extends Exception {
    
        private int max;
        public InputInvalidException(int max){
            this.max = max;
        }
        public String toString(){
            return "Invalid input, please try again(1-"+ max+")";
        }

    
}

package prj6;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int isRent; //value for using the system or not
        RenVehi renv=new RenVehi();
        renv.welMsg(); //print welcome message
        
        Scanner input=new Scanner(System.in);         
        System.out.println("Are you going to use the XXX rental system? ");
        isRent=input.nextInt();
        
        if (isRent==1){    
            int i=1;
            renv.disHead(); //print title
            Vehicle[] vehi = {new PasVehi("奥迪A4",500,4), new PasVehi("马自达6",400,4), new PasCargoVehi("皮卡雪6",450,4,2), new PasVehi("金龙",800,20),new CargoVehi("松花江",400,4),new CargoVehi("依维柯",1000,20)};//initial assignment
            for (Vehicle v:vehi){ //traversal all the elements in the object and then print
                System.out.print(i+"\t");
                v.displayCarList();
                i++;
            }
            
            int vID[]= renv.getVehicleID(vehi.length); //get all the choices number of customer
            int days=renv.getDays(); // get the days when customer want to rent
            renv.displayBill(vehi, vID, days); //print bill
            
        }else{
            renv.disQuit(); //quit the system
        }
        
    }

}

package prj6;

public class Vehicle { //the class has 4 attributes
    //private int type;
    private String name;    
    private Double rental;
    private int passenger;
    private int cargo;    
    
    
    public String getName(){
        return(name);
    }
    
    public Double getRental(){
        return(rental);
    }
    
    public int getPassenger(){
        return(passenger);
    }
    
    public int getCargo(){
        return(cargo);
    }
    public Vehicle(String name, Double rental,int passenger,int cargo){ //constructor, get all 4 attribes        
        this.name=name;
        this.rental=rental;
        this.passenger = passenger;
        this.cargo = cargo;
    }
    
    
    public void displayCarList(){ //print all available choice for customers
        if (cargo==0){ //if coach, print name, rent, and capacity of passenger
            System.out.println(name+"\t$"+rental+" /day\t"+"load passenger\t"+passenger);
        }else if(passenger==0){ //if truck, print name, rent, and capacity of cargo
            System.out.println(name+"\t$"+rental+" /day\t"+"load cargo\t"+cargo);
        }else{ //if pickup, print name, rent, and capacity both of passenger and cargo
            System.out.println(name+"\t$"+rental+" /day\tload passenger  "+passenger+"  load cargo "+cargo+"T");
        }
    }    
}

package prj6;

public class PasVehi extends Vehicle { //coach class
    
    public PasVehi(String name, double rental, int passenger ){
        super(name, rental, passenger,0); //call father consturctor with 0 cargo
    }
}

package prj6;

public class CargoVehi extends Vehicle { //truck class
    
    public CargoVehi(String name,double rental,int cargo){
        super(name,rental,0,cargo); //call the father constructor with 0 passenger
    }
}

package prj6;

public class PasCargoVehi extends Vehicle { //pickup class

    public PasCargoVehi(String name,double rental,int passenger,int cargo){
        super(name, rental,passenger,cargo); //call father constructor
    }    

}

package prj6;
import java.util.Scanner;

public class RenVehi{
    //boolean renFlag;
    public void welMsg(){  //print welcome message
        System.out.println("Welcome to XXX rental system!");
        System.out.println();
    }    
    
    public void disHead(){ //print the titles for both system and vehicles
        System.out.println("Price list of XXX rental system");
        System.out.println("Number\t"+"Model\t"+"Price\t\t"+"Capacity");
    }
    
    public void disQuit(){ //print quit message
        System.out.println("You already quit the XXX rental system");
    }
    
   public int[] getVehicleID(int totalNum){  //get the array of ID for those selected vehicles
        Scanner input = new Scanner(System.in);
        //int numVehi;
        System.out.println("How many vehicles are you going to rent?(1-"+totalNum+")");
        
        int numVehi=input.nextInt();//the number should between 1 and the value of all availble vehicle        
        boolean inputFlag = false;
        do {
            try{                
                checkInput(numVehi,totalNum);
                inputFlag = true;
            }catch (InputInvalidException e){
                System.out.println(e);                
                numVehi=input.nextInt();
            }
        }while (inputFlag==false);
        
        int ID[] = new int[numVehi];        
        inputFlag = false;
        for (int j=0;j<numVehi;j++){            
            System.out.println("Please input the vehicle's ID(1-"+totalNum+")");
            ID[j]=input.nextInt();
            
            do{
                try{
                    checkInput(ID[j],totalNum);
                    inputFlag = true;
                }catch (InputInvalidException e){
                    System.out.println(e);
                    ID[j]=input.nextInt();
                }
            }while (inputFlag==false);

                        
        }
        return ID;
    }
    
    public void checkInput(int id, int max) throws InputInvalidException{
        if ((id>max) || (id<1)){            
            throw new InputInvalidException(max);
        }
            
}    
    public int getDays(){ //get the days that customer want to rent
        Scanner input = new Scanner(System.in);
        int days;
        
        System.out.println("Please input the days(>0):");
        days = input.nextInt();
        while (days<1){ //days should be positive number
            System.out.println("Invalid days, please try again");
            System.out.println("Please input the days(>0):");
            days=input.nextInt();
        }
        return(days);
    }
    
    public void displayBill(Vehicle[] v, int[] id, int days){ //print all the names and capacity of selected vehicles, and calculated the total rent
        double totalAmount=0; //total rent
        int totalPassenger=0, totalCargo=0; //total capacity for passenger and cargo
        String vPasName[]=new String[id.length]; //store all the names of selected coach
        String vCargoName[]=new String[id.length]; //store all the names of selected truck
        int j;
        int passNum=0,cargoNum=0; //the number of selected coach, and truck respectively
        
        
        for (int i=0;i<id.length;i++){
            j = id[i]-1; //the subscript of vehicle array should be the printed number showing on the menu minus 1
            totalAmount = totalAmount+v[j].getRental()*days; //get the total rent
            
            if (v[j] instanceof PasVehi){ //for coach, dealing with the coach way: put name in the coach name array, total number of passengers, counter++
                //String h = v[j].getName();
                vPasName[passNum]=v[j].getName();
                totalPassenger+=v[j].getPassenger();                
                passNum++;
                //flag[i]=1;
            }else if (v[j] instanceof CargoVehi){ //for truck, dealing with the truck way: put name in the truck name array, total capacity, counter++
                vCargoName[cargoNum]=v[j].getName();
                totalCargo+=v[j].getCargo();
                cargoNum++;
            }else if (v[j] instanceof PasCargoVehi) { //for pickup, dealing with both ways: put name both in truck name array and coach name array,
                vPasName[passNum]=v[j].getName();
                vCargoName[cargoNum]=v[j].getName();
                totalPassenger+=v[j].getPassenger();
                totalCargo+=v[j].getCargo();
                passNum++;
                cargoNum++;
            }
        }
        
        if (passNum>=1){ //if there's more than one coach in costomer's choice, print all the vehicles and total capacity
            this.displayVehicle(vPasName, 1, totalPassenger, passNum);            
        }else{
            System.out.println("You didn't choose any vehicle for passenger");//if no coach, print result
        }
        
        if (cargoNum>=1){ //if there's more than one truck in costomer's choice, print all the vehicles and total capacity
            this.displayVehicle(vCargoName, 0, totalCargo, cargoNum);            
        }else{
            System.out.println("You didn't choose any vehicle for cargo"); //if no truck, print the result
        }
        System.out.println("You have to pay $"+totalAmount);//print the total rent
        
    }
    
    public void displayVehicle(String[] vName, int flag, int total, int num){//print all the names of selected vehicle and the total capacity
        if (flag==1){
            System.out.println("the Vehicles for loading passengers are: ");
        }else {
            System.out.println("the Vehicles for loading cargo are: ");
        }
        
        for (int i=0;i<num;i++){
            System.out.print(vName[i]+"\t");
        }
        if (flag==1){
            System.out.println("the total number of loading passenger is "+total);
        }else {
            System.out.println("the total number of loading cargo is "+total+"T");
        }
        
        
    }

}

正在回答

2 回答

刚学了第三季的内容,在代码里加了异常处理,控制车辆数目和序号的输入

0 回复 有任何疑惑可以回复我~

你想指教什么?

0 回复 有任何疑惑可以回复我~
#1

红袖侍读 提问者

代码有何改进处啊o(╯□╰)o
2016-06-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

写完了,对老师讲的面向对象的三个特性确实有了更深的理解,贴上代码,请大神指点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信