Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №10_условие.docx
Скачиваний:
5
Добавлен:
12.07.2022
Размер:
62.81 Кб
Скачать

Текст файла главной программы

// Файл главной программы

#include <iostream>

#include <string>

#include <vector>

#include <iomanip>

#include <algorithm>

#include <Windows.h>

#include "Student.h"

using namespace std;

//Вектор, содержащий объекты класса Student

vector<Student> List;

void menu(); //Функция прорисовки меню

void hline(); //Функция, рисующая горизонтальную линию

//Функции-компараторы для разных полей объекта класса Student

bool comp_zach(Student a, Student b);

bool comp_fio(Student a, Student b);

bool comp_gruppa(Student a, Student b);

bool comp_kurs(Student a, Student b);

//Функция для поиска данных по ФИО студента

int find(vector<Student>L, string key);

void vvod(vector<Student>& L); //Функция ввода данных

void edit(vector<Student>& L); //Функция редактирования данных

void vivod(vector<Student>L); //Функция вывода данных

void search(vector<Student>L); //Функция поиска данных

void sortirovka(vector<Student>L); //Функция сортировки

void del(vector<Student>& L); //Функция удаления данных

//Главная функция программы

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n = 0;

//Цикл обработки действий пользователя

while (n != 7)

{

menu();

cin >> n;

switch (n)

{

case 1: vvod(List); break;

case 2: vivod(List); break;

case 3: edit(List); break;

case 4: search(List); break;

case 5: sortirovka(List); break;

case 6: del(List); break;

case 7: break;

default: cout << "Неверный вариант выбора" << endl;

}

}

}

//Реализация функции прорисовки меню

void menu()

{

cout << endl << " МЕНЮ " << endl;

cout << "1. Ввод данных" << endl;

cout << "2. Вывод данных" << endl;

cout << "3. Редактирование данных" << endl;

cout << "4. Поиск студента по ФИО" << endl;

cout << "5. Сортировка данных" << endl;

cout << "6. Удаление данных" << endl;

cout << "7. Выход" << endl;

cout << "Введите номер пункта меню для дальнейшей работы" << endl;

}

//Реализация функции поиска элемента по ключу

int find(vector<Student>L, string key) {

for (int i = 0; i < L.size(); i++)

{

if (L[i].get_num_zach() == key)

{

return i;

}

}

return -1;

}

//Функция-компаратор для сортировки вектора по номеру зачетки

bool comp_zach(Student a, Student b)

{

return a.get_num_zach() < b.get_num_zach();

}

//Функция-компаратор для сортировки вектора по ФИО студента

bool comp_fio(Student a, Student b)

{

return a.get_fio() < b.get_fio();

}

//Функция-компаратор для сортировки вектора по группе

bool comp_gruppa(Student a, Student b)

{

return a.get_gruppa() < b.get_gruppa();

}

//Функция-компаратор для сортировки вектора по курсу

bool comp_kurs(Student a, Student b)

{

return a.get_kurs() < b.get_kurs();

}

//Реализация функции ввода данных

void vvod(vector<Student>& L)

{

char choise; //Переменная для запоминания выбора пользователя

string num_zach, fio, gruppa; //Переменные для заполнения данных о студенте

int kurs;

while (true)

{

cout << "Введите номер зачетки" << endl;

while (cin.get() != '\n');

getline(cin, num_zach);

cout << "Введите ФИО студента " << endl;

getline(cin, fio);

cout << "Введите группу" << endl;

getline(cin, gruppa);

cout << "Введите курс" << endl;

cin >> kurs;

//Добавление нового элемента в вектор

L.push_back(Student(num_zach, fio, gruppa, kurs));

//Запрос подтверждения на ввод новой записи

while (true)

{

cout << "Продолжить ввод? Введите д - если да, н - если нет" << endl;

cin >> choise;

//Программа находится в режиме ожидания, пока пользователь не введет 'д' или 'н'

if (choise == 'д' || choise == 'н') break;

}

//Если пользователь ввел 'н', то выходим из цикла

if (choise == 'н') break;

}

}

//Реализация функции вывода данных

void vivod(vector<Student>L)

{

//Прорисовка шапки таблицы

cout << " Студенты " << endl;

hline();

cout << "| Номер зачетки | ФИО студента | Группа | Курс |" << endl;

hline();

//Вывод на экран элементов вектора

for (int i = 0; i < L.size(); i++)

{

cout << "| " << setw(13) << L[i].get_num_zach();

cout << " | " << setw(20) << L[i].get_fio();

cout << " | " << setw(10) << L[i].get_gruppa();

cout << " | " << setw(4) << L[i].get_kurs() << " |" << endl;

}

hline();

}

//Реализация функции редактирования элемента вектора

void edit(vector<Student>& L)

{

//Переменные для заполнения данных о студенте

string num_zach;

string fio, gruppa;

int kurs;

cout << "Введите номер зачетки для поиска" << endl;

while (cin.get() != '\n');

getline(cin, num_zach);

//Поиск по номеру зачетки студента в векторе

int ind = find(L, num_zach);

//Если нашелся студент - вывод найденных сведений и

//предложение отредактировать нужные поля

if (ind !=-1)

{

cout << endl << "Данные найдены" << endl;

L[ind].show();

cout << endl << "Введите новый номер зачетки или 0, если хотите оставить старый" << endl;

getline(cin, num_zach);

if (num_zach != "0")

L[ind].set_num_zach(num_zach);

cout << "Введите новые ФИО или 0, если хотите оставить старые" << endl;

getline(cin, fio);

if (fio != "0")

L[ind].set_fio(fio);

cout << "Введите новую группу или 0, если хотите оставить старую" << endl;

getline(cin, gruppa);

if (gruppa != "0")

L[ind].set_gruppa(gruppa);

cout << "Введите новый номер курса или 0, если хотите оставить старый" << endl;

cin >> kurs;

if (kurs != 0)

L[ind].set_kurs(kurs);

cout << endl << "Редактирование окончено" << endl;

}

else

cout << "Данные для редактирования не найдены" << endl;

}

//Реализация функции поиска студентов по ФИО

void search(vector<Student>L)

{

string fio;

cout << "Введите ФИО или часть ФИО для поиска" << endl;

while (cin.get() != '\n');

getline(cin, fio);

cout << endl << "Результаты поиска:" << endl;

for (int i = 0; i < L.size(); i++)

{

string fio_st = L[i].get_fio();

//Поиск введеной пользователем подстроки в ФИО текущего студента

//npos - максимально возможная позиция символа в строке +1

if (fio_st.find(fio) != fio_st.npos)

L[i].show();

}

}

//Реализация функции сортировки данных в векторе

void sortirovka(vector<Student>L)

{

int n;

//Прорисовка подменю выбора критерия сортировки

cout << endl << "Выберите критерий сортировки" << endl;

cout << "1. По номеру зачетки" << endl;

cout << "2. По ФИО" << endl;

cout << "3. По группе" << endl;

cout << "4. По курсу" << endl;

cout << "Введите номер критерия" << endl;

cin >> n;

//В зависимости от выбора пользователя выбирается сортировка

//по тому или иному полю с использованием алгоритма sort

//с указанием соответствующей функции-компаратора

switch (n)

{

case 1: sort(L.begin(), L.end(), comp_zach);

vivod(L);

break;

case 2: sort(L.begin(), L.end(), comp_fio);

vivod(L);

break;

case 3: sort(L.begin(), L.end(), comp_gruppa);

vivod(L);

break;

case 4: sort(L.begin(), L.end(), comp_kurs);

vivod(L);

break;

default: cout << "Неверный вариант выбора" << endl;

}

}

//Реализация функции удаления элемента из вектора

void del(vector<Student>& L)

{

string key;

cout << "Введите номер зачетки для поиска" << endl;

while (cin.get() != '\n');

getline(cin, key);

int ind = find(L, key);

if (ind != -1)

{

//В методе erase() требуется указать начало вектора

//плюс смещение до удаляемого элемента

L.erase(L.begin() + ind);

cout << "Студент удален" << endl;

}

else

cout << "Данные для удаления не найдены" << endl;

}

//Функция прорисовки горизонтальной линии

void hline() {

const int m = 60;

for (int i = 0; i < m; i++)

cout << "-";

cout << endl;

}

3. Варианты работы

Создать программу, формирующую данные определенной структуры в виде вектора. Элемент вектора должен являться объектом класса. Структура данных зависит от варианта.

Программа должна реализовывать следующие операции в виде отдельных функций или методов класса:

– формирование меню для выбора действия пользователем;

– ввод данных в вектор;

– вывод данных из вектора в виде таблицы;

– поиск элемента в векторе по одном из полей (предусмотреть ввод части строки для поиска) – поле указано в варианте;

– редактирование элемента в векторе по указанному номеру зачетки;

– удаление элемента из вектора по заданному ключу;

– сортировка элементов в векторе по заданному полю.

1. Составить программу, которая обрабатывает информацию о студентах.

Сведения о студенте содержат:

– номер поезда (ключ);

– пункт назначения;

– время отправления.

Поиск реализовать по пункту назначения.

2. Составить программу, которая обрабатывает информацию о лабораториях института.

Сведения о лаборатории содержат:

– номер лаборатории (ключ);

– количество компьютеров;

– ФИО ответственного лаборанта.

Поиск реализовать по ФИО лаборанта.

3. Составить программу, которая обрабатывает информацию о наличии бензина на автозаправочной станции.

Сведения о бензине содержат:

– марка бензина (ключ);

– цена за литр;

– количество литров наличии.

Поиск реализовать по ФИО заказчика.

4. Составить программу, которая обрабатывает информацию о таксопарке.

Сведения о такси содержат:

– номер машины (ключ);

– ФИО водителя;

– марка машины;

– стаж водителя.

Реализовать поиск по ФИО водителя.

5. Составить программу, которая обрабатывает информацию об авиаполке.

Сведения об авиаполке содержат:

– номер полка (ключ);

– ФИО командира;

– количество самолетов;

– количество боеготовых самолетов.

Поиск реализовать по ФИО командира.

6. Составить программу, которая обрабатывает информацию о мебельных гарнитурах, продаваемых в магазине.

Сведения о гарнитуре содержат:

– название гарнитура (ключ);

– фирма-производитель;

– количество предметов;

– цена.

Поиск реализовать по фирме-производителю.

7. Составить программу, которая обрабатывает информацию о продажах компьютерных игр.

Сведения о туре содержат:

– название игры (ключ);

– издатель;

– количество проданных физических копий;

– количество проданных цифровых копий.

Поиск реализовать по издателю.

8. Составить программу, которая обрабатывает информацию о пользователях компьютерной сети.

Сведения о пользователе содержат:

– ID пользователя(ключ);

– логин пользователя;

– дата регистрации;

– тип пользователя.

Поиск реализовать по логину пользователя.

9. Составить программу, которая обрабатывает информацию об учебной дисциплине.

Сведения об учебной дисциплине содержат:

– шифр дисциплины (ключ);

– название дисциплины;

– количество лекционных часов;

– количество часов на лабораторные работы.

Поиск реализовать по названию дисциплины.

10. Составить программу, которая обрабатывает информацию о продаже билетов на концерт.

– дата концерта (ключ);

– название исполнителя;

– количество проданных билетов.

Поиск реализовать по названию исполнителя.

11. Составить программу, которая обрабатывает информацию о гражданах, лежащих в больнице.

Сведения о больном содержат:

– номер больного (ключ)

– ФИО больного;

– диагноз;

– номер палаты.

Поиск реализовать по ФИО больного.

12. Составить программу, которая обрабатывает информацию о книгах в библиотеке.

Сведения о книгах содержат:

– номер УДК (ключ);

– ФИО автора;

– название;

– год издания.

Поиск реализовать по названию книги.

13. Составить программу, которая обрабатывает информацию о заказах на ремонт вычислительной техники.

Сведения о заказе содержат:

– номер заказа (ключ);

– ФИО заказчика;

– описание неисправности;

– стоимость ремонта.

Поиск реализовать по ФИО заказчика.

14. Составить программу, которая обрабатывает информацию о товарах.

Сведения о товарах содержат:

– индекс товара (ключ);

– название товара;

– цена товара.

Поиск реализовать по названию товара.

15. Составить программу, которая обрабатывает информацию для учета автомобильных грузоперевозок.

Сведения о грузовике содержат:

– номер грузовика (ключ);

– ФИО водителя;

– грузоподъемность.

Поиск реализовать по ФИО водителя.

16. Составить программу, которая обрабатывает информацию об оборудовании.

Сведения об оборудовании содержат:

– серийный номер (ключ);

– название оборудования;

– тип оборудования;

– стоимость оборудования.

Поиск реализовать по стоимости оборудования.

17. Составить программу, которая обрабатывает информацию о заявках на авиабилеты.

Каждая заявка содержит:

– номер рейса (ключ);

– пункт назначения;

– ФИО пассажира;

– желаемую дату вылета.

Поиск реализовать по пункту назначения.

18. Составить программу, которая обрабатывает информацию о гостиничных номерах.

Сведения о номере содержат:

– номер комнаты (ключ);

– этаж;

– вид номера;

– количество мест.

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

19. Составить программу, которая обрабатывает информацию о продаже путевок в туристическом агентстве.

Сведения о туре содержат:

– название тура (ключ);

– страна пребывания;

– продолжительность тура;

– стоимость путевки.

Поиск реализовать по стране пребывания.

20. Составить программу, которая обрабатывает информацию о счетах.

Сведения о счете содержат:

– номер счета (ключ);

– ФИО клиента;

– годовой процент.

Поиск реализовать по ФИО клиента.

21. Составить программу, формирующую телефонный справочник.

Сведения об абоненте содержат:

– номер телефона (ключ);

– ФИО абонента;

– адрес абонента.

Поиск реализовать по ФИО абонента.

22. Составить программу, которая обрабатывает информацию о врачах, работающих в поликлинике.

Сведения о враче содержат:

– табельный номер врача (ключ);

– ФИО врача;

– специализация;

– номер кабинета.

Поиск реализовать по специализации.

23. Составить программу, которая обрабатывает информацию о сотрудниках.

Сведения о сотруднике содержат:

– табельный номер (ключ);

– ФИО сотрудника;

– должность.

Поиск реализовать по ФИО сотрудника.

24. Составить программу, которая обрабатывает информацию о продаже автомобилей в автосалоне.

Сведения об автомобиле содержат:

– номер автомобиля (ключ);

– марка автомобиля;

– дата продажи.

Поиск реализовать по марке автомобиля.

25. Составить программу, которая обрабатывает информацию о заказе на пошив одежды в ателье.

Сведения о заказе содержат:

– номер заказа (ключ);

– предмет одежды;

– ФИО закройщика;

– стоимость материала.

Поиск реализовать по предмету одежды.

26. Составить программу, которая обрабатывает информацию о наличии приборов на складе.

Сведения о приборе содержат:

– название прибора (ключ);

– тип прибора;

– цена;

– количество на складе.

Поиск реализовать по типу прибора.

27. Составить программу, которая обрабатывает информацию о файлах.

Сведения о файле содержат:

– название файла (ключ);

– тип файла;

– размер файла.

Поиск реализовать по типу файла.

28. Составить программу, которая обрабатывает информацию о наличии автобусов в автобусном парке.

Сведения о каждом автобусе содержат:

– номер автобуса (ключ);

– ФИО водителя;

– номер маршрута.

Поиск реализовать по ФИО водителя.

27