import java.awt.*; import java.util.ArrayList; import javax.swing.*; class Vehicle { protected String brand; protected String model; protected int year; protected String country; protected String color; public Vehicle(String brand, String model, String color, int year, String country) { this.brand = brand; this.model = model; this.color = color; this.year = year; this.country = country; } public String displayInfo() { return "Brand: " + brand + ", Model: " + model + ", color: " + color + ", Year: " + year + ", country: " + country; } } class Car extends Vehicle { private int numberOfDoors; private boolean hasAirConditioning; private double power; private String sasman; public Car(String brand, String model, String color, int year, String country, int numberOfDoors, boolean hasAirConditioning, double power, String sasman) { super(brand, model, color, year, country); this.numberOfDoors = numberOfDoors; this.hasAirConditioning = hasAirConditioning; this.power = power; this.sasman = sasman; } public void drive() { System.out.println("The car is being driven!"); } // KAINOURGIO public void openSunroof() { System.out.println("The sunroof is now open!"); } @Override public String displayInfo() { return super.displayInfo() + "\n" + "Doors: " + numberOfDoors + ", Air Conditioning: " + hasAirConditioning + "\n" + "Sasman: " + sasman + ", Horsepower: " + power; } // Νέα μέθοδος για εμφάνιση αυτοκινήτων με υποδύναμη > 250 public static String displayHighPowerCars(Car[] cars) { StringBuilder sb = new StringBuilder("\nCars with power > 250:\n"); int index = 1; for (Car car : cars) { if (car.power > 250) { sb.append("Car ").append(index).append(":\n"); sb.append(car.displayInfo()).append("\n"); index++; } } return sb.toString(); } } class Truck extends Vehicle { private int loadCapacity; // σε τόνους private double power; private String sasman; public Truck(String brand, String model, String color, int year, String country, int loadCapacity, double power, String sasman) { super(brand, model, color, year, country); this.loadCapacity = loadCapacity; this.power = power; this.sasman = sasman; } public void loadCargo() { System.out.println("The truck is loading cargo up to " + loadCapacity + " tons!"); } // KAINOURGIO public void unloadCargo() { System.out.println("The truck is unloading cargo!"); } @Override public String displayInfo() { return super.displayInfo() + "\n" + "Load Capacity: " + loadCapacity + " tons\n" + "Sasman: " + sasman + ", Horsepower: " + power; } // Νέα μέθοδος για εμφάνιση φορτηγών με χωρητικότητα > 1000 κιλά (1 τόνος) public static String displayHighCapacityTrucks(Truck[] trucks) { StringBuilder sb = new StringBuilder("\nTrucks with load capacity > 1000 kg:\n"); int index = 1; for (Truck truck : trucks) { if (truck.loadCapacity > 1) { sb.append("Truck ").append(index).append(":\n"); sb.append(truck.displayInfo()).append("\n"); index++; } } return sb.toString(); } } class Bike extends Vehicle { private boolean isElectric; public Bike(String brand, String model, String color, int year, String country, boolean isElectric) { super(brand, model, color, year, country); this.isElectric = isElectric; } public void ringBell() { System.out.println("The bike bell rings: Ring! Ring!"); } // KAINOURGIO public void checkTirePressure() { System.out.println("Checking tire pressure... All good!"); } @Override public String displayInfo() { return super.displayInfo() + "\n" + "Electric: " + isElectric; } // Νέα μέθοδος για εμφάνιση ηλεκτρικών ποδηλάτων public static String displayElectricBikes(Bike[] bikes) { StringBuilder sb = new StringBuilder("\nElectric bikes:\n"); int index = 1; for (Bike bike : bikes) { if (bike.isElectric) { sb.append("Bike ").append(index).append(":\n"); sb.append(bike.displayInfo()).append("\n"); index++; } } return sb.toString(); } } class Airplane extends Vehicle { private int totalSeats; private int totalBusiness; private double range; private double price; // Constructor (Optional but useful for initialization) public Airplane(String brand, String model, String color, int year, String country, int totalSeats, int totalBusiness, double range, double price) { super(brand, model, color, year, country); this.totalSeats = totalSeats; this.totalBusiness = totalBusiness; this.range = range; this.price = price; } public double getPrice() { return price; } public double getRange() { return range; } public static Airplane[] searchByPrice(Airplane[] airplanes, boolean ascending) { // We will use bubble sort or selection sort here for simplicity for (int i = 0; i < airplanes.length - 1; i++) { for (int j = 0; j < airplanes.length - 1 - i; j++) { boolean condition = ascending ? airplanes[j].getPrice() > airplanes[j + 1].getPrice() : airplanes[j].getPrice() < airplanes[j + 1].getPrice(); if (condition) { // Swap the elements Airplane temp = airplanes[j]; airplanes[j] = airplanes[j + 1]; airplanes[j + 1] = temp; } } } return airplanes; } public static Airplane[] searchByRange(Airplane[] airplanes, double targetRange) { // Calculate the difference from targetRange for each airplane and store the difference Airplane[] sortedByRange = airplanes.clone(); // Sort based on the absolute difference in range for (int i = 0; i < sortedByRange.length - 1; i++) { for (int j = 0; j < sortedByRange.length - 1 - i; j++) { double diff1 = Math.abs(sortedByRange[j].getRange() - targetRange); double diff2 = Math.abs(sortedByRange[j + 1].getRange() - targetRange); if (diff1 > diff2) { // Swap the elements Airplane temp = sortedByRange[j]; sortedByRange[j] = sortedByRange[j + 1]; sortedByRange[j + 1] = temp; } } } return sortedByRange; } @Override public String displayInfo() { return super.displayInfo() + "\n" + "Total Seats: " + totalSeats + ", Business Seats: " + totalBusiness + "\n" + "Range: " + range + " km, Price: $" + price; } } public class ask14 { private static JFrame frame; private static ArrayList cars = new ArrayList<>(); private static ArrayList trucks = new ArrayList<>(); private static ArrayList bikes = new ArrayList<>(); private static ArrayList airplanes = new ArrayList<>(); private static void createAndShowGUI() { frame = new JFrame("Vehicle Management System"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 600); JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("Cars", createCarPanel()); tabbedPane.addTab("Trucks", createTruckPanel()); tabbedPane.addTab("Bikes", createBikePanel()); tabbedPane.addTab("Airplanes", createAirplanePanel()); frame.add(tabbedPane); frame.setVisible(true); } private static JPanel createCarPanel() { JPanel panel = new JPanel(new BorderLayout()); // Form Panel JPanel formPanel = new JPanel(new GridLayout(0, 2, 5, 5)); JTextField brandField = new JTextField(20); JTextField modelField = new JTextField(20); JTextField colorField = new JTextField(20); JTextField yearField = new JTextField(20); JTextField countryField = new JTextField(20); JTextField doorsField = new JTextField(20); JCheckBox acCheckBox = new JCheckBox("Has Air Conditioning"); JTextField powerField = new JTextField(20); JTextField sasmanField = new JTextField(20); formPanel.add(new JLabel("Brand:")); formPanel.add(brandField); formPanel.add(new JLabel("Model:")); formPanel.add(modelField); formPanel.add(new JLabel("Color:")); formPanel.add(colorField); formPanel.add(new JLabel("Year:")); formPanel.add(yearField); formPanel.add(new JLabel("Country:")); formPanel.add(countryField); formPanel.add(new JLabel("Number of Doors:")); formPanel.add(doorsField); formPanel.add(new JLabel("Power:")); formPanel.add(powerField); formPanel.add(new JLabel("Sasman:")); formPanel.add(sasmanField); formPanel.add(acCheckBox); // Button Panel JPanel buttonPanel = new JPanel(); JButton addButton = new JButton("Add Car"); JButton displayButton = new JButton("Display All Cars"); JButton displayHighPowerButton = new JButton("Display High Power Cars"); buttonPanel.add(addButton); buttonPanel.add(displayButton); buttonPanel.add(displayHighPowerButton); // Display Area JTextArea displayArea = new JTextArea(10, 40); displayArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(displayArea); // Add action listeners addButton.addActionListener(e -> { try { Car car = new Car( brandField.getText(), modelField.getText(), colorField.getText(), Integer.parseInt(yearField.getText()), countryField.getText(), Integer.parseInt(doorsField.getText()), acCheckBox.isSelected(), Double.parseDouble(powerField.getText()), sasmanField.getText() ); cars.add(car); displayArea.append("Added new car: " + car.brand + " " + car.model + "\n"); // Clear fields brandField.setText(""); modelField.setText(""); colorField.setText(""); yearField.setText(""); countryField.setText(""); doorsField.setText(""); powerField.setText(""); sasmanField.setText(""); acCheckBox.setSelected(false); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(frame, "Please enter valid numbers for year, doors, and power."); } }); displayButton.addActionListener(e -> { displayArea.setText(""); for (Car car : cars) { displayArea.append("-------------------\n"); displayArea.append(car.displayInfo()); displayArea.append("\n"); } }); displayHighPowerButton.addActionListener(e -> { displayArea.setText(""); displayArea.append(Car.displayHighPowerCars(cars.toArray(new Car[0]))); }); // Layout panel.add(formPanel, BorderLayout.NORTH); panel.add(buttonPanel, BorderLayout.CENTER); panel.add(scrollPane, BorderLayout.SOUTH); return panel; } private static JPanel createTruckPanel() { JPanel panel = new JPanel(new BorderLayout()); // Form Panel JPanel formPanel = new JPanel(new GridLayout(0, 2, 5, 5)); JTextField brandField = new JTextField(20); JTextField modelField = new JTextField(20); JTextField colorField = new JTextField(20); JTextField yearField = new JTextField(20); JTextField countryField = new JTextField(20); JTextField loadCapacityField = new JTextField(20); JTextField powerField = new JTextField(20); JTextField sasmanField = new JTextField(20); formPanel.add(new JLabel("Brand:")); formPanel.add(brandField); formPanel.add(new JLabel("Model:")); formPanel.add(modelField); formPanel.add(new JLabel("Color:")); formPanel.add(colorField); formPanel.add(new JLabel("Year:")); formPanel.add(yearField); formPanel.add(new JLabel("Country:")); formPanel.add(countryField); formPanel.add(new JLabel("Load Capacity (tons):")); formPanel.add(loadCapacityField); formPanel.add(new JLabel("Power:")); formPanel.add(powerField); formPanel.add(new JLabel("Sasman:")); formPanel.add(sasmanField); // Button Panel JPanel buttonPanel = new JPanel(); JButton addButton = new JButton("Add Truck"); JButton displayButton = new JButton("Display All Trucks"); JButton displayHighCapacityButton = new JButton("Display High Capacity Trucks"); buttonPanel.add(addButton); buttonPanel.add(displayButton); buttonPanel.add(displayHighCapacityButton); // Display Area JTextArea displayArea = new JTextArea(10, 40); displayArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(displayArea); // Add action listeners addButton.addActionListener(e -> { try { Truck truck = new Truck( brandField.getText(), modelField.getText(), colorField.getText(), Integer.parseInt(yearField.getText()), countryField.getText(), Integer.parseInt(loadCapacityField.getText()), Double.parseDouble(powerField.getText()), sasmanField.getText() ); trucks.add(truck); displayArea.append("Added new truck: " + truck.brand + " " + truck.model + "\n"); // Clear fields brandField.setText(""); modelField.setText(""); colorField.setText(""); yearField.setText(""); countryField.setText(""); loadCapacityField.setText(""); powerField.setText(""); sasmanField.setText(""); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(frame, "Please enter valid numbers for year, load capacity, and power."); } }); displayButton.addActionListener(e -> { displayArea.setText(""); for (Truck truck : trucks) { displayArea.append("-------------------\n"); displayArea.append(truck.displayInfo()); displayArea.append("\n"); } }); displayHighCapacityButton.addActionListener(e -> { displayArea.setText(""); displayArea.append(Truck.displayHighCapacityTrucks(trucks.toArray(new Truck[0]))); }); // Layout panel.add(formPanel, BorderLayout.NORTH); panel.add(buttonPanel, BorderLayout.CENTER); panel.add(scrollPane, BorderLayout.SOUTH); return panel; } private static JPanel createBikePanel() { JPanel panel = new JPanel(new BorderLayout()); // Form Panel JPanel formPanel = new JPanel(new GridLayout(0, 2, 5, 5)); JTextField brandField = new JTextField(20); JTextField modelField = new JTextField(20); JTextField colorField = new JTextField(20); JTextField yearField = new JTextField(20); JTextField countryField = new JTextField(20); JCheckBox electricCheckBox = new JCheckBox("Is Electric"); formPanel.add(new JLabel("Brand:")); formPanel.add(brandField); formPanel.add(new JLabel("Model:")); formPanel.add(modelField); formPanel.add(new JLabel("Color:")); formPanel.add(colorField); formPanel.add(new JLabel("Year:")); formPanel.add(yearField); formPanel.add(new JLabel("Country:")); formPanel.add(countryField); formPanel.add(electricCheckBox); // Button Panel JPanel buttonPanel = new JPanel(); JButton addButton = new JButton("Add Bike"); JButton displayButton = new JButton("Display All Bikes"); JButton displayElectricButton = new JButton("Display Electric Bikes"); buttonPanel.add(addButton); buttonPanel.add(displayButton); buttonPanel.add(displayElectricButton); // Display Area JTextArea displayArea = new JTextArea(10, 40); displayArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(displayArea); // Add action listeners addButton.addActionListener(e -> { try { Bike bike = new Bike( brandField.getText(), modelField.getText(), colorField.getText(), Integer.parseInt(yearField.getText()), countryField.getText(), electricCheckBox.isSelected() ); bikes.add(bike); displayArea.append("Added new bike: " + bike.brand + " " + bike.model + "\n"); // Clear fields brandField.setText(""); modelField.setText(""); colorField.setText(""); yearField.setText(""); countryField.setText(""); electricCheckBox.setSelected(false); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(frame, "Please enter a valid number for year."); } }); displayButton.addActionListener(e -> { displayArea.setText(""); for (Bike bike : bikes) { displayArea.append("-------------------\n"); displayArea.append(bike.displayInfo()); displayArea.append("\n"); } }); displayElectricButton.addActionListener(e -> { displayArea.setText(""); displayArea.append(Bike.displayElectricBikes(bikes.toArray(new Bike[0]))); }); // Layout panel.add(formPanel, BorderLayout.NORTH); panel.add(buttonPanel, BorderLayout.CENTER); panel.add(scrollPane, BorderLayout.SOUTH); return panel; } private static JPanel createAirplanePanel() { JPanel panel = new JPanel(new BorderLayout()); // Form Panel JPanel formPanel = new JPanel(new GridLayout(0, 2, 5, 5)); JTextField brandField = new JTextField(20); JTextField modelField = new JTextField(20); JTextField colorField = new JTextField(20); JTextField yearField = new JTextField(20); JTextField countryField = new JTextField(20); JTextField seatsField = new JTextField(20); JTextField businessSeatsField = new JTextField(20); JTextField rangeField = new JTextField(20); JTextField priceField = new JTextField(20); formPanel.add(new JLabel("Brand:")); formPanel.add(brandField); formPanel.add(new JLabel("Model:")); formPanel.add(modelField); formPanel.add(new JLabel("Color:")); formPanel.add(colorField); formPanel.add(new JLabel("Year:")); formPanel.add(yearField); formPanel.add(new JLabel("Country:")); formPanel.add(countryField); formPanel.add(new JLabel("Total Seats:")); formPanel.add(seatsField); formPanel.add(new JLabel("Business Seats:")); formPanel.add(businessSeatsField); formPanel.add(new JLabel("Range:")); formPanel.add(rangeField); formPanel.add(new JLabel("Price:")); formPanel.add(priceField); // Button Panel JPanel buttonPanel = new JPanel(); JButton addButton = new JButton("Add Airplane"); JButton displayButton = new JButton("Display All Airplanes"); JButton searchByPriceButton = new JButton("Search by Price"); JButton searchByRangeButton = new JButton("Search by Range"); buttonPanel.add(addButton); buttonPanel.add(displayButton); buttonPanel.add(searchByPriceButton); buttonPanel.add(searchByRangeButton); // Display Area JTextArea displayArea = new JTextArea(10, 40); displayArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(displayArea); // Add action listeners addButton.addActionListener(e -> { try { Airplane airplane = new Airplane( brandField.getText(), modelField.getText(), colorField.getText(), Integer.parseInt(yearField.getText()), countryField.getText(), Integer.parseInt(seatsField.getText()), Integer.parseInt(businessSeatsField.getText()), Double.parseDouble(rangeField.getText()), Double.parseDouble(priceField.getText()) ); airplanes.add(airplane); displayArea.append("Added new airplane: " + airplane.brand + " " + airplane.model + "\n"); // Clear fields brandField.setText(""); modelField.setText(""); colorField.setText(""); yearField.setText(""); countryField.setText(""); seatsField.setText(""); businessSeatsField.setText(""); rangeField.setText(""); priceField.setText(""); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(frame, "Please enter valid numbers for year, seats, range, and price."); } }); displayButton.addActionListener(e -> { displayArea.setText(""); for (Airplane airplane : airplanes) { displayArea.append("-------------------\n"); displayArea.append(airplane.displayInfo()); displayArea.append("\n"); } }); searchByPriceButton.addActionListener(e -> { String input = JOptionPane.showInputDialog(frame, "Enter 'asc' for ascending or 'desc' for descending order:"); boolean ascending = "asc".equalsIgnoreCase(input); Airplane[] sortedAirplanes = Airplane.searchByPrice(airplanes.toArray(new Airplane[0]), ascending); displayArea.setText("Airplanes sorted by price (" + (ascending ? "ascending" : "descending") + "):\n"); for (Airplane airplane : sortedAirplanes) { displayArea.append("-------------------\n"); displayArea.append(airplane.displayInfo()); displayArea.append("\n"); } }); searchByRangeButton.addActionListener(e -> { try { double targetRange = Double.parseDouble(JOptionPane.showInputDialog(frame, "Enter target range:")); Airplane[] sortedByRange = Airplane.searchByRange(airplanes.toArray(new Airplane[0]), targetRange); displayArea.setText("Airplanes sorted by range closest to " + targetRange + ":\n"); for (Airplane airplane : sortedByRange) { displayArea.append("-------------------\n"); displayArea.append(airplane.displayInfo()); displayArea.append("\n"); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(frame, "Please enter a valid number for range."); } }); // Layout panel.add(formPanel, BorderLayout.NORTH); panel.add(buttonPanel, BorderLayout.CENTER); panel.add(scrollPane, BorderLayout.SOUTH); return panel; } public static void main(String[] args) { // Run the GUI on the Event Dispatch Thread SwingUtilities.invokeLater(() -> createAndShowGUI()); } }