Cześć. Dopiero zacząłem programowanie obiektowe i muszę już napisać projekt, chodzi o krótką bazę danych salonu samochodowego, jednak wykorzystującą znaczną część obiektowości. Potrzebuję pomocy z kilkoma rzeczami. Chcę zaimplementować dwie listy jednokierunkowe reprezentującą samochody i wskaźniki na konkretne typy aut do funkcji dodajSamochod. Znalazłem fajnie wytłumaczoną implementację listy na internecie. Mam kilka pytań co do dalszego rozwiązywania. Jest to wersja bardzo robocza.
- Proszę o zerknięcie na funkcję "dodajSamochod"(reszta funkcji to pozostałość do przerobienia po klasie Element) Czy mój tok rozumowania jest słuszny? Ewentualnie proszę o implementacje tej funkcji, z resztą powinienem dać radę bazując na tej. Wydaje mi się że powinienem używać wskaźników this co sugeruje mi że jestem w błędzie. Czy powinienem wrzucać pięć parametrów do funkcji(Samochod, Osobowy, Cięzarowy...) ?
- Czy konieczne jest pisanie dwa razy w mainie podstawowych parametrów pojazdu ? Czy mogę utworzyć jakąś funkcję biorącą te dane?
- Chyba nieumiejętnie korzystam z hermetyzacji, czy da się to jakoś ulepszyć? Wydaje mi się że cały czas jestem zmuszony do etykiety public bo inaczej pola są nieaktywne.
- W której klasie zaprzyjaźnić klasę Data albo jak lepiej to zrobić aby wprowadzać daty zakupów pojazdów? W dacie mam zamienić funkcję na konstruktor ?
- Czy da się jakoś wykorzystać tutaj przeciążony operator np. dodawania ?(myślę o zliczaniu aktualnego salda salonu, ale wtedy chyba niezbędne są operatory "+" i "-")
Proszę o wyrozumiałość i pozdrawiam.
#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;
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;
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;
//chyba zrezygnuje z last, program bedzie na listach jednokierunkowych
Element* last = nullptr;
//takie podejscie??
Samochod* pSamochod = nullptr;
Osobowy* pOsobowy = nullptr;
Dostawczy* pDostawczy = nullptr;
Ciezarowy* pCiezarowy = nullptr;
Autobus* pAutobus = nullptr;
//czy takie???
Samochod* head = nullptr;
Samochod* nowySamochod = nullptr;
Osobowy* pHead = nullptr;
Osobowy* nowyOsobowy = nullptr;
Element* znajdzSamochod(int pozycja)
{
if(pozycja<1 || pozycja>this->size())
{
return nullptr;
}
Element* temp = this->first;
int i = 1;
while (i++<pozycja)
{
temp = temp->next;
}
return temp;
}
//dodajDoListy
//Czy to dobry sposob???
void dodajSamochod(Samochod* pHead,Osobowy* Head )//bedzie tu piec argumentow kazdego rodzaju samochodu
{
//jak przekazac tu obiekt samochod z konstruktora ???
Samochod* n = new Samochod(;
if (pHead == nullptr)
{
//nie wiem jak korzystać tu z konstruktora do tworzenia obiektu
cin >> pHead->podstawoweParametry.marka;
cin >> pHead->podstawoweParametry.model;
//itd...
}
else
{
}
}
void pokazListeSamochodow()
{
Element* temp = this->first;
////////////////////////
if (this->first == nullptr)
{
cout << "Nie masz zadnych aut!" << endl;
}
///////////
while (temp != nullptr)
{
cout << temp->data << endl;
temp = temp->next;
}
}
bool usunSamochod(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 = this->last = nullptr;
}
//pierwszy, ale nie ostatni
else if (pozycja == 1)
{
Element* temp = this->first;
this->first = this->first->next;
delete temp;
}
//ostatni, ale nie jedyny
else if (pozycja == this->size())
{
Element* before = this->znajdzSamochod(pozycja - 1);
delete before->next;
before->next = nullptr;
this->last = before;
}
//gdzies w srodku
else
{
Element* before =this-> znajdzSamochod(pozycja - 1);
Element* temp = this->znajdzSamochod(pozycja);
before->next = temp->next;
delete temp;
}
return true;
}
//zlicza elementy
int size()
{
int i = 0;
Element* 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 };
// teraz mam dodac do listy samochod
// 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;
}
Kamil B