Association of several classes in Java

0

The project consists of a management system for a carrier, where an administrator manages trips, and these trips have drivers and trucks.

I used association to relate the classes, but I'm having a hard time finalizing a method of checking the availability of trucks and drivers.

How do I get this information in a method of class Viagem ? How can I "bind" the data of Motorista and Caminhao within a trip?

public class Administrador extends Funcionario{

    private static int codAdministrador=0;
    private String login;
    private String senha;
    int contViagem=0;
    private Viagem []viagem = new Viagem[contViagem];

    public Administrador(String nome, String cpf, String email, double salario, String endereco, String rg,
            int codAdministrador, String login, String senha, int contViagem) {
        super(nome, cpf, email, salario, endereco, rg);
        codAdministrador++;
        this.login = login;
        this.senha = senha;
        this.contViagem=contViagem;
    }   

    public int getCodAdministrador() {
        return codAdministrador;
    }

    public String getLogin() {
        return login;
    }

    public String getSenha() {
        return senha;
    }


    public Viagem planejarViagem(Viagem viagem, Caminhao veiculo, Motorista piloto){
        if(viagem.verificaStatus(veiculo, piloto) == true){
            return viagem;
        }
        return null;
    }

    /*public boolean verificaDisponibilidadeCaminhao(Caminhao veiculo){

        if(veiculo.getStatus() != true){
            return true;
        }
        else{
            return false;
        }

    }

    public boolean verificaDisponibilidadeMotorista(Motorista piloto){
        if(piloto instanceof Motorista){
            Motorista aux = (Motorista) piloto;
            if(aux.getStatus() != true)
                return true;
            else
                return false;
        }
        return false;       
    }*/

    @Override
    public String toString(){
        StringBuilder info = new StringBuilder();

        info.append("\nRelatório de Viagem")
            .append("\nNome do Gerente que emitiu o relatório: "+getNome())
            .append("\nDados da viagem"+viagem.toString());

        return info.toString();
    }

}

public class Motorista extends Funcionario{

    private int codMotorista;
    private boolean status;


    public Motorista(String nome, String cpf, String email, double salario, String endereco, String rg,
            int codMotorista, boolean status) {
        super(nome, cpf, email, salario, endereco, rg);
        this.codMotorista = codMotorista;
        this.status = status;
    }

    public int getCodMotorista() {
        return codMotorista;
    }

    public boolean getStatus() {
        return status;
    }

    @Override
    public String toString() {
        StringBuilder info = new StringBuilder();

        info.append("\nCargo: Motorista")
            .append("\nCodigo do Motorista: "+codMotorista)
            .append("\nStatus: "+status);

        return info.toString();
    }



}


public class Caminhao {

    private String marca, modelo, placa;
    private int ano, contaManutencao = 0;
    private boolean status;
    private double quilometragemInicial;
    private double quilometragemFinal;  
    private Manutencao manutencaoPreventiva;

    public Caminhao(String marca, String modelo, String placa, int ano, boolean status, double quilometragemInicial, double quilometragemFinal) {
        super();
        this.marca = marca;
        this.modelo = modelo;
        this.placa = placa;
        this.ano = ano;
        this.status=status;
        this.quilometragemInicial = quilometragemInicial;
        this.quilometragemFinal = quilometragemFinal;

    }


    public String getMarca() {
        return marca;
    }

    public String getModelo() {
        return modelo;
    }

    public String getPlaca() {
        return placa;
    }

    public int getAno() {
        return ano;
    }

    public double getQuilometragemInicial() {
        return quilometragemInicial;
    }

    public double getQuilometragemFinal() {
        return quilometragemFinal;
    }

    public boolean getStatus() {
        return status;      
    }


    @Override
    public String toString() {

        StringBuilder info = new StringBuilder();

        info.append("Dados do Caminhao: ")
            .append("\nMarca: "+marca)
            .append("\nModelo: "+modelo)
            .append("\nPlaca: "+placa)
            .append("\nAno: "+ano)
            .append("\nConta Manutencao: "+contaManutencao)
            .append("\nStatus Caminhao: "+status)
            .append("\nQuilometragem Inicial: "+quilometragemInicial)
            .append("\nQuilometragem Final: "+quilometragemFinal)
            .append("ManutencaoPreventiva: "+manutencaoPreventiva);
        return info.toString();
    }




}

import java.util.Arrays;

public class Viagem{

    private String horaSaida, horaChegada, dataChegada, dataSaida, destino, origem;
    private int codViagem;
    int indiceGeral=0;
    private Manutencao revisao;
    private Caminhao []veiculo = new Caminhao[20];
    private Motorista[]piloto = new Motorista[15];


    public Viagem(String horaSaida, String horaChegada, String dataChegada, String dataSaida, String destino,
            String origem, int codViagem) {
        super();
        this.horaSaida = horaSaida;
        this.horaChegada = horaChegada;
        this.dataChegada = dataChegada;
        this.dataSaida = dataSaida;
        this.destino = destino;
        this.origem = origem;
        this.codViagem = codViagem;
    }

    public String getHoraSaida() {
        return horaSaida;
    }

    public String getHoraChegada() {
        return horaChegada;
    }

    public String getDataChegada() {
        return dataChegada;
    }

    public String getDataSaida() {
        return dataSaida;
    }

    public String getDestino() {
        return destino;
    }

    public String getOrigem() {
        return origem;
    }

    public int getCodViagem() {
        return codViagem;
    }



    public boolean verificaStatus(Caminhao veiculo, Motorista piloto){

        Caminhao auxC = (Caminhao) veiculo;
        Motorista aux = (Motorista) piloto;

        if(auxC.getStatus() != true && aux.getStatus() != true){
            return true;
        }
        else{
            return false;
        }

    }

    public Viagem planejarViagem(Viagem []viagem, Caminhao []veiculo, Motorista []piloto){
        if(viagem[indiceGeral].verificaStatus(veiculo[indiceGeral], piloto[indiceGeral]) == true){
            indiceGeral++;
            return viagem[indiceGeral];
        }
        return null;
    }

    public double calculaKm(double kmInicial, double kmFinal){
        return kmFinal-kmInicial;
    }

    @Override
    public String toString() {
        StringBuilder info = new StringBuilder();

        info.append("Viagem \nHora Saida: "+horaSaida+" hrs")
            .append("\nHora Chegada: "+horaChegada+" hrs")
            .append("\nData Chegada: "+dataChegada)
            .append("\nData Saida: "+dataSaida)
            .append("\nDestino: "+destino)
            .append("\nOrigem: "+origem)
            .append("\nCodigo da Viagem "+codViagem)
            .append("\nViagens realizadas: "+indiceGeral)
            .append("\nRevisao: "+revisao)
            .append("\nDados do Veículo: "+veiculo.toString())
            .append("\nQuilometragem percorrida: "+calculaKm(kmInicial, kmFinal))
            .append("\n\nPiloto que realizou a viagem: "+piloto.toString());

        return info.toString();
    }





}
    
asked by anonymous 26.05.2016 / 01:50

1 answer

1

Although it has strange things I will respond according to what is described in the question and in the comments. If the requirements are wrong it is clear that the solution will go wrong, but there the problem is not programming. Perhaps the difficulty in coding is because it has ambiguous or conflicting requirements.

First you delete the array from truck and driver since you can only have one on each trip:

private Caminhao veiculo;
private Motorista piloto;

We fix the constructor. We take the call to super() which does not make the slightest sense (if Eclipse does this, it's a very bad IDE). And we put a parameter to fill those fields, after all the trip can not exist without these data. That's what builders are for .

public Viagem(String horaSaida, String horaChegada, String dataChegada, String dataSaida, String destino, String origem, int codViagem, Caminhao, caminhao, Motorista, motorista) {
    this.horaSaida = horaSaida;
    this.horaChegada = horaChegada;
    this.dataChegada = dataChegada;
    this.dataSaida = dataSaida;
    this.destino = destino;
    this.origem = origem;
    this.codViagem = codViagem;
    this.caminhao = caminhao;
    this.piloto = motorista;
}

A method can be greatly simplified:

public boolean verificaStatus(Caminhao veiculo, Motorista piloto) {
    return !veiculo.getStatus() && !piloto.getStatus();
}

I can not understand the planejarViagem() method placed afterwards. He does not seem to make the slightest sense and disagrees with the description of the problem. Maybe there is a general error in class planning and code, but I can not state without knowing the right requirements. This method may indicate that the requirements are wrong. But I can only work with what has been expressed.

You really need to learn more about how boolean expressions work. It is used redundantly there as well.

Usually toString() is for internal code use. I'm not saying it's wrong, but listing all information on the object is not usually the right thing to do. When you need this, it's best to have a more appropriate method. It seems to be resource abuse.

It would also be nice to keep a naming pattern of things. I find it strange to have places that the driver happens to be called the pilot and the vehicle truck. Vehicle seems to me always correct unless it has some place that needs the exact discrimination of the type of vehicle, which does not seem to be the case, there is no structure for this.     

26.05.2016 / 17:10