/ Published in: C++
program koji evidentira zivotinje u ducanu kucnim ljubimcima... struktura zivotinja sadrzi sifru, vrstu, naziv, cijenu i datum... u mainu se nalaze funkcije za unos, ispis, sortiranje i brisanje zivotinja...
Expand |
Embed | Plain Text
#include <iostream> #include <cstring> #include <string.h> //#include "implementacija_preko_polja.h" #include "implementacija_preko_pokazivaca.h" using namespace std; int sifra = 1, m = 0, i = 0; struct pomocne_zivotinje{ int sifra; string vrsta, naziv; float cijena; int datum; }pomocna_zivotinja[50]; int upis(lista *l){ zivotinje novi, tekuci; element pozicija = pocetak_liste(l); cout << "sifra: "; cin >> novi.sifra; pomocna_zivotinja[m].sifra = novi.sifra; cout << "vrsta zivotinje: "; cin.ignore(); cin.getline(novi.vrsta,30); pomocna_zivotinja[m].vrsta = novi.vrsta; cout << "naziv: "; cin.getline(novi.naziv,30); pomocna_zivotinja[m].naziv = novi.naziv; cout << "cijena: "; cin >> novi.cijena; pomocna_zivotinja[m].cijena = novi.cijena; cout << "datum dostave (format godina_mjesec_datum bez razmaka, npr.: za 1.sijecanj 2012. upisati 20120101): "; cin >> novi.datum; pomocna_zivotinja[m].datum = novi.datum; while (pozicija != kraj_liste(l)){ tekuci = vrijednost_zivotinje_u_listi(pozicija,l); if (novi.sifra < tekuci.sifra){ return upis_zivotinje(novi,pozicija,l); } pozicija = sljedeca_zivotinja(pozicija,l); } return upis_zivotinje(novi,pozicija,l); } void ispis(lista *l){ element pozicija = kraj_liste(l); pozicija = prethodna_zivotinja(pozicija,l); cout << "-----------------------------------" << endl; while(1){ zivotinje novi = vrijednost_zivotinje_u_listi(pozicija, l); cout << endl; cout << "Sifra: " << novi.sifra << endl; cout << "Vrsta: " << novi.vrsta << endl; cout << "Naziv: " << novi.naziv << endl; cout << "Cijena: " << novi.cijena << endl; cout << "Datum dostave: " << novi.datum << endl; cout << "-----------------------------------" << endl; cout << endl; if(pozicija == pocetak_liste(l)) break; pozicija = prethodna_zivotinja(pozicija, l); } } void pretrazivanje(lista *l){ int brojac = 0; element pozicija = pocetak_liste(l); cout << "-----------------------------------" << endl; do{ zivotinje novi = vrijednost_zivotinje_u_listi(pozicija, l); if (novi.datum > 20120923){ cout << endl; cout << "Sifra: " << novi.sifra << endl; cout << "Vrsta: " << novi.vrsta << endl; cout << "Naziv: " << novi.naziv << endl; cout << "Cijena: " << novi.cijena << " kn" << endl; cout << "Datum dostave: " << novi.datum << endl; cout << "-----------------------------------" << endl; cout << endl; brojac++; } pozicija = sljedeca_zivotinja(pozicija,l); }while(pozicija != kraj_liste(l)); cout << "Broj zivotinja dostavljenih nakon 23.9.2012: " << brojac <<endl; } int brisi_naziv(lista *l){ int obrisano = 0; cout << "Naziv zivotinje koju zelite obrisati: "; zivotinje x,novi; cin.ignore(); cin.getline(x.naziv,30); element lokacija = lociranje_zivotinje_naziv(x,l); element pozicija = pocetak_liste(l); while(pozicija != kraj_liste(l)){ novi = vrijednost_zivotinje_u_listi(pozicija,l); if(strcmp(x.naziv,novi.naziv) == 0){ brisanje_zivotinje(pozicija,l); obrisano = 1; break; } pozicija = sljedeca_zivotinja(pozicija,l); } return obrisano; } int brisi_vrsta(lista *l){ int obrisano=0; cout << "Vrsta zivotinje koju zelite obrisati: "; zivotinje x,novi; cin.ignore(); cin.getline(x.vrsta,30); element lokacija = lociranje_zivotinje_vrsta(x,l); element pozicija = pocetak_liste(l); while(pozicija != kraj_liste(l)){ novi = vrijednost_zivotinje_u_listi(pozicija,l); if(strcmp(x.vrsta,novi.vrsta) == 0){ brisanje_zivotinje(pozicija,l) ; obrisano = 1; #ifdef IMPLEMENTACIJA_PREKO_POLJA_H continue; #endif } pozicija = sljedeca_zivotinja(pozicija,l); novi = vrijednost_zivotinje_u_listi(pozicija,l); } return obrisano; } void spoji(zivotinje A[], int i, int k, int j){ int n; int I = i, J = k + 1, K = 0; zivotinje *B = new zivotinje [j - i + 1]; while (I <= k && J <= j) if (A[I].cijena < A[J].cijena) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); else if (A[I].cijena == A[J].cijena){ if (strcmp((A[I].naziv),(A[J].naziv)) < 0) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); else memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); } else memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); if (I > k) while (J <= j) memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); else while (I <= k) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); for (int I = 0; I <= j - i; I++) memcpy(&A[i+I], &B[I], sizeof(zivotinje) ); delete []B; } void MSort (zivotinje *A, int i, int j){ if (i < j){ int k=(i + j) / 2; MSort(A, i, k); MSort(A, k+1, j); spoji(A, i, k, j); } } void MSort (zivotinje A[], int N){ MSort (A,0,N-1); } void sort (lista *l){ zivotinje novi[1000]; element pozicija = pocetak_liste(l); int n = 0; while (pozicija != kraj_liste(l)){ novi[n] = vrijednost_zivotinje_u_listi(pozicija,l); pozicija = sljedeca_zivotinja(pozicija,l); n++; } MSort(novi,n); int i = 0; n = n - 1; cout << "-----------------------------------" << endl; 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 << " kn" << endl; cout << "datum dostave: " << novi[n].datum << endl; cout << "-----------------------------------" << endl; cout << endl; } } void ispis_od_zadnjeg_unosa(int n){ for(i = m - 1; i >= 0; i--){ cout << "-----------------------------------" << endl; cout << "sifra: " << pomocna_zivotinja[i].sifra << endl; cout << "vrsta: " << pomocna_zivotinja[i].vrsta << endl; cout << "naziv: " << pomocna_zivotinja[i].naziv << endl; cout << "cijena: " << pomocna_zivotinja[i].cijena << " kn" << endl; cout << "datum dostave: " << pomocna_zivotinja[i].datum << endl; } cout<<"-----------------------------------"<<endl; }; int main(){ lista *l = inicijalizacija_liste(l); int izbor; char upit; do{ cout << "Izbronik..."<<endl; cout << "1 - upis zivotinja u listu... " << endl; cout << "2 - ispis sadrzaja liste od sifre koja je posljednja dodana..." << endl; cout << "3 - pretrazivanje liste i ispis liste..." << endl; cout << "4 - brisanje zivotinja iz liste..." << endl; cout << "5 - sortiranje sadrzaja liste..." << endl; cout << "6 - ispis sadrzaja liste..." << endl; cout << "9 - kraj programa..." << endl; cout << "Vas izbor: "; cin>>izbor; cout << "-------------------------------------------------------------" << endl; cout<<endl; switch(izbor){ case 1: upis(l); ispis(l); m++; break; case 2: ispis_od_zadnjeg_unosa(m); cout << endl; break; case 3: pretrazivanje(l); cout << endl; break; case 4: cout << "brisanje prema nazivu (n) ili brisanje vrste (v)... "; cin >> upit; if(upit=='n'){ if(brisi_naziv(l)) cout << endl << "obrisano..." << endl; else cout << endl << "nije obrisano..." << endl; break; } else if (upit=='v'){ if(brisi_vrsta(l)) cout << endl << "obrisano..." << endl; else cout << endl << "nije obrisano..." << endl; break; } else cout << "krivi unos..." << endl; ispis(l); cout << endl; break; case 5: sort(l); cout << endl; break; case 6: ispis(l); case 9: break; } }while(izbor!=9); return 0; }
You need to login to post a comment.
