Wypożyczalnia samochodów w Java

0

Potrzebuję napisać program, który będzie symulować wypożyczalnię samochodów, z poniższymi funkcjami:
1.) Użytkownik musi być w stanie dodać rodzaj samochodu: sportowy lub rodzinny przy czym oba mają delikatnie inną charekterystykę.

  • Następnie wpisać model i pojemność silnika
  • W bazie przechowywane będą 3 samochody
    2.) Pozwoli użytkownikowi wybrać jedną opcję z menu:
  • wynająć samochód
  • oddać samochód
  • wyświetlić dostępne samochody
  • wyświetlić samochody obecnie wypożyczone

Do rozwiązania problemu stworzyłem superklasę Auto i dwie subklasy AutoSportowe i AutoRodzinne.
Auto i AutoRodzinne określane są przez te same zmienne (model, pojSilnika), a AutoSportowe posiada unikalną zmienną "szyberdach".
Dla każdej klasy stworzyłem osobne klasy aplikacji.
Mam dwa problemy, które uniemożliwiają mi "pójście dalej":

  1. nie wiem jak połączyć system klasy Auto ze Auto Sportowe tak, aby w przypadku dodawania przez użytkownika danych dla auta sportowego (które określane jest przez jedną dodatkową zmienną) zasysało tą zmienną z klasy SportoweAuto.
  2. Nie wiem jak wynająć samochód. Próbowałem wszelkich pętli, szukałem info w necie jak usuwać pola w tablicy, ale albo nie mogłem albo nie potrafiłem zaaplikować rozwiązań w swoim kodzie. Mam taką też refleksję czy oby usuwanie elementów tablicy jest rozsądne w moim przypadku, gdzie muszę być w stanie wyświetlić wypożyczane samochody i w końcu je zwrócić?
    Poniżej zamieszczam kod (tylko superklasy Auto i subklasy AutoSportowe, bo w przypadku subklasy AutoRodzinne kod jest niemalże identyczny):

Klasa Auto

//superklasa Auto wykorzystujaca konstruktor do przekazania prywatnych zmienncyh
public class Auto {

        private int autoID; //identyfikator
    //parametry wspolne dla wszystkich klas
        private String marka;
        private double pojSilnika;
        static int dodaj = 1;

        public Auto()
        {
            //pusty konstruktor ustawiajacy ilosc potrzebnego miejsca w pamieci
        }

    //konstruktor przekazujacy 2 parametry + idetyfikator
        public Auto(String marka, double pojSilnika)
        {
            this.autoID= dodaj;
            this.marka = marka;
            this.pojSilnika = pojSilnika;
            dodaj++;
        }

//zwroc output
        public String toString(){

            return ("ID: "+autoID+" \nmarka: " + marka + "\npoj. silnika" + pojSilnika);
        }
}

klasa RunAuto

//aplikacja klasy Auto
import java.util.*;
public class RunAuto
{
    //wyglad manu glownego
    static void mojeMenu()
    {
        System.out.println("Witamy w naszej wypożyczalni. Wybierz opcję: ");
        System.out.println("1. Wypożycz auto");
        System.out.println("2. Oddaj auto");
        System.out.println("3. Dostępne auta");
        System.out.println("4. Auta w wypożyczeniu");
        System.out.println("5. Wyjdz");
    }

    public static void main (String [] args)
    {
        Scanner wstukaj = new Scanner(System.in); //inicjacja klasy Scanner do wpisywania z klawiatury
        //inicjacja parametrow wspolnych dla wszystkich subklas (i superklasy)
        String marka;
        double pojSilnika;
        //array wypAuto sluzacy uzytkownikowi do wprowadzenia 3 elementow przed przejsciem do menu
        Auto [] wypAuto = new Auto [3];

        //zmienna i sluzaca do liczenia w petli
        int i;

        //dodawanie nowego samochodu z dwoma parametrami
        for(i = 0; i <= 2; i++)
        {
            System.out.print("Dodaj markę: ");
            marka = wstukaj.nextLine();

            System.out.println("Okresl poj. silnika: ");
            pojSilnika = wstukaj.nextDouble();
            wstukaj.nextLine();

            wypAuto[i] = new Auto(marka, pojSilnika);
        }

        //wybierz opcje z menu
        int wybierzOpcje=0;

            mojeMenu();
            System.out.println("Proszę wybrac opcję: ");
            wybierzOpcje=wstukaj.nextInt();

        //switch sterujace systemem menu
            switch(wybierzOpcje)
            {
                case 1:  //wypozycz samochod
                    break;
                case 2:  //oddaj samochod
                    break;
                case 3:  for (i = 0; i <= 2; i++)
                            {
                                System.out.println(wypAuto[i].toString());
                                //drukowanie danych trzech samochodow wprowadzonych przez uzytkownika
                            }
                    break;

                case 4:  //wyswietl nniedostepne
                    break;
                case 5:  // Wyjscie
                    break;
            }//switch
    }//main
}//klasa

klasa AutoSportowe

public class AutoSportowe extends Auto {

    private String szyberdach;//unikalny parrametr dla subklasy AutoSportowe

    public AutoSportowe (String marka, double pojSilnika, String szyberdach)
    {
        super (marka, pojSilnika); //calls constructor of the superclass
        this.szyberdach= szyberdach;
    }
    
    public String toString()
    {
        return (super.toString() + " \nSzyberdach [t/f]: "+szyberdach);
    }
}

klasa RunAutoSportowe
//Aplikacja klasy AutoSportowe, analogicznie jak RunAuto z uwzglednieniem unikalnego parametru szyberdach dla subklasy AutoSportowe
import java.util.*;
public class RunAutoSportowe {

public static void main(String [] args)
{
    Scanner wstukaj = new Scanner(System.in);
    String marka;
    double pojSilnika;
    String szyberdach;
    AutoSportowe [] wypAutoSportowe = new AutoSportowe[3];
    int i;

    for (i = 0; i <= 2; i++)
    {
        System.out.print("Dodaj markę: ");
        marka = wstukaj.nextLine();

        System.out.println("Okresl poj. silnika: ");
        pojSilnika = wstukaj.nextDouble();

        System.out.println("Okresl styl szybardachu: ");
        szyberdach=wstukaj.nextLine();
        wstukaj.nextLine();

        wypAutoSportowe[i] = new AutoSportowe(marka, pojSilnika, szyberdach);
    }

    for (i= 0; i <= 2; i++)
    {
        System.out.println(wypAutoSportowe[i].toString());
    }
}

}

Będę bardzo wdzięczny za pomoc, bo utknąłem w martwym punkcie i nie mogę zrobić nic więcej bez tej części kodu.

0

Poradziłem sobie z problemem numer 2, ale wciąż potrzebuję pomocy z pierwszym. Wystarczy jeśli po prostu użyję statementu if uzależnionego od tego co chce użytkownik i tablic z różną ilością parametrów?

0

Co do drugiego:
Z tablicy taką jaką masz teraz nie da się usunąć elementów (co najwyżej możesz zrobić taką samą tylko z brakującym elementem). Do tego możesz korzystać z ArrayList.

Ale zamiast usuwać możesz zrobić dodatkowe pole w klasy Auto bool wyporzyczony ii zmieniaj tylko jego wartość przy pożyczaniu i oddawaniu auta.

Co do pierwszego nie wiem do końca o co Ci chodzi? Czy AutoSportowe nie dziedziczy po Auto? Jeżeli tak to zmieniając coś na instancji obiektu AutoSportowe masz do dyspozycji pola z obu klas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1