название начального пункта маршрута;
название конечного пункта маршрута;
номер маршрута.
Написать программу, выполняющую следующие действия:
ввод из файла данных в массив, состоящий из восьми элементов типа
MARSH;
сортировка по номерам маршрутов всех записей;
запись в двоичный файл информации о маршруте;
чтение из двоичного файла информации о маршруте;
вывод на экран информации о маршруте, номер которого введен с клавиатуры;
если таких маршрутов нет, выдать на дисплей соответствующее сообщение. (с++)
C/C++
С++ ,Описать класс с именем MARSH, содержащий следующие данные:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
struct Route {
unsigned short number;
char departure[32];
char destination[32];
void info()const {
cout << departure << " - " << destination << '\n';
}
friend bool operator<(const Route& a, const Route& b) {
return a.number < b.number;
}
friend istream& operator>>(istream& inp, Route& route) {
cout << "Номер маршрута: ";
cin >> route.number;
inp.ignore(inp.rdbuf()->in_avail());
cout << "Пункт отправления: ";
inp.getline(route.departure, size(route.departure));
cout << "Пункт назначения: ";
inp.getline(route.destination, size(route.destination));
return inp;
}
friend ostream& operator<<(ostream& out, const Route& route) {
out << route.number << ' '
<< route.departure << " - "
<< route.destination;
return out;
}
};
class Schedule {
public:
void add(const size_t quantity = 1) {
for (auto i = 0U; i < quantity; ++i) {
Route route;
cin >> route;
sheet.emplace_back(route);
}
}
bool save()const {
ofstream db("schedule.bin", ios::binary);
if (db.is_open()) {
for (const auto& record : sheet) {
db.write((char*)&record, sizeof(record));
}
db.close();
return true;
}
return false;
}
bool load() {
ifstream db("schedule.bin", ios::binary);
if (db.is_open()) {
sheet.clear();
Route route{};
while (db.read((char*)&route, sizeof(route))) {
sheet.push_back(route);
}
db.close();
return true;
}
return false;
}
void order_by_number() {
sort(sheet.begin(), sheet.end());
}
bool contains(const unsigned short number)const {
auto target = [number](const Route& route) {
return number == route.number;
};
return find_if(sheet.begin(), sheet.end(), target) != sheet.end();
}
void show_by_number(const unsigned short number)const {
auto target = [number](const Route& route) {
return number == route.number;
};
auto& result = *find_if(sheet.begin(), sheet.end(), target);
result.info();
}
auto begin()const {
return sheet.begin();
}
auto end()const {
return sheet.end();
}
private:
vector<Route> sheet;
};
int main() {
system("chcp 1251 > nul");
Schedule schedule;
//========================================
// После однократного ввода данных, три
// строки кода нужно закомментировать
//----------------------------------------
schedule.add(8);
system("cls");
schedule.save();
//----------------------------------------
// Конец комментария
//========================================
schedule.load();
schedule.order_by_number();
for (const auto& route : schedule) cout << route << '\n';
cout << "\nВведите номер для поиска: ";
unsigned short number;
cin >> number;
if (schedule.contains(number)) {
schedule.show_by_number(number);
} else {
puts("Заданный маршрут не найден!");
}
system("pause > nul");
}
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
struct Route {
unsigned short number;
char departure[32];
char destination[32];
void info()const {
cout << departure << " - " << destination << '\n';
}
friend bool operator<(const Route& a, const Route& b) {
return a.number < b.number;
}
friend istream& operator>>(istream& inp, Route& route) {
cout << "Номер маршрута: ";
cin >> route.number;
inp.ignore(inp.rdbuf()->in_avail());
cout << "Пункт отправления: ";
inp.getline(route.departure, size(route.departure));
cout << "Пункт назначения: ";
inp.getline(route.destination, size(route.destination));
return inp;
}
friend ostream& operator<<(ostream& out, const Route& route) {
out << route.number << ' '
<< route.departure << " - "
<< route.destination;
return out;
}
};
class Schedule {
public:
void add(const size_t quantity = 1) {
for (auto i = 0U; i < quantity; ++i) {
Route route;
cin >> route;
sheet.emplace_back(route);
}
}
bool save()const {
ofstream db("schedule.bin", ios::binary);
if (db.is_open()) {
for (const auto& record : sheet) {
db.write((char*)&record, sizeof(record));
}
db.close();
return true;
}
return false;
}
bool load() {
ifstream db("schedule.bin", ios::binary);
if (db.is_open()) {
sheet.clear();
Route route{};
while (db.read((char*)&route, sizeof(route))) {
sheet.push_back(route);
}
db.close();
return true;
}
return false;
}
void order_by_number() {
sort(sheet.begin(), sheet.end());
}
bool contains(const unsigned short number)const {
auto target = [number](const Route& route) {
return number == route.number;
};
return find_if(sheet.begin(), sheet.end(), target) != sheet.end();
}
void show_by_number(const unsigned short number)const {
auto target = [number](const Route& route) {
return number == route.number;
};
auto& result = *find_if(sheet.begin(), sheet.end(), target);
result.info();
}
auto begin()const {
return sheet.begin();
}
auto end()const {
return sheet.end();
}
private:
vector<Route> sheet;
};
int main() {
system("chcp 1251 > nul");
Schedule schedule;
//========================================
// После однократного ввода данных, три
// строки кода нужно закомментировать
//----------------------------------------
schedule.add(8);
system("cls");
schedule.save();
//----------------------------------------
// Конец комментария
//========================================
schedule.load();
schedule.order_by_number();
for (const auto& route : schedule) cout << route << '\n';
cout << "\nВведите номер для поиска: ";
unsigned short number;
cin >> number;
if (schedule.contains(number)) {
schedule.show_by_number(number);
} else {
puts("Заданный маршрут не найден!");
}
system("pause > nul");
}
Похожие вопросы
- Описать независимые классы и определить их методы.
- Создать файл ABONENT.dat, содержащий записи следующей структуры: ФИО абонента; его номер телефона. на языке си++
- Переход на следующую строку при считывании данных из файла в Си
- Что такое вообще типы данных в с++? Что НЕ является типом данных
- Нужно найти в бинарном файле введенные пользователем данные.
- Для чего можно приспособить следующие структуры данных...
- Задача на структуры данных, очереди и стек, не могу понять что делаю нет так?
- С++, как оставить без изменений данные в char* который указывает на внутренний буфер вектора?
- Как реализовать поиск похожей строки в базе данных?
- Передача данных в дочернюю программу и вывод из неё