Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Современные методы программирования / СМЛ ЛР10 Мустафина ИВТ-427.docx
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
1.42 Mб
Скачать

ФГБОУ ВО

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

Кафедра ТК

ОТЧЕТ

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

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

Вариант № 16

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

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

Хасанов А.Ю.

Уфа 2024

Содержание

19)Проверка выделения памяти виртуальной операции присваивания для masС…………….43

Задание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Стоимость

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

Цена 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