Advertisement
jordanov

[ООП] Испитна Finki Bookstore

Sep 9th, 2021
1,116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.49 KB | None | 0 0
  1. Да се креира класа Customer за опишување на купувачи на една книжара. За секој купувач се чуваат податоци за:
  2.  
  3. името (низа од 50 знаци),
  4. електронска адреса (низа од 50 знаци),
  5. вид на купувач (стандардни, лојални или вип),
  6. основен попуст (цел број изразен во проценти),
  7. дополнителен попуст (цел број изразен во проценти) и
  8. број на купени производи. (5 поени)
  9. Сите лојални купувачи со покажување на клуб картичка имаат право на основниот попуст при купување од книжарата. Основниот попуст е ист за сите лојални купувачи и изнесува 10%. Оваа вредност може да се смени со одлука на раководството на книжарата. Дополнителниот попуст е фиксен и може да го користат само вип купувачите и изнесува 20%. Стандардните купувачи немаат право на попуст (5 поени).
  10.  
  11. За оваа класа да се имплементира оператор << за печатење на купувач во формат:
  12.  
  13. [ime_na_kupuvac]
  14. [email_na_kupuvac]
  15. [broj_na_proizvodi]
  16. [vid_na_kupuvac] [popust_sto_moze_da_go_koristi]
  17. каде попустот е 0% ако купувачот е стандарден, вредноста на основниот попуст, ако е лојален или збир од основниот и дополнителниот попуст, ако купувачот е вип. (5 поени)
  18.  
  19. Да се креира класа за онлајн книжара FINKI-bookstore во која се чува низа од регистрирани купувачи (динамички алоцирана низа) и број на купувачи. (5 поени) За класата да се обезбедат:
  20.  
  21. operator+= (10 поени) за додавање купувач во листата од купувачи, но само ако веќе не е дел од неа (ако во листата нема купувач со иста електронска адреса). Ако во листата постои корисник со иста електронска адреса, треба да се генерира исклучок UserExistsException. Потребно е да се обезбеди справување со исклучокот во функцијата main на означеното место. Во ваква ситуација се печати порака "The user already exists in the list" (5 поени).
  22. Функција update со која сите стандардни купувачи со купени повеќе од 5 производи стануваат лојални, а сите лојални купувачи со над 10 купени производи, стануваат вип (5 поени).
  23. Оператор << за печатење на информациите за сите регистрирани купувачи (5 поени).
  24. Да се обезбедат сите дополнителни методи потребни за правилно функционирање на програмата. (10 поени)
  25.  
  26.  
  27. #include<iostream>
  28. #include<cstring>
  29. using namespace std;
  30.  
  31. enum typeC {standard, loyal, vip, MAX=20};
  32.  
  33. class Customer
  34. {
  35.     char ime[50];
  36.     char adresa[50];
  37.     char a[10];
  38.     typeC tip;
  39.     static int opopust;
  40.     const static int dpopust;
  41.     int b;
  42.     public:
  43.     Customer(char * name="", char * email="", typeC tip1=standard, int numProducts=0)
  44.     {
  45.         strcpy(ime, name);
  46.         strcpy(adresa, email);
  47.         tip=tip1;
  48.         b=numProducts;
  49.     }
  50.    
  51.     void setDiscount1(int x)
  52.     {
  53.     opopust=x;
  54.     }
  55.     char * tip1()
  56.     {
  57.         if (tip==standard)
  58.         {
  59.         strcpy(a, "standard");
  60.         return a;
  61.         }
  62.         if (tip==loyal)
  63.         {
  64.         strcpy(a, "loyal");
  65.         return a;
  66.         }
  67.         if (tip==vip)
  68.         {
  69.         strcpy(a, "vip");
  70.         return a;
  71.         }
  72.     }
  73.     int popust()
  74.     {
  75.         if(tip==0)
  76.         {
  77.         return 0;
  78.         }
  79.         else if(tip==1)
  80.         {
  81.         return opopust;
  82.         }
  83.         else
  84.         {
  85.         return opopust+dpopust;
  86.         }
  87.     }
  88.     friend ostream & operator<<(ostream &o, Customer & a)
  89.     {
  90.     o<<a.ime<<endl<<a.adresa<<endl<<a.b<<endl<<a.tip1()<<" "<<a.popust()<<endl;
  91.         return o;
  92.     }
  93.     friend class FINKI_bookstore;
  94. };
  95.  
  96. int Customer::opopust=10;
  97. const int Customer::dpopust=20;
  98.  
  99. class FINKI_bookstore
  100. {
  101.     Customer * kupuvac;
  102.     int n;
  103.     public:
  104.     FINKI_bookstore()
  105.     {
  106.         kupuvac=0;
  107.         n=0;
  108.     }
  109.    
  110.     void setCustomers(Customer * customers, int n)
  111.     {
  112.         kupuvac = new Customer[n];
  113.     for(int i=0;i<n;i++)
  114.     {
  115.     kupuvac[i]=customers[i];
  116.         this->n=n;
  117.     }
  118.     }
  119.     FINKI_bookstore & operator+=(Customer & c)
  120.     {
  121.         int imaist=0;
  122.         for(int i=0;i<n;i++)
  123.         {
  124.         if(!strcmp(kupuvac[i].adresa, c.adresa))
  125.         {
  126.             imaist=1;
  127.             throw 1;
  128.         }
  129.            
  130.         }
  131.         if(!imaist)
  132.         {
  133.         Customer * temp=new Customer[n+1];
  134.         for(int i=0;i<n;i++)
  135.         {
  136.         temp[i]=kupuvac[i];
  137.         }
  138.         temp[n]=c;
  139.         delete [] kupuvac;
  140.         kupuvac=temp;
  141.             n++;
  142.         }
  143.         return *this;
  144.     }
  145.     void update()
  146.     {
  147.     for(int i=0;i<n;i++)
  148.     {
  149.         if(kupuvac[i].tip==loyal&&kupuvac[i].b>10)
  150.         {
  151.         kupuvac[i].tip=vip;
  152.         }
  153.         if(kupuvac[i].tip==standard&&kupuvac[i].b>5)
  154.         {
  155.         kupuvac[i].tip=loyal;
  156.         }
  157.     }
  158.     }
  159.    
  160.     friend ostream & operator<<(ostream &o, FINKI_bookstore & a)
  161.     {
  162.     for(int i=0;i<a.n;i++)
  163.     {
  164.         o<<a.kupuvac[i];
  165.     }
  166.         return o;
  167.     }
  168. };
  169.  
  170.  
  171. int main(){
  172.   int testCase;
  173.   cin >> testCase;
  174.  
  175.   char name[MAX];
  176.   char email[MAX];
  177.   int tC;
  178.   int discount;
  179.   int numProducts;
  180.  
  181.  
  182.   if (testCase == 1){
  183.     cout << "===== Test Case - Customer Class ======" << endl;
  184.     cin.get();
  185.     cin.getline(name,MAX);
  186.     cin.getline(email,MAX);
  187.     cin >> tC;
  188.     cin >> numProducts;
  189.     cout << "===== CONSTRUCTOR ======" << endl;
  190.     Customer c(name, email, (typeC) tC, numProducts);
  191.     cout << c;
  192.  
  193.   }
  194.  
  195.   if (testCase == 2){
  196.     cout << "===== Test Case - Static Members ======" << endl;
  197.     cin.get();
  198.     cin.getline(name,MAX);
  199.     cin.getline(email,MAX);
  200.     cin >> tC;
  201.     cin >> numProducts;
  202.     cout << "===== CONSTRUCTOR ======" << endl;
  203.     Customer c(name, email, (typeC) tC, numProducts);
  204.     cout << c;
  205.  
  206.     c.setDiscount1(5);
  207.  
  208.     cout << c;
  209.   }
  210.  
  211.   if (testCase == 3){
  212.     cout << "===== Test Case - FINKI-bookstore ======" << endl;
  213.     FINKI_bookstore fc;
  214.     int n;
  215.     cin >> n;
  216.     Customer customers[MAX];
  217.     for(int i = 0; i < n; ++i) {
  218.       cin.get();
  219.       cin.getline(name,MAX);
  220.       cin.getline(email,MAX);
  221.       cin >> tC;
  222.       cin >> numProducts;
  223.       Customer c(name, email, (typeC) tC, numProducts);
  224.       customers[i] = c;
  225.     }
  226.  
  227.     fc.setCustomers(customers, n);
  228.  
  229.     cout << fc <<endl;
  230.   }
  231.  
  232.   if (testCase == 4){
  233.     cout << "===== Test Case - operator+= ======" << endl;
  234.     FINKI_bookstore fc;
  235.     int n;
  236.     cin >> n;
  237.     Customer customers[MAX];
  238.     for(int i = 0; i < n; ++i) {
  239.       cin.get();
  240.       cin.getline(name,MAX);
  241.       cin.getline(email,MAX);
  242.       cin >> tC;
  243.       cin >> numProducts;
  244.       Customer c(name, email, (typeC) tC, numProducts);
  245.       customers[i] = c;
  246.     }
  247.  
  248.     fc.setCustomers(customers, n);
  249.     cout << "OPERATOR +=" << endl;
  250.     cin.get();
  251.     cin.getline(name,MAX);
  252.     cin.getline(email,MAX);
  253.     cin >> tC;
  254.     cin >> numProducts;
  255.     Customer c(name, email, (typeC) tC, numProducts);
  256.     fc+=c;
  257.  
  258.     cout << fc;
  259.   }
  260.  
  261.   if (testCase == 5){
  262.     cout << "===== Test Case - operator+= (exception) ======" << endl;
  263.     FINKI_bookstore fc;
  264.     int n;
  265.     cin >> n;
  266.     Customer customers[MAX];
  267.     for(int i = 0; i < n; ++i) {
  268.       cin.get();
  269.       cin.getline(name,MAX);
  270.       cin.getline(email,MAX);
  271.       cin >> tC;
  272.       cin >> numProducts;
  273.       Customer c(name, email, (typeC) tC, numProducts);
  274.       customers[i] = c;
  275.     }
  276.  
  277.     fc.setCustomers(customers, n);
  278.     cout << "OPERATOR +=" << endl;
  279.     cin.get();
  280.     cin.getline(name,MAX);
  281.     cin.getline(email,MAX);
  282.     cin >> tC;
  283.     cin >> numProducts;
  284.     Customer c(name, email, (typeC) tC, numProducts);
  285.       try
  286.       {
  287.     fc+=c;
  288.       }
  289.       catch(...)
  290.       {
  291.       cout<<"The user already exists in the list!"<<endl;
  292.       }
  293.    
  294.     cout << fc;
  295.   }
  296.  
  297.   if (testCase == 6){
  298.     cout << "===== Test Case - update method  ======" << endl << endl;
  299.     FINKI_bookstore fc;
  300.     int n;
  301.     cin >> n;
  302.     Customer customers[MAX];
  303.     for(int i = 0; i < n; ++i) {
  304.       cin.get();
  305.       cin.getline(name,MAX);
  306.       cin.getline(email,MAX);
  307.       cin >> tC;
  308.       cin >> numProducts;
  309.       Customer c(name, email, (typeC) tC, numProducts);
  310.       customers[i] = c;
  311.     }
  312.  
  313.     fc.setCustomers(customers, n);
  314.  
  315.     cout << "Update:" << endl;
  316.     fc.update();
  317.     cout << fc;
  318.   }
  319.   return 0;
  320.    
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement