Java交通工具类管理系统

交通工具基类

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();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值