Advertisement
35657

Untitled

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