Posted By

zjakupec on 11/10/12


Tagged

array lista datum zadatak


Versions (?)

Lista_array.h


 / Published in: C++
 

Lista sa arrayem

  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8.  
  9. static struct zivine
  10. {
  11. string datum;
  12. int sifra;
  13. float cijena;
  14. string naziv, tip;
  15. } ;
  16.  
  17.  
  18. zivine * lista = new zivine[30];
  19.  
  20.  
  21.  
  22. int sifra = 100;
  23. int counter = 0;
  24.  
  25. static string napraviDatum()
  26. {
  27.  
  28.  
  29. string datum;
  30.  
  31. long dan = 0, mjesec = 0, godina = 0;
  32. errno = 0;
  33. datum = "";
  34. char *end;
  35.  
  36. cout<<"Upisi datum: "<<endl;
  37. cin>>datum;
  38.  
  39. if (datum.length() == 10)
  40. {
  41.  
  42. dan = strtol(datum.substr(0, 2).c_str(), &end, 10);
  43. if ((errno == ERANGE && dan == LONG_MAX) || dan > INT_MAX || dan < INT_MIN)
  44. {
  45.  
  46. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  47. return "";
  48. }
  49. else
  50. {
  51.  
  52.  
  53. mjesec = strtol(datum.substr(3, 2).c_str(), &end, 10);
  54. if ((errno == ERANGE && dan == LONG_MAX) || mjesec > INT_MAX || dan < INT_MIN)
  55. {
  56.  
  57.  
  58. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  59. return "";
  60. }
  61. else
  62. {
  63.  
  64.  
  65. godina = strtol(datum.substr(6, 4).c_str(), &end, 10);
  66. if ((errno == ERANGE && dan == LONG_MAX) || godina > INT_MAX || dan < INT_MIN)
  67. {
  68.  
  69. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  70. return "";
  71.  
  72. }
  73. else
  74. {
  75.  
  76. return datum;
  77. }
  78.  
  79. }
  80. }
  81.  
  82. }
  83. else
  84. {
  85. cout<<"Nije datum. Mjesec napisi sa dvije znamenke, npr: \"09\" a ne \"9\""<<endl;
  86. return "";
  87. }
  88. }
  89.  
  90. static zivine createUnos()
  91. {
  92.  
  93.  
  94. zivine unos;
  95.  
  96. cout<<"Upisi tip: "<<endl;
  97. cin>>unos.tip;
  98. cout<<"Upisi naziv: "<<endl;
  99. cin>>unos.naziv;
  100. cout<<"Upisi cijenu: "<<endl;
  101. cin>>unos.cijena;
  102.  
  103.  
  104. unos.sifra = sifra;
  105. sifra++;
  106.  
  107. unos.datum = napraviDatum();
  108.  
  109. return unos;
  110.  
  111.  
  112. }
  113.  
  114. static int Add()
  115. {
  116.  
  117. zivine novi = createUnos();
  118.  
  119. if (novi.datum != "")
  120. {
  121. lista[counter] = novi;
  122.  
  123.  
  124. counter++;
  125. return 1;
  126. }
  127. else return 0;
  128.  
  129. }
  130.  
  131. static int Add(int pozicija)
  132. {
  133.  
  134.  
  135. zivine novi = createUnos();
  136.  
  137. if (novi.datum != "")
  138. {
  139. lista[pozicija] = novi;
  140.  
  141.  
  142. return 1;
  143. }
  144. else return 0;
  145. }
  146.  
  147. static int compare (const void * a, const void * b)
  148. {
  149.  
  150.  
  151. return ( *(int*)a - *(int*)b );
  152. }
  153.  
  154. static void Ispis()
  155. {
  156.  
  157.  
  158. if (counter == 0)
  159.  
  160. cout<<"Nije jos nista uneseno!"<<endl;
  161.  
  162. else
  163. {
  164.  
  165. cout<<"Ukupni broj unosa: "<<counter-1<<endl;
  166. cout<<"-----------------"<<endl;
  167.  
  168. int izbor;
  169. cout<<"Ispis: "<<endl;
  170. cout<<"1 - silazno (po redu unosa)"<<endl;
  171. cout<<"2 - uzlazno (po redu unosa)"<<endl;
  172. cout<<"3 - silazno (po sifri)"<<endl;
  173. cout<<"4 - uzlazno (po sifri)"<<endl;
  174. cout<<"5 - svi nakon 23.9.2012"<<endl;
  175. cin>> izbor;
  176. switch (izbor)
  177. {
  178. case 1:
  179. {
  180. for (int i=0; i< counter; i++)
  181. {
  182.  
  183.  
  184. cout<<"Unos: "<<i+1<<endl;
  185. cout<<"Sifra: "<<lista[i].sifra<<endl;
  186. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  187. cout<<"\tTip: "<<lista[i].tip<<endl;
  188. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  189. cout<<"\tDatum: "<<lista[i].datum<<endl;
  190. cout<<"--------------------------------"<<endl;
  191.  
  192. }
  193. }; break;
  194.  
  195. case 2:
  196. {
  197. for (int i=0; i< counter; i++)
  198. {
  199.  
  200.  
  201. cout<<"Unos: "<<counter-i<<endl;
  202. cout<<"Sifra: "<<lista[counter-1 -i].sifra<<endl;
  203. cout<<"\tNaziv: "<<lista[counter-1 -i].naziv<<endl;
  204. cout<<"\tTip: "<<lista[counter-1 -i].tip<<endl;
  205. cout<<"\tCijena: "<<lista[counter-1 -i].cijena<<endl;
  206. cout<<"\tDatum: "<<lista[counter-1 -i].datum<<endl;
  207. cout<<"--------------------------------"<<endl;
  208.  
  209. }
  210. }; break;
  211. case 3:
  212. {
  213.  
  214. int * index = new int[counter];
  215.  
  216. for (int i = 0; i < counter; i++)
  217. {
  218. index[i] = lista[i].sifra;
  219. }
  220.  
  221.  
  222. qsort(index, counter, 4, compare);
  223.  
  224.  
  225.  
  226. for (int x = 0; x < counter; x++)
  227. {
  228.  
  229. for (int i = 0; i < counter; i++)
  230. {
  231.  
  232. if (index[x] == lista[i].sifra)
  233. {
  234.  
  235. cout<<"Sifra: "<<lista[i].sifra<<endl;
  236. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  237. cout<<"\tTip: "<<lista[i].tip<<endl;
  238. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  239. cout<<"\tDatum: "<<lista[i].datum<<endl;
  240. cout<<"--------------------------------"<<endl;
  241.  
  242. }
  243.  
  244. }
  245.  
  246.  
  247.  
  248. }
  249.  
  250.  
  251. }; break;
  252.  
  253. case 4:
  254. {
  255.  
  256. int * index = new int[counter];
  257.  
  258. for (int i = 0; i < counter; i++)
  259. {
  260. index[i] = lista[i].sifra;
  261. }
  262.  
  263.  
  264. qsort(index, counter, 4, compare);
  265.  
  266.  
  267.  
  268. for (int x = 0; x < counter; x++)
  269. {
  270. for (int i = 0; i < counter; i++)
  271. {
  272. if (index[counter-x] == lista[i].sifra)
  273.  
  274. {
  275.  
  276. cout<<"Sifra: "<<lista[i].sifra<<endl;
  277. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  278. cout<<"\tTip: "<<lista[i].tip<<endl;
  279. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  280. cout<<"\tDatum: "<<lista[i].datum<<endl;
  281. cout<<"--------------------------------"<<endl;
  282. }
  283. }
  284. }
  285.  
  286.  
  287. }; break;
  288.  
  289. case 5:
  290. {
  291. char *end;
  292.  
  293. for (int i = 0; i < counter; i++)
  294. {
  295. if (long godina = strtol(lista[i].datum.substr(6, 4).c_str(), &end, 10) >= 2012)
  296.  
  297. if (long mjesec = strtol(lista[i].datum.substr(3, 2).c_str(), &end, 10) >= 9 || godina > 2012)
  298. {
  299. if (long dan = strtol(lista[i].datum.substr(0, 2).c_str(), &end, 10) >= 23 || mjesec > 9 || godina > 2012)
  300. {
  301. cout<<"Sifra: "<<lista[i].sifra<<endl;
  302. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  303. cout<<"\tTip: "<<lista[i].tip<<endl;
  304. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  305. cout<<"\tDatum: "<<lista[i].datum<<endl;
  306. cout<<"--------------------------------"<<endl;
  307.  
  308. }
  309. }
  310. }
  311.  
  312.  
  313. };break;
  314.  
  315. default: break;
  316.  
  317. }
  318. return;
  319. }
  320.  
  321. }
  322.  
  323.  
  324.  
  325. static void OffsetByOne(int position)
  326. {
  327.  
  328.  
  329. int temp_buffer = counter;
  330.  
  331. for (int i=position; i<=counter; i++)
  332. {
  333. lista[temp_buffer+1] = lista[temp_buffer];
  334. temp_buffer--;
  335.  
  336. }
  337.  
  338. counter++;
  339. }
  340.  
  341. static void Insert( )
  342. {
  343. if (counter != 0)
  344. {
  345.  
  346.  
  347. int position;
  348. cout<<"Index pozicije? 0-"<<counter-1<<" \n>>"<<endl;
  349. cin>>position;
  350.  
  351. if (position >= 0)
  352. {
  353. if (position < counter)
  354. {
  355.  
  356.  
  357. OffsetByOne(position);
  358. Add(position);
  359. }
  360. else
  361. {
  362. cout<<"Unesen broj veci od najveceg postojeceg indeksa. Probaj opet!"<<endl;
  363. return;
  364. }
  365. }
  366. else
  367. {
  368. cout<<"Unesen broj manji od nule. Daj, stvarno."<<endl;
  369. return;
  370. }
  371. }
  372. else
  373. {
  374. cout<<"Lista je trenutno prazna. Iskoristi dodavanje unosa na kraj (opcija #1)"<<endl;
  375. return;
  376. }
  377. }
  378.  
  379. static void Delete( )
  380. {
  381. if (counter != 0)
  382. {
  383.  
  384.  
  385. int position;
  386. cout<<"Index pozicije? 0-"<<counter-1<<" \n>>"<<endl;
  387. cin>>position;
  388.  
  389. if (position >= 0)
  390. {
  391. if (position < counter)
  392. {
  393.  
  394.  
  395.  
  396. for (int i=position; i<=counter; i++)
  397. {
  398. lista[position] = lista[position + 1];
  399. }
  400. counter--;
  401.  
  402.  
  403. }
  404. else
  405. {
  406. cout<<"Unesen broj veci od najveceg postojeceg indeksa. Aborting."<<endl;
  407. return;
  408. }
  409. }
  410. else
  411. {
  412. cout<<"Unesen broj manji od nule. Aborting."<<endl;
  413. return;
  414. }
  415. }
  416. else
  417. {
  418. cout<<"Lista je trenutno prazna. Nema se kaj obrisati!"<<endl;
  419. return;
  420. }
  421.  
  422. }
  423.  
  424. static void Delete(int position)
  425. {
  426.  
  427. for (int i=position; i<=counter; i++)
  428. {
  429. lista[position] = lista[position + 1];
  430. }
  431. counter--;
  432. }
  433.  
  434. static void DeleteAll()
  435. {
  436.  
  437.  
  438. if (counter != 0)
  439. counter = 0;
  440. else cout<<"Nemoze, ali ionak nema nist. \n"<<endl;
  441.  
  442.  
  443.  
  444.  
  445. }
  446.  
  447. static void DeleteBy()
  448. {
  449.  
  450.  
  451. if (counter != 0)
  452. {
  453. int total = 0;
  454. int * individual = new int[];
  455.  
  456.  
  457. int izbor;
  458. cout<<endl;
  459. cout<<"Brisanje po: "<<endl;
  460. cout<<"1 - Naziv"<<endl;
  461. cout<<"2 - Tip"<<endl;
  462.  
  463. cin>>izbor;
  464.  
  465. switch (izbor)
  466. {
  467. case 1:
  468. {
  469. string naziv;
  470. cout<<endl;
  471. cout<<"Unesite naziv: (case sensitive!)"<<endl;
  472.  
  473. cin>>naziv;
  474.  
  475. for (int i=0; i<counter; i++)
  476. {
  477. if (lista[i].naziv == naziv)
  478. {
  479.  
  480.  
  481. Delete(i);
  482. total++;
  483. individual[i] = lista[i].sifra;
  484.  
  485. }
  486. }
  487. }; break;
  488. case 2:
  489. {
  490. string tip;
  491. cout<<endl;
  492. cout<<"Unesite tip: (case sensitive!)"<<endl;
  493. cin>>tip;
  494.  
  495. for (int i = 0; i < counter; i++)
  496. {
  497. if (lista[i].tip == tip)
  498. {
  499.  
  500.  
  501. Delete(i);
  502. total++;
  503. individual[i]=lista[i].sifra;
  504. }
  505. }
  506.  
  507.  
  508. }; break;
  509.  
  510. default:
  511. {
  512. cout<<"Krivi odabir!"<<endl;
  513. return;
  514. }; break;
  515. };
  516.  
  517. if (total != 0)
  518. {
  519. cout<<endl;
  520. cout<<"Obrisano "<<total<<" elemenata sa siframa: "<<endl;
  521. for (int i = 0; i < total; i++)
  522. {
  523. cout<<individual[i]<<endl;
  524. }
  525.  
  526. }
  527. else
  528. {
  529. cout<<"Nije nadjeno!"<<endl;
  530. return;
  531. }
  532.  
  533.  
  534. }
  535. else
  536. {
  537. cout<<"Nema elemenata u listi"<<endl;
  538. return;
  539. }
  540. }
  541.  
  542. static void Locate()
  543. {
  544.  
  545. int izbor = 0;
  546. cout<<"\n-----------------"<<endl;
  547. cout<<"Pretraga po: "<<endl;
  548. cout<<"1 - Index"<<endl;
  549. cout<<"2 - Sifra"<<endl;
  550. cout<<"3 - Cijena" <<endl;
  551.  
  552. cin>>izbor;
  553.  
  554. switch (izbor)
  555. {
  556. case 1:
  557. {
  558. cout<<"Ispis unosa na kojem indeksu? 0-"<<counter-1<<endl;
  559. cin>>izbor;
  560.  
  561. if (izbor >= 0)
  562. {
  563. if (izbor<counter)
  564. {
  565.  
  566.  
  567. cout<<"Sifra: "<<lista[izbor].sifra<<endl;
  568. cout<<"\tNaziv: "<<lista[izbor].naziv<<endl;
  569. cout<<"\tTip: "<<lista[izbor].tip<<endl;
  570. cout<<"\tCijena: "<<lista[izbor].cijena<<endl;
  571. cout<<"\tDatum: "<<lista[izbor].datum<<endl;
  572. cout<<"--------------------------------"<<endl;
  573.  
  574. }
  575. else
  576. {
  577. cout<<"Indeks je veci od broja elemenata liste!"<<endl;
  578. return;
  579. }
  580. }
  581. else
  582. {
  583. cout<<"Pa nemoze indeks biti manji od nule!"<<endl;
  584. return;
  585. }
  586. } break;
  587.  
  588. case 2:
  589. {
  590.  
  591. cout<<"Unesite trazenu sifru: ";
  592. cin>>izbor;
  593. if (izbor>=100)
  594. {
  595. for (int i=0; i<counter; i++)
  596. {
  597. if (lista[i].sifra == izbor)
  598. {
  599.  
  600. cout<<"Unos: "<<i+1<<endl;
  601. cout<<"Sifra: "<<lista[i].sifra<<endl;
  602. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  603. cout<<"\tTip: "<<lista[i].tip<<endl;
  604. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  605. cout<<"\tDatum: "<<lista[i].datum<<endl;
  606. cout<<"--------------------------------"<<endl;
  607. }
  608. }
  609.  
  610. }
  611. else
  612. {
  613. cout<<"Sifre pocinju od 100, nadalje"<<endl;
  614. return;
  615. }
  616. } break;
  617.  
  618. case 3:
  619. {
  620. float cijena;
  621. cout<<"Unesite trazenu cijenu: ";
  622. cin>>cijena;
  623.  
  624. for (int i=0; i<counter; i++)
  625. {
  626. if (lista[i].cijena == cijena)
  627. {
  628.  
  629.  
  630. cout<<"Unos: "<<i+1<<endl;
  631. cout<<"Sifra: "<<lista[i].sifra<<endl;
  632. cout<<"\tNaziv: "<<lista[i].naziv<<endl;
  633. cout<<"\tTip: "<<lista[i].tip<<endl;
  634. cout<<"\tCijena: "<<lista[i].cijena<<endl;
  635. cout<<"\tDatum: "<<lista[i].datum<<endl;
  636. cout<<"--------------------------------"<<endl;
  637. }
  638. }
  639. } break;
  640.  
  641. default:
  642. {
  643. cout<<"Unos more biti samo 1, 2 ili 3!"<<endl;
  644. return;
  645.  
  646. }
  647. }
  648. }

Report this snippet  

You need to login to post a comment.