Advertisement
196040

OOP ispitni zadaci Servis za mobilni

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