Advertisement
35657

Untitled

Jul 7th, 2023
738
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.96 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <iostream>
  4. #include <cstring>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. struct client {
  10.     char name[20]; // имя клиента
  11.     char phone_number[10]; // номер телефона
  12.     int client_id; // id клиента
  13.     int personal_discount; // размер скидки
  14.     bool regular_customer; // постоянный покупатель (да / нет)
  15. };
  16.  
  17. class client_base {
  18.  
  19. public:
  20.     client_base(): clients(new client*[100]), clients_number(0), clients_base_size(100) {}
  21.  
  22.     client_base(int new_base_size): clients(new client* [new_base_size]), clients_number(0), clients_base_size(new_base_size) {}
  23.  
  24.     client_base(const client_base& other): clients(new client* [other.clients_base_size]), clients_number(0), clients_base_size(other.clients_base_size) {
  25.         for (int i = 0; i < other.clients_number; i++) {
  26.             NewClient(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) {
  31.         clients = other.clients;
  32.         clients_number = other.clients_number;
  33.         clients_base_size = other.clients_base_size;
  34.         other.clients = nullptr;
  35.         other.clients_number = 0;
  36.         other.clients_base_size = 0;
  37.     }
  38.    
  39.     client_base& operator=(const client_base& other) {
  40.         if (this != &other) {
  41.             for (int i = 0; i < clients_number; i++) {
  42.                 delete clients[i];
  43.             }
  44.             delete[] clients;
  45.             clients = new client * [other.clients_base_size];
  46.             clients_number = 0;
  47.             clients_base_size = other.clients_base_size;
  48.             for (int i = 0; i < other.clients_number; i++) {
  49.                 NewClient(other.clients[i]->name, other.clients[i]->phone_number, other.clients[i]->client_id, other.clients[i]->personal_discount, other.clients[i]->regular_customer);
  50.             }
  51.         }
  52.         return *this;
  53.     }
  54.  
  55.     client_base& operator=(client_base&& other) {
  56.         if (this != &other) {
  57.             for (int i = 0; i < clients_number; i++) {
  58.                 delete clients[i];
  59.             }
  60.             delete[] clients;
  61.             clients = other.clients;
  62.             other.clients = nullptr;
  63.             clients_number = other.clients_number;
  64.             other.clients_number = 0;
  65.             clients_base_size = other.clients_base_size;
  66.             other.clients_base_size = 0;
  67.         }
  68.         return *this;
  69.     }
  70.  
  71.     void NewClient(const char name[], const char phone_number[], const int client_id, const int personal_discount, const bool regular_customer) {
  72.         if (clients_number == clients_base_size) {
  73.             client** temp = new client * [clients_base_size * 2];
  74.             for (int i = 0; i < clients_number; i++) {
  75.                 temp[i] = clients[i];
  76.                 delete clients[i];
  77.             }
  78.             delete[] clients;
  79.             clients = temp;
  80.             clients_base_size *= 2;
  81.         }
  82.         clients[clients_number] = new client;
  83.         strcpy(clients[clients_number]->name, name);
  84.         strcpy(clients[clients_number]->phone_number, phone_number);
  85.         clients[clients_number]->client_id = client_id;
  86.         clients[clients_number]->personal_discount = personal_discount;
  87.         clients[clients_number]->regular_customer = regular_customer;
  88.         clients_number++;
  89.     }
  90.  
  91.     void DelClient(const char name[]) {
  92.         for (int i = 0; i < clients_number; i++) {
  93.             if (!strcmp(clients[i]->name, name)) {
  94.                 delete clients[i];
  95.                 for (int j = i; j < clients_number - 1; j++) {
  96.                     clients[j] = clients[j + 1];
  97.                 }
  98.                 clients[clients_number - 1] = nullptr;
  99.                 clients_number--;
  100.             }
  101.         }
  102.  
  103.     }
  104.  
  105.     void FindClient(const char name[]) {
  106.         for (int i = 0; i < clients_number; i++) {
  107.             if (!strcmp(clients[i]->name, name)) {
  108.                 cout << clients[i]->name << ": phone " << clients[i]->phone_number << ", id " << clients[i]->client_id << ", personal discount " << clients[i]->personal_discount << " %";
  109.                 if (clients[i]->regular_customer) {
  110.                     cout << ", regular customer";
  111.                 }
  112.                 cout << endl;
  113.             }
  114.         }
  115.         cout << endl;
  116.     }
  117.  
  118.     void ShowAllClients() {
  119.         for (int i = 0; i < clients_number; i++) {
  120.             cout << clients[i]->name << ": phone " << clients[i]->phone_number << ", id " << clients[i]->client_id << ", personal discount " << clients[i]->personal_discount << " %";
  121.             if (clients[i]->regular_customer) {
  122.                 cout << ", regular customer";
  123.             }
  124.             cout << endl;
  125.         }
  126.         cout << endl;
  127.     }
  128.  
  129.     void ShowRegularClients() {
  130.         for (int i = 0; i < clients_number; i++) {
  131.             if (clients[i]->regular_customer) {
  132.                 cout << clients[i]->name << ": phone " << clients[i]->phone_number << ", id " << clients[i]->client_id << ", personal discount " << clients[i]->personal_discount << " %" << endl;
  133.             }
  134.         }
  135.         cout << endl;
  136.     }
  137.  
  138.     ~client_base() {
  139.         for (int i = 0; i < clients_number; i++) {
  140.             delete clients[i];
  141.         }
  142.         delete[] clients;
  143.     }
  144.  
  145.  
  146. private:
  147.     client** clients; // массив клиентов
  148.     int clients_number; // количество клиентов
  149.     int clients_base_size; // размер базы
  150. };
  151.  
  152. int main() {
  153.     client_base my_base(200);
  154.     my_base.NewClient("Ivan", "9111111111", 1129, 10, true);
  155.     my_base.NewClient("Vasya", "9111111222", 1130, 5, false);
  156.     my_base.NewClient("Oleg", "9111111333", 1131, 15, true);
  157.     my_base.NewClient("Maria", "9111111444", 1132, 10, false);
  158.     my_base.NewClient("Galya", "9111111555", 1133, 20, true);
  159.     //client_base my_base2(my_base);
  160.     //client_base my_base2(move(my_base));
  161.     client_base my_base2;
  162.     //my_base2 = my_base;
  163.     my_base2 = move(my_base);
  164.     my_base2.ShowAllClients();
  165.     my_base2.DelClient("Ivan");
  166.     my_base2.ShowRegularClients();
  167.     my_base2.FindClient("Galya");
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement