Return to Snippet

Revision: 60729
at November 12, 2012 08:09 by mmilutin2


Initial Code
#include <iostream>
//#include "lista_polje.h"
#include "lista_pokazivac.h"
#include "time.h"
using namespace std;

void unos(char *znakovni_niz){
     cin.getline(znakovni_niz, 30);
     if (cin.gcount()==1)
        cin.getline (znakovni_niz,30);
     };


int dodaj() {
     int pom;
     tzivotinja *novi = new tzivotinja;
     
     cout << "Sifra: " << sifra << endl;
     novi->sifra = sifra;
     cout << "Naziv: ";
     unos(novi->naziv);
     cout << "Vrsta: ";
     unos(novi->vrsta);
     cout << "Cijena: ";
     cin >> novi->cijena;
     cout << "Datum dostave: " << endl;
     
     cout << "Godina: ";
     do{cin >> pom;
     if (pom<2000 || pom >2050) {
        cout << "Godina mora biti u rasponu 2000-2050" << endl;
        cout << "Godina: ";
        }
     }while(pom<2000 || pom >2050);
     (novi->datum).tm_year = pom;
     
     cout << "Mjesec: ";
     do{cin >> pom;
     if (pom<1 || pom >12) {
        cout << "Mjesec mora biti u rasponu 1-12" << endl;
        cout << "Mjesec: ";
        }
     }while(pom<1 || pom >12);
     (novi->datum).tm_mon = pom;
     
     cout << "Dan: ";
     if ((novi -> datum).tm_mon == 1 || (novi -> datum).tm_mon == 3 || (novi -> datum).tm_mon == 5 || (novi -> datum).tm_mon == 7 || (novi -> datum).tm_mon == 8 || (novi -> datum).tm_mon == 10 || (novi -> datum).tm_mon == 12) {
     do{cin >> pom; 
     if (pom<0 || pom >32) {
        cout << "Dan mora biti u rasponu 0-31" <<endl;
        cout << "Dan: ";
        }
     } while(pom<0 || pom >32);
     }
     
     if ((novi -> datum).tm_mon == 4 || (novi -> datum).tm_mon == 6 || (novi -> datum).tm_mon == 9 || (novi -> datum).tm_mon == 11) {
     do{cin >> pom; 
     if (pom<0 || pom >31) {
        cout << "Dan mora biti u rasponu 0-30" <<endl;
        cout << "Dan: ";
        }
     } while(pom<0 || pom >31);
     }
     
     if ((novi -> datum).tm_mon == 2) {
        if (((novi -> datum).tm_year) % 4 == 0) {
        do{cin >> pom; 
        if (pom<0 || pom >30) {
           cout << "Dan mora biti u rasponu 0-29" <<endl;
           cout << "Dan: ";
           }
        } while(pom<0 || pom > 30);
        }
        else {
             do{cin >> pom; 
        if (pom<0 || pom >28) {
           cout << "Dan mora biti u rasponu 0-28" <<endl;
           cout << "Dan: ";
           }
        } while(pom<0 || pom > 28);
        }
     }
     
     (novi->datum).tm_mday = pom;
     
     
     return (insertL(novi,endL(lista),lista));     
     }
     
void ispisi_listu() {
     tzivotinja tekuci;
     for(int i = endL(lista)-1; i>0;i--){
             tekuci = retrieveL(previousL(i,lista), lista);
             cout << "Sifra: " << tekuci.sifra << endl;
             cout << "Naziv: " << tekuci.naziv << endl;
             cout << "Vrsta: " << tekuci.vrsta << endl;
             cout << "Cijena: " << tekuci.cijena << endl;
             cout << "Datum dostave: " << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon << "." << (tekuci.datum).tm_year << "." << endl<<endl;
             }     
     }

int pretrazi_listu() {
     tzivotinja tekuci;
     int br=0;
     for(int i = endL(lista)-1; i>0;i--){
             tekuci = retrieveL(previousL(i,lista), lista);
             if(!((tekuci.datum).tm_year < 2012 
              || ((tekuci.datum).tm_year == 2012 && ((tekuci.datum).tm_mon) < 9)
              || ((tekuci.datum).tm_year == 2012 && ((tekuci.datum).tm_mon) == 9) && (tekuci.datum).tm_mday <= 23)){
                  cout << "Sifra: " << tekuci.sifra << endl;
                  cout << "Naziv: " << tekuci.naziv << endl;
                  cout << "Vrsta: " << tekuci.vrsta << endl;
                  cout << "Cijena: " << tekuci.cijena << endl;
                  cout << "Datum dostave: " << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon << "." << (tekuci.datum).tm_year << "." << endl<<endl;
                  br++;
                  }
             }
     return br;
     }

int obrisi_prema_nazivu(){
     tzivotinja tekuci;
     cout << "Unesite naziv zivotinje za brisanje: ";
     char naziv[30];
     bool nadjeno = false;
     unos(naziv);
     for(int i = endL(lista)-1; i>0 && !nadjeno;i--){
             tekuci = retrieveL(previousL(i,lista), lista);
             if(strcmp(naziv,tekuci.naziv)==0){
                 cout << "Jeste li sigurni da zelite obrisati zapis (d/n): " << endl << endl;         
                 cout << "Sifra: " << tekuci.sifra << endl;
                 cout << "Naziv: " << tekuci.naziv << endl;
                 cout << "Vrsta: " << tekuci.vrsta << endl;
                 cout << "Cijena: " << tekuci.cijena << endl;
                 cout << "Datum dostave: " << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon << "." << (tekuci.datum).tm_year << "." << endl<<endl;
                 nadjeno = true;
                 char izbor;
                 cout << "(d/n) >> ";
                 do{cin >>izbor;} while(izbor!='d' && izbor!='n');
                 if(izbor=='d') deleteL(i-1,lista);
                 else return 0;
                 }
             }    
    return nadjeno; 
    }

int obrisi_prema_vrsti(){
     tzivotinja tekuci;
     cout << "Unesite vrstu zivotinje za brisanje: ";
     char vrsta[30];
     bool nadjeno = false;
     unos(vrsta);
     for(int i = endL(lista)-1; i>0;i--){
             tekuci = retrieveL(previousL(i,lista), lista);
             if(strcmp(vrsta,tekuci.vrsta)==0){
                 char izbor;
                 if(!nadjeno){
                              cout << "Jeste li sigurni da zelite obrisati zapise ove vrste: " << vrsta << endl << endl;
                              cout << "(d/n) >> ";
                              do{cin >>izbor;} while(izbor!='d' && izbor!='n');
                              }
                 if(izbor=='d') deleteL(i-1,lista);
                 nadjeno = true;
                 }
             }    
    return nadjeno; 
    }


void spoji(int i, int k, int j) {
     int I=i, J=k+1, K=0;
     tzivotinja *b = new tzivotinja [j-i+1];
     tzivotinja prvi,drugi;
     
     while(I<=k && J<=j){
                
                prvi=retrieveL(I,lista);
                drugi=retrieveL(J,lista);
                
                if(prvi.cijena > drugi.cijena) {
                b[K++]=prvi;
                I++; 
                }
                
                else if(prvi.cijena < drugi.cijena){
                     b[K++]=drugi;
                     J++;
                     }
                else if(strcmp(prvi.naziv,drugi.naziv)==-1) {
                     b[K++]=drugi;
                     J++;
                     }
                else {
                     b[K++]=prvi;
                     I++;
                     }
                      }

     if(I>k) while(J<=j) { 
             drugi=retrieveL(J,lista);                     
             b[K++] = drugi;
             J++;
             }
             
     else while(I<=k) {
          prvi=retrieveL(I,lista);
          b[K++] = prvi;
          I++;
          }
     
     for(int I=0;I<=j-i;I++) Vrati(b[I],i+I,lista);
             
     delete [] b;
     }
    
void msort(int i, int j) {
     if(i<j) {
             int k=(i+j)/2;
             msort(i,k);
             msort(k+1,j);
             spoji(i,k,j);
             }
     }

void sortiraj() {
     int br_elem = endL(lista)-1;
     msort(0,br_elem-1);
     reverse(lista);
     }


int izbornik(){
    int izbor;
    cout << "-------------------------------" << endl;
    cout << "        GLAVNI IZBORNIK        " << endl;
    cout << "-------------------------------" << endl;
    cout << " 1) Dodavanje zapisa" << endl;
    cout << " 2) Ispis liste" << endl;
    cout << " 3) Ispis zivotinja dostavljenih nakon 23.09.2012." << endl;
    cout << " 4) Brisanje prema nazivu" << endl;
    cout << " 5) Brisanje prema vrsti" << endl;
    cout << " 6) Sortiranje liste" << endl;
    cout << " 9) Izlaz iz programa" << endl;
    cout << endl;
    cin >> izbor;
    return izbor;
    }


int main(){
    
    initL(lista);
    int izbor = 0;
    do {
        izbor = izbornik();
        switch(izbor){
                      case 1: 
                           cout << (dodaj()? "Zapis uspjesno dodan!\n" : "Zapis nije dodan\n");
                           break;
                      case 2:
                           ispisi_listu();
                           break;
                      case 3:
                           cout<< "Ispisan(o) je " << pretrazi_listu() << " zapis(a).\n";
                           break;
                      case 4:
                           if(obrisi_prema_nazivu())
                             cout << "Zapis izbrisan"<<endl<<endl;
                           else cout << "Nije pronadjen zapis s tim nazivom / zapis nije obrisan" << endl;
                           
                           break;
                      case 5:
                           if(obrisi_prema_vrsti())
                             cout << "Zivotinje te vrste su obrisane" << endl;
                           else cout << "Ne postoji zapis te vrste" << endl;
                           break;
                      case 6:
                           sortiraj();
                           break;
                      }
        
        }while (izbor!=9);

    return 0;
    }

Initial URL


Initial Description
Koliko sam primjetio, drugi studenti uglavnom nisu koristili biblioteku "time.h", neke od razlika su i kod upisivanja datuma, postoje razlike u vizualnom dijelu programa.

Initial Title
Zadatak 1 Main program Mario Milutin

Initial Tags


Initial Language
C++