Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Addk Знаток (256), на голосовании 1 месяц назад
программа у меня уже написана ее нужно изменить
Добавить запись массива структур в файл и чтение информации из файла.
Программа должна работать следующим образом.
В начале работы запрашивать пользователя, хочет ли он осуществить ввод данных с клавиатуры.
Если выбран вариант ДА, то запрашивается количество вводимых записей и если файл не существовал, он должен быть создан, иначе данные должны быть записаны в файл, не затирая имеющуюся в файле информацию.
Далее производится чтение всех записей из файла, обработка данных и вывод результата
изначальное задание по которому и написана программа
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;
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 2 месяца назад
 #include  
#include
#include
#include
#include
#include

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& 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(&train), sizeof(Train));
}
file.close();
}

vector readFromFile(const string& filename) {
vector trains;
ifstream file(filename, ios::binary);
if (!file) {
cerr << "Файл не существует или не может быть открыт." << endl;
return trains;
}
Train train;
while (file.read(reinterpret_cast(&train), sizeof(Train))) {
trains.push_back(train);
}
file.close();
return trains;
}

void inputTrains(vector& trains) {
int count;
cout << "Введите количество поездов для добавления: ";
cin >> count;
cin.ignore(numeric_limits::max(), '\n');

for (int i = 0; i < count; ++i) {
Train train;
cout << "Введите пункт назначения: ";
getline(cin, train.destination);
cout << "Введите номер поезда: ";
cin >> train.number;
cin.ignore(numeric_limits::max(), '\n');
cout << "Введите время отправления (HH:MM): ";
getline(cin, train.departure_time);
trains.push_back(train);
}
}

void displayTrains(const vector& 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 trains;

char choice;
cout << "Хотите ввести данные с клавиатуры? (д/н): ";
cin >> choice;
cin.ignore(numeric_limits::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;
}
Sergio 2.1 Оракул (67267) 2 месяца назад
 #include  
#include
#include
#include
#include

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& 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 readFromFile(const string& filename) {
vector 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 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;
}
Похожие вопросы