Top.Mail.Ru
Ответы

Помогите написать программу на си ++,работа с файлами

программа у меня уже написана ее нужно изменить
Добавить запись массива структур в файл и чтение информации из файла.
Программа должна работать следующим образом.
В начале работы запрашивать пользователя, хочет ли он осуществить ввод данных с клавиатуры.
Если выбран вариант ДА, то запрашивается количество вводимых записей и если файл не существовал, он должен быть создан, иначе данные должны быть записаны в файл, не затирая имеющуюся в файле информацию.
Далее производится чтение всех записей из файла, обработка данных и вывод результата
изначальное задание по которому и написана программа
1Описать структуру с именем TRAIN, содержащую следующие поля:
• Название пункта назначения;
• Номер поезда
• Время отправления
2)Написать программу, выполняющую следующие действия:
• Ввод c клавиатуры данных в массив, состоящий из шести элементов типа TRAIN; записи должны быть упорядочены по времени отправления поезда;
• Вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры;
• Если таких поездов нет, выдать на дисплей соответствующее сообщение

#include <iostream>
#include <cstring> // Для использования strcpy и strcmp
#include <algorithm> // Для std::sort
#include <string> // Для использования std::string

using namespace std;

const int n = 6; // Число элементов массива

// Структура для хранения данных о поездах
struct Train {
string pn; // Название пункта назначения
unsigned int num; // Номер поезда
string time; // Время отправления (HH:MM)
};

// Функция для сравнения поездов по времени отправления
bool compareTrains(const Train &a, const Train &b) {
return a.time < b.time; // Сравнение строк для времени
}

int main() {
Train a[n];

// Ввод данных
for (int i = 0; i < n; i++) {
cout << "Введите пункт назначения: ";
cin >> a[i].pn;
cout << "Введите номер поезда: ";
cin >> a[i].num;
cout << "Введите время отправления (HH:MM): ";
cin >> a[i].time;
}

// Сортировка по времени отправления
sort(a, a + n, compareTrains);

// Поиск поезда
string pp;
cout << "Введите пункт назначения для поиска: ";
cin >> pp;
bool found = false;

// Вывод информации о найденных поездах
for (int i = 0; i < n; i++) {
if (a[i].pn == pp) { // Сравнение строк с использованием оператора ==
cout << "Поезд #" << a[i].num << " отправляется в " << a[i].time << endl;
found = true;
}
}

if (!found) {
cout << "Нет таких поездов" << endl; // Сообщение при отсутствии необходимых данных
}

return 0;
}

По дате
По рейтингу
Аватар пользователя
Оракул
9мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
 #include <iostream> 
#include <fstream> 
#include <algorithm> 
#include <vector> 
#include <string> 
 
using namespace std; 
 
struct Train { 
    string pn;  // Название пункта назначения 
    unsigned int num;  // Номер поезда 
    string time;  // Время отправления (HH:MM) 
}; 
 
bool compareTrains(const Train &a, const Train &b) { 
    return a.time < b.time; 
} 
 
void saveToFile(const vector<Train>& trains, const string& filename) { 
    ofstream file(filename, ios::app); 
    if (file.is_open()) { 
        for (const auto& train : trains) { 
            file << train.pn << " " << train.num << " " << train.time << "\n"; 
        } 
        file.close(); 
    } else { 
        cout << "Не удалось открыть файл для записи." << endl; 
    } 
} 
 
vector<Train> readFromFile(const string& filename) { 
    vector<Train> trains; 
    ifstream file(filename); 
    if (file.is_open()) { 
        Train train; 
        while (file >> train.pn >> train.num >> train.time) { 
            trains.push_back(train); 
        } 
        file.close(); 
    } else { 
        cout << "Не удалось открыть файл для чтения." << endl; 
    } 
    return trains; 
} 
 
int main() { 
    string filename = "trains.txt"; 
    vector<Train> trains; 
 
    char choice; 
    cout << "Хотите ввести данные с клавиатуры? (y/n): "; 
    cin >> choice; 
 
    if (choice == 'y' || choice == 'Y') { 
        int count; 
        cout << "Введите количество записей: "; 
        cin >> count; 
 
        for (int i = 0; i < count; i++) { 
            Train train; 
            cout << "Введите пункт назначения: "; 
            cin >> train.pn; 
            cout << "Введите номер поезда: "; 
            cin >> train.num; 
            cout << "Введите время отправления (HH:MM): "; 
            cin >> train.time; 
            trains.push_back(train); 
        } 
 
        saveToFile(trains, filename); 
    } 
 
    trains = readFromFile(filename); 
    sort(trains.begin(), trains.end(), compareTrains); 
 
    string pp; 
    cout << "Введите пункт назначения для поиска: "; 
    cin >> pp; 
    bool found = false; 
 
    for (const auto& train : trains) { 
        if (train.pn == pp) { 
            cout << "Поезд #" << train.num << " отправляется в " << train.time << endl; 
            found = true; 
        } 
    } 
 
    if (!found) { 
        cout << "Нет таких поездов" << endl; 
    } 
 
    return 0; 
} 
Аватар пользователя
Просветленный
9мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
 #include <iostream> 
#include <fstream> 
#include <vector> 
#include <algorithm> 
#include <string> 
#include <limits> 
 
using namespace std; 
 
struct Train { 
    string destination; 
    int number; 
    string departure_time; 
}; 
 
bool compareTrains(const Train &a, const Train &b) { 
    return a.departure_time < b.departure_time; 
} 
 
void saveToFile(const vector<Train>& trains, const string& filename) { 
    ofstream file(filename, ios::app | ios::binary); 
    if (!file) { 
        cerr << "Ошибка открытия файла для записи." << endl; 
        return; 
    } 
    for (const auto& train : trains) { 
        file.write(reinterpret_cast<const char*>(&train), sizeof(Train)); 
    } 
    file.close(); 
} 
 
vector<Train> readFromFile(const string& filename) { 
    vector<Train> trains; 
    ifstream file(filename, ios::binary); 
    if (!file) { 
        cerr << "Файл не существует или не может быть открыт." << endl; 
        return trains; 
    } 
    Train train; 
    while (file.read(reinterpret_cast<char*>(&train), sizeof(Train))) { 
        trains.push_back(train); 
    } 
    file.close(); 
    return trains; 
} 
 
void inputTrains(vector<Train>& trains) { 
    int count; 
    cout << "Введите количество поездов для добавления: "; 
    cin >> count; 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
 
    for (int i = 0; i < count; ++i) { 
        Train train; 
        cout << "Введите пункт назначения: "; 
        getline(cin, train.destination); 
        cout << "Введите номер поезда: "; 
        cin >> train.number; 
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
        cout << "Введите время отправления (HH:MM): "; 
        getline(cin, train.departure_time); 
        trains.push_back(train); 
    } 
} 
 
void displayTrains(const vector<Train>& trains, const string& destination) { 
    bool found = false; 
    for (const auto& train : trains) { 
        if (train.destination == destination) { 
            cout << "Поезд #" << train.number << " отправляется в " << train.departure_time << endl; 
            found = true; 
        } 
    } 
    if (!found) { 
        cout << "Нет поездов, направляющихся в " << destination << endl; 
    } 
} 
 
int main() { 
    const string filename = "trains.dat"; 
    vector<Train> trains; 
 
    char choice; 
    cout << "Хотите ввести данные с клавиатуры? (д/н): "; 
    cin >> choice; 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
 
    if (choice == 'д' || choice == 'Д') { 
        inputTrains(trains); 
        saveToFile(trains, filename); 
    } 
 
    trains = readFromFile(filename); 
    sort(trains.begin(), trains.end(), compareTrains); 
 
    string searchDestination; 
    cout << "Введите пункт назначения для поиска: "; 
    getline(cin, searchDestination); 
 
    displayTrains(trains, searchDestination); 
 
    return 0; 
}