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

Тестирование программы

Главное меню:

Вывод на экран:

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

Удаление записи:

Сортировка по ФИО:

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

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

Поиск по стоимости проезда, наименованию тура, по стоимости проезда, по ФИО:

Перечень наименований, длительности, стоимости проезда:

Заключение

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

Программа написана на языке С++, но может быть переписана и на другом современном языке программирования.

Использованная литература

  1. Методы современного программирования конспект

//А.Ю. Хасанов //УГАТУ, 2024г.

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

#define NOMINMAX

#include <iostream>

#include <fstream>

#include <string>

#include <algorithm>

#include <Windows.h>

#include <iomanip>

#include <limits>

using namespace std;

ofstream fout;

ifstream fin;

struct marsch

{

string name;

int priceDay, cnt, priceTransit;

};

struct tur {

marsch dr;

string nameFIO;

int price;

};

bool operator>(marsch v, marsch w)

{

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

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

return false;

}

class masB; class masC;

class masA {

protected:

tur* px;

int n;

public:

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

masA(masA& Z);

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

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

void addTur();

void deleteTur();

void sortName();

void sortNameTur();

void sortCnt();

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

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

friend ifstream& operator>>(ifstream& in, masA& z);

};

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";

system("pause"); exit(1);

}

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

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

}

}

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

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";

system("pause");

return z;

}

for (int i = 0; i < n; i++) px[i] = z.px[i];

}

return *this;

}

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;

}

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

out << "Массив:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

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

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

out << "------------------------------------------------------------------------------------\n";

system("pause");

return out;

}

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;

}

ifstream& operator>>(ifstream& in, masA& z) {

string file, iniz;

tur t;

cout << "Имя файла: "; cin >> file; in.open(file);

if (in.fail()) {

cout << file << "-не найдено\n";

system("pause");

return in;

}

z.n = 0;

if (z.px != NULL) {

delete[] z.px;

z.px = NULL;

}

while (true) {

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

if (in.fail()) break;

z.n++;

}

in.close(); in.open(file);

if (in.fail()) {

cout << file << "-не найдено\n";

system("pause");

return in;

}

z.px = new tur[z.n];

if (z.px == NULL) {

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

cout << "Ввод из файла\n";

system("pause");

exit(1);

}

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

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

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

}

in.close();

cout << "Файл был успешно загружен \n";

system("pause");

return in;

}

ofstream& operator<<(ofstream& out, masA& z) {

string file;

cout << "Введите имя файла, в который нужно сохранить массив (с расширением!) (если указанного файла нет, будет создан новый с заданным названием): ";

cin >> file;

out.open(file);

if (out.fail())

{

cout << "Не удалось открыть файл " << file << endl; system("pause"); return out;

}

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

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

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

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

out.close();

cout << "Массив был успешно сохранен в файл " << file << endl; system("pause");

return out;

}

void masA::addTur() {

tur t, * p;

p = new tur[n + 1];

if (p == NULL) {

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

cout << "Добавление записи\n";

system("pause");

exit(1);

}

cin >> t;

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

p[i] = px[i];

}

p[n] = t; n++;

delete[] px;

px = p;

cout << "Строка добавлена. \n";

system("pause");

}

void masA::deleteTur() {

tur* p;

int ch;

char x;

cout << *this;

cout << "Номер удаляемой строки: "; cin >> ch;

if (cin.fail()) {

cin.clear();

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cout << "Введен не номер\n";

system("pause");

return;

}

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

cout << "Нет строки под номером " << ch << "\n";

system("pause");

return;

}

ch--;

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

cout << "____________________________________________________________________________________\n";

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

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

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

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

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

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

cout << "Удалить строку?(Y/N) "; cin >> x;

if (x == 'N') {

return;

}

if (x != 'Y') {

cout << "Введите Y или N\n";

system("pause");

return;

}

if (n == 1) delete[]px;

else {

p = new tur[n - 1];

if (p == NULL) {

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

cout << "Удаление записи\n";

system("pause");

exit(1);

}

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

for (int i = ch + 1; i < n; i++) p[i - 1] = px[i];

delete[] px;

px = p;

n--;

cout << "Строка удалена. \n";

system("pause");

return;

}

}

void masA::sortName() {

tur t;

int fl, nn = n;

do {

fl = 0; nn--;

for (int 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";

system("pause");

}

void masA::sortNameTur() {

tur t;

int fl, nn = n;

do {

fl = 0; nn--;

for (int 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";

system("pause");

}

void masA::sortCnt() {

tur t;

int fl, nn = n;

do {

fl = 0; nn--;

for (int 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";

system("pause");

}

struct perech {

string name;

int cnt;

};

struct perech2 {

int cnt, nc;

};

struct perech3 {

int priceTransit, nt;

};

class masB : public masA {

protected:

perech* py;

int k;

perech2* py2;

int k2;

perech3* py3;

int k3;

public:

masB() : py(NULL), k(0), py2(NULL), k2(0), py3(NULL), k3(0) {};

masB(masB& z);

~masB() {

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

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

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

}

masB& operator=(masB& z);

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

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

void makePerech();

void makePerech2();

void makePerech3();

void sortCnt();

void sortCnt2();

void sortPrice();

};

masB::masB(masB& z) : masA(z) {

int i;

k = z.k;

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

else {

py = new perech[k];

if (py == NULL) {

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

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

system("pause");

exit(1);

}

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

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

}

k2 = z.k2;

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

else {

py2 = new perech2[k2];

if (py2 == NULL) {

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

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

system("pause");

exit(1);

}

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

py2[i] = z.py2[i];

}

k3 = z.k3;

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

else {

py3 = new perech3[k3];

if (py3 == NULL) {

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

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

system("pause");

exit(1);

}

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

py3[i] = z.py3[i];

}

}

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

int i;

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

masA::operator=(z);

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

k = z.k;

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

else {

py = new perech[k];

if (py == NULL) {

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

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

system("pause");

return z;

}

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

}

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

k2 = z.k2;

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

else {

py2 = new perech2[k2];

if (py2 == NULL) {

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

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

system("pause");

return z;

}

for (i = 0; i < k2; i++) py2[i] = z.py2[i];

}

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

k3 = z.k3;

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

else {

py3 = new perech3[k3];

if (py3 == NULL) {

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

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

system("pause");

return z;

}

for (i = 0; i < k3; i++) py3[i] = z.py3[i];

}

return *this;

}

void masB::makePerech() {

int i, j, fl;

perech* y;

y = new perech[n];

if (y == NULL) {

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

cout << "Составление перечня\n";

system("pause");

return;

}

k = 0;

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

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

y[k].name = px[i].dr.name;

y[k].cnt = px[i].dr.cnt;

k++;

}

py = new perech[k];

if (py == NULL) {

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

cout << "Составление перечня\n";

k = 0; delete[] y;

system("pause");

return;

}

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

delete[] y;

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

system("pause");

}

void masB::makePerech2() {

int i, j, fl;

perech2* y;

y = new perech2[n];

if (y == NULL) {

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

cout << "Составление перечня\n";

system("pause");

return;

}

k2 = 0;

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

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

fl = 0;

for (j = 0; j < k2; j++) {

if (px[i].dr.cnt == y[j].cnt) {

fl = 1;

y[j].nc++;

}

}

if (fl == 0) {

y[k2].cnt = px[i].dr.cnt;

y[k2].nc = 1;

k2++;

}

}

py2 = new perech2[k2];

if (py2 == NULL) {

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

cout << "Составление перечня\n";

k2 = 0; delete[] y;

system("pause");

return;

}

for (j = 0; j < k2; j++) py2[j] = y[j];

delete[] y;

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

system("pause");

}

void masB::makePerech3() {

int i, j, fl;

perech3* y;

y = new perech3[n];

if (y == NULL) {

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

cout << "Составление перечня\n";

system("pause");

return;

}

k3 = 0;

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

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

fl = 0;

for (j = 0; j < k3; j++) {

if (px[i].dr.priceTransit == y[j].priceTransit) {

fl = 1;

y[j].nt++;

}

}

if (fl == 0) {

y[k3].priceTransit = px[i].dr.priceTransit;

y[k3].nt = 1;

k3++;

}

}

py3 = new perech3[k3];

if (py3 == NULL) {

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

cout << "Составление перечня\n";

k3 = 0; delete[] y;

system("pause");

return;

}

for (j = 0; j < k3; j++) py3[j] = y[j];

delete[] y;

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

system("pause");

}

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

out << "|" << setw(10) << z.name << "|" << setw(8) << z.cnt << "| \n";

return out;

}

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

out << "|" << setw(10) << z.cnt << "|" << setw(8) << z.nc << "| \n";

return out;

}

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

out << "|" << setw(10) << z.priceTransit << "|" << setw(8) << z.nt << "| \n";

return out;

}

ofstream& operator<<(ofstream& out, masB& z) {

string file;

cout << "Введите имя файла, в который нужно сохранить массив (с расширением!) (если указанного файла нет, будет создан новый с заданным названием): ";

cin >> file;

out.open(file);

if (out.fail())

{

cout << "Не удалось открыть файл " << file << endl; system("pause"); return out;

}

int i;

out << "Перечень наименований:\n";

out << "_________________________\n";

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

out << "| | | дней | \n";

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

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

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

}

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

out << "Перечень длительности:\n";

out << "_________________________\n";

out << "| No| Длит-сть | Кол-во | \n";

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

for (i = 0; i < z.k2; i++) {

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

}

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

out << "Перечень стоимости проезда:\n";

out << "_________________________\n";

out << "| No| Стоимость| Кол-во | \n";

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

for (i = 0; i < z.k3; i++) {

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

}

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

out.close();

cout << "Массив был успешно сохранен в файл " << file << endl; system("pause");

return out;

}

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

int i;

out << "Перечень наименований:\n";

out << "_________________________\n";

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

out << "| | | дней | \n";

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

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

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

}

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

out << "Перечень длительности:\n";

out << "_________________________\n";

out << "| No| Длит-сть | Кол-во | \n";

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

for (i = 0; i < z.k2; i++) {

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

}

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

out << "Перечень стоимости проезда:\n";

out << "_________________________\n";

out << "| No| Стоимость| Кол-во | \n";

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

for (i = 0; i < z.k3; i++) {

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

}

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

system("pause");

return out;

}

void masB::sortCnt() {

perech t;

int fl, nn = k;

do {

fl = 0; nn--;

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

if (py[i].cnt > py[i + 1].cnt) {

fl = 1; t = py[i];

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

py[i + 1] = t;

}

}

} while (fl == 1);

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

system("pause");

}

void masB::sortCnt2() {

perech2 t;

int fl, nn = k2;

do {

fl = 0; nn--;

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

if (py2[i].cnt > py2[i + 1].cnt) {

fl = 1; t = py2[i];

py2[i] = py2[i + 1];

py2[i + 1] = t;

}

}

} while (fl == 1);

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

system("pause");

}

void masB::sortPrice() {

perech3 t;

int fl, nn = k3;

do {

fl = 0; nn--;

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

if (py3[i].priceTransit > py3[i + 1].priceTransit) {

fl = 1; t = py3[i];

py3[i] = py3[i + 1];

py3[i + 1] = t;

}

}

} while (fl == 1);

cout << "Перечень упорядочен по стоимости проезда. \n";

system("pause");

}

class masC : public masB {

protected:

tur* pz;

int l;

tur* pz2;

int l2;

tur* pz3;

int l3;

tur* pz4;

int l4;

public:

masC() : pz(NULL), l(0), pz2(NULL), l2(0), pz3(NULL), l3(0), pz4(NULL), l4(0) {};

masC(masC& z);

~masC() {

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

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

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

}

masC& operator=(masC& z);

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

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

void findPrice();

void findTransitPrice();

void findName();

void findFio();

void sortName();

void sortPrice();

void sortCnt();

};

masC::masC(masC& z) : masB(z) {

int i;

l = z.l;

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

else {

pz = new tur[l];

if (pz == NULL) {

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

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

system("pause");

exit(1);

}

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

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

}

l2 = z.l2;

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

else {

pz2 = new tur[l2];

if (pz2 == NULL) {

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

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

system("pause");

exit(1);

}

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

pz2[i] = z.pz2[i];

}

l3 = z.l3;

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

else {

pz3 = new tur[l3];

if (pz3 == NULL) {

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

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

system("pause");

exit(1);

}

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

pz3[i] = z.pz3[i];

}

l4 = z.l4;

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

else {

pz4 = new tur[l4];

if (pz4 == NULL) {

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

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

system("pause");

exit(1);

}

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

pz4[i] = z.pz4[i];

}

}

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

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

masB::operator=(z);

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";

system("pause");

return z;

}

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

}

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

l2 = z.l2;

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

else {

pz2 = new tur[l2];

if (pz2 == NULL) {

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

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

system("pause");

return z;

}

for (int i = 0; i < l2; i++) pz2[i] = z.pz2[i];

}

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

l3 = z.l3;

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

else {

pz3 = new tur[l3];

if (pz3 == NULL) {

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

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

system("pause");

return z;

}

for (int i = 0; i < l3; i++) pz3[i] = z.pz3[i];

}

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

l4 = z.l4;

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

else {

pz4 = new tur[l4];

if (pz4 == NULL) {

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

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

system("pause");

return z;

}

for (int i = 0; i < l4; i++) pz4[i] = z.pz4[i];

}

return *this;

}

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

out << "Результаты поиска по стоимости поездки:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

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

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по наименованию:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l2; i++)

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по стоимости проезда:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l3; i++)

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по ФИО:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l4; i++)

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

out << "------------------------------------------------------------------------------------\n";

system("pause");

return out;

}

ofstream& operator<<(ofstream& out, masC& z) {

string file;

cout << "Введите имя файла, в который нужно сохранить массив (с расширением!) (если указанного файла нет, будет создан новый с заданным названием): ";

cin >> file;

out.open(file);

if (out.fail())

{

cout << "Не удалось открыть файл " << file << endl; system("pause"); return out;

}

out << "Результаты поиска по стоимости поездки:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

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

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по наименованию:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l2; i++)

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по стоимости проезда:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l3; i++)

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

out << "------------------------------------------------------------------------------------\n";

out << "Результаты поиска по ФИО:\n";

out << "____________________________________________________________________________________\n";

out << "| | | | | | | \n";

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

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

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

for (int i = 0; i < z.l4; i++)

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

out << "------------------------------------------------------------------------------------\n";

out.close();

cout << "Массив был успешно сохранен в файл " << file << endl; system("pause");

return out;

}

void masC::findPrice() {

int i, j, price;

tur* y;

y = new tur[n];

if (y == NULL) {

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

cout << "Поиск\n";

system("pause");

return;

}

cout << "Введите цену: "; cin >> price;

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

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

y[l] = px[i];

l++;

}

if (l == 0) {

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

system("pause");

delete[] y;

return;

}

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

pz = new tur[l];

if (pz == NULL) {

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

cout << "Поиск\n";

system("pause");

delete[] y;

l = 0;

return;

}

for (j = 0; j < l; j++) {

pz[j] = y[j];

}

delete[] y;

cout << "Поиск завершен.\n";

system("pause");

}

void masC::findName() {

int i, j;

string name;

tur* y;

y = new tur[n];

if (y == NULL) {

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

cout << "Поиск\n";

system("pause");

return;

}

cout << "Введите искомое наименование тура: "; cin >> name;

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

if (px[i].dr.name == name) {

y[l2] = px[i];

l2++;

}

if (l2 == 0) {

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

system("pause");

delete[] y;

return;

}

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

pz2 = new tur[l2];

if (pz2 == NULL) {

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

cout << "Поиск\n";

system("pause");

delete[] y;

l2 = 0;

return;

}

for (j = 0; j < l2; j++) {

pz2[j] = y[j];

}

delete[] y;

cout << "Поиск завершен.\n";

system("pause");

}

void masC::findTransitPrice() {

int i, j, price;

tur* y;

y = new tur[n];

if (y == NULL) {

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

cout << "Поиск\n";

system("pause");

return;

}

cout << "Введите стоимость проезда: "; cin >> price;

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

if (px[i].dr.priceTransit == price) {

y[l3] = px[i];

l3++;

}

if (l3 == 0) {

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

system("pause");

delete[] y;

return;

}

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

pz3 = new tur[l3];

if (pz3 == NULL) {

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

cout << "Поиск\n";

system("pause");

delete[] y;

l3 = 0;

return;

}

for (j = 0; j < l3; j++) {

pz3[j] = y[j];

}

delete[] y;

cout << "Поиск завершен.\n";

system("pause");

}

void masC::findFio() {

int i, j;

string fio, iniz;

tur* y;

y = new tur[n];

if (y == NULL) {

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

cout << "Поиск\n";

system("pause");

return;

}

cout << "Введите ФИО: "; cin >> fio >> iniz;

fio = fio + " " + iniz;

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

if (px[i].nameFIO == fio) {

y[l4] = px[i];

l4++;

}

if (l4 == 0) {

cout << "Поиск по указанному ФИО не дал результатов. Возврат в меню\n";

system("pause");

delete[] y;

return;

}

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

pz4 = new tur[l4];

if (pz4 == NULL) {

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

cout << "Поиск\n";

system("pause");

delete[] y;

l4 = 0;

return;

}

for (j = 0; j < l4; j++) {

pz4[j] = y[j];

}

delete[] y;

cout << "Поиск завершен.\n";

system("pause");

}

void masC::sortName() {

tur t;

int fl, nn = l;

do {

fl = 0; nn--;

for (int 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);

cout << "Сортировка результатов поиска завершена.\n";

system("pause");

}

void masC::sortPrice() {

tur t;

int fl, nn = l2;

do {

fl = 0; nn--;

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

if (pz2[i].price > pz2[i + 1].price) {

fl = 1; t = pz2[i];

pz2[i] = pz2[i + 1];

pz2[i + 1] = t;

}

}

} while (fl == 1);

cout << "Сортировка результатов поиска завершена.\n";

system("pause");

}

void masC::sortCnt() {

tur t;

int fl, nn = l3;

do {

fl = 0; nn--;

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

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

fl = 1; t = pz3[i];

pz3[i] = pz3[i + 1];

pz3[i + 1] = t;

}

}

} while (fl == 1);

cout << "Сортировка результатов поиска завершена.\n";

system("pause");

}

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

masC 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. Поиск по наименованию тура.\n";

cout << "19. Поиск по стоимости проезда.\n";

cout << "20. Поиск по ФИО.\n";

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

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

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

cout << "24. Сортировка результатов поиска наименования тура по стоимости поездки.\n";

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

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

cout << "27. Проверка перегруженной операции присваивания.\n";

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

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

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

cin >> j;

if (cin.fail()) {

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

cin.clear();

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cin.sync();

continue;

}

switch (j) {

case 1:

fin >> a; break;

case 2:

cout << (masA&)a; break;

case 3:

fout << (masA&)a; break;

case 4:

a.addTur(); break;

case 5:

a.deleteTur(); break;

case 6:

a.masA::sortName(); break;

case 7:

a.masA::sortNameTur(); break;

case 8:

a.masA::sortCnt(); break;

case 9:

a.makePerech(); break;

case 10:

a.makePerech2(); break;

case 11:

a.makePerech3(); break;

case 12:

cout << (masB&)a; break;

case 13:

fout << (masB&)a; break;

case 14:

a.masB::sortCnt(); break;

case 15:

a.masB::sortCnt2(); break;

case 16:

a.masB::sortPrice(); break;

case 17:

a.findPrice(); break;

case 18:

a.findName(); break;

case 19:

a.findTransitPrice(); break;

case 20:

a.findFio(); break;

case 21:

cout << a; break;

case 22:

fout << a; break;

case 23:

a.sortName(); break;

case 24:

a.sortPrice(); break;

case 25:

a.sortCnt(); break;

case 26:

{

masC b(a);

cout << (masA&)b << (masA&)a;

cout << (masB&)b << (masB&)a;

cout << b << a;

break;

}

case 27:

{

masC b, c;

c = b = a;

cout << (masA&)c << (masA&)b << (masA&)a;

cout << (masB&)c << (masB&)b << (masB&)a;

cout << c << b << a;

break;

}

case 28:

{

cout << "Конец программы\n";

system("pause");

return 0;

}

default:

cout << j << "-не пункт меню\n"; system("pause"); break;

}

}

}