
Современные методы программирования / СМЛ ЛР4 ИВТ-327
.docxФГБОУ ВО
«Уфимский университет науки и технологий»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 4
по дисциплине «Современные методы программирования»
Тема: «Дружественные функции»
Вариант № 16
Выполнил: студент гр. ИВТ-327Б
Проверил: доцент каф. ТК
Хасанов А.Ю.
Уфа 2024
Содержание
Задание
Спроектировать структуру MARSCH, содержащую поля: наименование тура, цена одного дня, количество дней, стоимость проезда.
Спроектировать структуру TUR, содержащую поле типа MARSCH и дополнительно поля: фамилия, имя, отчество клиента, стоимость поездки.
Файл содержит информацию о проданных туристических поездках. Требуется спроектировать классы, позволяющие обрабатывать эти данные. В классах должно быть предусмотрено, как минимум, выполнение следующих видов обработки:
Загрузка из файла;
Сохранение результатов обработки в файлах;
Добавление записи;
Удаление записи;
Вывод на экран дисплея данных и результатов обработки;
Сортировка по Ф.И.О. клиента;
Алфавитная сортировка по наименованию тура;
Числовая сортировка по количеству дней.
Перечень наименований тура с указанием количества дней (результат отсортирован по количеству дней);
Перечень наименований тура с указанием количества дней (результат отсортирован по наименованию тура);
Поиск по стоимости поездки (результат отсортирован по наименованию тура);
Поиск по стоимости поездки (результат отсортирован по длительности тура).
Выполнение задания:
Разметка таблицы
№ |
Фамилия и инициалы |
Стоимость |
Название тура |
Цена 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();
}Скриншоты работы программы
Загрузка из файла:
а) В качестве пункта меню введено не число:
б) Введен несуществующий пункт меню:
в) Введен несуществующий файл:
г) Введен правильный файл:
2. Вывод информации на экран
3. Добавление записи
4. Удаление записи
a) В качестве номера строки введено не число
б) Введена несуществующая строка:
в) Дан неверный ответ на подтверждение удаления:
г) Удаление отменено:
д)
Удаление:
5. Алфавитная сортировка по Ф.И.О.
6. Сортировка по наименованию туров.
7. Числовая сортировка по количеству дней
8. Сохранение результатов обработки в файлах
9. Формирование перечня:
10. Сортировка перечня по количеству дней
11. Сортировка перечня по наименованию тура.
12. Поиск по стоимости поездки (результат отсортирован по наименованию тура):
13. Поиск по стоимости поездки (результат отсортирован по длительности тура):
14. Вывод результата поиска в файл.
15. Проверка конструктора конструктора копирования класса masA.