Czy jest ktoś wstanie wskazać lub poprawić mi błąd w funkcji "kupSamochod" ? Nie wiem dlaczego podczas wywoływania program się wysypuje. Chciałbym jeszcze zapytać dlaczego wartości obiektu parametry wpisywane są dwa razy. Użytkownik na forum wskazał mi to rozwiązanie nie rozumiem dlaczego. Dopiero zacząłem programować obiektowo i już mam zrobić projekt wobec czego proszę o wyrozumiałość.
#include <iostream>
using namespace std;
class ParametrySamochodu
{
private:
static int saldoSalonu;
public:
string marka, model;
int cena, rokProdukcji, pojemnosc, przebieg, moc;
};
int ParametrySamochodu::saldoSalonu = 0;
class Samochod
{
public:
ParametrySamochodu podstawoweParametry;
Samochod* next = nullptr;
public:
Samochod(const ParametrySamochodu& podstawoweParametry_) : podstawoweParametry{ podstawoweParametry_ } {}
};
class ParametrySamochoduOsobowego
{
public:
int iloscDrzwi;
float wielkoscBagaznika;
bool fotelikDlaDziecka;
};
class ParametrySamochoduDostawczego
{
public:
int dozwolonaMasaWlasnaKatB;
bool kurnik;
};
class ParametrySamochoduCiezarowego
{
public:
float dopuszczalnaDlugoscNaczepy;
int iloscNaczep;
bool zimoweLancuchyNaKola;
};
class ParametryAutobusu
{
public:
int miejscaStojace, miejscaSiedzace;
bool przewozOsobNiepelnosprawnych;
};
class Osobowy : public Samochod
{
public:
ParametrySamochoduOsobowego dodatkoweParametry;
Osobowy* next = nullptr;
public:
Osobowy(const ParametrySamochodu& podstawoweParametry_, const ParametrySamochoduOsobowego& dodatkoweParametry_)
: Samochod{ podstawoweParametry_ }, dodatkoweParametry{ dodatkoweParametry_ } {}
};
class Dostawczy: public Samochod
{
private:
ParametrySamochoduDostawczego dodatkoweParametry;
public:
Dostawczy(const ParametrySamochodu& podstawoweParametry_, const ParametrySamochoduDostawczego& dodatkoweParametry_)
: Samochod{ podstawoweParametry_ }, dodatkoweParametry{ dodatkoweParametry_ } {}
};
class Ciezarowy:public Samochod
{
private:
ParametrySamochoduCiezarowego dodatkoweParametry;
public:
Ciezarowy(const ParametrySamochodu& podstawoweParametry_, const ParametrySamochoduCiezarowego& dodatkoweParametry_)
: Samochod{ podstawoweParametry_ }, dodatkoweParametry{ dodatkoweParametry_ } {}
};
class Autobus :public Samochod
{
private:
ParametryAutobusu dodatkoweParametry;
public:
Autobus(const ParametrySamochodu& podstawoweParametry_, const ParametryAutobusu& dodatkoweParametry_)
: Samochod{ podstawoweParametry_ }, dodatkoweParametry{ dodatkoweParametry_ } {}
};
class Data
{
private:
int dzien;
int miesiac;
int rok;
public:
void pobierzDate()
{
cout << "Podaj date zakupu/sprzedazy samochodu: " << endl;
cout << "Dzien: ";
cin >> dzien;
cout << "Miesiac: ";
cin >> miesiac;
cout << "Rok: ";
cin >> rok;
}
void wyswietlDate()
{
if (dzien < 10)
{
cout << '0';
}
cout << dzien << ".";
if (miesiac < 10)
{
cout << "0";
}
cout << miesiac << ".";
cout << rok << endl;
}
};
void menu()
{
puts("Witaj w systemie salonu samochodowego!\n"
"Wybierz opcje:\n"
"1.Kup samochod\n"
"2.Sprzedaj samochod\n"
"3.Wykup samochod od klienta w rozliczeniu\n"
"4.Wyswietl obecne auta w salonie\n"
"5.Zamknij salon\n");
}
void rodzajSamochodu()
{
puts("Podaj przeznaczenie pojazdu: \n"
"1.Osobowy\n"
"2.Dostawczy\n"
"3.Ciezarowy\n"
"4.Autobus\n");
}
//class Element
//{
//public:
// int data = 0;
// Element* next;
// Element(int d)
// {
// this->data = d;
// this->next = nullptr;
// }
//};
class ListaJednokierunkowa
{
public:
//Element* first = nullptr;
//takie podejscie??
Samochod* first = nullptr;
Osobowy* pOsobowy = nullptr;
Dostawczy* pDostawczy = nullptr;
Ciezarowy* pCiezarowy = nullptr;
Autobus* pAutobus = nullptr;
Samochod* znajdzSamochod(int pozycja)
{
if(pozycja<1 || pozycja>this->size())
{
return nullptr;
}
Samochod* temp = this->first;
int i = 1;
while (i++<pozycja)
{
temp = temp->next;
}
return temp;
}
//dodajDoListy
//Czy to dobry sposob???
void kupSamochod(Samochod* pHead,Osobowy* Head )//bedzie tu piec argumentow kazdego rodzaju samochodu
{
ParametrySamochodu parametry;
ParametrySamochoduOsobowego dodatkoweParametry;
Samochod* n = new Samochod(parametry);
if (this->size()==0)
{
//nie wiem jak korzystać tu z konstruktora do tworzenia obiektu
this->first = n;
//itd...
}
else
{
}
}
void pokazListeSamochodow()
{
Samochod* temp = this->first;
////////////////////////
if (this->first == nullptr)
{
cout << "Nie masz zadnych aut!" << endl;
}
///////////
while (temp != nullptr)
{
cout << temp->podstawoweParametry.marka;
//itd..
//temp = temp->;
}
}
bool sprzedajSamochod(int pozycja)
{
if (this->size() == 0)
{
return false;
}
//nieistniejacy element
if (pozycja > this->size() || pozycja == 0)
{
cout << "Usuwasz nieistniejacy pojazd!" << endl;
return false;
}
//jedyny element
if (this->size() == 1)
{
delete this->first;
this->first = nullptr;
}
//pierwszy, ale nie ostatni
else if (pozycja == 1)
{
Samochod* temp = this->first;
this->first = this->first->next;
delete temp;
}
//ostatni, ale nie jedyny
else if (pozycja == this->size())
{
Samochod* before = this->znajdzSamochod(pozycja - 1);
delete before->next;
before->next = nullptr;
}
//gdzies w srodku
else
{
Samochod* before =this-> znajdzSamochod(pozycja - 1);
Samochod* temp = this->znajdzSamochod(pozycja);
before->next = temp->next;
delete temp;
}
return true;
}
//zlicza elementy
int size()
{
int i = 0;
Samochod* temp = this->first;
while (temp != nullptr)
{
i++;
temp = temp->next;
}
return i;
}
};
int main()
{
//menu();
int wybor;
//Samochod* pGlowa = nullptr;
//Samochod* temp = new Samochod;
ListaJednokierunkowa* myList = new ListaJednokierunkowa;
myList->pokazListeSamochodow();
ParametrySamochodu parametry;
ParametrySamochoduOsobowego dodatkoweParametry;
//Czy pisanie tego dwa razy jest potrzebne ?
cout << "Wprowadz dane pojazdu: " << endl;
cout << "Marka: "; cin >> parametry.marka;
cout << "Model: "; cin >> parametry.model;
cout << "Cena: "; cin >> parametry.cena;
cout << "Rok produkcji: "; cin >> parametry.rokProdukcji;
cout << "Pojemnosc: "; cin >> parametry.pojemnosc;
cout << "Przebieg: "; cin >> parametry.przebieg;
cout << "Moc: "; cin >> parametry.moc;
Samochod samochod{ parametry };
cout << "Wprowadz dane pojazdu: " << endl;
cout << "Marka: "; cin >> parametry.marka;
cout << "Model: "; cin >> parametry.model;
cout << "Cena: "; cin >> parametry.cena;
cout << "Rok produkcji: "; cin >> parametry.rokProdukcji;
cout << "Pojemnosc: "; cin >> parametry.pojemnosc;
cout << "Przebieg: "; cin >> parametry.przebieg;
cout << "Moc: "; cin >> parametry.moc;
cout << "iloscDrzwi: "; cin >> dodatkoweParametry.iloscDrzwi;
cout << "wielkoscBagaznika: "; cin >> dodatkoweParametry.wielkoscBagaznika;
cout << "fotelikDlaDziecka: "; cin >> dodatkoweParametry.fotelikDlaDziecka;
Osobowy samochodOsobowy( parametry,dodatkoweParametry );
Osobowy o(parametry, dodatkoweParametry);
//o.podstawoweParametry.marka
// teraz mam dodac do listy samochod
myList->kupSamochod(&samochod, &samochodOsobowy);
myList->pokazListeSamochodow();
// List moja_lista_samochodow;
// moja_lista_samochodow.append(samochod);
// moja_lista_samochodow.append(samochodOsobowy);
do
{
cout << "Wybor: ";
cin >> wybor;
switch (wybor)
{
case 1:
//rodzajSamochodu();
//temp->dodajPojazd(pGlowa);
//kup
break;
case 2:
//sprzedaj
break;
case 3:
//wykup od klienta rozliczenie
break;
case 4:
//wyswietl flote
//temp->pokazPosiadanePojazdy(pGlowa);
break;
case 5:
cout << "Wychodzisz z salonu" << endl;
break;
default:
cout << "Nie ma takiego wyboru. Wybierz jeszcze raz" << endl;
break;
}
} while (wybor != 5);
//delete temp;
return 0;
}