Загрузка...

How am I stuttering to ask for help C ++

Thread in C/C++ created by MoJungle Jun 17, 2023. 177 views

  1. MoJungle
    MoJungle Topic starter Jun 17, 2023 Я знал ,но забыл 10 Jun 28, 2017
    C
    // Функция для добавления K элементов в конец файла
    void addStadiums(const vector<Stadium>& stadiums, const string& filename, int K) {
    ofstream file(filename, ios::binary | ios::app);
    if (!file) {
    cout << "Не удалось открыть файл для добавления данных.\n";
    return;

    for (int i = 0; i < K; ++i) {
    const Stadium& stadium = stadiums[i % stadiums.size()];
    file.write(reinterpret_cast<const char*>(&stadium), sizeof(Stadium));
    }

    file.close();
    }
    Нужно что бы добавляемые значения можно было менять по типу:
    C
    for (int i = 0; i < numStadiums; ++i) {
    Stadium stadium;
    cout << "Введите данные для стадиона #" << i + 1 << endl;
    cout << "Название: ";
    cin >> stadium.name;
    cout << "Адрес: ";
    cin >> stadium.address;
    cout << "Вместимость: ";
    cin >> stadium.capacity;
    cout << "Виды спорта: ";
    cin >> stadium.sports;
    stadiums.push_back(stadium);
    Весь код на всякий:
    C
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>

    using namespace std;

    struct Stadium {
    string name;
    string address;
    int capacity;
    string sports;
    };

    // Функция для записи структурированных данных в файл
    void writeDataToFile(const vector<Stadium>& stadiums, const string& filename) {
    ofstream file(filename, ios::binary);
    if (!file) {
    cout << "Не удалось открыть файл для записи.\n";
    return;
    }

    for (const auto& stadium : stadiums) {
    file.write(reinterpret_cast<const char*>(&stadium), sizeof(Stadium));
    }

    file.close();
    }

    // Функция для чтения и вывода содержимого файла
    void printFileContents(const string& filename) {
    ifstream file(filename, ios::binary);
    if (!file) {
    cout << "Не удалось открыть файл для чтения.\n";
    return;
    }

    Stadium stadium;
    while (file.read(reinterpret_cast<char*>(&stadium), sizeof(Stadium))) {
    cout << "Название: " << stadium.name << endl;
    cout << "Адрес: " << stadium.address << endl;
    cout << "Вместимость: " << stadium.capacity << endl;
    cout << "Виды спорта: " << stadium.sports << endl;
    cout << endl;
    }

    file.close();
    }

    // Функция для удаления элемента с заданным названием
    void removeStadiumByName(const string& filename, const string& name) {
    ifstream inFile(filename, ios::binary);
    if (!inFile) {
    cout << "Не удалось открыть файл для чтения.\n";
    return;
    }

    ofstream outFile("temp.bin", ios::binary);
    if (!outFile) {
    cout << "Не удалось создать временный файл для записи.\n";
    inFile.close();
    return;
    }

    Stadium stadium;
    bool found = false;
    while (inFile.read(reinterpret_cast<char*>(&stadium), sizeof(Stadium))) {
    if (stadium.name != name) {
    outFile.write(reinterpret_cast<const char*>(&stadium), sizeof(Stadium));
    }
    else {
    found = true;
    }
    }

    inFile.close();
    outFile.close();

    if (found) {
    remove(filename.c_str());
    rename("temp.bin", filename.c_str());
    cout << "Элемент с названием \"" << name << "\" удален из файла.\n";
    }
    else {
    remove("temp.bin");
    cout << "Элемент с названием \"" << name << "\" не найден в файле.\n";
    }
    }

    // Функция для добавления K элементов в конец файла
    void addStadiums(const vector<Stadium>& stadiums, const string& filename, int K) {
    ofstream file(filename, ios::binary | ios::app);
    if (!file) {
    cout << "Не удалось открыть файл для добавления данных.\n";
    return;

    for (int i = 0; i < K; ++i) {
    const Stadium& stadium = stadiums[i % stadiums.size()];
    file.write(reinterpret_cast<const char*>(&stadium), sizeof(Stadium));
    }

    file.close();
    }

    // Функция для отображения диалогового меню и обработки выбранной опции
    int showMenu() {
    int choice;
    cout << "Диалоговое меню:\n";
    cout << "1. Ввести изначальные данные\n";
    cout << "2. Удалить стадион\n";
    cout << "3. Добавить стадионы\n";
    cout << "4. Вывести содержимое файла\n";
    cout << "5. Выйти из программы\n";
    cout << "Выберите опцию (1-5): ";
    cin >> choice;
    return choice;
    }

    int main() {
    setlocale(LC_ALL, "Russian");
    // Создаем вектор структур "Стадион"
    vector<Stadium> stadiums;

    // Имя файла для сохранения данных
    string filename = "stadiums.txt";

    int choice;
    do {
    choice = showMenu();

    switch (choice) {
    case 1: {
    // Ввод изначальных данных
    int numStadiums;
    cout << "Введите количество стадионов: ";
    cin >> numStadiums;

    stadiums.clear(); // Очищаем существующие данные

    for (int i = 0; i < numStadiums; ++i) {
    Stadium stadium;
    cout << "Введите данные для стадиона #" << i + 1 << endl;
    cout << "Название: ";
    cin >> stadium.name;
    cout << "Адрес: ";
    cin >> stadium.address;
    cout << "Вместимость: ";
    cin >> stadium.capacity;
    cout << "Виды спорта: ";
    cin >> stadium.sports;
    stadiums.push_back(stadium);
    }

    // Записываем данные в файл
    writeDataToFile(stadiums, filename);
    break;
    }
    case 2: {
    // Удаление стадиона
    string nameToRemove;
    cout << "Введите название стадиона для удаления: ";
    cin >> nameToRemove;
    removeStadiumByName(filename, nameToRemove);
    break;
    }
    case 3: {
    // Добавление стадионов
    int numToAdd;
    cout << "Введите количество стадионов для добавления: ";
    cin >> numToAdd;
    addStadiums(stadiums, filename, numToAdd);
    break;
    }
    case 4: {
    // Вывод содержимого файла
    cout << "Содержимое файла:\n";
    printFileContents(filename);
    break;
    }
    case 5: {
    // Выход из программы
    cout << "Программа завершена.\n";
    break;
    }
    default: {
    cout << "Некорректный выбор. Попробуйте еще раз.\n";
    break;
    }
    }

    cout << endl;
    } while (choice != 5);

    return 0;
    }
     
  2. krutyshkin
    krutyshkin Jun 17, 2023 148 1162 Feb 6, 2019
    я конечно не кодер сиплюс, но это щиткод
     
Loading...
Top