Загрузка данных
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#ifdef _WIN32
#include <windows.h>
#endif
using namespace std;
// Определение структурированного типа данных
struct Train {
string trainNumber;
string destination;
string operatingDays; // Дни следования или дата
string arrivalTime; // Формат ЧЧ:ММ
string departureTime; // Формат ЧЧ:ММ
};
// Функция для ввода элементов структуры с клавиатуры
void inputTrain(vector<Train>& trains) {
Train t;
cout << "Введите номер поезда: ";
cin >> t.trainNumber;
cout << "Введите пункт назначения: ";
cin.ignore();
getline(cin, t.destination);
cout << "Введите дни следования (или дату): ";
getline(cin, t.operatingDays);
cout << "Введите время прибытия (ЧЧ:ММ): ";
cin >> t.arrivalTime;
cout << "Введите время отправления (ЧЧ:ММ): ";
cin >> t.departureTime;
trains.push_back(t);
cout << "Поезд успешно добавлен!\n";
}
// Функция для вывода элементов структуры
void printTrains(const vector<Train>& trains) {
if (trains.empty()) {
cout << "Список поездов пуст.\n";
return;
}
cout << "-------------------------------------------------------------\n";
for (const auto& t : trains) {
cout << "Поезд №" << t.trainNumber
<< " | Назначение: " << t.destination
<< " | Дни/Дата: " << t.operatingDays
<< " | Прибытие: " << t.arrivalTime
<< " | Отправление: " << t.departureTime << endl;
}
cout << "-------------------------------------------------------------\n";
}
// Поиск по пункту назначения
void searchByDestination(const vector<Train>& trains) {
if (trains.empty()) {
cout << "Список поездов пуст.\n";
return;
}
string dest;
cout << "Введите пункт назначения для поиска: ";
cin.ignore();
getline(cin, dest);
bool found = false;
cout << "--- Результаты поиска ---\n";
for (const auto& t : trains) {
if (t.destination == dest) {
cout << "Поезд №" << t.trainNumber
<< " | Дни: " << t.operatingDays
<< " | Отправление: " << t.departureTime << endl;
found = true;
}
}
if (!found) {
cout << "Поездов в данном направлении не найдено.\n";
}
}
// Поиск по дате (дням следования)
void searchByDate(const vector<Train>& trains) {
if (trains.empty()) {
cout << "Список поездов пуст.\n";
return;
}
string date;
cout << "Введите дату/дни следования для поиска: ";
cin.ignore();
getline(cin, date);
bool found = false;
cout << "--- Результаты поиска ---\n";
for (const auto& t : trains) {
if (t.operatingDays == date) {
cout << "Поезд №" << t.trainNumber
<< " | Назначение: " << t.destination
<< " | Отправление: " << t.departureTime << endl;
found = true;
}
}
if (!found) {
cout << "Поездов на эту дату не найдено.\n";
}
}
// Вспомогательная функция для сортировки по времени отправления
bool compareByTime(const Train& a, const Train& b) {
return a.departureTime < b.departureTime;
}
// Вывод расписания по времени
void printScheduleByTime(vector<Train> trains) {
if (trains.empty()) {
cout << "Список поездов пуст.\n";
return;
}
// Сортировка копии вектора, чтобы не менять исходный порядок (если он нужен)
sort(trains.begin(), trains.end(), compareByTime);
cout << "\n--- Расписание по времени отправления ---\n";
printTrains(trains);
}
int main() {
// Настройка кодировки для корректного отображения кириллицы в консоли Windows
#ifdef _WIN32
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
#endif
vector<Train> trains;
int choice;
// Меню для работы с массивом структур
do {
cout << "\n=== МЕНЮ ВОКЗАЛА ===\n";
cout << "1. Добавить поезд\n";
cout << "2. Вывести все поезда\n";
cout << "3. Поиск по пункту назначения\n";
cout << "4. Поиск по дате (дням следования)\n";
cout << "5. Вывод расписания по времени отправления\n";
cout << "0. Выход\n";
cout << "Ваш выбор: ";
while (!(cin >> choice)) {
cout << "Ошибка ввода. Введите число: ";
cin.clear();
cin.ignore(10000, '\n');
}
switch (choice) {
case 1:
inputTrain(trains);
break;
case 2:
printTrains(trains);
break;
case 3:
searchByDestination(trains);
break;
case 4:
searchByDate(trains);
break;
case 5:
printScheduleByTime(trains);
break;
case 0:
cout << "Выход из программы.\n";
break;
default:
cout << "Неверный выбор. Попробуйте снова.\n";
}
} while (choice != 0);
return 0;
}