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