手记

Java入门 第二季 租车系统

欢迎沟通交流@__@

运行效果:


Car.java //车基类
public abstract class Car {
    public String name; //车名
    public int price; //租金 元/天
    public int manCap;//载人
    public int goodsCap;//载货
    public Car(String name, int price) {
        this.name = name;
        this.price = price;
    }
}
MGCar.java //载客载货车
public class MGCar extends Car {
    public MGCar(String name, int price, int manCap, int goodsCap) {
        super(name, price);
        this.manCap = manCap;
        this.goodsCap = goodsCap;
    }
    @Override
    public String toString() {
        return ""+name+"\t   "+price+"元/天\t载人:"+manCap+"人\t载货:"+goodsCap+"吨";
    }
}
ManCar.java //载客车
public class ManCar extends Car {
    public ManCar(String name, int price, int manCap) {
        super(name, price);
        this.manCap = manCap;
    }
    @Override
    public String toString() {
        return ""+name+"\t   "+price+"元/天\t载人:"+manCap+"人\t";
    }
}
GoodsCar.java //载货车
public class GoodsCar extends Car {
    public GoodsCar(String name,int price,int goodsCap){
        super(name,price);
        this.goodsCap = goodsCap;
    }
    @Override
    public String toString() {
        return  ""+name+"\t   "+price+"元/天\t载货:"+goodsCap+"吨\t";
    }
}
CarRentSys.java //租车系统入口
import java.util.Arrays;
import java.util.Scanner;
/**
 * 哒哒租车系统
 * @author Anders
 *
 */
public class CarRentSys {

    public static void main(String[] args) {
        int first = 0;//首次
        int[] rentNum = new int[100];//租车代码
        int rentDays = 0;//租车天数
        Car[] cars = {new ManCar("奥迪A4", 500, 4),new ManCar("马自达6", 400, 4),new MGCar("皮卡雪6", 450, 4, 2),
                new ManCar("金龙", 800, 20),new GoodsCar("松花江", 400, 4),new GoodsCar("依维柯", 1000, 20)};
        if(first == 0){
            System.out.println("~~~~~~~~~~欢迎使用哒哒租车系统~~~~~~~~~~");
        }
        Scanner input = new Scanner(System.in);
        System.out.println("您是否要租车?\t1是\t0否,请输入对应数字:");
        while(first == 0){
            first++;
            String sel = input.next();
            if("1".equals(sel) || "0".equals(sel)){
                if("1".equals(sel)){
                    showProduct(cars);
                    select(input,cars,rentNum);
                    Arrays.sort(rentNum);
                    System.out.println("请输入租车天数:");
                    while(first==1){
                        first++;
                        try{
                            rentDays = input.nextInt();
                        }catch(Exception e){
                            System.out.println("输入有误,请重新输入:");
                            first = 1;
                            input.next();
                        }
                    }
                    printList(rentNum,cars,rentDays);
                }else{
                    System.out.println("谢谢光临,下次再见!");
                    input.close();
                    return;
                }
            }else{
                System.out.println("输入有误,请重新输入:");
                first=0;
            }
        }
        input.close();
    }
    /*
     * 展示车辆
     */
    private static void showProduct(Car[] cars) {
        System.out.println("您可租车的类型及其价目表:\n\r序号\t汽车名称\t       租金\t\t容量");
        for (int i=1;i<=cars.length;i++) {
            System.out.println(i+"\t"+cars[i-1]);
        }
    }
    /*
     * 选择租车数量,类型
     */
    private static void select(Scanner input,int[] rentNum) {
        int first = 0;
        int num = 0;//租车数量
        if(first==0){
            System.out.println("请输入您要租车的数量:");
        }
        try{
            num = input.nextInt();
            first++;
        }catch(Exception e){
            System.out.println("输入有误,请重新输入:");
            first=0;
            select(input,rentNum);
        }
        System.out.println("请选择要租车的序号(1-6):");
        int selNum;
        for(int i=0; i<num; i++){
            System.out.println("请选择第"+(i+1)+"辆车的序号:");
            try{
                selNum = input.nextInt();         
                if(selNum!=1 && selNum!=2 && selNum!=3 && selNum!=4 && selNum!=5 && selNum!=6){
                    System.out.println("输入有误,请重新选择:");
                    i--;
                    continue;
                }
                rentNum[i] = selNum;
            }catch(Exception e){
                System.out.println("输入有误,请重新选择:");
                i--;
                input.next();//如输入a,缓存区会一直保留a,导致死循环,此操作可以解决问题
            }
        }
    }
    /*
     * 打印订单
     */
    private static void printList(int[] rentNum, Car[] cars, int rentDays) {
        int sum = 0;
        int manCapSum = 0;
        int goodsCapSum = 0;
        int selNum = 0;
        int[] counts = new int[cars.length];
        System.out.println("序号\t汽车名称\t       租金\t\t容量\t\t\t数量");
        int i=0;
        for(int r=0;r<rentNum.length;r++){
            selNum = rentNum[r]-1;
            if(selNum!=-1){
                i++;
                sum+=cars[selNum].price;
                if(cars[selNum] instanceof ManCar){
                    manCapSum+=cars[selNum].manCap;
                }else if(cars[selNum] instanceof GoodsCar){
                    goodsCapSum+=cars[selNum].goodsCap;
                }else{
                    goodsCapSum+=cars[selNum].goodsCap;
                    manCapSum+=cars[selNum].manCap;
                }
                if(r<rentNum.length-1 && rentNum[r] == rentNum[r+1]){
                    counts[selNum]++;
                    i--;
                    continue;
                }
                System.out.println(""+i+"\t"+cars[selNum]+"\t\t"+(counts[selNum]+1));
            }
        }
        System.out.println("总载人:"+manCapSum+"人/日\t总载货:"+goodsCapSum+"吨/日\t总价:"+sum*rentDays+"元");
    }
}
18人推荐
随时随地看视频
慕课网APP

热门评论

如果我是用户 我想依维柯就租一天 其他车辆租两天怎么办?我想应该在选择每一辆需要租车序号后面再提示下需要租用该车多少天、会不会更人性化呢?

select()里面用到Car[]了?

第一次做这种小project一脸萌比,看了lz的代码一个半小时才大概弄懂(错误处理超纲了喂)。。干巴爹。。

查看全部评论