Advertisement
Jopa322

shnyaga

Dec 18th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. #include "pch.h"
  2. #include "iostream"
  3. #include "time.h"
  4. #include <string>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. struct Bank
  10. {
  11. string name;
  12. int inc[4];
  13. };
  14. class TBank
  15. {
  16. private:
  17. Bank * mass;
  18. int n;
  19.  
  20. public:
  21. TBank(int nn = 5);
  22. TBank(string path, bool bin);
  23. ~TBank();
  24. void vvod();
  25. void vivod();
  26. int Max(int Bank);
  27. int Sum(int Bank);
  28. void rnd();
  29. void sort(int POLE, int pr);
  30. void filevivod(string path, string pathbin);
  31. };
  32.  
  33. TBank::TBank(int nn)
  34. {
  35. n = nn;
  36. mass = new Bank[n];
  37. }
  38. TBank::TBank(string path, bool bin)
  39. {
  40. if (bin) {
  41. FILE *file = NULL;
  42. fopen_s(&file, path.c_str(), "rb");
  43. long size;
  44.  
  45. fseek(file, 0, SEEK_END);
  46. size = ftell(file);
  47. fseek(file, 0, SEEK_SET);
  48.  
  49. n = size / sizeof(Bank);
  50. mass = new Bank[n];
  51. for (int i = 0; i < n; i++)
  52. {
  53. fread(mass + i, sizeof(Bank), 1, file);
  54. }
  55. fclose(file);
  56. }
  57. }
  58. TBank::~TBank()
  59. {
  60. delete[]mass;
  61. }
  62.  
  63.  
  64. void TBank::sort(int POLE, int pr)
  65. {
  66. Bank x;
  67. int i, j, b;
  68. for (i = 0; i < n - 1; i++)
  69. {
  70. for (j = i + 1; j < n; j++)
  71. {
  72. switch (POLE)
  73. {
  74. case 1:
  75. b = strcmp(mass[i].name.c_str(), mass[j].name.c_str()) > 0;
  76. break;
  77. case 2: case 3: case 4: case 5:
  78. b = mass[i].inc[POLE - 2] > mass[j].inc[POLE - 2];
  79. break;
  80. case 6:
  81. b = Max(i) > Max(j);
  82. break;
  83. case 7:
  84. b = Sum(i) > Sum(j);
  85. break;
  86. }
  87. if (pr) b = !b;
  88. if (b)
  89. {
  90. x = mass[i];
  91. mass[i] = mass[j];
  92. mass[j] = x;
  93. }
  94. }
  95. }
  96. }
  97. void TBank::vvod()
  98. {
  99. for (int i = 0; i < n; i++)
  100. {
  101. cout << "Введите название банка:" << endl;
  102. cin >> mass[i].name;
  103. for (int j = 0; j < 4; j++)
  104. {
  105. cout << "Введите денежные поступления за квартал " << j + 1 << endl;
  106. cin >> mass[i].inc[j];
  107. }
  108. }
  109. }
  110.  
  111. void TBank::rnd()
  112. {
  113. int t, z;
  114.  
  115. for (int i = 0; i < n; i++)
  116. {
  117. char *grsh = new char;
  118. t = 3 + rand() % 10;
  119. for (z = 0; z < t; z++)
  120. {
  121. grsh[z] = char(65 + rand() % 26);
  122.  
  123. }
  124. grsh[z] = '\0';
  125. mass[i].name = grsh;
  126. for (int j = 0; j < 4; j++)
  127. {
  128. mass[i].inc[j] = rand() % 999 + 1;
  129. }
  130. }
  131. }
  132.  
  133. int TBank::Max(int Bank)
  134. {
  135. int max = 0;
  136. for (int j = 0; j < 4; j++)
  137. {
  138. if (mass[Bank].inc[j] > max)
  139. {
  140. max = mass[Bank].inc[j];
  141. }
  142. }
  143. return max;
  144. }
  145.  
  146. int TBank::Sum(int Bank)
  147. {
  148. int sum = 0;
  149. for (int j = 0; j < 4; j++)
  150. {
  151. sum += mass[Bank].inc[j];
  152. }
  153. return sum;
  154. }
  155. void TBank::vivod()
  156. {
  157. printf("%-20s", "(1) Банк");
  158. printf("%-16s", "(2) 1й квартал");
  159. printf("%-16s", "(3) 2й квартал");
  160. printf("%-16s", "(4) 3й квартал");
  161. printf("%-16s", "(5) 4й квартал");
  162. printf("%-16s", "(6) Максимум");
  163. printf("%-16s", "(7) Сумма");
  164. printf("\n");
  165.  
  166. for (int i = 0; i < n; i++)
  167. {
  168. printf("%-20s", mass[i].name.c_str());
  169. printf("%-16d", mass[i].inc[0]);
  170. printf("%-16d", mass[i].inc[1]);
  171. printf("%-16d", mass[i].inc[2]);
  172. printf("%-16d", mass[i].inc[3]);
  173. printf("%-16d", Max(i));
  174. printf("%-16d", Sum(i));
  175. cout << endl;
  176. }
  177. }
  178. void TBank::filevivod(string path, string pathbin) {
  179. FILE *f, *b;
  180. fopen_s(&f, path.c_str(), "wt");
  181. fprintf(f, "%-20s", "Банк");
  182. fprintf(f, "%-16s", "1й квартал");
  183. fprintf(f, "%-16s", "2й квартал");
  184. fprintf(f, "%-16s", "3й квартал");
  185. fprintf(f, "%-16s", "4й квартал");
  186. fprintf(f, "%-16s", "Максимум");
  187. fprintf(f, "%-16s", "Сумма");
  188. fprintf(f, "\n");
  189.  
  190. for (int i = 0; i < n; i++)
  191. {
  192. fprintf(f, "%-20s", mass[i].name.c_str());
  193. fprintf(f, "%-16d", mass[i].inc[0]);
  194. fprintf(f, "%-16d", mass[i].inc[1]);
  195. fprintf(f, "%-16d", mass[i].inc[2]);
  196. fprintf(f, "%-16d", mass[i].inc[3]);
  197. fprintf(f, "%-16d", Max(i));
  198. fprintf(f, "%-16d", Sum(i));
  199. fprintf(f, "\n");
  200. }
  201. fclose(f);
  202. cout << "Произведена запись таблицы в файл C:\\Users\\STUD\\Desktop\\files\\text.txt " << endl;
  203.  
  204.  
  205. fopen_s(&b, pathbin.c_str(), "wb");
  206. for (int i = 0; i < n; i++)
  207. {
  208. fwrite(mass + i, sizeof(Bank), 1, b);
  209. }
  210. fclose(b);
  211. cout << "Произведена запись таблицы в файл C:\\Users\\STUD\\Desktop\\files\\test.bin " << endl;
  212. }
  213.  
  214.  
  215. int main()
  216. {
  217. srand(time(0));
  218. setlocale(LC_ALL, "RUS");
  219. int x;
  220. int k;
  221. int qq, wqwqw;
  222.  
  223. bool file = false;
  224. cout << "Прочитать из бин файла?";
  225. cin >> file;
  226.  
  227. TBank *a;
  228. if (file)
  229. {
  230. a = new TBank("C:\\Users\\STUD\\Desktop\\files\\test.bin", true);
  231. }
  232. else
  233. {
  234. cout << "Введите количество банков в городе:" << endl;
  235. cin >> k;
  236.  
  237. a= new TBank(k);
  238. cout << "1-random , 0 нет" << endl;
  239. cin >> x;
  240. if (x == 1)
  241. a->rnd();
  242. else
  243. a->vvod();
  244. }
  245. a->vivod();
  246.  
  247. char option = 1;
  248. do {
  249. system("cls");
  250. a->v
  251. a->vivod();
  252. cout << "Введите номер столбца (1-7) для сортировки или 0 что бы пропустить сортировку" << endl;
  253. cin >> qq;
  254. if (qq != 0)
  255. {
  256. cout << "1 - по убыванию, 0 - по возрастанию" << endl;
  257. cin >> wqwqw;
  258. a->sort(qq, wqwqw);
  259. }
  260. system("cls");
  261. cout << "Отсортированная таблица: " << endl;
  262. a->vivod();
  263. cout << "Нажмите 0 для выхода, любую другую клавишу для продолжения" << endl;
  264. cin >> option;
  265. } while (option != '0');
  266. a->filevivod("C:\\Users\\STUD\\Desktop\\files\\text.txt", "C:\\Users\\STUD\\Desktop\\files\\test.bin");
  267. system("pause");
  268. delete a;
  269. return 0;
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement