Справочник фирм(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 шт):
Честно сказать у вас каша из кода.
Во-первых, Вы работаете со строками, но у Вас не подключена библиотека для работы с ними:
#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 //и тд.
}
}