#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <string.h>
using namespace std;
const int MAX_ROWS = 100;
const int MAX_COLS = 5;
struct Bus {
string destination;
int number;
string arrivalTime;
int seats;
int price;
};
bool compareByNumber(const Bus& a, const Bus& b) {
return a.number < b.number;
}
void addbus(Bus buses[], int& numRows);
void deletebus(Bus buses[], int& numRows, int routeNumber);
void sortbus(Bus buses[], int numRows);
void searchBus(Bus buses[], int numRows, string destination);
void printBus(Bus buses[], int numRows);
void writeDataToFile(Bus buses[], int numRows, string filename);
void readDataFromFile(Bus buses[], int& numRows, string filename);
int main() {
//system("chcp 1251 > nul");
Bus buses[MAX_ROWS];
int numRows = 0;
string filename = "buses.txt";
readDataFromFile(buses, numRows, filename);
int voluu;
do {
cout << "\nАвтовокзал:\n";
cout << "1. Добавить маршрут\n";
cout << "2. Удалить маршрут\n";
cout << "3. Сортировать маршруты\n";
cout << "4. Поиск маршрутов\n";
cout << "5. Отобразить все маршруты\n";
cout << "0. Выход\n";
cout << "Ваш выбор: ";
cin >> voluu;
switch (voluu) {
case 1:
addbus(buses, numRows);
break;
case 2:
int busNumber;
cout << "Введите номер маршрута для удаления: ";
cin >> busNumber;
deletebus(buses, numRows, busNumber);
break;
case 3:
sortbus(buses, numRows);
break;
case 4:
{
string destination;
cout << "Введите пункт назначения для поиска: ";
cin.ignore();
getline(cin, destination);
searchBus(buses, numRows, destination);
break;
}
case 5:
printBus(buses, numRows);
break;
}
} while (voluu != 0);
writeDataToFile(buses, numRows, filename);
return 0;
}
void addbus(Bus buses[], int& numRows) {
if (numRows >= MAX_ROWS)
{
cout << "Ошибка: база данных заполнена!\n";
return;
}
///////////////////////////////////////////////////////////////////////
//Тут убрал int i = 0. Итератором по массиву служит numRows, не так ли?
///////////////////////////////////////////////////////////////////////
cout << "Введите пункт назначения: ";
cin.ignore();
getline(cin, buses[numRows].destination);
cout << "Введите номер маршрута: ";
cin >> buses[numRows].number;
cout << "Введите время прибытия: ";
cin.ignore();
getline(cin, buses[numRows].arrivalTime);
cout << "Введите количество мест: ";
cin >> buses[numRows].seats;
cout << "Введите цену билета: ";
cin >> buses[numRows].price;
numRows++;
cout << "Маршрут добавлен!\n";
}
void deletebus(Bus buses[], int& numRows, int busNumber) {
bool found = false;
for (int i = 0; i < numRows; i++) {
if (buses[i].number == busNumber) {
found = true;
for (int j = i; j < numRows - 1; j++) {
buses[j] = buses[j + 1];
}
numRows--;
cout << "Маршрут удален!" << endl;
break;
}
}
if (!found) {
cout << "Маршрут с таким номером не найден." << endl;
}
}
void sortbus(Bus buses[], int numRows) {
for (int i = 0; i < numRows - 1; i++) {
for (int j = 0; j < numRows - i - 1; j++) {
if (buses[j].number > buses[j + 1].number) {
Bus temp = buses[j];
buses[j] = buses[j + 1];
buses[j + 1] = temp;
}
}
}
cout << "Маршруты отсортированы по номеру:\n";
for (int i = 0; i < numRows; i++) {
cout << setw(15) << buses[i].destination << setw(5) << buses[i].number << setw(6) << buses[i].arrivalTime << setw(4) << buses[i].seats << setw(5) << buses[i].price << endl;
}
}
void searchBus(Bus buses[], int numRows, string destination) {
bool found = false;
cout << "Результаты поиска для пункта назначения '" << destination << "':\n";
for (int i = 1; i < numRows; i++) {
if (buses[i].destination == destination) {
cout << setw(15) << buses[i].destination << setw(5) << buses[i].number << setw(6) << buses[i].arrivalTime << setw(4) << buses[i].seats << setw(5) << buses[i].price << endl;
found = true;
}
}
if (!found) {
cout << "Маршруты для пункта назначения '" << destination << "' не найдены.\n";
}
}
void printBus(Bus buses[], int numRows) {
if (numRows == 0) {
cout << "Список автобусов пуст.\n";
return;
}
cout << "\nСписок автобусов:\n";
cout << "---------------------------------------------------------------------------------------------------" << endl;
cout << " Пункт назначения | Номер | Время прибытия | Кол-во билетов | Цена " << endl;
cout << "---------------------------------------------------------------------------------------------------" << endl;
///////////////////////////////////////////////////////////////////////////
//Тут изменил длину полей и убрал лишние пробелы и делители вначале и конце
///////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numRows; i++) {
cout << setw(25) << left << buses[i].destination << "|"
<< setw(18) << left << buses[i].number << "|"
<< setw(24) << left << buses[i].arrivalTime << "|"
<< setw(20) << left << buses[i].seats << "|"
<< setw(8) << left << buses[i].price << endl;
}
}
void writeDataToFile(Bus buses[], int numRows, string filename) {
ofstream file(filename);
if (file.is_open()) {
file << " Пункт назначения | Номер | Время прибытия | Кол-во билетов | Цена " << endl;
for (int i = 0; i < numRows; i++) {
file << " | " << setw(30) << left << buses[i].destination << " | "
<< setw(16) << left << buses[i].number << " | "
<< setw(22) << left << buses[i].arrivalTime << " | "
<< setw(17) << left << buses[i].seats << " | "
<< setw(10) << left << buses[i].price << endl;
}
file.close();
cout << "Данные успешно записаны в файл." << endl;
}
else {
cout << "Ошибка при открытии файла для записи." << endl;
}
}
void readDataFromFile(Bus buses[], int& numRows, string filename) {
ifstream file(filename);
if (file.is_open()) {
string line;
getline(file, line);
int i = 0;
numRows = 0;
while (getline(file, line)) {
stringstream ss(line);
getline(ss, buses[i].destination);
ss >> buses[i].number;
getline(ss, buses[i].arrivalTime);
ss >> buses[i].seats;
ss >> buses[i].price;
numRows++;
}
file.close();
cout << "Данные загружены из файла.\n";
}
}
Пункт назначения | Номер | Время прибытия | Кол-во билетов | Цена
| Чебоксары | 123 | 21-30 | 12 | 232