Advertisement
HeatPulse

Kartichka

May 19th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 KB | None | 0 0
  1. Картичка Problem 4 (0 / 0)
  2. Дадена е дел од дефиницијата на класата Karticka. За секоја картичка се чуваат информации за трансакциска сметка (низа од 15 знаци) , пин код (цел број) и дали има повеќе пин кодови (булова променлива).
  3.  
  4. За секој картичка може да се пресмета тежината за пробивање на картичката. Тежината на пробивање е бројот на цифрите на пин кодот.
  5.  
  6. Специјалните картички покрај еден задолжителен имаат уште неколку пин кодови . За овие корисници да се моделира соодветна класа SpecijalnaKaricka во која покрај дополнителните пин кодови (динамичко алоцирана низа од цели броеви) се чува и бројот на пин кодовите (цел број). Со дополнителните пин кодови се менува и тежината на пробивање на картичката и таа се зголемува за бројот на дополнителни пин кодови.
  7.  
  8. Максималниот број на дополнителни пин кодови кој може да има било која картичка е P. P има фиксна вредност 4 за сите картички и оваа вредност не може да се промени.
  9.  
  10. Во класите Karticka и SpecijalnaKarticka треба да се имплементираат потребните конструктори, функции за поставување и преземање и деструктор. (5 поени)
  11.  
  12. За сите објекти од класите треба да се обезбедат следните функции:
  13.  
  14. преоптоварен оператор << во кој се печатат информации за картичката во формат: smetka: tezina (5 поени)
  15. tezinaProbivanje() – ја пресметува тежината за пробивање на картичката (5 поени)
  16. Во класата SpecijalnaKarticka дефинирај ја функцијата:
  17.  
  18. преоптоварен оператор += за додавање на нов пин код (5 поени)
  19. Ако се направи обид да се внесат повеќе од дозволениот број на пин кодови во безбедносниот код да се фрли исклучок (објект од класата OutOfBoundException). Фатете го исклучокот во главната функција каде што е потребно. Откако ќе го фатите отпечатете соодветна порака за грешка (_Brojot na pin kodovi ne moze da go nadmine dozvolenoto_) и справете се со исклучокот така да додадениот пин код не се зема предвид (10 поени)
  20.  
  21. Дадена е дел од дефиницијата на класата Banka во која се чуваат информаци за името на банката (низа од 30 знаци) и за картичките издадени од банката (низа од 20 покажувачи кон класата Karticka) како и бројот на такви картички.
  22.  
  23. Велиме дека картичката издадена од банката може да се пробие ако тежината за пробивање е најмногуLIMIT. Вредноста LIMIT е членка на класата Banka, има почетна вредност 7 и истата може да се промени со функцијата setLimit(). За сите банки оваа вредност е иста. (5 поени)
  24.  
  25. Во класата Banka имплементирај ги функциите:
  26.  
  27. функција pecatiKarticki() во која се печатат сите картички кои можат да се пробијат, секој во посебен ред. Претходно во првиот ред се печати: _Vo bankata XXXXX moze da se probijat kartickite:_ (5 поени).
  28.  
  29. функција dodadiDopolnitelenPin(char * smetka, int novPin) во која на картичката со дадена трансакциона сметка се додава нов дополнителен пин код. Ако тоа не е можно функцијата не прави ништо (15 поени).
  30.  
  31. Комплетна функционалност (5 поени)
  32.  
  33. #include<iostream>
  34. #include<string.h>
  35. using namespace std;
  36.  
  37. class Karticka{
  38. protected:
  39. char smetka[16];
  40. int pin;
  41. bool povekjePin;
  42. public:
  43. Karticka(char* smetka,int pin){
  44. strcpy(this->smetka,smetka);
  45. this->pin=pin;
  46. this->povekjePin=false;
  47. }
  48. // дополниете ја класата
  49. };
  50.  
  51. //вметнете го кодот за SpecijalnaKarticka
  52.  
  53.  
  54.  
  55. class Banka {
  56. private:
  57. char naziv[30];
  58. Karticka *karticki[20];
  59. int broj;
  60. public:
  61. Banka(char *naziv, Karticka** karticki,int broj ){
  62. strcpy(this->naziv,naziv);
  63. for (int i=0;i<broj;i++){
  64. //ako kartickata ima dopolnitelni pin kodovi
  65. if (karticki[i]->getDopolnitelenPin()){
  66. this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  67. }
  68. else this->karticki[i]=new Karticka(*karticki[i]);
  69. }
  70. this->broj=broj;
  71. }
  72. ~Banka(){
  73. for (int i=0;i<broj;i++) delete karticki[i];
  74. }
  75.  
  76. //да се дополни класата
  77.  
  78. };
  79.  
  80.  
  81.  
  82. int main(){
  83.  
  84. Karticka **niza;
  85. int n,m,pin;
  86. char smetka[16];
  87. bool daliDopolnitelniPin;
  88. cin>>n;
  89. niza=new Karticka*[n];
  90. for (int i=0;i<n;i++){
  91. cin>>smetka;
  92. cin>>pin;
  93. cin>>daliDopolnitelniPin;
  94. if (!daliDopolnitelniPin)
  95. niza[i]=new Karticka(smetka,pin);
  96. else
  97. niza[i]=new SpecijalnaKarticka(smetka,pin);
  98. }
  99.  
  100. Banka komercijalna("Komercijalna",niza,n);
  101. for (int i=0;i<n;i++) delete niza[i];
  102. delete [] niza;
  103. cin>>m;
  104. for (int i=0;i<m;i++){
  105. cin>>smetka>>pin;
  106.  
  107. komercijalna.dodadiDopolnitelenPin(smetka,pin);
  108.  
  109. }
  110.  
  111. Banka::setLIMIT(5);
  112.  
  113. komercijalna.pecatiKarticki();
  114.  
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement