Return to Snippet

Revision: 60738
at November 12, 2012 08:23 by majcen555


Initial Code
#include <cstdlib>
#include <iostream>

//#include "lista_polje_mm.h"
#include "lista_pokazivac_mm.h" 

using namespace std;

int upisi() { 
     objekt novi;
     cout<<"Vrsta zivotinje: ";
     cin.ignore();
     cin.getline(novi.vrsta,30);
     
     cout<<"Naziv zivotinje: ";
     cin.getline(novi.naziv,30);
     
     novi.sifra=sifra++;
     cout<<"Cijena zivotinje: ";
     cin>>novi.cijena;
     if(novi.cijena<=0) {
                        sifra--;
                        return 0;}
                        
     cout<<"Datum dostave:"<<endl;
     cout<<"Unesite dan: ";
     cin>>novi.datum.dan;
     if(novi.datum.dan<=0||novi.datum.dan>31) {
                                              sifra--;
                                              return 0;}
     cout<<"Unesite mjesec: ";
     cin>>novi.datum.mjesec;
     if(novi.datum.mjesec<=0||novi.datum.mjesec>12) {
                                              sifra--;
                                              return 0;}
     cout<<"Unesite godinu: ";
     cin>>novi.datum.godina;
     if(novi.datum.godina>2012) {
                                sifra--;
                                return 0;}
     
     InsertL(novi,br_objekt,LA);
     br_objekt++; 
     return 1;
    }
    
void ispis_zivotinja() {
     objekt ziv;
     int brojac=0;
     int p = PreviousL(EndL(LA),LA);
     while(brojac<br_objekt){
           ziv=RetrieveL(p,LA);
           cout<<"=====================\n";
           cout<<"Sifra zivotinje: ";
           cout<<ziv.sifra<<endl;
           cout<<"Vrsta zivotinje: ";
           cout<<ziv.vrsta<<endl;
           cout<<"Naziv zivotinje: ";
           cout<<ziv.naziv<<endl;
           cout<<"Cijena zivotinje: ";
           cout<<ziv.cijena<<endl;
           cout<<"Datum: ";
           cout<<ziv.datum.dan<<".";
           cout<<ziv.datum.mjesec<<".";
           cout<<ziv.datum.godina<<endl;
           cout<<"=====================\n";
           p = PreviousL(p,LA);
           brojac++;
           } //while
     } //ispis_zivotinja
     
void jesensko_vrijeme() {
     int brojac=0;
     objekt ziv;
     int p = FirstL(LA); 
     while(p!=EndL(LA)) {
             ziv = RetrieveL(p,LA); 
             if((ziv.datum.godina==2012&&ziv.datum.mjesec==9&&ziv.datum.dan>23)
             ||ziv.datum.godina==2012&&ziv.datum.mjesec>9)
              {
                cout<<"Sifra zivotinje: ";
                cout<<ziv.sifra<<endl;
                cout<<"Vrsta zivotinje: ";
                cout<<ziv.vrsta<<endl;
                cout<<"Naziv zivotinje: ";
                cout<<ziv.naziv<<endl;
                cout<<"Cijena zivotinje: ";
                cout<<ziv.cijena<<endl;
                cout<<"Datum zivotinje: ";
                cout<<ziv.datum.dan;
                cout<<"."<<ziv.datum.mjesec;
                cout<<"."<<ziv.datum.godina<<endl;
                cout<<"================"<<endl;
                brojac++;
                } //if
             p = NextL(p,LA);
             } //while
             cout<<"Ukupan broj zivotinja dostavljenih nakon 23. rujna 2012: ";
             cout<<brojac<<endl<<endl;       
     } //ispis_datum

int obrisi_naziv() {
     char naziv[30];
     objekt ziv;
     cout<<"Unesite naziv zivotinje koju zelite obrisati: ";                    
     cin.ignore();
     cin.getline(naziv,30);
     int p = LocateL(naziv,LA);
     if(p==EndL(LA)) return 0;
     else {
            DeleteL(p,LA);
            br_objekt--;
            return 1;
            }
     } 

int obrisi_vrstu() {
     char vrsta[30];
     objekt ziv;
     int p;
     bool obrisan=0;
     v=1;
     cout<<"Unesite vrstu zivotinje koju zelite obrisati: ";
     cin.ignore();
     cin.getline(vrsta,30);
     while (LocateL(vrsta,LA)!=EndL(LA)) { 
           p = LocateL(vrsta,LA);
           DeleteL(p,LA);
           br_objekt--; 
           obrisan=1;                      
           }
     if(!obrisan) return 0;
     else return 1;
     }
     
void ispis() {
     objekt ziv;
     int p=FirstL(LA);
     while (p!=EndL(LA)){
           ziv=RetrieveL(p,LA);
           cout<<"Sifra zivotinje: ";
           cout<<ziv.sifra<<endl;
           cout<<"Vrsta zivotinje: ";
           cout<<ziv.vrsta<<endl;
           cout<<"Naziv zivotinje: ";
           cout<<ziv.naziv<<endl;
           cout<<"Cijena zivotinje: ";
           cout<<ziv.cijena<<endl;
           cout<<"Datum zivotinje: ";
           cout<<ziv.datum.dan<<".";
           cout<<ziv.datum.mjesec<<".";
           cout<<ziv.datum.godina<<endl;
           cout<<"================="<<endl;
           p = NextL(p,LA);
           }
     }

void spoji(objekt A[], int poc, int sre, int kra)
{
 int n;
 int I=poc, J=sre+1, K=0;
 objekt *B = new objekt [kra-poc+1];
 
 while (I <= sre && J <= kra)
       if (A[I].cijena<A[J].cijena)
          memcpy(&B[K++], &A[I++], sizeof(objekt) );
       else if (A[I].cijena == A[J].cijena)
       {	
         if (strcmp((A[I].naziv),(A[J].naziv))<0)
            memcpy(&B[K++], &A[I++], sizeof(objekt) );
         else
             memcpy(&B[K++], &A[J++], sizeof(objekt) );
             } 
         else
             memcpy(&B[K++], &A[J++], sizeof(objekt) );
 if (I>sre)
    while (J <= kra)
          memcpy(&B[K++], &A[J++], sizeof(objekt) );
 else
     while (I<=sre)
           memcpy(&B[K++], &A[I++], sizeof(objekt) );
 for (int I = 0; I <=kra-poc; I++)
     memcpy(&A[poc+I], &B[I], sizeof(objekt) );
 delete []B;
}
void MSort (objekt *A, int poc, int kra)
{
 if (poc<kra)
 {
  int sre=(poc+kra)/2;
  MSort(A,poc,sre);
  MSort (A, sre+1, kra);
  spoji (A,poc,sre,kra);
  }
}
void MSort (objekt A[], int N)
{
 MSort (A,0,N-1);
}
void sort (lis *LA)
{
 objekt novi[1000];
 int pozicija=FirstL(LA); //za pok
 int n=0;
 while (pozicija!=EndL(LA))
 { 
   novi[n]=RetrieveL(pozicija,LA);
   pozicija=NextL(pozicija,LA);
   n++;
   }
   MSort (novi,n);
   int i=0;
   n=n-1;
   for(n; n>=i; n--)
          { 
          cout<<endl;
          cout << "Sifra: " << novi[n].sifra << endl;
          cout << "Naziv: " << novi[n].naziv << endl;
          cout << "Vrsta: " << novi[n].vrsta << endl;
          cout << "Cijena: " << novi[n].cijena << endl;
          cout<< "Datum: " <<novi[n].datum.dan<<".";
           cout<<novi[n].datum.mjesec<<".";
           cout<<novi[n].datum.godina<<endl;
          cout<<endl;
          }
} 
    
int main() {
    int izbor;
    InitL(LA);
    do {
        cout<<"********************IZBORNIK*************************"<<endl;
        cout<<"====================================================="<<endl;
        cout<<"1. Dodaj zapis"<<endl;
        cout<<"2. Ispis liste (od zadnje dodane zivotinje)"<<endl;
        cout<<"3. Ispis zivotinja dostavljenih nakon 23. rujna 2012"<<endl;
        cout<<"4. Brisanje zivotinje prema nazivu"<<endl;
        cout<<"5. Brisanje zivotinje prema vrsti"<<endl;
        cout<<"6. Silazno sortiranje po cijeni ili nazivu"<<endl;
        cout<<"7. Izlaz iz programa"<<endl;
        cout<<"====================================================="<<endl;
        cin>>izbor;
        
        switch(izbor) {
                      case 1:
                           if(upisi()) cout<<"Zapis je zabiljezen.\n";
                           else cout<<"Pogresan unos\n";
                           break;
                           
                      case 2:ispis_zivotinja();
                           break;
                           
                      case 3:jesensko_vrijeme();
                           break;
                           
                      case 4:
                           if(obrisi_naziv()) {
                                             cout<<"\nObrisana je.\n\n";
                                             ispis();
                                             }
                           else cout<<"\nZivotinja nije obrisana.\n\n";
                           break;
                           
                      case 5:
                           if(obrisi_vrstu()) {
                                             cout<<"\nObrisana je.\n\n";
                                             ispis();
                                             }
                           else cout<<"Zivotinja nije uspjesno obrisana.\n\n";
                           break;
                      case 6: sort(LA);
                           break;
                      }
        }while(izbor!=7);

    system("PAUSE");
    return EXIT_SUCCESS;
}

Initial URL
http://e.foi.hr/wiki/strukture_podataka/index.php/Zadatak_1_Majcen_Marko

Initial Description
Program koji će evidentirati životinje u trgovini sa kućnim ljubimcima. Zapis treba sadržavati sljedeće podatke: šifru, vrstu, naziv, cijenu i datum dostave. Na početku testiranja programa potrebno je pohraniti minimalno pet različitih zapisa u listu pri čemu naziv i vrstu životinja odabirete samostalno. Program treba raditi neovisno o implementaciji liste.

Initial Title
SP_Zadatak1_main_MM

Initial Tags


Initial Language
C++