Return to Snippet

Revision: 60653
at November 12, 2012 04:52 by nikym23


Initial Code
#include <iostream>
#include "lista_polje1.h"
//#include "lista_pokazivaca.h"
using namespace std;

void unos_niza(char *polje){
  cin.getline(polje, 100);
  if(cin.gcount()==1) cin.getline(polje,100);
}
lista *lis=InitL(lis);    
int broj_ziv=1;
int broj_zivotinja=0;
int ukupni_datum;
int unos(lista *lis){
     
     zivotinje zivotinja;
     cout<<"Sifra zivotinje:  "<<broj_ziv<<endl;
     zivotinja.sifra=broj_ziv;
     cout<<"Naziv zivotinje: ";
     unos_niza(zivotinja.naziv);
     cout<<"Vrsta zivotinje: ";
     unos_niza(zivotinja.vrsta);
     cout<<"Datum ispuruke: "<<endl;
     do{
     cout<<"\t dan: ";    
     cin>>zivotinja.d;}while(zivotinja.d<=0 || zivotinja.d>32);
     do{   
     cout<<"\t mjesec: ";  
     cin>>zivotinja.m;}while(zivotinja.m<=0 || zivotinja.m>12);
     do{
     cout<<"\t godina: ";
     cin>>zivotinja.g;}while(zivotinja.g<=1970 || zivotinja.g>2020);
     cout<<"Unesite cijenu: ";
     cin>>zivotinja.cijena;
     cout<<"Da li je vece od 23.09.2012?"<<endl;
     ukupni_datum=zivotinja.d+(31*(zivotinja.m-1))+(12*31*(zivotinja.g-1));
     zivotinja.dat=ukupni_datum;
     cout<<"*****************"<<endl;
     int provjeri = InsertL(zivotinja, EndL(lis), lis);
     if(provjeri==1){
     cout<<endl<<"Zapis je unesen" << endl;
     broj_zivotinja++;
     broj_ziv++;
     return 1;
  }
  else return 0;
 
}
void obrnuti_redosljed(lista *lis){
     
     element zadnji = PreviousL(EndL(lis), lis);
     zivotinje zivotinja;
     
if(EndL(lis) == FirstL(lis)){
             cout << "Lista je prazna";
             return;
             }
while(zadnji >= FirstL(lis)){
             
    zivotinja = RetrieveL(zadnji, lis);
                 cout<<"Sifra zivotinje: "<<zivotinja.sifra<<endl;
                 cout<<"naziv zivotinje: "<<zivotinja.naziv<<endl;
                 cout<<"vrsta zivotine : "<<zivotinja.vrsta<<endl;
                 cout<<"Datum ispuruke : "<<zivotinja.d<<"."<<zivotinja.m<<"."<<zivotinja.g<<endl;
                 cout<<"Unesena cijena : "<<zivotinja.cijena<<endl;
                 cout<<"-----------------"<<endl;
                 zadnji = PreviousL(zadnji, lis);
  }
}
     
void ispis() {
zivotinje a;
element p=FirstL(lis);
while (p!=EndL(lis)){
a=RetrieveL(p,lis);
cout<<"Sifra: "<<a.sifra<<endl;
cout<<"Vrsta: "<<a.vrsta<<endl;
cout<<"Naziv: "<<a.naziv<<endl;
cout<<"Cijena: "<<a.cijena<<endl;
cout<<"Datum ispuruke : "<<a.d<<"."<<a.m<<"."<<a.g<<endl;

cout<<"-------------------------------\n";
p = NextL(p,lis);
}
}


void pretraga(){
  system("cls");
  int brojac=0;
  zivotinje ziv;
  element last=PreviousL(EndL(lis), lis);
  if(EndL(lis) !=FirstL(lis))
    while(true){
      ziv=RetrieveL(last, lis);
     
     if(ziv.dat>748363){
        cout<<"Sifra zivotinje: "<<ziv.sifra<<endl;
             cout<<"naziv zivotinje: "<<ziv.naziv<<endl;
             cout<<"vrsta zivotine : "<<ziv.vrsta<<endl;
             cout<<"Datum ispuruke : "<<ziv.d<<"."<<ziv.m<<"."<<ziv.g<<endl;
             cout<<"Unesena cijena : "<<ziv.cijena<<endl;
             cout<<"-----------------"<<endl;
       brojac++;
      }
      if(last==FirstL(lis)) break;
      last=PreviousL(last, lis);
    }
  
                  cout<<"Zbroj zivotinja nakon 23.rujna 2012 : " <<brojac<<endl;
  
}


int brisanje_naziv (lista *lis){
char naz[20];
cout << "Unesi naziv zivotinje: ";
unos_niza(naz);
element pozicija=FirstL(lis);
zivotinje ziv;
 
while (pozicija != EndL(lis)) {
      
          ziv = RetrieveL(pozicija, lis);
          if (strcmp(ziv.naziv, naz) != 0) {
                                pozicija = NextL (pozicija, lis);
          }
    else {
         
         DeleteL (pozicija, lis);
         broj_ziv--;
         return 1;
      
         }
   }
   return 0;
}

int brisanje_vrsta(lista *lis){
    char vrsta[30];
    cout << "Unesite vrstu zivotinja za brisanje: "; unos_niza(vrsta);
     element pozicija=FirstL(lis);
    zivotinje ziv;
    bool postoji=false;
     
    while (pozicija != EndL(lis)) {
          
              ziv = RetrieveL(pozicija, lis);
              if (strcmp(ziv.vrsta, vrsta) != 0) {
                                    pozicija = NextL (pozicija, lis);
              }
        else {
             
             DeleteL (pozicija, lis);
             broj_ziv--;
             
             postoji=true;
             }
       }
    if(postoji) return 1;
else return 0;
}     
                        
void mergesort(zivotinje*a, zivotinje *b, int l, int r){
     int i, j, k, m;
     if(l < r){
            m = (r+l) / 2;
            mergesort(a, b, l, m);
            mergesort(a, b, m+1, r);
            i = l; j = m+1; k = l;
         while((i <= m) && (j <= r)){
             
            if(a[i].cijena>a[j].cijena || ((a[i].cijena==a[j].cijena)&&(strncmp(a[i].naziv, a[j].naziv, sizeof(a[i].naziv))>0)))
            memcpy(&b[k++], &a[i++], sizeof(zivotinje));
            else
            memcpy(&b[k++], &a[j++], sizeof(zivotinje));
            }
        while(i <= m)
                memcpy(&b[k++], &a[i++], sizeof(zivotinje));
        while(j <= r)
                memcpy(&b[k++], &a[j++], sizeof(zivotinje));
        for(k = l; k <= r; k++)
                memcpy(&a[k], &b[k], sizeof(zivotinje));
        }
}

void sort(){
    zivotinje*a = new zivotinje[broj_zivotinja];
    element tekuci = FirstL(lis);
    int i = 0;
    while(tekuci != EndL(lis)){
                 
        a[i] = RetrieveL(tekuci, lis);
        tekuci = NextL(tekuci, lis);
        i++;
    }
    zivotinje *b = new zivotinje[broj_zivotinja];
    mergesort(a, b, 0, broj_zivotinja-1);
    DeleteAllL(lis);
    InitL(lis);
    
    for(i=0; i<broj_zivotinja; i++)
    InsertL(a[i], EndL(lis), lis);
    delete []a;
    delete []b;
}
int main(){
      
    
    int izbor;
    do{    cout<<"IZBORNIK"<<endl;
           cout<<"------------------"<<endl;
           cout<<"1.dodavanje zapisa u listu "<<endl;
           cout<<"2.Ispis zapisa "<<endl;
           cout<<"3.ispis svih zivotinja nakon 23.rujna 2012"<<endl;
           cout<<"4.brisanje prema nazivu "<<endl;
           cout<<"5.brisanje prema vrsti"<<endl;
           cout<<"6.Sortiranje prema cijeni i nazivu"<<endl;
           cout<<"9.kraj"<<endl;
           cout<<"Vas izbor je: "<<endl;
           cout<<"------------------"<<endl;
           
           cin>>izbor;
           cout<<"------------------"<<endl;
           switch(izbor){
                         case 1: system("cls"); unos(lis);obrnuti_redosljed(lis);break;
                         case 2: system("cls");obrnuti_redosljed(lis);break;
                         case 3: system("cls");pretraga();break;
                         case 4: system("cls");brisanje_naziv(lis);obrnuti_redosljed(lis);break;
                         case 5: system("cls");brisanje_vrsta(lis);obrnuti_redosljed(lis);break;
                         case 6: system("cls");sort();ispis();break;
                         case 9: system("cls");cout<<"Izradio: Nikola Miljancic"<<endl;
                         cout<<"Fakultet organizacije i informatike,Varazdin"<<endl;
                                              
                         
                         }
                    
           
           }while(izbor!=9);
    
    
    
    system("pause");
    return 0;
    }

Initial URL


Initial Description
U glavnom programu se nalaze dvije biblijoteke lista_pokazivaca i lista_polje. Pomocu nje sam napravio program za evidenciju zivotinja.

Initial Title
glavni_program_zadatak_1 Strukture podataka

Initial Tags


Initial Language
C++