Cod sursa(job #2207582)

Utilizator SmitOanea Smit Andrei Smit Data 26 mai 2018 00:15:41
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 5.2 kb
///Oanea Smit-Andrei, grupa 135
///am folosit codeblocks
#include <bits/stdc++.h>
//sa modific libraria

/**
    Companie este o clasa pur virtuala, nu se poate declasa un obiect de tip companie.
    Din Companie deriva clasele CompanieTip1, CompanieTip2, CompanieTip3
    Din acestea 3 de mai sus, deriva clasa MegaCompanie, care are toate caracteristicile lor.
    Am ilustrat astfel mostenira diamant
    Exista si clasa Uber, separat
*/

using namespace std;

///tip1
class ComandaCost1
{
public:///trebuie sa schimb in protected si sa fac setere, daca am timp
    string adresa_sursa, adresa_destinatie;
};

class ComandaDesignatedDriver
{
public:
    string nume_sofer;
    int nrLicentaTransport;
};
///tip2
class ComandaRentCar
{
public:
    string nume;
    string Data1,Ora1,Locatia1;
    string Data2,Ora2,Locatia2;
};

class ComandaLeasing
{
public:
    int NrZile;
};

///tip3
class ComandaTransportMarfa
{
public:
    string Judet, Localitate;
};

void Meniu()
{
    cout<<"Puteti alege una din urmatoarele optiuni:\n";

    cout<<"1.Introduceti o noua comanda.\n";
    cout<<"2. Afisati toate comenzile, grupate pe companii.\n";
    cout<<"3. Afisati companiile(in ordinea descrescatoare a profitului)\n";
    cout<<"4. Afisati numarul de utilizari ale functiilor existente\n";
    cout<<"5. Afisati numarul de comenzi pentru destinatii din afara tarii\n";
    cout<<"6. Iesire\n";
}

class Companie///clasa abstracta, nu pot declara o companie simpla
{
protected:
    string denumire;
    string cod_fiscal;//unic
    bool accepta_precomanda;
public:
    virtual void Afisare_Servicii()=0;///functie put virtuala, ceea ce face clasa sa fie put virtuala
    /*Companie()
    {
        denumire = "";
        cod_fiscal = "";
        accepta_precomanda=false;
    }*/
    void set_denumire(string den)
    {
        denumire = den;
    }
    string get_denumire()
    {
        return denumire;
    }
    void set_cod_fiscal(string cod)
    {
        cod_fiscal = cod;
    }
    string get_cod_fiscal()
    {
        return cod_fiscal;
    }
    void set_accepta_precomanda(bool v)
    {
        accepta_precomanda = v;
    }
    bool get_accepta_precomanda()
    {
        return accepta_precomanda;
    }
};

class CompanieTip1: virtual public Companie
{
protected:
    vector<ComandaCost1>com_cost_control;///comenzi de tip CostControl
    vector<ComandaDesignatedDriver>com_DesignatedDriver;///comenzi de tip DesignatedDriver
public:
    double CostControl(ComandaCost1)
    {
        return 72;///de facut random
    }
    void Afisare_Servicii()
    {
        cout<<"-Cost Control;\n";
        cout<<"-Designated driver;\n";
    }
    void Push_V1(ComandaCost1 cm)
    {
        com_cost_control.push_back(cm);
    }
    void Push_V2(ComandaDesignatedDriver cm)
    {
        com_DesignatedDriver.push_back(cm);
    }
};

class CompanieTip2: virtual public Companie
{
protected:

public:
    void Afisare_Servicii()
    {
        cout<<"-Rent a car;\n";
        cout<<"-Leasing operational;\n";
    }
};

class CompanieTip3: virtual public Companie
{
protected:

public:
    void Afisare_Servicii()
    {
        cout<<"-Transport marfa de volum mic;\n";
    }
};

class Megacompanie: public CompanieTip1, public CompanieTip2, public CompanieTip3
{
protected:

public:
    void Afisare_Servicii()
    {
        cout<<"-Cost Control;\n";
        cout<<"-Designated driver;\n";
        cout<<"-Rent a car;\n";
        cout<<"-Leasing operational;\n";
        cout<<"-Transport marfa de volum mic;\n";
    }
};

template<typename Tip>
class Uber
{
private:
    Tip nrcomenzi;
};

int main()
{
    int optiune;
    vector<CompanieTip1>VC1;
    vector<CompanieTip2>VC2;
    vector<CompanieTip3>VC3;
    vector<Megacompanie>MC;
    cout<<"Bine ati venit!\n\n\n";
    while(1)
    {
        Meniu();
        cin>>optiune;
        if(optiune==1)//o noua comanda
        {
            cout<<"Pentru ce tip companie este comanda?(1/2/3/4(Megacompanie)/5(Uber))\n";
            int tipcomp;
            cin>>tipcomp;
            if(tipcomp==1)
            {
                CompanieTip1 comp;
                int alegere;
                cout<<"Aceasta companie ofera serviciile:\n";
                comp.Afisare_Servicii();
                cout<<"Pe care il alegeti? (intorduceti un numar)\n";
                cin>>alegere;
                if(alegere==1)///CostControl
                {
                    ComandaCost1 comanda;
                    cin>>comanda.adresa_sursa;
                    cin>>comanda.adresa_destinatie;
                    comp.Push_V1(comanda);
                    cout<<comp.CostControl(comanda)<<"\n";
                    //VC1.push_back(comanda);
                }
                else///Designated
                {
                    ///...
                }
            }
        }
        if(optiune==2)
        {
            unsigned int i;
            for(i=0;i<VC1.size();++i)
                cout<<VC1[i].get_denumire()<<" ";
            cout<<"\n";
        }
        if(optiune==6)
        {
            return 0;
        }
    }
    return 0;
}