Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <windows.h>
- #include <iostream>
- #include <fstream>
- #include <string>
- struct date
- {
- unsigned int day;
- unsigned int mes;
- unsigned int year;
- date() {};
- date(int d, int m, int y):day(d), mes(m), year(y){}
- };
- struct bank // записываемая структура
- {
- int num;
- int code;
- std::string name;
- int sum;
- date data;
- bank() {};
- void set(int num, int c, std::string n, int sum, date d)
- {
- this->num = num;
- this->code = c;
- this->name = n;
- this->sum = sum;
- this->data = d;
- }
- friend std::ostream & operator<<(std::ostream & , bank & );
- ~bank() {}
- };
- std::ostream & operator<<(std::ostream & ostream, bank & bank)
- {
- ostream << "Номер счёта: " << bank.num << std::endl;
- ostream << "Код счёта: " << bank.code << std::endl;
- ostream << "Имя владельца: " << bank.name << std::endl;
- ostream << "Денежную сумма: " << bank.sum << std::endl;
- ostream << "Дата: " << bank.data.day << ", " << bank.data.mes <<", " << bank.data.year << std::endl;
- ostream << "______________________________" << std::endl;
- return ostream;
- }
- void write_file(std::string name, bank *b, int s) // запись
- {
- std::ifstream file_r(name, std::ios::binary);
- int tmp_size(s);
- if (file_r)
- {
- int size(0);
- file_r.read((char*)&size, sizeof(int));
- s += size;
- file_r.close();
- }
- std::ofstream file(name, std::ios::binary);
- file.write((char*)&s, sizeof s);
- file.close();
- file.open(name, std::ios::out | std::ios::app | std::ios::binary); // НЕ ДОЗАПИСЫВАЕТ
- int pos = file.tellp(); // файл открывается в начале
- for (int i(0); i < tmp_size; i++)
- {
- int count = b[i].name.length();
- file.write((char*)(&count), sizeof(int)); // размер строки
- file.write(b[i].name.c_str(), count); // пишем строку
- file.write((char*)&b[i].num, sizeof(int));
- file.write((char*)&b[i].code, sizeof(int));
- file.write((char*)&b[i].sum, sizeof(int));
- file.write((char*)&b[i].data, sizeof(date));
- }
- file.close();
- }
- void read_file(std::string name, bank* &b, int& s) // чтение
- {
- std::ifstream file(name, std::ios::binary);
- file.read((char*)&s, sizeof(int));
- if (b)
- delete[] b;
- b = new bank[s];
- for (int i(0); i < s; i++)
- {
- if (file.eof())
- break;
- int count(0);
- file.read((char*)(&count), sizeof(int)); // размер строки
- std::string tmp(count, 0);
- for (int i(0); i<count; i++)
- file.read((char*)&tmp[i], sizeof(char)); // читаем строку
- b[i].name = tmp;
- file.read((char*)&b[i].num, sizeof(int));
- file.read((char*)&b[i].code, sizeof(int));
- file.read((char*)&b[i].sum, sizeof(int));
- file.read((char*)&b[i].data, sizeof(date));
- }
- file.close();
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int size(1);
- bank *b1 = new bank[size];
- b1[0].set(458, 554, "test", 454, date(475, 45, 12));
- write_file("base_bank.bin", b1, size); // пишем в бинарник
- delete[] b1;
- b1 = nullptr;
- read_file("base_bank.bin", b1, size); // читаем из бинарника
- for (int i(0); i < size; i++)
- {
- std::cout << i + 1 << " гражданин: \n";
- std::cout << b1[i] << std::endl;
- }
- delete[] b1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement