/ Published in: C++
Lista sa arrayem
Expand |
Embed | Plain Text
#include <iostream> #include <string> #include <stdlib.h> using namespace std; static struct zivine { string datum; int sifra; float cijena; string naziv, tip; } ; zivine * lista = new zivine[30]; int sifra = 100; int counter = 0; static string napraviDatum() { string datum; long dan = 0, mjesec = 0, godina = 0; errno = 0; datum = ""; char *end; cout<<"Upisi datum: "<<endl; cin>>datum; if (datum.length() == 10) { dan = strtol(datum.substr(0, 2).c_str(), &end, 10); if ((errno == ERANGE && dan == LONG_MAX) || dan > INT_MAX || dan < INT_MIN) { cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl; return ""; } else { mjesec = strtol(datum.substr(3, 2).c_str(), &end, 10); if ((errno == ERANGE && dan == LONG_MAX) || mjesec > INT_MAX || dan < INT_MIN) { cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl; return ""; } else { godina = strtol(datum.substr(6, 4).c_str(), &end, 10); if ((errno == ERANGE && dan == LONG_MAX) || godina > INT_MAX || dan < INT_MIN) { cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl; return ""; } else { return datum; } } } } else { cout<<"Nije datum. Mjesec napisi sa dvije znamenke, npr: \"09\" a ne \"9\""<<endl; return ""; } } static zivine createUnos() { zivine unos; cout<<"Upisi tip: "<<endl; cin>>unos.tip; cout<<"Upisi naziv: "<<endl; cin>>unos.naziv; cout<<"Upisi cijenu: "<<endl; cin>>unos.cijena; unos.sifra = sifra; sifra++; unos.datum = napraviDatum(); return unos; } static int Add() { zivine novi = createUnos(); if (novi.datum != "") { lista[counter] = novi; counter++; return 1; } else return 0; } static int Add(int pozicija) { zivine novi = createUnos(); if (novi.datum != "") { lista[pozicija] = novi; return 1; } else return 0; } static int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } static void Ispis() { if (counter == 0) cout<<"Nije jos nista uneseno!"<<endl; else { cout<<"Ukupni broj unosa: "<<counter-1<<endl; cout<<"-----------------"<<endl; int izbor; cout<<"Ispis: "<<endl; cout<<"1 - silazno (po redu unosa)"<<endl; cout<<"2 - uzlazno (po redu unosa)"<<endl; cout<<"3 - silazno (po sifri)"<<endl; cout<<"4 - uzlazno (po sifri)"<<endl; cout<<"5 - svi nakon 23.9.2012"<<endl; cin>> izbor; switch (izbor) { case 1: { for (int i=0; i< counter; i++) { cout<<"Unos: "<<i+1<<endl; cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } }; break; case 2: { for (int i=0; i< counter; i++) { cout<<"Unos: "<<counter-i<<endl; cout<<"Sifra: "<<lista[counter-1 -i].sifra<<endl; cout<<"\tNaziv: "<<lista[counter-1 -i].naziv<<endl; cout<<"\tTip: "<<lista[counter-1 -i].tip<<endl; cout<<"\tCijena: "<<lista[counter-1 -i].cijena<<endl; cout<<"\tDatum: "<<lista[counter-1 -i].datum<<endl; cout<<"--------------------------------"<<endl; } }; break; case 3: { int * index = new int[counter]; for (int i = 0; i < counter; i++) { index[i] = lista[i].sifra; } qsort(index, counter, 4, compare); for (int x = 0; x < counter; x++) { for (int i = 0; i < counter; i++) { if (index[x] == lista[i].sifra) { cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } } } }; break; case 4: { int * index = new int[counter]; for (int i = 0; i < counter; i++) { index[i] = lista[i].sifra; } qsort(index, counter, 4, compare); for (int x = 0; x < counter; x++) { for (int i = 0; i < counter; i++) { if (index[counter-x] == lista[i].sifra) { cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } } } }; break; case 5: { char *end; for (int i = 0; i < counter; i++) { if (long godina = strtol(lista[i].datum.substr(6, 4).c_str(), &end, 10) >= 2012) if (long mjesec = strtol(lista[i].datum.substr(3, 2).c_str(), &end, 10) >= 9 || godina > 2012) { if (long dan = strtol(lista[i].datum.substr(0, 2).c_str(), &end, 10) >= 23 || mjesec > 9 || godina > 2012) { cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } } } };break; default: break; } return; } } static void OffsetByOne(int position) { int temp_buffer = counter; for (int i=position; i<=counter; i++) { lista[temp_buffer+1] = lista[temp_buffer]; temp_buffer--; } counter++; } static void Insert( ) { if (counter != 0) { int position; cout<<"Index pozicije? 0-"<<counter-1<<" \n>>"<<endl; cin>>position; if (position >= 0) { if (position < counter) { OffsetByOne(position); Add(position); } else { cout<<"Unesen broj veci od najveceg postojeceg indeksa. Probaj opet!"<<endl; return; } } else { cout<<"Unesen broj manji od nule. Daj, stvarno."<<endl; return; } } else { cout<<"Lista je trenutno prazna. Iskoristi dodavanje unosa na kraj (opcija #1)"<<endl; return; } } static void Delete( ) { if (counter != 0) { int position; cout<<"Index pozicije? 0-"<<counter-1<<" \n>>"<<endl; cin>>position; if (position >= 0) { if (position < counter) { for (int i=position; i<=counter; i++) { lista[position] = lista[position + 1]; } counter--; } else { cout<<"Unesen broj veci od najveceg postojeceg indeksa. Aborting."<<endl; return; } } else { cout<<"Unesen broj manji od nule. Aborting."<<endl; return; } } else { cout<<"Lista je trenutno prazna. Nema se kaj obrisati!"<<endl; return; } } static void Delete(int position) { for (int i=position; i<=counter; i++) { lista[position] = lista[position + 1]; } counter--; } static void DeleteAll() { if (counter != 0) counter = 0; else cout<<"Nemoze, ali ionak nema nist. \n"<<endl; } static void DeleteBy() { if (counter != 0) { int total = 0; int * individual = new int[]; int izbor; cout<<endl; cout<<"Brisanje po: "<<endl; cout<<"1 - Naziv"<<endl; cout<<"2 - Tip"<<endl; cin>>izbor; switch (izbor) { case 1: { string naziv; cout<<endl; cout<<"Unesite naziv: (case sensitive!)"<<endl; cin>>naziv; for (int i=0; i<counter; i++) { if (lista[i].naziv == naziv) { Delete(i); total++; individual[i] = lista[i].sifra; } } }; break; case 2: { string tip; cout<<endl; cout<<"Unesite tip: (case sensitive!)"<<endl; cin>>tip; for (int i = 0; i < counter; i++) { if (lista[i].tip == tip) { Delete(i); total++; individual[i]=lista[i].sifra; } } }; break; default: { cout<<"Krivi odabir!"<<endl; return; }; break; }; if (total != 0) { cout<<endl; cout<<"Obrisano "<<total<<" elemenata sa siframa: "<<endl; for (int i = 0; i < total; i++) { cout<<individual[i]<<endl; } } else { cout<<"Nije nadjeno!"<<endl; return; } } else { cout<<"Nema elemenata u listi"<<endl; return; } } static void Locate() { int izbor = 0; cout<<"\n-----------------"<<endl; cout<<"Pretraga po: "<<endl; cout<<"1 - Index"<<endl; cout<<"2 - Sifra"<<endl; cout<<"3 - Cijena" <<endl; cin>>izbor; switch (izbor) { case 1: { cout<<"Ispis unosa na kojem indeksu? 0-"<<counter-1<<endl; cin>>izbor; if (izbor >= 0) { if (izbor<counter) { cout<<"Sifra: "<<lista[izbor].sifra<<endl; cout<<"\tNaziv: "<<lista[izbor].naziv<<endl; cout<<"\tTip: "<<lista[izbor].tip<<endl; cout<<"\tCijena: "<<lista[izbor].cijena<<endl; cout<<"\tDatum: "<<lista[izbor].datum<<endl; cout<<"--------------------------------"<<endl; } else { cout<<"Indeks je veci od broja elemenata liste!"<<endl; return; } } else { cout<<"Pa nemoze indeks biti manji od nule!"<<endl; return; } } break; case 2: { cout<<"Unesite trazenu sifru: "; cin>>izbor; if (izbor>=100) { for (int i=0; i<counter; i++) { if (lista[i].sifra == izbor) { cout<<"Unos: "<<i+1<<endl; cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } } } else { cout<<"Sifre pocinju od 100, nadalje"<<endl; return; } } break; case 3: { float cijena; cout<<"Unesite trazenu cijenu: "; cin>>cijena; for (int i=0; i<counter; i++) { if (lista[i].cijena == cijena) { cout<<"Unos: "<<i+1<<endl; cout<<"Sifra: "<<lista[i].sifra<<endl; cout<<"\tNaziv: "<<lista[i].naziv<<endl; cout<<"\tTip: "<<lista[i].tip<<endl; cout<<"\tCijena: "<<lista[i].cijena<<endl; cout<<"\tDatum: "<<lista[i].datum<<endl; cout<<"--------------------------------"<<endl; } } } break; default: { cout<<"Unos more biti samo 1, 2 ili 3!"<<endl; return; } } }
You need to login to post a comment.
