Текст файла главной программы
// Файл главной программы
#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. Составить программу, которая обрабатывает информацию о наличии автобусов в автобусном парке.
Сведения о каждом автобусе содержат:
– номер автобуса (ключ);
– ФИО водителя;
– номер маршрута.
Поиск реализовать по ФИО водителя.