IlijaTrnkovski

Kartichka

Sep 16th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class OutOfBoundException{};
  6. class Karticka{
  7. protected:
  8. char smetka[16];
  9. int pin;
  10. bool povekjePin;
  11. public:
  12. Karticka(char* smetka,int pin){
  13. strcpy(this->smetka,smetka);
  14. this->pin=pin;
  15. this->povekjePin=false;
  16. }
  17. char *getSmetka()
  18. {
  19. return smetka;
  20. }
  21. bool getDopolnitelenPin()
  22. {
  23. return povekjePin;
  24. }
  25.  
  26. virtual int presmetajTezina()
  27. {
  28. int temp, br=0;
  29. temp=pin;
  30. while(temp)
  31. {
  32. br++;
  33. temp/=10;
  34. }
  35. return br;
  36.  
  37. }
  38.  
  39. friend ostream& operator<<(ostream& out,Karticka &k)
  40. {
  41. out<<k.getSmetka()<<": "<<k.presmetajTezina()<<endl;
  42. return out;
  43.  
  44. }
  45. virtual ~Karticka(){}
  46.  
  47. // дополниете ја класата
  48. };
  49.  
  50. class SpecijalnaKarticka: public Karticka
  51. {
  52. private:
  53. int *dopolnitelni;
  54. int brKodovi;
  55. const int P=4;
  56. public:
  57. SpecijalnaKarticka(char* smetka,int pin):Karticka(smetka,pin)
  58. {
  59. brKodovi=0;
  60. dopolnitelni=new int[0];
  61. povekjePin=true;
  62.  
  63. }
  64. const int getP()
  65. {
  66. return P;
  67. }
  68. int presmetajTezina()
  69. {
  70. int t1=Karticka::presmetajTezina();
  71. return t1 + brKodovi;
  72. }
  73. SpecijalnaKarticka& operator+=(int novPin)
  74. {
  75. int *temp;
  76. temp=new int[brKodovi+1];
  77. for(int i=0;i<brKodovi;i++)
  78. {
  79. temp[i]=dopolnitelni[i];
  80.  
  81. }
  82. temp[brKodovi]=novPin;
  83. brKodovi++;
  84. delete[]dopolnitelni;
  85. dopolnitelni=temp;
  86. return *this;
  87.  
  88. }
  89. int getBrKodovi()
  90. {
  91. return brKodovi;
  92. }
  93.  
  94. ~SpecijalnaKarticka(){}
  95. };
  96.  
  97.  
  98.  
  99. class Banka {
  100. private:
  101. char naziv[30];
  102. Karticka *karticki[20];
  103. int broj;
  104. static int LIMIT;
  105. public:
  106. Banka(char *naziv, Karticka** karticki,int broj ){
  107. strcpy(this->naziv,naziv);
  108. for (int i=0;i<broj;i++){
  109. //ako kartickata ima dopolnitelni pin kodovi
  110. if (karticki[i]->getDopolnitelenPin()){
  111. this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  112. }
  113. else this->karticki[i]=new Karticka(*karticki[i]);
  114. }
  115. this->broj=broj;
  116. }
  117. ~Banka(){
  118. for (int i=0;i<broj;i++) delete karticki[i];
  119. }
  120.  
  121. //да се дополни класата
  122. static void setLIMIT(int l)
  123. {
  124. LIMIT=l;
  125. }
  126.  
  127. void pecatiKarticki()
  128. { cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  129. for(int i=0;i<broj;i++)
  130. {
  131. if(karticki[i]->presmetajTezina()<=LIMIT)
  132. {
  133. cout<<*karticki[i];
  134.  
  135. }
  136.  
  137. }
  138.  
  139. }
  140.  
  141. void dodadiDopolnitelenPin(char * smetka, int novPin)
  142. {
  143. for(int i=0;i<broj;i++)
  144. {
  145. bool flag=false;
  146. int index;
  147. if(strcmp(karticki[i]->getSmetka(),smetka)==0)
  148. {
  149. flag=true;
  150. index=i;
  151. // break;
  152.  
  153. }
  154. if(flag)
  155. {
  156. SpecijalnaKarticka *sk=dynamic_cast<SpecijalnaKarticka*>(karticki[index]);
  157. if(sk!=0)
  158. {
  159. if(sk->getBrKodovi()>=sk->getP())
  160. throw OutOfBoundException();
  161. *sk+=novPin;
  162.  
  163. }
  164.  
  165.  
  166. }
  167.  
  168.  
  169. }
  170.  
  171. }
  172. };
  173. int Banka::LIMIT=7;
  174.  
  175.  
  176. int main(){
  177.  
  178. Karticka **niza;
  179. int n,m,pin;
  180. char smetka[16];
  181. bool daliDopolnitelniPin;
  182. cin>>n;
  183. niza=new Karticka*[n];
  184. for (int i=0;i<n;i++){
  185. cin>>smetka;
  186. cin>>pin;
  187. cin>>daliDopolnitelniPin;
  188. if (!daliDopolnitelniPin)
  189. niza[i]=new Karticka(smetka,pin);
  190. else
  191. niza[i]=new SpecijalnaKarticka(smetka,pin);
  192. }
  193.  
  194. Banka komercijalna("Komercijalna",niza,n);
  195. for (int i=0;i<n;i++) delete niza[i];
  196. delete [] niza;
  197. cin>>m;
  198. for (int i=0;i<m;i++){
  199. cin>>smetka>>pin;
  200. try{
  201. komercijalna.dodadiDopolnitelenPin(smetka,pin);
  202. }
  203. catch(OutOfBoundException)
  204. {
  205. cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto";
  206. }
  207. }
  208.  
  209. Banka::setLIMIT(5);
  210.  
  211. komercijalna.pecatiKarticki();
  212.  
  213. }
Add Comment
Please, Sign In to add comment