Advertisement
Range_

Untitled

May 8th, 2017
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string>
  6.  
  7. struct date
  8. {
  9.     unsigned int day;
  10.     unsigned int mes;
  11.     unsigned int year;
  12.  
  13.     date() {};
  14.     date(int d, int m, int y):day(d), mes(m), year(y){}
  15. };
  16.  
  17. struct bank // записываемая структура
  18. {
  19.     int num;
  20.     int code;
  21.     std::string name;
  22.     int sum;
  23.     date data;
  24.  
  25.     bank() {};
  26.     void set(int num, int c, std::string n, int sum, date d)
  27.     {
  28.         this->num = num;
  29.         this->code = c;
  30.         this->name = n;
  31.         this->sum = sum;
  32.         this->data = d;
  33.     }
  34.  
  35.     friend std::ostream & operator<<(std::ostream & , bank & );
  36.  
  37.     ~bank() {}
  38. };
  39.  
  40. std::ostream & operator<<(std::ostream & ostream, bank & bank)
  41. {
  42.     ostream << "Номер счёта: " << bank.num << std::endl;
  43.     ostream << "Код счёта: " << bank.code << std::endl;
  44.     ostream << "Имя владельца: " << bank.name << std::endl;
  45.     ostream << "Денежную сумма: " << bank.sum << std::endl;
  46.     ostream << "Дата: " << bank.data.day << ", " << bank.data.mes <<", " << bank.data.year << std::endl;
  47.     ostream << "______________________________" << std::endl;
  48.     return ostream;
  49. }
  50.  
  51.  
  52. void write_file(std::string name, bank *b, int s) // запись
  53. {
  54.     std::ifstream file_r(name, std::ios::binary);
  55.     int tmp_size(s);
  56.     if (file_r)
  57.     {
  58.         int size(0);
  59.         file_r.read((char*)&size, sizeof(int));
  60.         s += size;
  61.         file_r.close();
  62.     }
  63.     std::ofstream file(name, std::ios::binary);
  64.     file.write((char*)&s, sizeof s);
  65.     file.close();
  66.     file.open(name, std::ios::out | std::ios::app | std::ios::binary);  // НЕ ДОЗАПИСЫВАЕТ
  67.     int pos = file.tellp();  // файл открывается в начале
  68.     for (int i(0); i < tmp_size; i++)
  69.     {
  70.         int count = b[i].name.length();
  71.         file.write((char*)(&count), sizeof(int)); // размер строки
  72.         file.write(b[i].name.c_str(), count); // пишем строку
  73.         file.write((char*)&b[i].num, sizeof(int));
  74.         file.write((char*)&b[i].code, sizeof(int));
  75.         file.write((char*)&b[i].sum, sizeof(int));
  76.         file.write((char*)&b[i].data, sizeof(date));
  77.     }
  78.     file.close();
  79. }
  80.  
  81. void read_file(std::string name, bank* &b, int& s) // чтение
  82. {
  83.     std::ifstream file(name, std::ios::binary);
  84.     file.read((char*)&s, sizeof(int));
  85.     if (b)
  86.         delete[] b;
  87.     b = new bank[s];
  88.     for (int i(0); i < s; i++)
  89.     {
  90.         if (file.eof())
  91.             break;
  92.         int count(0);
  93.         file.read((char*)(&count), sizeof(int)); // размер строки
  94.         std::string tmp(count, 0);
  95.         for (int i(0); i<count; i++)
  96.             file.read((char*)&tmp[i], sizeof(char)); // читаем строку
  97.         b[i].name = tmp;
  98.         file.read((char*)&b[i].num, sizeof(int));
  99.         file.read((char*)&b[i].code, sizeof(int));
  100.         file.read((char*)&b[i].sum, sizeof(int));
  101.         file.read((char*)&b[i].data, sizeof(date));
  102.     }
  103.     file.close();
  104. }
  105.  
  106. int main()
  107. {
  108.     SetConsoleCP(1251);
  109.     SetConsoleOutputCP(1251);
  110.  
  111.     int size(1);
  112.     bank *b1 = new bank[size];
  113.    
  114.     b1[0].set(458, 554, "test", 454, date(475, 45, 12));
  115.  
  116.     write_file("base_bank.bin", b1, size); // пишем в бинарник
  117.     delete[] b1;
  118.     b1 = nullptr;
  119.     read_file("base_bank.bin", b1, size); // читаем из бинарника
  120.  
  121.  
  122.     for (int i(0); i < size; i++)
  123.     {
  124.         std::cout << i + 1 << " гражданин: \n";
  125.         std::cout << b1[i] << std::endl;
  126.     }
  127.  
  128.     delete[] b1;
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement