交通工具管理
- 交通工具基类
- 汽车类
- 卡车类
- 测试类
交通工具基类
package Vehiclepackage;
public abstract class Vehicle { // 交通工具类作为抽象类
private String brand; // 商标
private String color; // 颜色
private int product_year; // 出产年
public Vehicle(String brand, String color, int product_year) {
this.brand = brand;
this.color = color;
this.product_year = product_year;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getProduct_year() {
return product_year;
}
public void setProduct_year(int product_year) {
this.product_year = product_year;
}
public abstract String toString(); // 抽象方法toString,小汽车类和卡车类用于重载方法,直接输出类对象,调用toString()方法
}
汽车类
package Vehiclepackage;
public class Car extends Vehicle{ // 小汽车类继承交通工具类
private int busload; // 载客量
private String carriage;// 车厢数(2厢或者3厢,用String类型表示)
public Car(String brand, String color, int factory_year, int busload, String carriage) {
super(brand, color, factory_year); // 调用父类的构造函数
this.busload = busload;
this.carriage = carriage;
}
public int getBusload() {
return busload;
}
public void setBusload(int busload) {
this.busload = busload;
}
public String getCarriage() {
return carriage;
}
public void setCarriage(String carriage) {
this.carriage = carriage;
}
@Override
public String toString() { // 对toString方法进行重载,便于输出
return String.format
("小汽车,品牌:%s 颜色:%s 出产年份:%d 载客量:%d人 厢数:%s",getBrand(),getColor(),getProduct_year(),getBusload(),getCarriage());
}
}
卡车类
package Vehiclepackage;
public class Truck extends Vehicle { // 卡车类继承交通工具类
private double load_capacity; // 载重量(单位:吨)
public Truck(String brand, String color, int product_year, double load_capacity) {
super(brand, color, product_year);
this.load_capacity = load_capacity;
}
public double getLoad_capacity() {
return load_capacity;
}
public void setLoad_capacity(double load_capacity) {
this.load_capacity = load_capacity;
}
@Override
public String toString() { // 对toString方法的重载
return String.format("卡车,品牌:%s 颜色:%s 出产年份:%d 载重量:%.1f吨", getBrand(), getColor(), getProduct_year(),
getLoad_capacity());
}
}
测试类
package Vehiclepackage;
import java.util.Scanner; // 导入Scanner类,用于输入参数
public class VehicleTest {
private static Scanner input = new Scanner(System.in);// input作为Scanner类的对象
private static Vehicle[] vehicles = new Vehicle[100];// 以交通工具类为类型的数组
private static int vehicles_number = 0; // 记录当前存有的车辆数
public static void Create(String[] arr) {//新增车辆
if (arr[0].equals("小汽车")) {
if (arr.length == 6) {
if (arr[3].matches("[1-9][0-9]?")) // 对载客量的输入进行判断
{
if (arr[4].matches("[0-9]{4}")) // 对出产年的输入进行判断
{
if (arr[5].equals("2厢") || arr[5].equals("3厢")) {
vehicles_number++; // 当前车辆数量增加1
vehicles[vehicles_number] = new Car(arr[1], arr[2], Integer.parseInt(arr[4]), Integer.parseInt(arr[3]), arr[5]);
System.out.println("创建成功\n"); // 创建完成的提示信息
System.out.println(vehicles[vehicles_number]);//自动调用toString()方法
System.out.println();
return;
} else {
System.out.println("第六个应为2厢或3厢"); // 错误提示
}
} else {
System.out.println("第五个参数为出厂年份,应为四位整数"); // 错误提示
}
} else {
System.out.println("第四个参数为载客量,应为1-20之间的整数"); // 错误提示
}
} else {
System.out.println("参数的数目不正确,小汽车后应有五项参数");
}
System.out.println("\n创建不成功\n\n"); // 此处输出创建失败的提示信息
} else if (arr[0].equals("卡车")) {
if (arr.length == 5) {
if (arr[3].matches("[0-9.]+")) // 对载重量的输入进行判断
{
if (arr[4].matches("[0-9]{4}"))// 对出产年的输入进行判断
{
vehicles_number++; // 当前车辆数量增加1
vehicles[vehicles_number] = new Truck(arr[1], arr[2], Integer.parseInt(arr[4]), Double.parseDouble(arr[3]));
System.out.println("创建成功\n"); // 创建完成的提示信息
System.out.println(vehicles[vehicles_number]);
System.out.println();
return;
} else {
System.out.println("第五个参数为出厂年份,应为四位整数");// 错误提示
}
} else {
System.out.println("第四个参数为载重量,应为整数或小数");// 错误提示
}
} else {
System.out.println("参数的数目不正确,卡车后应有四项参数");
}
System.out.println("\n创建不成功\n\n"); // 此处输出创建失败的提示信息
} else
System.out.println("第一个应为小汽车或者卡车");
}
public static void Search(String[] arr)//查找车辆
{
int numbers = 0; // 记录符合要求的车辆数
Vehicle[] temp = new Vehicle[100]; // 存放符合要求的车辆对象
if (arr.length == 4) // 检查是否是输入了4个参数
{
for (int i = 1; i <= vehicles_number; i++) {
if (
((arr[0].equals("null") || (arr[0].equals("小汽车") && vehicles[i] instanceof Car) || (arr[0].equals("卡车") && vehicles[i] instanceof Truck)))//判断车辆类型是否符合条件
&& (arr[1].equals("null") || arr[1].equals(vehicles[i].getBrand()))//判断品牌是否符合条件
&& (arr[2].equals("null") || arr[2].equals(vehicles[i].getColor()))//判断颜色是否符合条件
&& (arr[3].equals("null") || (Integer.parseInt(arr[3])) == (vehicles[i].getProduct_year()))//判断出厂年份是否符合条件
)
{
numbers++;
temp[numbers] = vehicles[i];
}
}
if (numbers > 0) // 判断是否有符合要求的车辆
{
System.out.printf("搜索到%d辆车,信息如下:\n", numbers);
for (int i = 1; i <= numbers; i++) {
System.out.println(temp[i].toString());
}
} else {
System.out.println("没有搜索到相应的交通工具");
}
}
else System.out.println("输入的参数数量不匹配,应输入四项参数");
}
public static void Menu() {//菜单函数实现与用户的交互,并作出相应的操作
boolean go = true;
while (go == true) {
System.out.printf("%n请输入对应输入进行相应菜单操作:%n" + "1. 新增车辆%n" + "2. 查询车辆%n" + "3. 列出所有车辆%n"
+ "4. 结束程序%n");
String ch;
ch = input.nextLine();// 以回车作为界定符
switch (ch) {
case "1": {
while (true) // 直到输入end才break
{
System.out.println(
"请输入车辆信息,示例:\n" + " 小汽车 丰田 红色 4 2007 2厢\n" + " 卡车 雷诺 红色 3.5 2008\n" + "结束新增,请输入end");
String vehicle_information = input.nextLine();
if (vehicle_information.equals("end") == true)// 输入end则跳出循环
break;
String[] arr = vehicle_information.split("[ ]+");// 以空格分隔字符串
Create(arr);
}
}
break;
case "2": {
while (true) {
System.out.println("请按照“类型 商标 颜色 出产年”的顺序输入条件," + "若条件为空用“null”代替,2个示例:\n" + " 小汽车 丰田 红色 2007\n"
+ " null 丰田 null null\n" + "输入end返回上级菜单");
String vehicle_information = input.nextLine();
if (vehicle_information.equals("end") == true)// 输入end则跳出循环
break;
String[] arr = vehicle_information.split("[ ]+");// 以空格分隔字符串
Search(arr);
}
}
break;
case "3": {
System.out.printf("目前有%d辆车,信息如下:\n", vehicles_number);
for (int i = 1; i <= vehicles_number; i++) {
System.out.println(i + ": " + vehicles[i].toString());
}
}
break;
case "4":
System.out.println(" 已成功退出程序");
go = false;
break;
default:
System.out.println("请输入1-4的整数");
}
}
}
public static void main(String[] args) {//主函数
Menu();
}
}