Справочник фирм(C++)

Нужно создать справочник фирм через класс с возможностью добавить форму, удалить, изменить. Вот что я пробовал:

#include <iostream>

using namespace std;

class firm
{
    private:
    int num;
    string *nazva;
    string *oblast;
    string *misto;
    string *kerivnuk;
    string *raxynok;
    string *kategoria;
    string *adress;
    string *grafik;
    string *poslygu;
    string *poshta;
    string *site;

    public:
     void menu()
     {
         int ok;
         cout << "Головне меню.\n[1] - Створити нову форму.\n[2] - Вивести форму.\nВведіть: "; cin >> ok;
         switch(ok)
         {
             case 1:
             newform();
             case 2:
             vuvod();
         }
     }
     void newform()
     {
         int num;
         cout << "Кількість форм: ";
         cin >> num;
     
      int *p_darr = new int[num]; // Виділення памяті 
      nazva = new string[num];
       oblast = new string[num]; 
       misto = new string[num];
       kerivnuk = new string[num];
       raxynok = new string[num];
       kategoria = new string[num];
       adress = new string[num];
       grafik = new string[num];
       poslygu = new string[num];
       poshta = new string[num];
       site = new string[num];
      for (int i = 0; i < num; i++)
      {
          p_darr[i] = i;
          nazva[i] = i;
          oblast[i] = i;
          misto[i] = i;
          kerivnuk[i] = i;
          raxynok[i] = i;
          kategoria[i] = i;
          adress[i] = i;
          grafik[i] = i;
          poslygu[i] = i;
          poshta[i] = i;
          site[i] = i;

          cout << "Номер договору: " << i << endl;
          cout << "Введіть назву фірми: "; cin >> nazva[i]; '\n';
          cout << "Введіть область: "; cin >> oblast[i]; '\n';
          cout << "Введіть місто: "; cin >> misto[i]; '\n';
          cout << "Введіть керівника фірми: "; cin >> kerivnuk[i]; '\n';
          cout << "Введіть категорію фірми: "; cin >> kategoria[i]; '\n';
          cout << "Введіть оф. банківський рахунок: "; cin >> raxynok[i]; '\n';
          cout << "Введіть адресс фірми: "; cin >> adress[i]; '\n';
          cout << "Введіть робочий графік: "; cin >> grafik[i]; '\n';
          cout << "Введіть послуги фірми: "; cin >> poslygu[i]; '\n';
          cout << "Введіть електронну пошту: "; cin >> poshta[i]; '\n';
          cout << "Введіть оф.сайт: "; cin >> site[i]; '\n';
            int y;
            cout << "[1] - Заповнити ще раз.\n[2] - Головне меню.\nВведіть: "; cin >> y;
            switch(y)
            {
                case 1:
                newform();
                case 2:
                menu();
            }
      }
     }
     void vuvod()
     {
         int z;
         cout <<"[1] - Вивести певну форму.\n[2] - Вивести всі форми.\nВведіть: "; cin >> z;
         switch(z)
         {
             case 1:
             int num2;
             cout << "Номер договору: "; cin >> num2; '\n';
             for (int i = 0; i < num; i++)
             {
                 if(num2 == i)
                  {
         cout << "Номер фірми: ", i; '\n';
         cout << "Назва фірми: ", nazva[i]; '\n';
         cout << "Область: ", oblast[i]; '\n';
         cout << "Місто: ", misto[i]; '\n';
         cout << "Керівник: "; kerivnuk[i]; '\n';
         cout << "Оф.банківський рахунок: "; raxynok[i]; '\n';
         cout << "Категорія фірми: "; kategoria[i]; '\n';
         cout << "Адреса: "; adress[i]; '\n';
         cout << "Графік роботи: "; grafik[i]; '\n';
         cout << "Послуги: "; poslygu[i]; '\n';
         cout << "Електронна пошта: "; poshta[i]; '\n';
         cout << "Оф.сайт:"; site[i]; '\n';
                  }
             }
         }
     }

};

Ответы (1 шт):

Автор решения: redf1sh

Честно сказать у вас каша из кода.

Во-первых, Вы работаете со строками, но у Вас не подключена библиотека для работы с ними:

#include <string>

Во-вторых, для динамических массивов в C++ есть контейнер vector Тут доступно о них написано: https://ravesli.com/urok-95-vvedenie-v-std-vector-vektory/

Если же Ваш преподаватель хочет видеть С с классами, тогда все поля вашей формы скомпонуйте в одну структуру и выделяйте память под неё.

#include <stdlib.h> 

typedef struct form
{
    string nazva;
    string oblast;
    string misto;
    string kerivnuk;
    string raxynok;
    string kategoria;
    string adress;
    string grafik;
    string poslygu;
    string poshta;
    string site;
} form_t;

Дальше создайте конструктор и деструктор для него.

form_t * InitForm( здесь список всех аргументов)
{
    form_t * form_p = malloc(sizeof(form_t));
    
    form_p->num = num; //Здесь num получен как параметр в функции
    ...//Здесь заполнение всех элементов

    return ( form_p);
}

void DeleteForm( form_t * form_p)
{
   if ( form_p != NULL )
   {
       free( form_p);
   }
}

Теперь с этими структурами и работайте

form_t * form_p = NewForm( аргументы);

В цикле и создавайте формы столько, сколько нужно.

class firm 
{
   private: 
   form_t * form_array; //Динамический массив структур
   int num;

   void NewFormsArray()
   {
       cin >> num;
       
       forms_array = (form_t * )malloc( sizeof( form_t) * num)
        
       
       for ( int i = 0; i < num; ++i )
       {
           ... //Тут печать приглашения ввода и получение аргументов.
           form_t * form = InitForm( аргументы);
           forms_array[i] = form;
       }
      
   }

...
}

Вывод также через цикл

void PrintFormsArray()
{
    for ( int i = 0; i < num; ++i )
    {
        form_t * form = forms_array[i];
        cout << form->site //и тд.
    }  
}
→ Ссылка