Locadora de veículos

Bom dia Pessoal, eu estou procurando aprender um pouco mais de JAVA, e preciso implementar um cód de uma locadora de veículos, no qual eu já consegui cadastrar veículos populares, médios e grandes, e também listar todos os veículos cadastrados.

Porém não faço ideia de como eu poderia fazer as duas ultimas partes:
1° Pesquisar automóveis informando valor máximo pretendido para a diária, e efetuar uma locação

  • o sistema mostra uma lista dos automóveis disponíveis considerando o valor máximo informado
  • o usuário seleciona um deles
  • o usuário informa o número de dias de locação e a data atual.

2° Devolver um automóvel informando a data da devolução, e o sistema deve informar o valor a ser pago

também preciso usar o método Tostring

segue meu cód:

classe principal:

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Principal {

public static void main(String[] args) {

int op;


String placa, capacidade, anocarro, valordia, placa1, capacidade1, anocarro1, valordia1, placa2, capacidade2, anocarro2, valordia2  ;
Scanner sc = new Scanner(System.in);        

ArrayList<Popular> populares = new ArrayList<Popular>();//Array q armazena os carros populares
ArrayList<Medio> medios = new ArrayList<Medio>();//Array q armazena os carros médios   
ArrayList<Grande> grandes = new ArrayList<Grande>();//Array q armazena os carros grandes



do{ //repete o menu até q seja selecionado a opção 10 - sair
    System.out.println("-------------------------");
    System.out.println("MENU PRINCIPAL LOCADORA DE VEICULOS");
    System.out.println("-------------------------");
    System.out.println("1 - CADASTRAR CARROS POPULARES");
    System.out.println("2 - CADASTRAR CARROS MEDIOS");
    System.out.println("3 - CADASTRAR CARROS GRANDES");
    System.out.println("4 - LISTAR TODOS OS CARROS CADASTRADOS NA LOCADORA DE VEICULOS");
    System.out.println("5 - Pesquisar automóveis informando valor máximo pretendido para a diária, e efetuar uma locação");
    System.out.println("6 - Devolver automóvel informando a data da devolução");
    System.out.println("10 - SAIR");
    System.out.println("Digite sua opção: ");
    op = sc.nextInt();
        
    switch (op) {
    
    case 1:
        Popular p1 = new Popular(); //buffer de popular
        System.out.println("Digite a placa do carro popular: ");
        System.out.flush(); //limpa o buffer do teclado
        placa = sc.next();
        p1.setPlaca(placa);
         
            System.out.println("Digite a capacidade de pessoas no carro popular: ");
        System.out.flush();
        capacidade = sc.next();
        p1.setCapacidade(capacidade);
        
        System.out.println("Digite o ano do carro popular: ");
        System.out.flush();
        anocarro = sc.next();
        p1.setAnocarro(anocarro);
        
        System.out.println("valor base da diária de locação do carro popular: ");
        System.out.flush();
        valordia = sc.next();
        p1.setValordia(valordia);
             
        populares.add(p1);
            
        break;
        
    case 2:
    Medio p2 = new Medio(); //buffer de Medio
        System.out.println("Digite a placa do carro médio: ");
        System.out.flush(); //limpa o buffer do teclado
        placa1 = sc.next();
        p2.setPlaca1(placa1);
         
            System.out.println("Digite a capacidade de pessoas no carro médio: ");
        System.out.flush();
        capacidade1 = sc.next();
        p2.setCapacidade1(capacidade1);
        
        System.out.println("Digite o ano do carro médio: ");
        System.out.flush();
        anocarro1 = sc.next();
        p2.setAnocarro1(anocarro1);
        
        System.out.println("valor base da diária de locação do carro médio: ");
        System.out.flush();
        valordia1 = sc.next();
        p2.setValordia1(valordia1);
             
        medios.add(p2);
            
        break;
    case 3:
    Grande p3 = new Grande(); //buffer de Grande
        System.out.println("Digite a placa do carro grande: ");
        System.out.flush(); //limpa o buffer do teclado
        placa2 = sc.next();
        p3.setPlaca2(placa2);
         
        System.out.println("Digite a capacidade de pessoas no carro grande: ");
        System.out.flush();
        capacidade2 = sc.next();
        p3.setCapacidade2(capacidade2);
        
        System.out.println("Digite o ano do carro grande: ");
        System.out.flush();
        anocarro2 = sc.next();
        p3.setAnocarro2(anocarro2);
        
        System.out.println("valor base da diária de locação do carro grande: ");
        System.out.flush();
        valordia2 = sc.next();
        p3.setValordia2(valordia2);
             
        grandes.add(p3);
            
        break;
        

    
    case 4:
     for (Popular popular : populares) {
  System.out.println(" ");
  System.out.printf("placa do carro popular: ");          
  System.out.println(popular.getPlaca());
  System.out.printf("capacidade de pessoas no carro popular: ");
  System.out.println(popular.getCapacidade());
  System.out.printf("ano do carro popular: ");
  System.out.println(popular.getAnocarro());
        System.out.printf("Valor da diária do carro popular: ");
  System.out.println(popular.getValordia());
  System.out.println(" ");
}
      for (Medio medio : medios) {
  System.out.println(" ");
  System.out.printf("placa do carro médio: ");          
  System.out.println(medio.getPlaca1());
  System.out.printf("capacidade de pessoas no carro médio: ");
  System.out.println(medio.getCapacidade1());
  System.out.printf("ano do carro médio: ");
  System.out.println(medio.getAnocarro1());
  System.out.printf("Valor da diária do carro médio: ");
  System.out.println(medio.getValordia());
  System.out.println(" ");
}
    for (Grande grande : grandes) {
  System.out.println(" ");
  System.out.printf("placa do carro popular: ");          
  System.out.println(grande.getPlaca2());
  System.out.printf("capacidade de pessoas no carro popular: ");
  System.out.println(grande.getCapacidade2());
  System.out.printf("ano do carro popular: ");
  System.out.println(grande.getAnocarro2());
        System.out.printf("Valor da diária do carro popular: ");
  System.out.println(grande.getValordia2());
  System.out.println(" ");
}
    
    break;
    
    case 5://Pesquisar automóveis informando valor máximo pretendido para a diária, e efetuar uma locação
    break;
    
    case 6: //Devolver automóvel informando a data da devolução
    break;
    

    case 10:
        System.out.println("Saindo..");
        System.exit(0);
        break;
    
    default:
        System.out.println("Opção inválida!");
        
        break;
        
    }           
}while (op!=10);    

}
}

classe carro popular:

public class Popular {

private String placa;
private String capacidade;
private String anocarro;
private String valordia;

public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public String getCapacidade() {
return capacidade;
}
public void setCapacidade(String capacidade2) {
this.capacidade = capacidade2;
}
public String getAnocarro() {
return anocarro;
}
public void setAnocarro(String anocarro) {
this.anocarro = anocarro;
}
public String getValordia() {
return valordia;
}
public void setValordia(String valordia) {
this.valordia = valordia;
}

}

classe carro médio:

public class Medio {

private String placa1;
private String capacidade1;
private String anocarro1;
private String valordia1;

public String getPlaca1() {
return placa1;
}
public void setPlaca1(String placa1) {
this.placa1 = placa1;
}
public String getCapacidade1() {
return capacidade1;
}
public void setCapacidade1(String capacidade21) {
this.capacidade1 = capacidade21;
}
public String getAnocarro1() {
return anocarro1;
}
public void setAnocarro1(String anocarro1) {
this.anocarro1 = anocarro1;
}
public String getValordia() {
return valordia1;
}
public void setValordia1(String valordia1) {
this.valordia1 = valordia1;
}

}

classe carro grande:

public class Grande {

private String placa2;
private String capacidade2;
private String anocarro2;
private String valordia2;

public String getPlaca2() {
return placa2;
}
public void setPlaca2(String placa2) {
this.placa2 = placa2;
}
public String getCapacidade2() {
return capacidade2;
}
public void setCapacidade2(String capacidade22) {
this.capacidade2 = capacidade22;
}
public String getAnocarro2() {
return anocarro2;
}
public void setAnocarro2(String anocarro2) {
this.anocarro2 = anocarro2;
}
public String getValordia2() {
return valordia2;
}
public void setValordia2(String valordia2) {
this.valordia2 = valordia2;
}

}

Se alguém conseguir me ajudar eu agradeço!