Posted By

zjakupec on 11/10/12


Tagged

lista datum zadatak pointeri


Versions (?)

lista_pointer.h


 / Published in: C++
 

Lista sa pointerima, ali sa provjerom formata datuma pri unosu i ispisom posle deklariranog datuma u zadatku, 23.09.2012

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.  
  8.  
  9. static struct zivine
  10. {
  11. string datum;
  12. int sifra;
  13. float cijena;
  14. string naziv, tip;
  15.  
  16. zivine *next;
  17.  
  18. };
  19.  
  20.  
  21.  
  22.  
  23. zivine * root = new zivine;
  24.  
  25.  
  26.  
  27.  
  28.  
  29. int sifra = 100;
  30. int counter = 0;
  31.  
  32.  
  33. static string napraviDatum()
  34. {
  35.  
  36.  
  37. string datum;
  38.  
  39. long dan = 0, mjesec = 0, godina = 0;
  40. errno = 0;
  41. datum = "";
  42. char *end;
  43.  
  44. cout<<"Upisi datum: "<<endl;
  45. cin>>datum;
  46.  
  47. if (datum.length() == 10)
  48. {
  49.  
  50. dan = strtol(datum.substr(0, 2).c_str(), &end, 10);
  51. if ((errno == ERANGE && dan == LONG_MAX) || dan > INT_MAX || dan < INT_MIN)
  52. {
  53.  
  54. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  55. return "";
  56. }
  57. else
  58. {
  59.  
  60.  
  61. mjesec = strtol(datum.substr(3, 2).c_str(), &end, 10);
  62. if ((errno == ERANGE && dan == LONG_MAX) || mjesec > INT_MAX || dan < INT_MIN)
  63. {
  64.  
  65.  
  66. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  67. return "";
  68. }
  69. else
  70. {
  71.  
  72.  
  73. godina = strtol(datum.substr(6, 4).c_str(), &end, 10);
  74. if ((errno == ERANGE && dan == LONG_MAX) || godina > INT_MAX || dan < INT_MIN)
  75. {
  76.  
  77. cout<<"To nije datum, upisi u formatu: DD.MM.YYYY"<<endl;
  78. return "";
  79.  
  80. }
  81. else
  82. {
  83.  
  84. return datum;
  85. }
  86.  
  87. }
  88. }
  89.  
  90. }
  91. else
  92. {
  93. cout<<"Nije datum. Mjesec napisi sa dvije znamenke, npr: \"09\" a ne \"9\""<<endl;
  94. return "";
  95. }
  96. }
  97.  
  98. static zivine createNew()
  99. {
  100. zivine unos;
  101.  
  102.  
  103. cout<<"Upisi tip: "<<endl;
  104. cin>>unos.tip;
  105. cout<<"Upisi naziv: "<<endl;
  106. cin>>unos.naziv;
  107. cout<<"Upisi cijenu: "<<endl;
  108. cin>>unos.cijena;
  109.  
  110.  
  111. unos.sifra = sifra;
  112. sifra++;
  113.  
  114.  
  115.  
  116.  
  117. unos.datum = napraviDatum();
  118.  
  119.  
  120.  
  121.  
  122. unos.next = NULL;
  123.  
  124. return unos;
  125. }
  126.  
  127. static zivine createNew(zivine * temp)
  128. {
  129.  
  130.  
  131.  
  132. zivine unos;
  133.  
  134. cout<<"Upisi tip: "<<endl;
  135. cin>>unos.tip;
  136. cout<<"Upisi naziv: "<<endl;
  137. cin>>unos.naziv;
  138. cout<<"Upisi cijenu: "<<endl;
  139. cin>>unos.cijena;
  140.  
  141. unos.sifra = sifra;
  142. sifra++;
  143.  
  144. unos.datum = napraviDatum();
  145.  
  146. unos.next = temp;
  147.  
  148.  
  149. return unos;
  150. }
  151.  
  152.  
  153.  
  154.  
  155. static int Add()
  156. {
  157.  
  158.  
  159. zivine * novi = new zivine;
  160.  
  161.  
  162.  
  163. *novi = createNew();
  164.  
  165.  
  166.  
  167. if (novi->datum != "")
  168. {
  169.  
  170.  
  171. if (counter==0)
  172. {
  173. root->next = novi;
  174.  
  175. }
  176.  
  177. else
  178. {
  179. zivine * temp = root->next;
  180.  
  181. while (temp->next != NULL) temp=temp->next;
  182.  
  183. temp->next = novi;
  184.  
  185. }
  186. counter++;
  187.  
  188. return 1;
  189. }
  190.  
  191. else return 0;
  192.  
  193. }
  194.  
  195.  
  196.  
  197. static void Ispis()
  198. {
  199. if (counter != 0)
  200. {
  201. cout<<endl;
  202. cout<<"Ispis: "<<endl;
  203. cout<<"1 - silazno"<<endl;
  204. cout<<"2 - uzlazno"<<endl;
  205. cout<<"3 - Datum, kasnije od 23.09.2012"<<endl;
  206.  
  207. int izbor;
  208. cin>>izbor;
  209.  
  210. switch (izbor)
  211. {
  212. case 1:
  213. {
  214. zivine * temp = root->next;
  215.  
  216.  
  217.  
  218. while (temp != NULL)
  219. {
  220. cout<<endl;
  221. cout<<"Tip: "<<temp->tip<<endl;
  222. cout<<"Naziv: "<<temp->naziv<<endl;
  223. cout<<"Cijena: "<<temp->cijena<<endl;
  224. cout<<"Datum: "<<temp->datum<<endl;
  225. cout<<"Sifra: "<<temp->sifra<<endl;
  226.  
  227.  
  228. temp=temp->next;
  229.  
  230. }
  231. cout<<"Ukupno "<<counter<<" unos(a)"<<endl;
  232. }; break;
  233. case 2:
  234. {
  235.  
  236.  
  237. for (int i = counter; i > 0; i--)
  238. {
  239.  
  240.  
  241. zivine * temp = root;
  242.  
  243.  
  244. for (int j = 0; j < i; j++)
  245. {
  246.  
  247.  
  248. temp=temp->next;
  249.  
  250. }
  251.  
  252.  
  253.  
  254. cout<<endl;
  255. cout<<"Tip: "<<temp->tip<<endl;
  256. cout<<"Naziv: "<<temp->naziv<<endl;
  257. cout<<"Cijena: "<<temp->cijena<<endl;
  258. cout<<"Datum: "<<temp->datum<<endl;
  259. cout<<"Sifra: "<<temp->sifra<<endl;
  260.  
  261. }
  262.  
  263. }; break;
  264. case 3:
  265. {
  266. zivine * temp = root;
  267.  
  268. char *end;
  269.  
  270. for (int i = 0; i < counter; i++)
  271. {
  272. temp=temp->next;if (long godina = strtol(temp->datum.substr(6, 4).c_str(), &end, 10) >= 2012)
  273. {
  274.  
  275. if (long mjesec = strtol(temp->datum.substr(3, 2).c_str(), &end, 10) >= 9 || godina > 2012)
  276. {
  277. if (long dan = strtol(temp->datum.substr(0, 2).c_str(), &end, 10) >= 23 || mjesec > 9 || godina > 2012)
  278. {
  279. cout<<endl;
  280. cout<<"Tip: "<<temp->tip<<endl;
  281. cout<<"Naziv: "<<temp->naziv<<endl;
  282. cout<<"Cijena: "<<temp->cijena<<endl;
  283. cout<<"Datum: "<<temp->datum<<endl;
  284. cout<<"Sifra: "<<temp->sifra<<endl;
  285.  
  286. }
  287. }
  288. }
  289. }
  290. };break;
  291. default: cout<<"Krivi odabir..."<<endl;
  292. }
  293.  
  294. }
  295.  
  296. else
  297. cout<<"Nema nis' u listi!"<<endl;
  298. }
  299.  
  300.  
  301. static void Insert()
  302. {
  303. int pozicija;
  304. cout<<"Na koju poziciju? 1-"<<counter<<endl;
  305. cin>>pozicija;
  306.  
  307. if (pozicija >= 0)
  308. {
  309. if (pozicija <= counter)
  310. {
  311.  
  312. zivine * temp = root->next;
  313.  
  314. if (pozicija == 1)
  315.  
  316. {
  317. zivine * selected = temp;
  318. zivine * newNode = new zivine;
  319.  
  320. *newNode = createNew(selected);
  321.  
  322. root->next = newNode;
  323.  
  324.  
  325.  
  326. }
  327. else
  328. {
  329.  
  330.  
  331. for (int i = 1; i < pozicija - 1; i++)
  332. {
  333. temp = temp->next;
  334.  
  335. }
  336.  
  337. zivine * previous = temp;
  338. zivine * selected = temp->next;
  339.  
  340. zivine * newNode = new zivine;
  341.  
  342. *newNode = createNew(selected);
  343.  
  344. previous->next = newNode;
  345.  
  346.  
  347. }
  348. counter++;
  349.  
  350. }
  351. else cout<<"Pozicija nemre biti veca od ukupnog broja elemenata liste!"<<endl;
  352. }
  353. else cout<<"A da, sad."<<endl;
  354.  
  355. }
  356.  
  357. static void Delete()
  358. {
  359. int pozicija;
  360. cout<<"Na koju poziciju? 1-"<<counter<<endl;
  361. cin>>pozicija;
  362.  
  363. if (pozicija >= 0)
  364. {
  365. if (pozicija <= counter)
  366. {
  367.  
  368.  
  369. zivine * temp = root->next;
  370. for (int i = 1; i < pozicija - 1; i++)
  371. {
  372. temp = temp->next;
  373.  
  374. }
  375.  
  376.  
  377.  
  378. temp->next = temp->next->next;
  379.  
  380.  
  381.  
  382. counter--;
  383.  
  384. }
  385. else cout<<"Pozicija nemre biti veca od ukupnog broja elemenata liste!"<<endl;
  386. }
  387. else cout<<"A da, sad."<<endl;
  388.  
  389. }
  390.  
  391. static void DeleteAll()
  392. {
  393. root->next = NULL;
  394. counter=0;
  395.  
  396.  
  397.  
  398. }
  399.  
  400. static void Locate()
  401. {
  402. cout<<endl;
  403. cout<<"Traziti po: "<<endl;
  404. cout<<"1 - naziv"<<endl;
  405. cout<<"2 - Tip"<<endl;
  406.  
  407. int izbor;
  408. cin>>izbor;
  409.  
  410. switch (izbor)
  411. {
  412. case 1:
  413. {
  414. string target;
  415. cout<<"Trazeni naziv: ";
  416. cin>>target;
  417.  
  418. zivine * temp = root;
  419.  
  420.  
  421.  
  422. for (int i = 0; i < counter; i++)
  423. {
  424.  
  425. temp=temp->next;
  426.  
  427. if ( temp->naziv == target)
  428. {
  429.  
  430. cout<<endl;
  431. cout<<"Tip: "<<temp->tip<<endl;
  432. cout<<"Naziv: "<<temp->naziv<<endl;
  433. cout<<"Cijena: "<<temp->cijena<<endl;
  434. cout<<"Datum: "<<temp->datum<<endl;
  435. cout<<"Sifra: "<<temp->sifra<<endl;
  436.  
  437.  
  438. }
  439.  
  440. }
  441.  
  442. }; break;
  443.  
  444. case 2:
  445. {
  446. string target;
  447. cout<<"Trazeni tip: ";
  448. cin>>target;
  449.  
  450. zivine * temp = root;
  451.  
  452.  
  453. for (int i = 0; i < counter; i++)
  454. {
  455. temp=temp->next;
  456.  
  457. if ( temp->tip == target)
  458. {
  459.  
  460. cout<<endl;
  461. cout<<"Tip: "<<temp->tip<<endl;
  462. cout<<"Naziv: "<<temp->naziv<<endl;
  463. cout<<"Cijena: "<<temp->cijena<<endl;
  464. cout<<"Datum: "<<temp->datum<<endl;
  465. cout<<"Sifra: "<<temp->sifra<<endl;
  466.  
  467. }
  468. }
  469.  
  470. }; break;
  471.  
  472.  
  473. default: cout<<"Nope."<<endl;
  474.  
  475.  
  476. }
  477. }
  478.  
  479. static void DeleteBy()
  480. {
  481. cout<<endl;
  482. cout<<"Brisati po: "<<endl;
  483. cout<<"1 - naziv"<<endl;
  484. cout<<"2 - Tip"<<endl;
  485. int izbor;
  486. cin>>izbor;
  487.  
  488. switch (izbor)
  489. {
  490. case 1:
  491. {
  492. string target;
  493. cout<<"Trazeni naziv: ";
  494. cin>>target;
  495.  
  496. zivine * temp = root;
  497.  
  498.  
  499. for (int i = 0; i < counter; i++)
  500. {
  501.  
  502. if ( temp->next->naziv == target)
  503. {
  504.  
  505.  
  506. temp->next = temp->next->next;
  507.  
  508. counter--;
  509. }
  510.  
  511. temp=temp->next;
  512.  
  513. }
  514. }; break;
  515. case 2:
  516. {
  517. string target;
  518. cout<<"Trazeni tip: ";
  519. cin>>target;
  520.  
  521. zivine * temp = root;
  522.  
  523.  
  524. for (int i = 0; i < counter; i++)
  525. {
  526.  
  527. if ( temp->next->naziv == target)
  528. {
  529.  
  530. temp->next = temp->next->next;
  531.  
  532. counter--;
  533.  
  534. }
  535. temp=temp->next;
  536.  
  537. }
  538. }; break;
  539. default: cout<<"Nope."<<endl;
  540.  
  541. }
  542. }

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: mnovosel2 on November 11, 2012

Implementacija funkcije DeleteAll je dosta drugačija nego u mojem kodu pošto ja vršim kompletnu dealokaciju liste, a ovdje se pokazivac samo postavlja na NULL.

You need to login to post a comment.