9 пр-1
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
СТАРООСКОЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
ИМ. А.А. УГАРОВА
(филиал) федерального государственного автономного образовательного
учреждения высшего образования
«Национальный исследовательский технологический университет «МИСиС»
Лабораторная работа № 9
на тему
«Хранение данных на внешних носителях»
Выполнил: Студент группы № АТ 22-2з
Старый Оскол, 2024
Цель работы:
1. Получение практических навыков записи структурированной информа-ции в файлы в стиле С;
2. Получение практических навыков записи структурированной информа-ции в файлы в стиле С++;
Вариант 13
1. Используя ввод-вывод в стиле С ++ создать файл и записать в него структурированные данные.
2. Вывести созданный файл на экран.
3. Удалить из файла данные в соответствии с вариантом.
4. Добавить в файл данные в соответствии с вариантом.
5. Вывести измененный файл на экран.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
struct SportsTeam {
std::string name;
std::string city;
int playersCount;
int pointsScored;
};
// Функция для записи данных в файл
void writeDataToFile(const std::vector<SportsTeam>& teams) {
// Открытие файла для записи
std::ofstream outputFile("sports_team_data.txt");
// Проверка, удалось ли открыть файл
if (!outputFile.is_open()) {
std::cerr << "Ошибка открытия файла для записи.\n";
return;
}
// Запись данных в файл
for (const SportsTeam& team : teams) {
outputFile << team.name << ' ' << team.city << ' ' << team.playersCount << ' ' << team.pointsScored << '\n';
}
// Закрытие файла
outputFile.close();
std::cout << "Данные успешно записаны в файл.\n";
}
// Функция для чтения данных из файла
std::vector<SportsTeam> readDataFromFile() {
// Открытие файла для чтения
std::ifstream inputFile("sports_team_data.txt");
// Проверка, удалось ли открыть файл
if (!inputFile.is_open()) {
std::cerr << "Ошибка открытия файла для чтения.\n";
return {};
}
// Считывание данных из файла
std::vector<SportsTeam> teams;
SportsTeam team;
while (inputFile >> team.name >> team.city >> team.playersCount >> team.pointsScored) {
teams.push_back(team);
}
// Закрытие файла
inputFile.close();
return teams;
}
int main() {
setlocale(LC_ALL, "RU");
// Вызов функции для чтения данных из файла
std::vector<SportsTeam> teams = readDataFromFile();
// Вывод информации о командах
std::cout << "Информация о командах:\n";
for (const SportsTeam& team : teams) {
std::cout << "Название команды: " << team.name << std::endl;
std::cout << "Город: " << team.city << std::endl;
std::cout << "Количество игроков: " << team.playersCount << std::endl;
std::cout << "Количество набранных очков: " << team.pointsScored << std::endl;
std::cout << "-----------------\n";
}
// Добавление новых команд
int newTeamsCount;
std::cout << "Введите количество новых команд для добавления: ";
std::cin >> newTeamsCount;
for (int i = 0; i < newTeamsCount; ++i) {
SportsTeam newTeam;
std::cout << "Введите данные для новой команды:\n";
std::cout << "Название команды: ";
std::cin >> newTeam.name;
std::cout << "Город: ";
std::cin >> newTeam.city;
std::cout << "Количество игроков: ";
std::cin >> newTeam.playersCount;
std::cout << "Количество набранных очков: ";
std::cin >> newTeam.pointsScored;
// Добавление новой команды в вектор
teams.push_back(newTeam);
}
// Ввод порогового значения количества очков
int thresholdPoints;
std::cout << "Введите пороговое значение количества очков для удаления команд: ";
std::cin >> thresholdPoints;
// Удаление команд с количеством очков меньше порогового значения
teams.erase(std::remove_if(teams.begin(), teams.end(),
[thresholdPoints](const SportsTeam& team) {
return team.pointsScored < thresholdPoints;
}),
teams.end());
// Вызов функции для записи обновленных данных в файл
writeDataToFile(teams);
return 0;
}