jordanov

[ООП] Сервис за мобилни 66%

Jan 28th, 2020
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.09 KB | None | 0 0
  1. /* Да се креира класа за опишување на еден сервис за мобилни уреди. За секој мобилен телефон се чуваат податоци за модел (низа од 100 знаци), тип на уред (смартфон или компјутер), потребни часови за основна проверка (децимален број), година на производство (цел број). (5 поени)
  2. Сите уреди имаат исто времетраење за основна проверка и истата изнесува 1 час. Оваа вредност може да се смени со одлука на сервисот. Дополнително, уредите кои се понови од 2015 година имаат потреба од дополнителени 1.5 часа за проверка. При проверка, лаптопите имаат потреба од дополнителни 2 часа за софтверска дијагностика (5 поени).
  3. За оваа класа да се имплементира оператор << за печатење на уред во формат:
  4. [model_na_uredotl]
  5. [tip_na_ured] [casovi_za_proverka]
  6. Каде часовите за проверка се оние од основната проверка+ дополнителни 2 часа доколку уредот е понов од 2015 + 2 часа доколу уредот е лаптоп (5 поени)
  7. Да се креира класа MobileServis во која се чува адреса (низа од 100 знаци), низа од уреди (динамички алоцирана низа) и број на уреди.(5 поени)
  8. За класата да се обезбедат:
  9. operatoror+= за додавање на нов уред во сервисот.(5 поени) Не смее да се дозволи годината на производство на уредот да биде поголема од 2019 или помала од 2000. Ако се направи обид за додавање на уред со невалидна година, треба да се генерира исклучок InvalidProductionDate. (10 поени)
  10. Функција pecatiUredi со која се печатат сите уреди со времето потребно за нивната проверка во сервисот (5 поени).
  11. Да се обезбедат сите дополнителни методи потребни за правилно функционирање на програмата. (5 поени)
  12. */
  13.  
  14. #include<iostream>
  15. #include<cstring>
  16. using namespace std;
  17.  
  18. enum tip{smartphone,computer};
  19.  
  20. class InvalidProductionDate{
  21. private:
  22.     char error[100];
  23. public:
  24.     InvalidProductionDate(){}
  25.     InvalidProductionDate(char error[]){
  26.     strcpy(this->error,error);
  27.     }
  28.     void print(){
  29.     cout<<error<<endl;
  30.     }
  31. };
  32.  
  33. class Device{
  34. private:
  35.     char model[100];
  36.     tip tipUred;
  37.     static float casovi;
  38.     int godina;
  39. public:
  40.     Device(){}
  41.  
  42.     Device(char model[],tip tipUred,int godina){
  43.     strcpy(this->model,model);
  44.     this->tipUred=tipUred;
  45.     this->godina=godina;
  46.     }
  47.     static void setPocetniCasovi(int x){
  48.     casovi=x;
  49.     }
  50.  
  51.    
  52.     bool operator==(Device &drugDevice){
  53.     if((strcmp(this->model,drugDevice.model)==0)&&(this->godina==drugDevice.godina)){
  54.         return true;
  55.     }
  56.     return false;
  57.     }
  58.    
  59.  
  60.     friend ostream& operator<<(ostream &out,Device &objekt){
  61.         out<<objekt.model<<endl;
  62.     if(objekt.tipUred==0){
  63.         out<<"Mobilen ";    
  64.     }else{
  65.         out<<"Laptop ";
  66.     }
  67.    
  68.     if(objekt.godina>2015&&objekt.tipUred==1){
  69.         out<<casovi+4<<endl;
  70.     }else if(objekt.godina>2015 || objekt.tipUred==1){
  71.         out<<casovi+2<<endl;
  72.     }else{
  73.         out<<casovi<<endl;
  74.     }
  75.     return out;
  76.     }
  77.  
  78.     int getGodina(){
  79.     return godina;
  80.     }
  81.  
  82.     ~Device(){}
  83.  
  84. };
  85. float Device::casovi=1;
  86.  
  87. class MobileServis{
  88. private:
  89.     char adresa[100];
  90.     Device *niza;
  91.     int brojUredi;
  92. public:
  93.     MobileServis(){
  94.     niza=new Device[0];
  95.     brojUredi=0;
  96.     }
  97.     MobileServis(char adresa[]){
  98.     strcpy(this->adresa,adresa);
  99.     niza=new Device[0];
  100.     brojUredi=0;
  101.     }
  102.  
  103.     //mobileservis+=device;
  104.     MobileServis &operator+=(Device &novDevice){
  105.  
  106.     if(novDevice.getGodina()>2019 || novDevice.getGodina()<2000){
  107.         throw InvalidProductionDate("Невалидна година на производство");
  108.     }
  109.  
  110.     Device *tempNiza=new Device[brojUredi];
  111.     for(int i=0;i<brojUredi;i++){
  112.         tempNiza[i]=niza[i];
  113.     }
  114.     niza=new Device[brojUredi+1];
  115.     for(int i=0;i<brojUredi;i++){
  116.         niza[i]=tempNiza[i];
  117.     }
  118.     niza[brojUredi]=novDevice;
  119.     brojUredi++;
  120.     delete []tempNiza;
  121.     return *this;
  122.     }
  123.    
  124.     void pecatiCasovi(){
  125.     cout<<"Ime: "<<adresa<<endl;
  126.     for(int i=0;i<brojUredi;i++){
  127.         cout<<niza[i];
  128.     }
  129.     }
  130.  
  131.     ~MobileServis(){
  132.     delete []niza;
  133.     }
  134. };
  135. int main()
  136. {
  137.     int testCase;
  138.     cin >> testCase;
  139.     char ime[100];
  140.     int tipDevice;
  141.     int godina;
  142.     int n;
  143.     Device devices[50];
  144.     if (testCase == 1){
  145.         cout << "===== Testiranje na klasite ======" << endl;
  146.         cin >> ime;
  147.         cin >> tipDevice;
  148.         cin >> godina;
  149.         Device ig(ime,(tip)tipDevice,godina);
  150.         cin>>ime;
  151.         MobileServis t(ime);
  152.         cout<<ig;
  153.         }
  154.     if (testCase == 2){
  155.         cout << "===== Testiranje na operatorot += ======" << endl;
  156.         cin>>ime;
  157.         cin >> n;
  158.         MobileServis t(ime);
  159.         for(int i=0;i<n;i++)
  160.         {
  161.             cin >> ime;
  162.             cin >> tipDevice;
  163.             cin >> godina;
  164.             Device tmp(ime,(tip)tipDevice,godina);
  165.             try{
  166.             t+=tmp;
  167.             }catch(InvalidProductionDate &objekt){
  168.                 objekt.print();
  169.             }
  170.         }
  171.         t.pecatiCasovi();
  172.     }
  173.     if (testCase == 3){
  174.         cout << "===== Testiranje na isklucoci ======" << endl;
  175.         cin>>ime;
  176.         cin >> n;
  177.         MobileServis t(ime);
  178.         for(int i=0;i<n;i++)
  179.         {
  180.             cin >> ime;
  181.             cin >> tipDevice;
  182.             cin >> godina;
  183.             Device tmp(ime,(tip)tipDevice,godina);
  184.             try{
  185.             t+=tmp;
  186.             }catch(InvalidProductionDate &objekt){
  187.                 objekt.print();
  188.             }
  189.         }
  190.         t.pecatiCasovi();
  191.     }
  192.     if (testCase == 4){
  193.         cout <<"===== Testiranje na konstruktori ======"<<endl;
  194.          cin>>ime;
  195.         cin >> n;
  196.         MobileServis t(ime);
  197.         for(int i=0;i<n;i++)
  198.         {
  199.             cin >> ime;
  200.             cin >> tipDevice;
  201.             cin >> godina;
  202.             Device tmp(ime,(tip)tipDevice,godina);
  203.             try{
  204.             t+=tmp;
  205.             }catch(InvalidProductionDate &objekt){
  206.                 objekt.print();
  207.             }
  208.         }
  209.         MobileServis t2 = t;
  210.         t2.pecatiCasovi();
  211.     }
  212.     if (testCase == 5){
  213.         cout << "===== Testiranje na static clenovi ======" << endl;
  214.         cin>>ime;
  215.         cin >> n;
  216.         MobileServis t(ime);
  217.         for(int i=0;i<n;i++)
  218.         {
  219.             cin >> ime;
  220.             cin >> tipDevice;
  221.             cin >> godina;
  222.             Device tmp(ime,(tip)tipDevice,godina);
  223.  
  224.             try{
  225.             t+=tmp;
  226.             }catch(InvalidProductionDate &objekt){
  227.                 objekt.print();
  228.             }
  229.         }
  230.         t.pecatiCasovi();
  231.         cout << "===== Promena na static clenovi ======" << endl;
  232.         Device::setPocetniCasovi(2);
  233.         t.pecatiCasovi();
  234.     }
  235.  
  236.         if (testCase == 6){
  237.         cout << "===== Testiranje na kompletna funkcionalnost ======" << endl;
  238.         cin>>ime;
  239.         cin >> n;
  240.         MobileServis t(ime);
  241.         for(int i=0;i<n;i++)
  242.         {
  243.             cin >> ime;
  244.             cin >> tipDevice;
  245.             cin >> godina;
  246.             Device tmp(ime,(tip)tipDevice,godina);
  247.             try{
  248.             t+=tmp;
  249.             }catch(InvalidProductionDate &objekt){
  250.                 objekt.print();
  251.             }
  252.         }
  253.         Device::setPocetniCasovi(3);
  254.         MobileServis t2 = t;
  255.         t2.pecatiCasovi();
  256.     }
  257.     return 0;
  258. }
Add Comment
Please, Sign In to add comment