Advertisement
35657

Untitled

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