
ФГБОУ ВО
«Уфимский университет науки и технологий»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 10
по дисциплине «Современные методы программирования»
Вариант № 16
Выполнил: студент гр. ИВТ-427Б
Проверил: доцент каф. ТК
Хасанов А.Ю.
Уфа 2024
Содержание
19)Проверка выделения памяти виртуальной операции присваивания для masС…………….43
Задание
Спроектировать структуру MARSCH, содержащую поля: наименование тура, цена одного дня, количество дней, стоимость проезда.
Спроектировать структуру TUR, содержащую поле типа MARSCH и дополнительно поля: фамилия, имя, отчество клиента, стоимость поездки.
Файл содержит информацию о проданных туристических поездках. Требуется спроектировать классы, позволяющие обрабатывать эти данные. В классах должно быть предусмотрено, как минимум, выполнение следующих видов обработки:
Загрузка из файла;
Сохранение результатов обработки в файлах;
Добавление записи;
Удаление записи;
Вывод на экран дисплея данных и результатов обработки;
Сортировка по Ф.И.О. клиента;
Алфавитная сортировка по наименованию тура;
Числовая сортировка по количеству дней.
Перечень наименований тура с указанием количества дней (результат отсортирован по количеству дней);
Перечень наименований тура с указанием количества дней (результат отсортирован по наименованию тура);
Поиск по стоимости поездки (результат отсортирован по наименованию тура);
Поиск по стоимости поездки (результат отсортирован по длительности тура).
Выполнение задания:
Разметка таблицы
№ |
Фамилия и инициалы |
Стоимость |
Название тура |
Цена 1-го дня |
Кол-во дней |
Цена проезда |
|
|
|
|
|
|
|
Код программы:
Main:
#include <iostream>
#include <iomanip>
#include <Windows.h>
#include <fstream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <new>
#include "StructTypes.h"
#include "Err.h"
#include "masA.h"
#include "masB.h"
#include "masC.h"
#include "print.h"
using namespace std;
void main() {
setlocale(LC_ALL, "Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
masA* pa, * pb, * pc;
masC* pd;
int j;
char ch;
try {
pa = pd = new masC;
pb = new masC;
pc = new masC;
}
catch (bad_alloc)
{
cout << "Ошибка: нет памяти для объектов\n"; _getch(); return;
}
while (1) {
try {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
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. Проверка виртуальной операции присваивания для masC\n";
cout << "21. Выход из программы.\n";
cout << "------------------------------------------------------------\n";
cout << "\nВаш выбор: ";
try {
cin >> j; // Вложенный блок try
If (cin.Fail()) throw Err("Это не пункт меню", "main()");
// Генерация исключения (1)
} // Конец вложенного блока try
catch (Err& ex) // Обработчик вложенного блока try
{
cin.clear();
string s;
cin >> s;
throw;
}
switch (j) {
case 1: pa->inputFile(); break;
case 2: pa->masA::output(); break;
case 3: pa->masA::outputFile(); break;
case 4: pa->masA::addTur(); break;
case 5: pa->masA::deleteTur(); break;
case 6: pa->masA::sortName(); break;
case 7: pa->masA::sortNameTur(); break;
case 8: pa->masA::sortCnt(); break;
case 9:((masB*)pa)->makePerech(); break;
case 10: ((masB*)pa)->masB::output(); break;
case 11: ((masB*)pa)->masB::outputFile(); break;
case 12: ((masB*)pa)->masB::sortCnt(); break;
case 13:((masB*)pa)->masB::sortName(); break;
case 14:((masC*)pa)->findPrice(); ((masB*)pa)->masB::sortName(); break;
case 15: ((masC*)pa)->findPrice(); ((masB*)pa)->masB::sortCnt(); break;
case 16: pa->output(); break;
case 17: printFile(pa); break;
case 18: { masC c(*pd);
printA(pd); printA(&c);
printB(pd); printB(&c);
printC(pd); printC(&c);
_getch;
} break;
case 19: { masC a, b; a = b = *pd;
printA(pd); printA(&b); printA(&a);
printB(pd); printB(&b); printB(&a);
printC(pd); printC(&b); printC(&a);
_getch;
} break;
case 20: { masC* pb2, * pc2, * pd2;
*pc = *pa;
*pb = *pa;
pb2 = (masC*)pb;
pc2 = (masC*)pc;
printA(pd); printA(pb2); printA(pc2);
printB(pd); printB(pb2); printB(pc2);
printC(pd); printC(pb2); printC(pc2);
_getch;
} break;
case 21: cout << "Конец работы\n"; delete pa; delete pb; delete pc; _getch(); return;
default: throw Err("Нет такого пункта в меню", "main()");
}
}
catch (Err& ex) { ex.ErrOutput(); }
catch (...) { cout << "Непредусмотренное исключение\n"; _getch(); }
}
}
MasC.H:
#ifndef MASC_H
#define MASC_H
#include "Err.h"
#include "masB.h"
#include "StructTypes.h"
#include <iostream>
#include <string>
#include <stdexcept>
#include <conio.h>
#include <new>
using namespace std;
class masC :public masB
{
protected:
tur* pz;
int l;
public:
masC() :pz(NULL), l(0) {};
masC(masC& z);
~masC() override { if (pz != NULL) delete[] pz; cout << "~masC()\n"; }
masC& operator=(masC& z);
masC& operator=(masA& z) override;
void findPrice();
void sortName();
void sortCnt() override;
void output() override;
void outputFile() override;
friend ostream& operator<<(ostream& out, masC& z);
};
#endif // MASA_H
#pragma once