35657

Untitled

Jun 29th, 2024
598
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.94 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <iostream>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. struct client {
  9.     char name[30]; // имя клиента
  10.     char phone_number[20]; // номер телефона
  11.     int client_id; // id клиента
  12.     int personal_discount; // размер скидки
  13.     bool regular_customer; // постоянный покупатель (да / нет)
  14. };
  15.  
  16. class client_base {
  17.  
  18. public:
  19.  
  20.     explicit client_base(const int new_base_size) : clients(new client[new_base_size]), clients_number(0), clients_base_size(new_base_size) {}
  21.  
  22.     client_base() : client_base(5) {}
  23.  
  24.     client_base(const client_base& other) : client_base(other.clients_base_size) {
  25.         for (int i = 0; i < other.clients_number; i++) {
  26.             new_client(other.clients[i].name, other.clients[i].phone_number, other.clients[i].client_id, other.clients[i].personal_discount, other.clients[i].regular_customer);
  27.         }
  28.     }
  29.  
  30.     client_base(client_base&& other) : clients(other.clients), clients_number(other.clients_number), clients_base_size(other.clients_base_size) {
  31.         other.clients = nullptr;
  32.     }
  33.  
  34.     client_base& operator=(const client_base& other) {
  35.         if (this != &other) {
  36.             delete[] clients;
  37.             clients_number = other.clients_number;
  38.             clients_base_size = other.clients_base_size;
  39.             clients = new client[clients_base_size];
  40.             for (int i = 0; i < other.clients_number; i++) {
  41.                 new_client(other.clients[i].name, other.clients[i].phone_number, other.clients[i].client_id, other.clients[i].personal_discount, other.clients[i].regular_customer);
  42.             }
  43.         }
  44.         return *this;
  45.     }
  46.  
  47.     client_base& operator=(client_base&& other) {
  48.         if (this != &other) {
  49.             delete[] clients;
  50.             clients_number = other.clients_number;
  51.             clients_base_size = other.clients_base_size;
  52.             clients = other.clients;
  53.             other.clients = nullptr;
  54.         }
  55.         return *this;
  56.     }
  57.  
  58.     void new_client(const char* name, const char* phone_number, const int client_id, const int personal_discount, const bool regular_customer) {
  59.         if (clients_number == clients_base_size) {
  60.             client* temp = new client[clients_base_size * 2];
  61.             for (int i = 0; i < clients_number; i++) {
  62.                 temp[i] = clients[i];
  63.             }
  64.             delete[] clients;
  65.             clients = temp;
  66.             clients_base_size *= 2;
  67.         }
  68.         strcpy(clients[clients_number].name, name);
  69.         strcpy(clients[clients_number].phone_number, phone_number);
  70.         clients[clients_number].client_id = client_id;
  71.         clients[clients_number].personal_discount = personal_discount;
  72.         clients[clients_number].regular_customer = regular_customer;
  73.         clients_number++;
  74.     }
  75.  
  76.     void del_client(const char* name) {
  77.         for (int i = 0; i < clients_number; i++) {
  78.             if (!strcmp(clients[i].name, name)) {
  79.                 for (int j = i; j < clients_number - 1; j++) {
  80.                     clients[j] = clients[j + 1];
  81.                 }
  82.                 i--; // на случай идущих подряд клиентов с одинаковым именем (иначе второго перескакивает)
  83.                 clients_number--;
  84.             }
  85.         }
  86.  
  87.     }
  88.  
  89.     void find_client(const char* name) const {
  90.         for (int i = 0; i < clients_number; i++) {
  91.             if (!strcmp(clients[i].name, name)) {
  92.                 cout << clients[i].name << ": номер " << clients[i].phone_number << ", id " << clients[i].client_id << ", скидка " << clients[i].personal_discount << " %";
  93.                 if (clients[i].regular_customer) {
  94.                     cout << ", постоянный покупатель";
  95.                 }
  96.                 cout << endl;
  97.             }
  98.         }
  99.         cout << endl;
  100.     }
  101.  
  102.     void show_all_clients() const {
  103.         for (int i = 0; i < clients_number; i++) {
  104.             cout << clients[i].name << ": номер " << clients[i].phone_number << ", id " << clients[i].client_id << ", скидка " << clients[i].personal_discount << " %";
  105.             if (clients[i].regular_customer) {
  106.                 cout << ", постоянный покупатель";
  107.             }
  108.             cout << endl;
  109.         }
  110.         cout << endl;
  111.     }
  112.  
  113.     void show_regular_clients() const {
  114.         for (int i = 0; i < clients_number; i++) {
  115.             if (clients[i].regular_customer) {
  116.                 cout << clients[i].name << ": номер " << clients[i].phone_number << ", id " << clients[i].client_id << ", скидка " << clients[i].personal_discount << " %" << endl;
  117.             }
  118.         }
  119.         cout << endl;
  120.     }
  121.  
  122.     ~client_base() {
  123.         delete[] clients;
  124.     }
  125.  
  126.  
  127. private:
  128.     client* clients; // массив клиентов
  129.     int clients_number; // количество клиентов
  130.     int clients_base_size; // размер базы
  131. };
  132.  
  133.  
  134. int main() {
  135.  
  136.     setlocale(LC_ALL, "ru");
  137.  
  138.     client_base my_base(200);
  139.     my_base.new_client("Иван", "+79111111111", 1129, 10, true);
  140.     my_base.new_client("Вася", "+79111111222", 1130, 5, false);
  141.     my_base.new_client("Олег", "+79111111333", 1131, 15, true);
  142.     my_base.new_client("Мария", "+79111111444", 1132, 10, false);
  143.     my_base.new_client("Галя", "+79111111555", 1133, 20, true);
  144.     my_base.show_all_clients();
  145.  
  146.     my_base.del_client("Иван");
  147.     my_base.show_regular_clients();
  148.  
  149.     my_base.find_client("Галя");
  150.  
  151.     client_base my_base2 = move(my_base);
  152.  
  153.     my_base2.show_all_clients();
  154. }
Advertisement
Add Comment
Please, Sign In to add comment