Return to Snippet

Revision: 60611
at November 12, 2012 02:50 by izavrski2


Initial Code
#include <iostream>
#include <string>
using namespace std;
int sifra;

struct podaci {
    int sifra, cijena;
    string naziv, vrsta;
    struct{int d, m,g;}datum;
};

//#include "lista_polje.h"
#include "lista_pokazivac.h" 

int dodati(Lista *zivotinje) {
    cout << "Unos podataka za novu zivotinju." << endl;
    podaci nova;
    nova.sifra = sifra++;
    cout << "Vrsta: " << endl;
    cin >> nova.vrsta;
    cout << "Naziv: " << endl;
    cin >> nova.naziv;
    cout << "Cijena: " << endl;
    cin >> nova.cijena;
    cout << "Datum dostave: " << endl;
    cin >> nova.datum.d;
    cin >> nova.datum.m;
    cin >> nova.datum.g;
    
    
    if (InsertL(nova, EndL(zivotinje), zivotinje)) {
        return 1;
    }
    else { 
        return 0;
    }
}

void ispis(Lista *zivotinje) {
    
    element tekuci = EndL(zivotinje);
    podaci z;
    cout << "Ispis zivotinja od posljednje dodane." << endl<<endl;
    
    do {
        tekuci = PreviousL(tekuci, zivotinje);
        z = RetrieveL(tekuci, zivotinje);
        cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl;
        cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl;
        cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl;
    }   while (tekuci != FirstL(zivotinje)); //
    cout << "Ispis zavrsen." << endl;
}

int brisanje_naziv(Lista *zivotinje) {
    cout << "Naziv za brisanje: ";
    string unos;
    cin >> unos;
    int brisanje = 0; 
    element tekuci; podaci z;

    
    tekuci = FirstL(zivotinje);

    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
        
        if (z.naziv == unos) {
            brisanje = 1; 
            DeleteL(tekuci, zivotinje);
        }
        else { 
            tekuci = NextL(tekuci, zivotinje);
        }
    }
    cout<<"Brisanje gotovo."<<endl; 
    return brisanje;
    
}


int brisanje_vrsta(Lista *zivotinje) {
    cout << "Vrsta za brisanje: ";
    string unos;
    cin >> unos;
    int brisanje = 0; 
    element tekuci; podaci z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
        if (z.vrsta == unos) {
            brisanje = 1; 
            DeleteL(tekuci, zivotinje);
        }
        else {
            tekuci = NextL(tekuci, zivotinje);
        }
    }
    cout<<"Brisanje gotovo."<<endl;
    return brisanje; 
    
}

void nadji_dat(Lista *zivotinje) {
    element tekuci;
    
    tekuci = FirstL(zivotinje);
    podaci z;
    cout << "Zivotinje dostavljene nakon 23.09.2012." << endl<<endl;
    int broj=0;
    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
         
        if((z.datum.g>2012) ||
			((z.datum.g==2012)&&(z.datum.m >9)) ||
			((z.datum.g==2012)&&(z.datum.m==9)) && (z.datum.d>23))
        {
            cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl;
            cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl;
            cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl;
            broj++;        
        }
        tekuci = NextL(tekuci, zivotinje);
    }
    cout << "Trazenje gotovo." << endl;
    cout<<"Broj nadjenih zivotinja: "<<broj<<endl;
}


void merge_sort_cijena(podaci polje[], int lijevi, int desni) {
    int sredina = (lijevi + desni) / 2;
    podaci temp;

    if (desni - lijevi == 1) { 
        if (polje[desni].cijena > polje[lijevi].cijena) {
            temp = polje[desni];
            polje[desni] = polje[lijevi];
            polje[lijevi] = temp;
            return;
        }
    }    
    else if (desni == lijevi) { 
        return;
    }
    else { 
        
        merge_sort_cijena(polje, lijevi, sredina);
        merge_sort_cijena(polje, sredina +1, desni);
        
        int size_pomocno = desni-lijevi +1;
        podaci *polje_pomocno = new podaci[size_pomocno];
        int l = lijevi;
        int s = sredina +1;

        for (int i = 0; i < size_pomocno; i++) {
            if (l == sredina+1) { 
                polje_pomocno[i] = polje[s]; s++;
                continue;
            }
            if (s == desni +1) { 
                polje_pomocno[i] = polje[l]; l++;
                continue;
            }

            if (polje[l].cijena > polje[s].cijena) {
                polje_pomocno[i] = polje[l];
                l++;
            }
            else {
                polje_pomocno[i] = polje[s];
                s++;
            }
        } 
       
        int j = 0;
        for (int i = lijevi; i <= desni; i++) {
            polje[i] = polje_pomocno[j]; j++;
        }
    }
}

void merge_sort_naziv(podaci polje[], int lijevi, int desni) {
    int sredina = (lijevi + desni) / 2;
    podaci temp;

    if (desni - lijevi == 1) { 
        if (polje[desni].naziv > polje[lijevi].naziv) { 
            temp = polje[desni];
            polje[desni] = polje[lijevi];
            polje[lijevi] = temp;
            return;
        }
    }    
    else if (desni == lijevi) { 
        return;
    }
    else { 
        
        merge_sort_naziv(polje, lijevi, sredina);
        merge_sort_naziv(polje, sredina +1, desni);
        
        int size_pomocno = desni-lijevi +1;
        podaci *polje_pomocno = new podaci[size_pomocno];
        int l = lijevi;
        int s = sredina +1;

        for (int i = 0; i < size_pomocno; i++) {
            if (l == sredina+1) { 
                polje_pomocno[i] = polje[s]; s++;
                continue;
            }
            if (s == desni +1) { 
                polje_pomocno[i] = polje[l]; l++;
                continue;
            }

            if (polje[l].naziv > polje[s].naziv) { 
                polje_pomocno[i] = polje[l];
                l++;
            }
            else {
                polje_pomocno[i] = polje[s];
                s++;
            }
        } 
        
        int j = 0;
        for (int i = lijevi; i <= desni; i++) {
            polje[i] = polje_pomocno[j]; j++;
        }
    }
}


void sort_cijena(Lista *zivotinje) {
    cout << "Sortiramo po cijeni." << endl;
    
    int broj = 0;
    element tekuci; podaci z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        broj++; tekuci = NextL(tekuci, zivotinje);
    }
    
    podaci *polje = new podaci[broj];
    
    tekuci = FirstL(zivotinje);
    for (int i = 0; i < broj; i++) {
        z = RetrieveL(tekuci, zivotinje);
        polje[i] = z;
        tekuci = NextL(tekuci, zivotinje);
    }
    
    merge_sort_cijena(polje, 0, broj-1);
   
    for (int i = 0; i < broj; i++) {
            cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl;
            cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl;
            cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl;    
    }
}

void sort_naziv(Lista *zivotinje) {
    cout << "Sortiramo po nazivu." << endl;
   
    int broj = 0;
    element tekuci; podaci z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        broj++; tekuci = NextL(tekuci, zivotinje);
    }
    
    podaci *polje = new podaci[broj];
    
    tekuci = FirstL(zivotinje);
    for (int i = 0; i < broj; i++) {
        z = RetrieveL(tekuci, zivotinje);
        polje[i] = z;
        tekuci = NextL(tekuci, zivotinje);
    }
    
    merge_sort_naziv(polje, 0, broj-1);
   
    for (int i = 0; i < broj; i++) {
            cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl;
            cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl;
            cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl;    
    }    
}

int main() {
    
    Lista zivotinje;
    InitL(&zivotinje);

    sifra = 100;
   
    int izb;
do{
    cout<<endl<<"------------------IZBORNIK------------------"<<endl;
    cout<<"1. Ispis sadrzaja liste"<<endl
    <<"2. Unos nove zivotinje i ispis sadrzaja liste"<<endl
    <<"3. Dostavljeno nakon 23.09.2012."<<endl
    <<"4. Brisanje prema nazivu zivotinje"<<endl
    <<"5. Brisanje prema vrsti zivotinje"<<endl
    <<"6. Sortiranje prema cijeni(silazno)"<<endl
    <<"7. Sortiranje prema nazivu(silazno)"<<endl
    <<"0. Izlaz iz programa"<<endl
    <<"---------------------------------------------";    
    cout<<endl<<"Vas odabir: ";
    cin>>izb;
switch(izb) {
    case 1: system("cls");ispis(&zivotinje);break;

    case 2: dodati(&zivotinje);system("cls");
            ispis(&zivotinje);break;
            
    case 3: system("cls");nadji_dat(&zivotinje);break;

    case 4: system("cls");brisanje_naziv(&zivotinje);break;   

    case 5: system("cls");brisanje_vrsta(&zivotinje);break;
    
    case 6: system("cls");sort_cijena(&zivotinje);break;
    case 7: system("cls");sort_naziv(&zivotinje);break;
    }
}while(izb!=0);

system("pause");
return 0;
}

Initial URL

                                

Initial Description
Ovo je program koji evidentira zivotinje u trgovini sa kucnim ljubimcima. Zapis treba sadrzavati sljedece podatke: sifru, vrstu, naziv, cijenu i datum dostave. Omogucena je implementacija liste i pomocu polja i pomocu pokazivaca. Glavne operacije nad listom koje izvrsava program su unos novog elementa, silazno sortiranje po nazivu i cijeni, brisanje po nazivu i cijeni, ispis dostavljenih zivotinja nakon 23. rujna 2012. te ispis zivotinja iz liste od posljednje dodane pa prema prvoj. U program se pozivaju funkcije iz biblioteka lista_polje.h i lista_pokazivac.h koje sam prethodno objavila.

Initial Title
Evidencija zivotinja_glavni program

Initial Tags
sort

Initial Language
C++