/ Published in: C++
Ono što ja mislim da čini moj program posebnim je funkcija za dobivanje vrijednosti datuma Vr_Broj().
Expand |
Embed | Plain Text
#include <iostream> #include <cstdlib> #include <cstring> #include "lista_polje.h" //#include "lista_pokazivac.h" using namespace std; short sifra = 1; bool Dodaj_zapis(lista *L) { s_zapis unos; unos.sifra = sifra; cin.ignore(); cout << "Vrsta: "; cin.getline(unos.vrsta, 50); cout << "Naziv: "; cin.getline(unos.naziv,50); cout << "Cijena: "; cin >> unos.cijena; cout << "Datum - " << endl; cout << "- dan: "; cin >> unos.datum.dan; cout << "- mjesec: "; cin >> unos.datum.mjesec; cout << "- godina: "; cin >> unos.datum.godina; bool ispravno = true; if (unos.vrsta[0]==NULL) ispravno = false; if (unos.naziv[0]==NULL) ispravno = false; if (unos.cijena<0) ispravno = false; if (unos.datum.mjesec<1 || unos.datum.mjesec>12) ispravno = false; if (unos.datum.mjesec==1 || unos.datum.mjesec==3 || unos.datum.mjesec==5 || unos.datum.mjesec==7 || unos.datum.mjesec==8 || unos.datum.mjesec==10 || unos.datum.mjesec==12) if (unos.datum.dan<1 || unos.datum.dan>31) ispravno = false; if (unos.datum.mjesec==4 || unos.datum.mjesec==6 || unos.datum.mjesec==9 || unos.datum.mjesec==11) if (unos.datum.dan<1 || unos.datum.dan>30) ispravno = false; if (unos.datum.godina%4==0 && unos.datum.mjesec==2) if (unos.datum.dan<1 || unos.datum.dan>29) ispravno = false; if (unos.datum.godina%4 && unos.datum.mjesec == 2) if (unos.datum.dan<1 || unos.datum.dan>28) ispravno = false; if (ispravno) { InsertL(unos, EndL(L), L); sifra++; return true; } else return false; } void Ispisi_listu(lista *L) { element zadnji = EndL(L); s_zapis podaci; cout << "---------" << endl; while (zadnji != FirstL(L)) { zadnji = PreviousL(zadnji,L); podaci = RetrieveL(zadnji,L); cout << "Sifra: " << podaci.sifra << endl; cout << "Vrsta: " << podaci.vrsta << endl; cout << "Naziv: " << podaci.naziv << endl; cout << "Cijena: " << podaci.cijena << endl; cout << "Datum: " << podaci.datum.dan << '.' << podaci.datum.mjesec << '.' << podaci.datum.godina << '.' << endl << endl; } } float Vr_Broj(short d, short m, short g) { float rez = (float)d + (((float)m/12)*365) + ((float)g*365); return rez; } int Nakon_23092012(lista *L) { element zadnji = PreviousL(EndL(L), L); element prvi = PreviousL(FirstL(L), L); s_zapis podaci; int koliko = 0; cout << "---------" << endl; while (zadnji != prvi) { podaci = RetrieveL(zadnji,L); if (Vr_Broj(podaci.datum.dan, podaci.datum.mjesec, podaci.datum.godina) > Vr_Broj(23,9,2012)) { cout << "Sifra: " << podaci.sifra << endl; cout << "Vrsta: " << podaci.vrsta << endl; cout << "Naziv: " << podaci.naziv << endl; cout << "Cijena: " << podaci.cijena << endl; cout << "Datum: " << podaci.datum.dan << '.' << podaci.datum.mjesec << '.' << podaci.datum.godina << '.' << endl << endl; koliko++; } zadnji = PreviousL(zadnji,L); } return koliko; } bool Brisi_prema_nazivu(lista *L) { cout << "Unesi naziv zivotinje koju zelite izbrisati: "; cin.ignore(); s_zapis unos; cin.getline(unos.naziv, 50); element lokacija = LocateL(unos, L); if (DeleteL(lokacija, L)) return true; else return false; } bool Brisi_prema_vrsti(lista *L) { cout << "Unesi vrste zivotinje koju zelite izbrisati: "; cin.ignore(); s_zapis unos; cin.getline(unos.vrsta, 50); bool brisao = false; element lokacija; do { lokacija = LocateL(unos, L); if (lokacija == EndL(L)) break; if (DeleteL(lokacija, L)) brisao = true; } while (lokacija != EndL(L)); if (brisao) return true; return false; } void MergeSort(s_zapis polje[], int L, int R) { int i, j, k, m; if (L < R) { m = (L+R)/2; MergeSort(polje, L, m); MergeSort(polje, m+1, R); i=L; j=m+1; k=L; s_zapis *pom_polje = new s_zapis[R-L+1]; while (i<=m && j<=R) if (polje[i].cijena > polje[j].cijena) pom_polje[k++] = polje[i++]; else if (polje[i].cijena < polje[j].cijena) pom_polje[k++] = polje[j++]; else if (strcmp(polje[i].naziv, polje[j].naziv) > 0) pom_polje[k++] = polje[i++]; else pom_polje[k++] = polje[i++]; while (i<=m) pom_polje[k++] = polje[i++]; while (j<=R) pom_polje[k++] = polje[j++]; for (k=L; k<=R; k++) polje[k] = pom_polje[k]; } } void MergeSort(lista *L) { s_zapis podaci[100]; element pozicija = FirstL(L); int br = 0; while (pozicija != EndL(L)) { podaci[br] = RetrieveL(pozicija, L); pozicija = NextL(pozicija, L); br++; } MergeSort(podaci, 0, br-1); cout << "---------" << endl; for (int i=0; i<br; i++) { cout << "Sifra: " << podaci[i].sifra << endl; cout << "Vrsta: " << podaci[i].vrsta << endl; cout << "Naziv: " << podaci[i].naziv << endl; cout << "Cijena: " << podaci[i].cijena << endl; cout << "Datum: " << podaci[i].datum.dan << '.' << podaci[i].datum.mjesec << '.' << podaci[i].datum.godina << '.' << endl << endl; } } int main() { lista *zapisi; zapisi = InitL(zapisi); short odabir; while (1) { system("cls"); cout << "1. Dodaj zapis" << endl; cout << "2. Ispisi sadrzaj liste" << endl; cout << "3. Ispisi zivotinje koje su dostavljene nakon 23. rujna 2012" << endl; cout << "4. Brisi zivotinju prema nazivu" << endl; cout << "5. Brisi zivotinje prema vrsti" << endl; cout << "6. Silazno sortiraj zapise zivotinja" << endl; cout << "0. Izadi iz programa" << endl; cout << "-----------------------------" << endl << endl; do { cout << "Vas odabir: "; cin >> odabir; } while (odabir!=1 && odabir!=2 && odabir!=3 && odabir!=4 && odabir!=5 && odabir!=6 && odabir!=0); cout << endl; switch (odabir) { case 1: { if (Dodaj_zapis(zapisi)) cout << "Uspjesno ste unijeli zapis." << endl; else cout << "Zapis nije pravilan." << endl; break; } case 2: { Ispisi_listu(zapisi); break; } case 3: { cout << "Broj zivotinja dostavljenih nako 29.03.2012.: " << Nakon_23092012(zapisi) << endl; break; } case 4: { if (Brisi_prema_nazivu(zapisi)) cout << "Uspjesno ste izbrisali zapis." << endl; else cout << "Zapis nije pronaden." << endl; break; } case 5: { if (Brisi_prema_vrsti(zapisi)) cout << "Uspjesno ste izbrisali zapise." << endl; else cout << "Zapisi nisu pronadeni." << endl; break; } case 6: { MergeSort(zapisi); cout << "Sortirano." << endl; break; } default: return 0; } system("pause"); } }
You need to login to post a comment.
