Revision: 60611
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
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++