Advertisement
metalni

OOP Ispitni Zadaci Servis za Mobilni

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