一、项目背景
编写一个控制台版的“答答”租车系统
功能:
展示所有可租车辆
选择车型,租车量
展示租车清单,包含:总金额,总载货量以及车型,总载客量以及车型
二、项目代码
父类:Car类
//父类:车类 public class Car { //序号 private String id; //汽车名称 private String name; //租金 private int rent; public Car(String id, String name, int rent) { this.id = id; this.name = name; this.rent = rent; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getRent() { return rent; } public void setRent(int rent) { this.rent = rent; } }
子类:客车类(只能载客)
//客车类 public class PassengerCar extends Car{ //载客量 private int busload; public PassengerCar(String id, String name, int rent, int busload) { super(id, name, rent); this.busload=busload; } public int getBusload() { return busload; } public void setBusload(int busload) { this.busload = busload; } @Override public String toString() { return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载人:"+getBusload(); } }
子类:货车类(只能载货)
//载货车 public class Truck extends Car{ //载货量 private int loadage; public Truck(String id, String name, int rent,int loadage) { super(id, name, rent); this.loadage=loadage; } public int getLoadage() { return loadage; } public void setLoadage(int loadage) { this.loadage = loadage; } @Override public String toString() { return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载货:"+getLoadage(); } }
子类:皮卡类(既可载货,也可载客)
//载客载货车 public class PickUp extends Car{ //载客量 private int busload; //载货量 private int loadage; public PickUp(String id, String name, int rent,int busload,int loadage) { super(id, name, rent); this.busload=busload; this.loadage=loadage; } public int getBusload() { return busload; } public void setBusload(int busload) { this.busload = busload; } public int getLoadage() { return loadage; } public void setLoadage(int loadage) { this.loadage = loadage; } @Override public String toString() { return getId()+"\t"+getName()+"\t"+getRent()+"元/天\t载人:"+getBusload()+"\t载货:"+getLoadage(); } }
测试类:
import java.util.Scanner; public class DaDaCarRentalSystem { static Scanner sc = new Scanner(System.in); //租金 static int money = 0; //总载客量 static int passTotal = 0; //总载货量 static int goodTotal = 0; //客车名 static String passName = ""; //货车名 static String goodName = ""; public static void main(String[] args) { Car[] cars = { new PassengerCar("1", "奥迪A4", 500, 4), new PassengerCar("2", "马自达6", 400, 4), new PickUp("3", "皮卡雪6", 450, 4, 2), new PassengerCar("4", "金龙 ", 800, 20), new Truck("5", "松花江", 400, 4), new Truck("6", "依维柯", 1000, 20) }; System.out.println("*****欢迎使用答答租车系统*****"); System.out.println("您是否要租车:1是 0否"); int num = sc.nextInt(); if (num == 1) { System.out.println("您可租车的类型及其价目表:"); System.out.println("序号\t汽车名称\t租金\t容量"); for (int i = 0; i < cars.length; i++) { System.out.println(cars[i].toString()); } System.out.println("请输入您要租车的数量:"); int rentNum = sc.nextInt(); int[] carsRent = new int[rentNum]; for (int i = 0; i < rentNum; i++) { System.out.println("请输入第" + (i + 1) + "辆车的的序号:"); int sNum = sc.nextInt(); carsRent[i] = sNum; } System.out.println("请输入您要租车的天数:"); int day = sc.nextInt(); for (int i = 0; i < rentNum; i++) { money += cars[carsRent[i] - 1].getRent(); if (cars[carsRent[i] - 1] instanceof PassengerCar) { passTotal += ((PassengerCar) cars[carsRent[i] - 1]).getBusload(); passName += cars[carsRent[i] - 1].getName() + "\t"; } if (cars[carsRent[i] - 1] instanceof Truck) { goodTotal += ((Truck) cars[carsRent[i] - 1]).getLoadage(); goodName += cars[carsRent[i] - 1].getName() + "\t"; } if (cars[carsRent[i] - 1] instanceof PickUp) { passTotal += ((PickUp) cars[carsRent[i] - 1]).getBusload(); goodTotal += ((PickUp) cars[carsRent[i] - 1]).getLoadage(); passName += cars[carsRent[i] - 1].getName() + "\t"; goodName += cars[carsRent[i] - 1].getName() + "\t"; } } System.out.println("******消费清单******"); System.out.println("可载客车型:"); System.out.println(passName + "\t" + "客车载客量:" + passTotal); System.out.println("可在载货车型:"); System.out.println(goodName + "\t" + "货车载货量:" + goodTotal); System.out.println("您本次消费总价钱:" + money * day); } else if (num == 0) { System.out.println("感谢您进入本系统,欢迎下次使用!!再见!!!"); return; } } }
运行结果展示:
*****欢迎使用答答租车系统***** 您是否要租车:1是 0否 1 您可租车的类型及其价目表: 序号 汽车名称 租金 容量 1 奥迪A4 500元/天 载人:4 2 马自达6 400元/天 载人:4 3 皮卡雪6 450元/天 载人:4 载货:2吨 4 金龙 800元/天 载人:20 5 松花江 400元/天 载货:4吨 6 依维柯 1000元/天 载货:20吨 请输入您要租车的数量: 3 请输入第1辆车的的序号: 1 请输入第2辆车的的序号: 2 请输入第3辆车的的序号: 3 请输入您要租车的天数: 2 ******消费清单****** 可载客车型: 奥迪A4 马自达6 皮卡雪6 客车载客量:12 可在载货车型: 皮卡雪6 货车载货量:2 您本次消费总价钱:2700 Process finished with exit code 0
三、总结
本次项目主要涉及以下知识:
1.面向对象思想,包括:封装、继承、多态
2.数组的相关知识,包括:定义数组,数组遍历
3.运用Scanner类进行对控制台的输入。
在写这次代码的过程中,整体书写还算思路清晰,就是在计算清单数据的时候卡了很久,一个思路没写完就会冒出其他思路,导致写代码效率有点低,总的来说:这个程序还有很多缺点,集成度有些高,规范上还有很多不足,有待提高,继续加油。