Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
1.21 Mб
Скачать

ФГБОУ ВО

«Уфимский университет науки и технологий»

Кафедра ТК

ОТЧЕТ

по лабораторной работе № 4

по дисциплине «Современные методы программирования»

Тема: «Дружественные функции»

Вариант № 16

Выполнил: студент гр. ИВТ-327Б

Проверил: доцент каф. ТК

Хасанов А.Ю.

Уфа 2024

Содержание

Задание

Спроектировать структуру MARSCH, содержащую поля: наименование тура, цена одного дня, количество дней, стоимость проезда.

Спроектировать структуру TUR, содержащую поле типа MARSCH и дополнительно поля: фамилия, имя, отчество клиента, стоимость поездки.

Файл содержит информацию о проданных туристических поездках. Требуется спроектировать классы, позволяющие обрабатывать эти данные. В классах должно быть предусмотрено, как минимум, выполнение следующих видов обработки:

  1. Загрузка из файла;

  1. Сохранение результатов обработки в файлах;

  1. Добавление записи;

  1. Удаление записи;

  1. Вывод на экран дисплея данных и результатов обработки;

  1. Сортировка по Ф.И.О. клиента;

  1. Алфавитная сортировка по наименованию тура;

  1. Числовая сортировка по количеству дней.

  1. Перечень наименований тура с указанием количества дней (результат отсортирован по количеству дней);

  1. Перечень наименований тура с указанием количества дней (результат отсортирован по наименованию тура);

  1. Поиск по стоимости поездки (результат отсортирован по наименованию тура);

  1. Поиск по стоимости поездки (результат отсортирован по длительности тура).

Выполнение задания:

Разметка таблицы

Фамилия и инициалы

Стоимость

Название тура

Цена 1-го дня

Кол-во дней

Цена проезда

Код программы:

#include <Windows.h> //для русского языка

#include <conio.h> //для очистки экрана

#include <fstream> //для работы с файлами

#include <iomanip> //для setw

#include <iostream>

#include <string>

using namespace std;

struct marsch

{

string name;

int priceDay, cnt, priceTransit;

};

struct tur {

marsch dr;

string nameFIO;

int price;

};

struct namePerech {

string name;

int ng;

};

//перегр. операция ввода

istream& operator>>(istream& in, tur& f) //дружественная операная функция ввода

{

string iniz;

cout << " Ф.И.О.: ";

cin >> f.nameFIO >> iniz;

f.nameFIO = f.nameFIO + " " + iniz;

cout << "Стоимость: ";

cin >> f.price;

cout << " Название тура: ";

cin >> f.dr.name;

cout << " Цена одного дня: ";

cin >> f.dr.priceDay;

cout << " Количество дней: ";

cin >> f.dr.cnt;

cout << " Стоимость проезда: ";

cin >> f.dr.priceTransit;

return in;

}

//перег. опервции вывода структур

ostream& operator<<(ostream& out, namePerech& z) {

out << "|" << setw(10) << z.name << "|"

<< setw(8) << z.ng << "| \n";

return out;

}

ostream& operator<<(ostream& out, tur& z)

{

out << " | " << setw(20) << z.nameFIO << " | " << setw(10)

<< z.price << " | " << setw(10) << z.dr.name << " | " << setw(10) << z.dr.priceDay

<< " | " << setw(4) << z.dr.cnt << " | " << setw(6) << z.dr.priceTransit << " | \n";

return out;

}

int operator>(marsch v, marsch w)

{

if (v.cnt > w.cnt) return 1;

if ((v.cnt == w.cnt) && (v.priceDay > w.priceDay)) return 1;

return 0;

}

class masB;//чтоб не ругался

class masC;

class masA {

private:

tur* px;

int n;

public:

masA() :px(NULL), n(0) {};

masA(masA& Z);

~masA() { if (px != NULL) delete[]px; }//деструктор

masA& operator=(masA& z);//прототип перегруженного оператора присваивания

void inputFile();

void addTur();

void deleteTur();

void output();

void outputFile();

void sortName();

void sortNameTur();

void sortCnt();

friend istream& operator>>(istream& in, tur& f);

friend ostream& operator<<(ostream& out, masA& z);

friend void makePerech(masA& v, masB& w);

friend void findPrice(masA& v, masC& w);

};

//класс для перечня и перегрузка оператора присваивания

class masB {

private:

namePerech* py;

int k;

public:

masB() :py(NULL), k(0) {};

masB(masB& z);

~masB() { if (py != NULL) delete[] py; }

masB& operator=(masB& z);

void sortName();

void sortCnt();

void outputFile();

friend ostream& operator<<(ostream& out, masB& z);

friend void makePerech(masA& v, masB& w);

friend void findPrice(masA& v, masC& w);

};

masA::masA(masA& z)//перегруженная операция присваивания

{

int i;

n = z.n;

if (n == 0) px = NULL;

else {

px = new tur[n];

if (px == NULL) {

cout << "нет памяти.\n";

cout << "Конструктор копирования.\n";

_getch(); exit(1);

}

for (i = 0; i < n; i++)

px[i] = z.px[i];

}

} // конец конструктора копирования

masB::masB(masB& z)//перегруженная операция присваивания

{

int i;

k = z.k;

if (k == 0) py = NULL;

else {

py = new namePerech[k];

if (py == NULL) {

cout << "нет памяти.\n";

cout << "Конструктор копирования.\n";

_getch(); exit(1);

}

for (i = 0; i < k; i++)

py[i] = z.py[i];

}

} // конец конструктора копирования

masB& masB :: operator = (masB& z)

{

int i;

if (this == &z) return *this;

if (py != NULL) delete[]py;

k = z.k;

if (z.py == NULL) py = NULL;

else {

py = new namePerech[k];

if (py == NULL) {

cout << "нет памяти.\n";

cout << "операция присваивания.\n";

_getch(); return z;

}

for (i = 0; i < k; i++) py[i] = z.py[i];

}

return *this;

}

//класс для поиска и перегрузка оператора присваивания

class masC

{

private:

tur* pz;

int l;

public:

masC() :pz(NULL), l(0) {};

masC(masC& z);

~masC() { if (pz != NULL) delete[] pz; }

masC& operator=(masC& z);

friend ostream& operator<<(ostream& out, masC& z);

friend void findPrice(masA& v, masC& w);

void sortName();

void sortCnt();

void outputFile();

};

masC::masC(masC& z)//перегруженная операция присваивания

{

int i;

l = z.l;

if (l == 0) pz = NULL;

else {

pz = new tur[l];

if (pz == NULL) {

cout << "нет памяти.\n";

cout << "Конструктор копирования.\n";

_getch(); exit(1);

}

for (i = 0; i < l; i++)

pz[i] = z.pz[i];

}

}

masC& masC :: operator = (masC& z)

{

int i;

if (this == &z) return *this;

if (pz != NULL) delete[]pz;

l = z.l;

if (z.pz == NULL) pz = NULL;

else {

pz = new tur[l];

if (pz == NULL) {

cout << "нет памяти.\n";

cout << "операция присваивания.\n";

_getch(); return z;

}

for (i = 0; i < l; i++) pz[i] = z.pz[i];

}

return *this;

}

class agregate {

private:

masA aa;

masB bb;

masC cc;

public:

agregate() {}

agregate(agregate & z) : aa(z.aa), bb(z.bb), cc(z.cc) {}

~agregate() {}

agregate& operator = (agregate & z);

void inputFile();

void outputTur();

void outputFileTur();

void addTur();

void deleteTur();

void sortNameA();

void sortNameTurA();

void sortCntA();

void makePerechn();

void outputB();

void outputFileB();

void sortNameB();

void sortCntB();

void findPriceC();

void sortNameC();

void sortCntC();

void outputC();

void outputFileC();

friend ostream& operator<<(ostream& out, agregate& z);

};

agregate& agregate :: operator=(agregate& z)

{

aa = z.aa;

bb = z.bb;

cc = z.cc;

return *this;

}

void agregate::inputFile() {

aa.inputFile();

}

void agregate::outputTur() {

aa.output();

}

void agregate::outputFileTur() {

aa.outputFile();

}

void agregate::addTur() {

aa.addTur();

}

void agregate::sortNameA() {

aa.sortName();

}

void agregate::deleteTur() {

aa.deleteTur();

}

void agregate::sortNameTurA() {

aa.sortNameTur();

}

void agregate::makePerechn()

{ makePerech(aa, bb); }

void agregate::sortCntA() {

aa.sortCnt();

}

void agregate::outputB() {

cout << bb;

}

void agregate::outputFileB() {

bb.outputFile();

}

void agregate::sortNameB() {

bb.sortName();

}

void agregate::sortCntB() {

bb.sortCnt();

}

void agregate::findPriceC() {

findPrice(aa,cc);

}

void agregate::sortCntC() {

cc.sortCnt();

}

void agregate::sortNameC() {

cc.sortName();

}

void agregate::outputC() {

cout << cc;

}

void agregate::outputFileC() {

cc.outputFile();

}

ostream& operator << (ostream& out, agregate& z)

{

out << z.aa; // перегруженный “<<” для masA

out << z.bb; // перегруженный “<<” для masB

out << z.cc; // перегруженный “<<” для masC

return out;

}

masA;

masB;

masC;

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

agregate a;

int j;

while (1) {

system("cls");

cout << "------------------------------------------------------------\n";

cout << "\t\t\tМЕНЮ\n";

cout << "------------------------------------------------------------\n";

cout << "1. Ввод исходного массива из файла.\n";

cout << "2. Вывод исходного массива на экран.\n";

cout << "3. Сохранение результатов обработки в файл.\n";

cout << "4. Добавление записи в базу данных.\n";

cout << "5. Удаление записи в базе данных.\n";

cout << "6. Сортировка по Ф.И.О.\n";

cout << "7. Сортировка строкового поля.\n";

cout << "8. Сортировка по количеству дней.\n";

cout << "9. Формирование перечня групп.\n";

cout << "10. Вывод перечня групп на экран.\n";

cout << "11. Вывод перечня групп в текстовый файл.\n";

cout << "12. Сортировка перечня по количеству дней.\n";

cout << "13. Сортировка перечня по наименованию тура.\n";

cout << "14. Поиск по стоимости поездки (результат отсортирован по наименованию тура).\n";

cout << "15. Поиск по стоимости поездки (результат отсортирован по длительности тура)\n";

cout << "16. Вывод результата поиска на экран.\n";

cout << "17. Вывод результата поиска в файл.\n";

cout << "18. Проверка операции присваивания класса masА\n";

cout << "19. Проверка операции присваивания класса masА\n";

cout << "20. Выход из программы.\n";

cout << "------------------------------------------------------------\n";

cout << "\nВаш выбор: ";

cin >> j;

if (cin.fail())

{

string s;

cin.clear();

cin >> s;

cout << "Это не пункт меню\n";

_getch();

continue;

}

switch (j) {

case 1: a.inputFile(); break;

case 2:a.outputTur(); break;

case 3: a.outputFileTur(); break;

case 4: a.addTur(); break;

case 5: a.deleteTur(); break;

case 6: a.sortNameA(); break;

case 7: a.sortNameTurA(); break;

case 8: a.sortCntA(); break;

case 9:a.makePerechn(); break;

case 10:a.outputB(); break;

case 11: a.outputFileB(); break;

case 12: a.sortCntB(); break;

case 13:a.sortNameB(); break;

case 14:a.findPriceC(); a.sortNameC(); break;

case 15:a.findPriceC(); a.sortCntC(); break;

case 16: a.outputC(); break;

case 17:a.outputFileC(); break;

case 18: {agregate b(a); cout << b << a; } break;

case 19: {agregate b, c; c = b = a; cout << c << b << a; } break;

case 20: cout << "\n Конец работы.\n";

_getch(); return 0;

default: cout << "\n Нет такого пункта меню.\n";

_getch();

}

}

}

masA& masA :: operator=(masA& z)

{

int i;

if (this == &z) return *this;

if (px != NULL) delete[]px;

n = z.n;

if (z.px == NULL) px = NULL;

else {

px = new tur[n];

if (px == NULL) {

cout << "нет памяти.\n";

cout << "операция присваивания.\n";

_getch(); return z;

}

for (i = 0; i < n; i++)

px[i] = z.px[i];

}

return *this;

}

void masA::inputFile()

{

ifstream fin;

string file;

string iniz;

tur t;

cout << "Имя входного файла:";

cin >> file;

fin.open(file.c_str());

if (fin.fail()) {

cout << file << " не открывается\n";

_getch(); return;

}

n = 0;

if (px != NULL) { delete[] px; px = NULL; }

while (1)

{

fin >> t.nameFIO >> iniz >> t.price >> t.dr.name >> t.dr.priceDay >> t.dr.cnt >> t.dr.priceTransit;

if (fin.fail()) break;

n++;

}

fin.close();

fin.open(file.c_str());

if (fin.fail()) {

cout << file << "повторно не открывается\n";

_getch(); n = 0; return;

}

px = new tur[n];

if (px == NULL) {

cout << "Нет памяти.\n"; fin.close();

cout << "Ввести фаил не удается.\n";

_getch(); n = 0; return;

}

for (int i = 0; i < n; i++)

{

fin >> px[i].nameFIO >> iniz >> px[i].price >> px[i].dr.name >> px[i].dr.priceDay >> px[i].dr.cnt >> px[i].dr.priceTransit;

px[i].nameFIO = px[i].nameFIO + " " + iniz;

}

fin.close();

cout << "Файл введен " << endl;

_getch();

}

void masA::output()

{

int i;

if (px == NULL) { cout << "\n Данных нет.\n Массив пуст.\n"; _getch(); }

else {

cout << "____________________________________________________________________________________\n";

cout << "| | | | | | | \n";

cout << "| No | Фамилия и инициалы | Cтоимость | Название | Цена |Кол-во| Цена \n";

cout << "| | | | тура | 1-го дня | дней | проезда \n";

cout << "|____|______________________|____________|____________|____________|______|_________\n";

int i;

for (i = 0; i < n; i++)

cout << "| " << setw(2) << i + 1 << px[i];

cout << "|____|______________________|____________|____________|____________|______|_________\n";

_getch();

}

}

ostream& operator<<(ostream& out, masA& z)//перегруженная операция вывода на экран для объекта masA

{

int i;

cout << "____________________________________________________________________________________\n";

cout << "| | | | | | | \n";

cout << "| No | Фамилия и инициалы | Cтоимость | Название | Цена |Кол-во| Цена \n";

cout << "| | | | тура | 1-го дня | дней | проезда \n";

cout << "|____|______________________|____________|____________|____________|______|_________\n";

for (i = 0; i < z.n; i++)

out << "| " << setw(2) << i + 1 << z.px[i];

cout << "|____|______________________|____________|____________|____________|______|_________\n";

_getch();

return out;

}

ostream& operator<<(ostream& out, masB& z)

{

int i;

// Вывод заголовка таблицы (перечня групп)

out << "_________________________\n";

out << "| No| Тур | Кол-во | \n";

out << "|___|________ _|________| \n";

// Вывод строк таблицы

for (i = 0; i < z.k; i++)

out << "| " << setw(2) << i + 1 << z.py[i];

// out<<py[i] - перегруженная операция вывода на экран структуры

out << "|___|__________|________| \n";

_getch();

return out;

}

ostream& operator<<(ostream& out, masC& z)//перегруженная операция вывода на экран для объекта masA

{

int i;

cout << "____________________________________________________________________________________\n";

cout << "| | | | | | | \n";

cout << "| No | Фамилия и инициалы | Cтоимость | Название | Цена |Кол-во| Цена \n";

cout << "| | | | тура | 1-го дня | дней | проезда \n";

cout << "|____|______________________|____________|____________|____________|______|_________\n";

for (i = 0; i < z.l; i++)

out << "| " << setw(2) << i + 1 << z.pz[i];

cout << "|____|______________________|____________|____________|____________|______|_________\n";

_getch();

return out;

}

void masA::outputFile()

{

ofstream fout;

string file;

int i;

cout << "Имя выходного файла:"; cin >> file;

fout.open(file.c_str());

if (fout.fail()) {

cout << "\n " << file << "не создается.\n";

_getch(); return;

}

fout << "____________________________________________________________________________________\n";

fout << "| | | | | | | | \n";

fout << "| No | Фамилия и инициалы | Cтоимость | Название | Цена |Кол-во| Цена | \n";

fout << "| | | | тура | 1-го дня | дней | проезда | \n";

fout << "|____|______________________|____________|____________|____________|______|_________|\n";

for (i = 0; i < n; i++)

fout << "| " << setw(2) << i + 1 << " | " << setw(20) << px[i].nameFIO << " | " << setw(10)

<< px[i].price << " | " << setw(10) << px[i].dr.name << " | " << setw(10) << px[i].dr.priceDay

<< " | " << setw(4) << px[i].dr.cnt << " | " << setw(6) << px[i].dr.priceTransit << " | \n";

fout << "|____|______________________|____________|____________|____________|______|_________\n";

fout.close();

cout << "Массив структур сохранен в файл.\n";

_getch();

}

void masA::addTur() {

int i;

tur f, * p; string iniz;

p = new tur[n + 1];

if (p == NULL) {

cout << " Нет памяти.\n";

cout << " Добавить не удается.\n";

_getch(); return;

}

cout << "Фамилия и инициалы: ";

cin >> f.nameFIO >> iniz;

f.nameFIO = f.nameFIO + " " + iniz;

cout << "Стоимость: ";

cin >> f.price;

cout << "Название тура: ";

cin >> f.dr.name;

cout << "Цена 1-го дня: ";

cin >> f.dr.priceDay;

cout << "Кол-во дней: ";

cin >> f.dr.cnt;

cout << "Цена проезда: ";

cin >> f.dr.priceTransit;

for (i = 0; i < n; i++) p[i] = px[i];

p[n] = f;

n++;

delete[] px;

px = p;

cout << "Запись добавлена.\n";

_getch();

}

void masA::deleteTur()

{

int j, i;

tur* p;

char ch;

output();

cout << "Номер строки, которую вы хотите удалить: ";

cin >> j;

if (cin.fail())

{

cin.clear();

string s;

cin >> s;

cout << " Это не номер строки.\n";

_getch();

return;

}

if (j<1 || j>n) {

cout << "Ошибка: нет такой строки.\n";

_getch(); return;

}

j--;

cout << " " << j + 1 << "-я строка:\n";

cout << px[j].nameFIO << " " << px[j].price << " " << px[j].dr.name << " " << px[j].dr.priceDay << " " << px[j].dr.cnt << " " << px[j].dr.priceTransit << " \n";

cout << "Удалить?(y/n):"; cin >> ch;

if (ch == 'n') return;

if (ch != 'y') {

cout << "Ошибка ответа на вопрос. \n";

_getch(); return;

}

if (n == 1) { delete[] px; px = NULL; n = 0; }

else {

p = new tur[n - 1];

if (p == NULL) {

cout << "Нет памяти.\n ";

cout << "Удалить не удается.\n";

_getch(); return;

}

for (i = 0; i < j; i++)

p[i] = px[i];

for (i = j + 1; i < n; i++)

p[i - 1] = px[i];

delete[] px;

px = p;

n--;

}

cout << "Запись удалена.\n"; _getch();

}

void masA::sortName()

{

int i, fl, nn;

tur t;

nn = n;

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (px[i].nameFIO > px[i + 1].nameFIO)

{

fl = 1; t = px[i];

px[i] = px[i + 1];

px[i + 1] = t;

}

} while (fl == 1);

cout << "Массив структур упорядочен по ФИО в алфавитном порядке\n";

_getch();

}

void masA::sortNameTur()

{

int i, fl, nn;

tur t;

nn = n;

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (px[i].dr.name > px[i + 1].dr.name)

{

fl = 1; t = px[i];

px[i] = px[i + 1];

px[i + 1] = t;

}

} while (fl == 1);

cout << "Массив структур упорядочен по наименованию тура в алфавитном порядке\n";

_getch();

}

void masA::sortCnt()

{

int i, fl, nn;

tur t;

nn = n; // вводим копию размера массива

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (px[i].dr > px[i + 1].dr)

{

fl = 1; t = px[i];

px[i] = px[i + 1];

px[i + 1] = t;

}

} while (fl == 1);

cout << "Массив структур упорядочен по количеству дней\n";

_getch();

}

void makePerech(masA& v, masB& w) {

int i, j, fl, n, k;

namePerech* y;

n = v.n;

y = new namePerech[n];

if (y == NULL) {

std::cout << "Нет памяти.\n";

_getch(); return;

}

k = 0;

if (w.py != NULL) delete[] w.py;

for (i = 0; i < n; i++)

{

fl = 0;

for (j = 0; j < k; j++)

if (v.px[i].dr.name == y[j].name) { fl = 1; y[j].ng++; }

if (fl == 0) { y[k].name = v.px[i].dr.name; y[k].ng = 1; k++; }

}

w.py = new namePerech[k];

if (w.py == NULL) {

std::cout << "Нет памяти для перечня.\n";

_getch();

w.k = 0;

delete[] y;

return;

}

for (j = 0; j < k; j++) w.py[j] = y[j];

w.k = k;

delete[] y;

std::cout << "Перечень сформирован.\n";

_getch();

}

void masB::outputFile()

{

ofstream fout;

string file; int i;

cout << "Имя выходного файла: ";

cin >> file;

fout.open(file.c_str());

// Защита от неправ-го ввода имени файла

if (fout.fail()) {

cout << file << "не создается.\n";

_getch(); return;

}

// Вывод заголовка

fout << "__________________________\n";

fout << "| No| Тур | Кол-во | \n";

fout << "|___|___________|________| \n";

// Вывод строк таблицы

for (i = 0; i < k; i++)

fout << "| " << setw(2) << i + 1 << "|" << setw(10) <<py[i].name << " | "

<< setw(6) << py[i].ng << " | \n";

fout << "|___|__________|________| \n";

fout.close();

cout << "Перечень сохранен в файле.\n";

_getch();

}

void masB::sortCnt()

{

int i, fl, nn;

namePerech t;

nn = k;

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (py[i].ng > py[i + 1].ng)

{

fl = 1; t = py[i];

py[i] = py[i + 1];

py[i + 1] = t;

}

} while (fl == 1);

cout << "Перечень упорядочен по количеству дней. \n"; _getch();

}

void masB::sortName() // по количеству результатов в группе

{

int i, fl, nn;

namePerech t;

nn = k; // вводим копию размера массива

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (py[i].name > py[i + 1].name)

{

fl = 1; t = py[i];

py[i] = py[i + 1];

py[i + 1] = t;

}

} while (fl == 1);

cout << "Перечень упорядочен по названию туров. \n"; _getch();

}

void findPrice(masA& v, masC& w) {

int i, j, l, n,cnt;

tur* y;

n = v.n;

y = new tur[n];

if (y == NULL) {

cout << "Нет памяти.\n";

_getch();

return;

}

cout << "Стоимость поездки: ";

cin >> cnt;

l = 0;

for (i = 1; i < n; i++)

if (v.px[i].price == cnt) {

y[l] = v.px[i];

l++;

}

if (l==0) {

cout << "Не найдено.\n";

_getch();

delete[] y;

return;

}

if (w.pz != NULL) delete[]w.pz;

w.pz = new tur[l];

if (w.pz == NULL) {

cout << "Нет памяти.\n";

_getch();

w.l = 0;

delete[] y;

return;

}

for (j = 0; j < l; j++) w.pz[j] = y[j];

w.l = l;

if (w.pz == NULL) "Не найдено.\n";

delete[] y;

cout << "Массив групп сформирован.\n";

_getch();

}

void masC::sortName()

{

int i, fl, nn;

tur t;

nn = l;

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (pz[i].dr.name > pz[i + 1].dr.name)

{

fl = 1; t = pz[i];

pz[i] = pz[i + 1];

pz[i + 1] = t;

}

} while (fl == 1);

_getch();

}

void masC::sortCnt()

{

int fl, i, nn;

tur t;

nn = l;

int a;

do {

fl = 0; nn--;

for (i = 0; i < nn; i++)

if (pz[i].dr.cnt > pz[i + 1].dr.cnt)

{

fl = 1; t = pz[i];

pz[i] = pz[i + 1];

pz[i + 1] = t;

}

} while (fl == 1);

_getch();

}

void masC::outputFile()

{

ofstream fout;

string file;

int i;

cout << "Имя выходного файла:"; cin >> file;

fout.open(file.c_str());

if (fout.fail()) {

cout << "\n " << file << "не создается.\n";

_getch(); return;

}

fout << "____________________________________________________________________________________\n";

fout << "| | | | | | | | \n";

fout << "| No | Фамилия и инициалы | Cтоимость | Название | Цена |Кол-во| Цена | \n";

fout << "| | | | тура | 1-го дня | дней | проезда | \n";

fout << "|____|______________________|____________|____________|____________|______|_________|\n";

for (i = 0; i < l; i++)

fout << "| " << setw(2) << i + 1 << " | " << setw(20) << pz[i].nameFIO << " | " << setw(10)

<< pz[i].price << " | " << setw(10) << pz[i].dr.name << " | " << setw(10) << pz[i].dr.priceDay

<< " | " << setw(4) << pz[i].dr.cnt << " | " << setw(6) << pz[i].dr.priceTransit << " | \n";

fout << "|____|______________________|____________|____________|____________|______|_________\n";

fout.close();

cout << "Массив структур сохранен в файл.\n";

_getch();

}Скриншоты работы программы

  1. Загрузка из файла:

а) В качестве пункта меню введено не число:

б) Введен несуществующий пункт меню:

в) Введен несуществующий файл:

г) Введен правильный файл:

2. Вывод информации на экран

3. Добавление записи

4. Удаление записи

a) В качестве номера строки введено не число

б) Введена несуществующая строка:

в) Дан неверный ответ на подтверждение удаления:

г) Удаление отменено:

д) Удаление:

5. Алфавитная сортировка по Ф.И.О.

6. Сортировка по наименованию туров.

7. Числовая сортировка по количеству дней

8. Сохранение результатов обработки в файлах

9. Формирование перечня:

10. Сортировка перечня по количеству дней

11. Сортировка перечня по наименованию тура.

12. Поиск по стоимости поездки (результат отсортирован по наименованию тура):

13. Поиск по стоимости поездки (результат отсортирован по длительности тура):

14. Вывод результата поиска в файл.

15. Проверка конструктора конструктора копирования класса masA.