Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // В папке проекта обязательно должны быть файлы client_info.txt и output.txt. В client_info.txt клиенты записываются в формате
- //Eiler Russia 2001 15000
- //Siyanko France 2006 10000
- //Stolyarov Germany 2010 25000
- //Eiler USA 2016 70000
- //Karaulin Russia 2010 10000
- //Фамилия Страна Год Цена
- //
- //
- //
- //
- //При запуске сначала нужно начать 1, чтобы инициализировался вектор clients. Без этого ни одна функция не будет работать!
- // Каждый раз при нажатии 1 дополняется файл output.txt. Это не страшно, потому что при считывании из бинарного файла
- // считывается ровно столько, сколько находится клиентов в clients_info.txt
- #include <iostream>
- #include <Windows.h>
- #include <string>
- #include <fstream>
- #include <vector>
- using namespace std;
- struct Client {
- string second_name;
- string country;
- int year;
- int price;
- };
- // Returns vector of Client struct if everything OK, empty vector otherwise
- vector<Client> get_clients_from_file(string path) {
- ifstream input_file;
- vector<Client> clients;
- input_file.open(path, ifstream::in);
- if (!input_file) {
- cout << "Error opening file" << endl;
- return clients;
- }
- else {
- while (!input_file.eof()) {
- Client current_client;
- input_file >> current_client.second_name;
- input_file >> current_client.country;
- input_file >> current_client.year;
- input_file >> current_client.price;
- clients.push_back(current_client);
- }
- input_file.close();
- return clients;
- }
- return clients;
- }
- void write_bytes(string path, vector<Client> clients) {
- ofstream output_file;
- size_t clients_size = clients.size();
- output_file.open(path, ios::binary || fstream::out);
- if (!output_file) {
- cout << "Error opening output file!" << endl;
- }
- else {
- output_file.write(reinterpret_cast<const char *>(&clients_size), sizeof(clients_size));
- output_file.write(reinterpret_cast<const char *>(&clients[0]), clients.size() * sizeof Client);
- output_file.close();
- }
- }
- // Returns vector of Client struct if everything OK, empty vector otherwise
- vector<Client> get_bytes(string path) {
- size_t clients_size;
- ifstream input_file;
- input_file.open(path, ios::binary);
- Client client;
- if (!input_file) {
- cout << "Error opening file!" << endl;
- }
- else {
- input_file.read(reinterpret_cast<char *>(&clients_size), sizeof(clients_size));
- vector<Client> clients(clients_size);
- input_file.read(reinterpret_cast<char *>(&clients[0]), sizeof(Client) * clients_size);
- return clients;
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- int choice = 0;
- vector<Client> clients;
- vector<Client> clients_from_binary;
- string country;
- while (true) {
- cout << "1. Считать список клиентов из файла client_info.txt и записать в бинарный файл output.txt" << endl;
- cout << "2. Вывести список клиентов на экран" << endl;
- cout << "3. Очистить экран" << endl;
- cout << "4. Найти всех, клиентов, посетивших страну X " << endl;
- cout << "5. Считать клиентов из бинарного файла и вывести на экран" << endl;
- cout << "6. Выход" << endl;
- cout << "Ваш выбор: ";
- cin >> choice;
- switch (choice) {
- case 1:
- clients = get_clients_from_file("client_info.txt");
- write_bytes("output.txt", clients);
- system("CLS");
- break;
- case 2:
- system("CLS");
- for (auto i : clients) {
- cout << "Фамилия: " << i.second_name << "Страна: " << i.country << "Год: " << i.year << "Цена: " << i.price << endl;
- }
- break;
- case 3:
- system("CLS");
- break;
- case 4:
- system("CLS");
- cout << "Введите страну: ";
- cin >> country;
- for (auto i : clients) {
- if (i.country == country) {
- cout << "Фамилия: " << i.second_name << "Страна: " << i.country << "Год: " << i.year << "Цена: " << i.price << endl;
- }
- }
- break;
- case 5:
- system("CLS");
- clients_from_binary = get_bytes("output.txt");
- for (auto i : clients_from_binary) {
- cout << "Фамилия: " << i.second_name << "Страна: " << i.country << "Год: " << i.year << "Цена: " << i.price << endl;
- }
- break;
- case 6:
- system("EXIT");
- return 0;
- }
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement