Как корректно записать и считать информацию в файл?
Подскажите, как мне корректно записать и считать информацию в файл, зарание спасибо.
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<Windows.h>
using namespace std;
struct country;
struct bank;
struct client;
struct bank
{
client* arr;
unsigned int number_of_client = 0;
string name;
unsigned int annual_percentage;
};
struct country
{
string name;
unsigned int number_of_banks = 0;
bank* arr;
};
struct client
{
string name;
unsigned int sum_contribution;
string address;
};
void setCountry(int & number_of_country, country *& arr) {
system("cls");
string name;
cout << "Введите название страны:";
cin >> name;
if (number_of_country == 0)
{
number_of_country++;
arr = new country[1];
arr[0].name = name;
}
else
{
number_of_country++;
country* arr2 = new country[number_of_country];
for (int i = 0; i < number_of_country - 1; i++)
{
arr2[i] = arr[i];
}
arr2[number_of_country - 1].name = name;
delete[]arr;
arr = arr2;
}
}
bool setBank(const int number_of_country, country*& arr) {
system("cls");
if (number_of_country == 0)
{
cout << "Вы не можете добавить банк, так как у вас не задано ни одной страны!"<< endl;
system("pause");
cin.get();
return 0;
}
for (int i = 0; i < number_of_country; i++)
{
cout << i + 1 << ")" << arr[i].name<<endl;
}
cout << "В какую страну вы хотите записать банк?\nВаш ответ:";
unsigned int value;
cin >> value;
while (value > number_of_country)
{
cout << "Ошибка введите заново значение!\n Ваш ответ:";
cin >> value;
}
system("cls");
cout << "Введите название банка:";
string bank_name;
cin >> bank_name;
unsigned int percent;
cout << "Введите годовой процент банка:";
cin >> percent;
value--;
if (arr[value].number_of_banks == 0)
{
arr[value].arr = new bank[1];
++ arr[value].number_of_banks;
arr[value].arr[0].name = bank_name;
arr[value].arr[0].annual_percentage = percent;
}
else
{
++ arr[value].number_of_banks;
bank* arr2 = new bank[arr[value].number_of_banks];
for (int i = 0; i < arr[value].number_of_banks - 1; i++)
{
arr2[i].annual_percentage = arr[value].arr[i].annual_percentage;
arr2[i].name = arr[value].arr[i].name;
arr2[i].number_of_client = arr[value].arr[i].number_of_client;
arr2[i].arr = arr[value].arr[i].arr;
}
arr2[arr[value].number_of_banks - 1].name = bank_name;
arr2[arr[value].number_of_banks - 1].annual_percentage = percent;
delete[]arr[value].arr;
arr[value].arr = arr2;
}
return 1;
}
bool setClient(country*& arr,int number_of_country) {
system("cls");
if (number_of_country == 0)
{
cout << "Добавте хотя-бы одну страну!!!" << endl;
system("pause");
cin.get();
return false;
}
for (int i = 0; i < number_of_country; i++)
{
cout << i + 1 << ")" << arr[i].name << endl;
}
cout << "Выберите страну\nВаш ответ:";
unsigned int value;
cin >> value;
while (value > number_of_country)
{
cout << "Ошибка введите заново значение!\n Ваш ответ:";
cin >> value;
}
system("cls");
value--;
if (arr[value].number_of_banks == 0)
{
cout << "Добавте хотя-бы один банк!!!" << endl;
system("pause");
cin.get();
return false;
}
for (int i = 0; i < arr[value].number_of_banks; i++)
{
cout << i + 1 << ")" << arr[value].arr[i].name<<endl;
}
cout << "В какой банк вы хотите записать клиента?\nВаш ответ:";
unsigned int value2;
cin >> value2;
while (value2 > arr[value].number_of_banks)
{
cout << "Ошибка введите заново значение!\n Ваш ответ:";
cin >> value2;
}
value2--;
if (arr[value].arr[value2].number_of_client == 0)
{
system("cls");
++ arr[value].arr[value2].number_of_client;
arr[value].arr[value2].arr = new client[1];
cout << "Введите Ф.И.О. клиента\nВаш ответ:";
string name;
cin.ignore();
getline(cin,name);
arr[value].arr[value2].arr[0].name = name;
cout << "Введите сумму вклада\nВаш ответ:";
unsigned int sum_contribution;
cin.ignore();
cin >> sum_contribution;
arr[value].arr[value2].arr[0].sum_contribution = sum_contribution;
cout << "Введите адрес клиента\nВаш ответ:";
string address;
cin.ignore();
getline(cin,address);
arr[value].arr[value2].arr[0].address = address;
}
else
{
system("cls");
arr[value].arr[value2].number_of_client ++;
client * arr2 = new client[arr[value].arr[value2].number_of_client];
for (int i = 0; i < arr[value].arr[value2].number_of_client - 1; i++)
{
arr2[i].address = arr[value].arr[value2].arr[i].address;
arr2[i].name = arr[value].arr[value2].arr[i].name;
arr2[i].sum_contribution = arr[value].arr[value2].arr[i].sum_contribution;
}
cout << "Введите Ф.И.О. клиента\nВаш ответ:";
string name;
cin.ignore();
getline(cin, name);
arr2[arr[value].arr[value2].number_of_client - 1].name = name;
cout << "Введите сумму вклада\nВаш ответ:";
unsigned int sum_contribution;
cin >> sum_contribution;
arr2[arr[value].arr[value2].number_of_client - 1].sum_contribution = sum_contribution;
cout << "Введите адрес клиента\nВаш ответ:";
string address;
cin.ignore();
getline(cin, address);
arr2[arr[value].arr[value2].number_of_client - 1].address = address;
delete[] arr[value].arr[value2].arr;
arr[value].arr[value2].arr = arr2;
}
return true;
}
int banksInTheCountry(country*& arr, int number_of_country) {
if (number_of_country == 0)
{
cout << "Добавте хотя-бы одну страну!!!"<<endl;
system("pause");
cin.get();
return 0;
}
for (int i = 0; i < number_of_country; i++)
{
cout << i + 1 << ")" << arr[i].name << endl;
}
cout << "Выберите страну\nВаш ответ:";
unsigned int value;
cin >> value;
while (value > number_of_country)
{
cout << "Ошибка введите заново значение!\n Ваш ответ:";
cin >> value;
}
system("cls");
value -= 1;
cout << "В стране " << arr[value].name << " " << arr[value].number_of_banks << " банков";
return arr[value].number_of_banks;
}
bool key(country*& arr,const int number_of_country) {
system("cls");
cout << "Введите название банка\n Ваш ответ:";
string bank_name;
cin >> bank_name;
bool a = false;
for (int i = 0; i < number_of_country; i++)
{
for (int j = 0; j < arr[i].number_of_banks; j++)
{
if (arr[i].arr[j].name == bank_name) {
cout << "В стрене " << arr[i].name << " есть ваш банк" << endl;
a = true;
}
}
}
system("pause");
cin.get();
if (!a)
{
cout << "Вашего банка нету ни в одной стране!"<<endl;
system("pause");
cin.get();
return false;
}
return true;
}
void keepFile(fstream& file,country*& arr,int number_of_country) {
file.close();
file.open("information.txt", ios::out | ios::in);
for (int i = 0; i < number_of_country; i++)
{
file.write((char*)&arr[i], sizeof(arr[i]));
/*for (int j = 0; j < arr[i].number_of_banks; j++)
{
file.write((char*)&arr[i].arr[j], sizeof(bank));
for (int n = 0; n < arr[i].arr[j].number_of_client; n++)
{
file.write((char*)&arr[i].arr[j].arr[n], sizeof(client));
}
}*/
}
}
void giveInformation(fstream& file, country*& arr, int number_of_country) {
for (int i = 0; i < number_of_country; i++) {
country buffer;
file.read((char*)&buffer, sizeof(arr[i]));
cout << "Страна " << buffer.name << endl << "количество банков в стране" << buffer.number_of_banks << endl;
}
/*for (int i = 0; i < number_of_country; i++)
{
country buffer;
file.read((char*)&buffer, sizeof(country));
cout << "Страна " << buffer.name << endl << "количество банков в стране" << buffer.number_of_banks << endl;
for (int j = 0; j < arr[i].number_of_banks; j++)
{
bank buffer1;
file.read((char*)&buffer1, sizeof(bank));
cout << "Банк№" << j + 1 << " " << buffer1.name <<" процент годових "<< buffer1.annual_percentage << "\nКоличество клиентов в банке " << buffer1.number_of_client << endl;
for (int n = 0; n < arr[i].arr[j].number_of_client; n++)
{
client buffer2;
file.read((char*)&buffer2, sizeof(client));
cout << "Клиент№" << n + 1 << "\nИмя " << buffer2.name << "\nАдрес " << buffer2.address << "\n Сумма вложения " << buffer2.sum_contribution << endl;
}
}
}*/
}
int main()
{
setlocale(0,"rus");
country* arr;
int number_of_country = 0;
int value;
bool b = true;
fstream information;
information.open("information.txt",fstream::app);
if (!information.is_open())
{
cout << "Ошибка откритие файла!!!";
return 1;
}
while (b)
{
system("cls");
cout << "1)добавить страну\n2)добавить банк\n3)добавить клиента\n4)поиск информации по названию банка\n5)определить количество банков в конкретной государству\n6)Записать в файл\n7)Вся информация\n8)завершить программу\nВаш выбор:";
cin >> value;
switch (value)
{
case 1:
{
setCountry(number_of_country, arr);
break;
}
case 2:
{
setBank(number_of_country, arr);
break;
}
case 3:
{
setClient(arr, number_of_country);
break;
}
case 4:
{
key(arr, number_of_country);
break;
}
case 5:
{
banksInTheCountry(arr, number_of_country);
break;
}
case 6:
{
keepFile(information, arr, number_of_country);
break;
}
case 7:
{
giveInformation(information, arr, number_of_country);
break;
}
case 8:
{
b = false;
break;
}
}
}
information.close();
return 0;
}