
Тестирование программы
Главное меню:
Вывод на экран:
Добавление записи:
Удаление записи:
Сортировка по ФИО:
Алфавитная сортировка по наименованию тура:
Сортировка по количеству дней:
Поиск по стоимости проезда, наименованию тура, по стоимости проезда, по ФИО:
Перечень наименований, длительности, стоимости проезда:
Заключение
В результате выполнения курсового проекта были разработаны классы массивов структур для решения таких задач, как сортировки, различные виды поиска, создание перечней, добавление, удаление записей. Программа содержит меню, позволяющее выполнить и проверить все методы класса на работоспособность. Классы были реализованы с помощью метода наследования, использования перегрузки операций присваивания, операций сравнения, ввода/вывода в файлы и на экран.
Программа написана на языке С++, но может быть переписана и на другом современном языке программирования.
Использованная литература
Методы современного программирования конспект
//А.Ю. Хасанов //УГАТУ, 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;
}
}
}