Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.87 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <malloc.h>
  4. #include <string.h>
  5. #include <conio.h>
  6.  
  7.  
  8. using namespace std;
  9.  
  10.  
  11.  
  12. union price
  13. {
  14. int price_int;
  15. double price_double;
  16. };
  17.  
  18. enum currency { rub = 1, usd, eur };
  19.  
  20. struct cinema
  21. {
  22. char name[10];
  23. enum currency curr;
  24. union price price;
  25. int number, session;
  26. bool status : 1;
  27. };
  28.  
  29.  
  30. void InitCinemaClient(cinema *a, int *size)
  31. {
  32. cinema *backup_1, *backup_2;
  33. int size_old, f, i, back;
  34.  
  35. size_old = *size;
  36. backup_1 = new cinema[*size];
  37.  
  38. for (int i = 0; i<size_old; i++) backup_1[i] = a[i];
  39. //cout << "\nbackup_1: ";
  40. //for (int i=0; i<size_old; i++) {backup_1[i] = a[i]; cout << backup_1[i] << " ";}
  41. cout << "\nВведите количество структур ";
  42. cin >> *size;
  43.  
  44. backup_2 = new cinema[*size];
  45. int pos; double price_back;
  46.  
  47. for (int i = 0; i<*size; i++)
  48. {
  49. cout << "\nВведите данные в структуру №" << i + 1 << endl;
  50. cout << "\tНазвание кинофильма: "; cin >> a[i].name;
  51. cout << "\tСеанс: "; cin >> back; a[i].session = back;
  52.  
  53. cout << "\tCтоимость билета и валюту через пробел (1-rub; 2-usd; 3-eur.): ";
  54. cin >> price_back; //cin >> a[i].price;
  55. cin >> pos;
  56.  
  57. if ((price_back - (double)((int)price_back)) == 0) { a[i].price.price_int = price_back; a[i].status = true; }
  58. else { a[i].price.price_double = price_back; a[i].status = false; }
  59.  
  60. //a[i].curr = pos;
  61. if (pos == 1) a[i].curr = rub;
  62. else if (pos == 2) { a[i].curr = usd; }
  63. else pos = eur;
  64.  
  65. cout << "\tКоличество зрителей: "; cin >> a[i].number;
  66. }
  67.  
  68.  
  69.  
  70. //for (i=0; i<size_old; i++) a[i] = backup_1[i];
  71. // for (int j=i; j<(size+size_old); j++) a[j] = backup_2[j-size_old];
  72. for (int i = 0; i<*size; i++) backup_2[i] = a[i];
  73. a = new cinema[*size + size_old];
  74.  
  75. for (i = 0; i<size_old; i++) a[i] = backup_1[i];
  76. for (int j = i; j<(*size + size_old); j++) a[j] = backup_2[j - size_old];
  77.  
  78. *size = _msize(a) / sizeof(a[0]);
  79. cout << "Для продолжения работы введите любое число: "; cin >> f;
  80. //delete backup_1;
  81. //delete backup_2;
  82. system("cls");
  83. }
  84.  
  85. void DisplayCinemaClients(cinema *a, int *n)
  86. {
  87. int f, i, size = *n;
  88. for (i = 0; i<size; i++)
  89. {
  90. cout << "\nСтруктура №" << i + 1 << endl;
  91. cout << "\tНазвание кинофильма: " << a[i].name << endl;
  92. cout << "\tСеанс: " << a[i].session << endl;
  93. cout << "\tCтоимость билета: " << ((a[i].status) ? a[i].price.price_int : a[i].price.price_double) << " ";
  94.  
  95. switch (a[i].curr)
  96. {
  97. case 1:
  98. cout << "rub" << endl;
  99. break;
  100. case 2:
  101. cout << "usd" << endl;
  102. break;
  103. case 3:
  104. cout << "eur" << endl;
  105. break;
  106. default: break;
  107. }
  108. cout << "\tКоличество зрителей: " << a[i].number << endl;
  109. }
  110. cout << "Для продолжения работы введите любое число: "; cin >> f;
  111. system("cls");
  112. }
  113.  
  114. void SortCinemaClients(cinema *a, int *n)
  115. {
  116. int fl, f, flag, i, size = *n;
  117. double first, second;
  118. cout << "\n\t1) Название фильма\n"
  119. "\t2) Сеанс\n"
  120. "\t3) Стоимость билета\n"
  121. "\t4) Количество зрителей\n"
  122. "\tВыберите нужный пункт: "; cin >> flag;
  123. cout << "\n";
  124.  
  125. cinema backup;
  126. switch (flag)
  127. {
  128. case 1:
  129. {
  130. for (i = 0; i<size; i++)
  131. {
  132. for (int j = 0; j<size; j++)
  133. {
  134. if (strcmp(a[i].name, a[j].name) < 0)
  135. {
  136. backup = a[i];
  137. a[i] = a[j];
  138. a[j] = backup;
  139. }
  140. }
  141. }
  142. break;
  143. }
  144. case 2:
  145. {
  146. cout << "Сортировать в порядке возрастания - 1" << endl;
  147. cout << "Сортировать в порядке убывания - 2" << endl;
  148. cin >> fl;
  149. for (i = 0; i<size; i++)
  150. {
  151. for (int j = 0; j<size; j++)
  152. {
  153. if (fl == 1)
  154. {
  155. if (a[i].session < a[j].session)
  156. {
  157. backup = a[i];
  158. a[i] = a[j];
  159. a[j] = backup;
  160. }
  161. }
  162. else
  163. {
  164. if (a[i].session > a[j].session)
  165. {
  166. backup = a[i];
  167. a[i] = a[j];
  168. a[j] = backup;
  169. }
  170. }
  171. }
  172. }
  173. break;
  174. }
  175.  
  176. case 3:
  177. {
  178. cout << "Сортировать в порядке возрастания - 1" << endl;
  179. cout << "Сортировать в порядке убывания - 2" << endl;
  180. cin >> fl;
  181. for (i = 0; i<size; i++)
  182. {
  183. for (int j = 0; j<size; j++)
  184. {
  185. first = ((a[i].status) ? (double)a[i].price.price_int : a[i].price.price_double);
  186. second = ((a[j].status) ? (double)a[j].price.price_int : a[j].price.price_double);
  187. if (fl == 1)
  188. {
  189. if (first < second)
  190. {
  191. backup = a[i];
  192. a[i] = a[j];
  193. a[j] = backup;
  194. }
  195. }
  196. else
  197. {
  198. if (first > second)
  199. {
  200. backup = a[i];
  201. a[i] = a[j];
  202. a[j] = backup;
  203. }
  204. }
  205. }
  206. }
  207. break;
  208. }
  209.  
  210. case 4:
  211. {
  212. cout << "Сортировать в порядке возрастания - 1" << endl;
  213. cout << "Сортировать в порядке убывания - 2" << endl;
  214. cin >> fl;
  215. for (i = 0; i<size; i++)
  216. {
  217. for (int j = 0; j<size; j++)
  218. {
  219. if (fl == 1)
  220. {
  221. if (a[i].number < a[j].number)
  222. {
  223. backup = a[i];
  224. a[i] = a[j];
  225. a[j] = backup;
  226. }
  227. }
  228. else
  229. {
  230. if (a[i].number > a[j].number)
  231. {
  232. backup = a[i];
  233. a[i] = a[j];
  234. a[j] = backup;
  235. }
  236. }
  237. }
  238. }
  239. break;
  240. }
  241.  
  242. default: break;
  243. }
  244.  
  245. cout << "Для продолжения работы введите любое число: "; cin >> f;
  246. system("cls");
  247. }
  248.  
  249. void ChangeCinemaClients(cinema *a, int *n)
  250. {
  251. int flag, i, f, size = *n;
  252. cout << "Введите № структуры: "; cin >> flag;
  253. cout << "\n\tСтруктура №" << flag << endl;
  254. cout << "\tНазвание кинофильма: " << a[flag].name << endl;
  255. cout << "\tСеанс: " << a[flag].session << endl;
  256. cout << "\tCтоимость билета: " << ((a[flag].status) ? a[flag].price.price_int : a[flag].price.price_double) << " ";
  257. switch (a[flag].curr)
  258. {
  259. case 1:
  260. cout << "rub" << endl;
  261. break;
  262. case 2:
  263. cout << "usd" << endl;
  264. break;
  265. case 3:
  266. cout << "eur" << endl;
  267. break;
  268. default: break;
  269. }
  270. cout << "\tКоличество зрителей: " << a[flag].number << endl;
  271.  
  272. cout << "\n\t1) Название фильма\n"
  273. "\t2) Сеанс\n"
  274. "\t3) Стоимость билета\n"
  275. "\t4) Количество зрителей\n"
  276. "\tВыберите нужный пункт для изменения: "; cin >> i;
  277. cout << "\n";
  278. switch (i)
  279. {
  280. case 1:
  281. {
  282. cout << "Введите новое название фильма: "; cin >> a[flag - 1].name;
  283. cout << "\n OK";
  284. break;
  285. }
  286.  
  287. case 2:
  288. {
  289. cout << "Введите новый сеанс: "; cin >> a[flag - 1].session;
  290. cout << "\n OK";
  291. break;
  292. }
  293.  
  294. case 3:
  295. {
  296. double price_back; int pos;
  297. //cout << "Введите новую стоимость билета: "; cin >> a[flag-1].price;
  298.  
  299.  
  300. cout << "Новую стоимость тоимость билета и валюту через пробел (1-rub; 2-usd; 3-eur.): ";
  301. cin >> price_back; //cin >> a[i].price;
  302. cin >> pos;
  303. if ((price_back - (double)((int)price_back)) == 0) { a[i].price.price_int = price_back; a[i].status = true; }
  304. else { a[i].price.price_double = price_back; a[i].status = false; }
  305. if (pos == 1) a[i].curr = rub;
  306. else if (pos == 2) { a[i].curr = usd; }
  307. else pos = eur;
  308. break;
  309. cout << "\n OK";
  310. }
  311.  
  312. case 4:
  313. {
  314. cout << "Введите новое количество зрителей: "; cin >> a[flag - 1].number;
  315. cout << "\n OK";
  316. break;
  317. }
  318. }
  319. cout << "Для продолжения работы введите любое число: "; cin >> f;
  320. system("cls");
  321. }
  322.  
  323. void SearchCinemaClients(cinema *a, int *n)
  324. {
  325. int flag, i, f, size = *n;
  326. cout << "\n\t1) Название фильма\n"
  327. "\t2) Сеанс\n"
  328. "\t3) Стоимость билета\n"
  329. "\t4) Количество зрителей\n"
  330. "\tВыберите нужный пункт: "; cin >> flag;
  331. cout << "\n";
  332. switch (flag)
  333. {
  334. case 1:
  335. {
  336. for (i = 0; i<size; i++)
  337. {
  338. cout << "\tСтруктура №" << i + 1
  339. << " - Название фильма: " << a[i].name << endl;
  340.  
  341. }
  342. break;
  343. }
  344.  
  345. case 2:
  346. {
  347. for (i = 0; i<size; i++)
  348. {
  349. cout << "\tСтруктура №" << i + 1
  350. << " - Сеанс: " << a[i].session << endl;
  351.  
  352. }
  353. break;
  354. }
  355.  
  356. case 3:
  357. {
  358. for (i = 0; i<size; i++)
  359. {
  360. cout << "\tСтруктура №" << i + 1
  361. << " - Cтоимость билета: " << ((a[i].status) ? a[i].price.price_int : a[i].price.price_double) << " ";
  362. switch (a[i].curr)
  363. {
  364. case 1:
  365. cout << "rub" << endl;
  366. break;
  367. case 2:
  368. cout << "usd" << endl;
  369. break;
  370. case 3:
  371. cout << "eur" << endl;
  372. break;
  373. default: break;
  374. }
  375. }
  376. break;
  377. }
  378.  
  379. case 4:
  380. {
  381. for (i = 0; i<size; i++)
  382. {
  383. cout << "\tСтруктура №" << i + 1
  384. << " - Количество зрителей: " << a[i].number << endl;
  385.  
  386. }
  387. break;
  388. }
  389. default: { }
  390. }
  391. cout << "Для продолжения работы введите любое число: "; cin >> f;
  392. system("cls");
  393. }
  394.  
  395. void DeleteCinemaClients(cinema *a, int *size)
  396. {
  397. int flag, i, f;
  398. cout << "Введите № удаляемой структуры: "; cin >> flag;
  399. cinema *new_a = new cinema[*size - 1];
  400. for (i = 0; i<flag - 1; i++) new_a[i] = a[i];
  401. for (int j = flag; j<*size; j++, i++) new_a[i] = a[j];
  402. *size = *size - 1;
  403. a = new cinema[*size];
  404. for (int i = 0; i<*size; i++) a[i] = new_a[i];
  405. delete[] new_a;
  406. cout << "Для продолжения работы введите любое число: "; cin >> f;
  407. system("cls");
  408. }
  409.  
  410. int menu()
  411. {
  412. int flag;
  413. cout << "\n1) Ввод массива структур\n"
  414. "2) Вывод массива структур\n"
  415. "3) Сортировка массива структур\n"
  416. "4) Поиск в массиве структур по заданному параметру\n"
  417. "5) Изменение заданной структуры\n"
  418. "6) Удаление структуры из массива\n"
  419. "7) Выход\n"
  420. "Выберите нужный пункт меню: "; cin >> flag;
  421. if (flag == 7) exit(0);
  422.  
  423. //delete[] a;
  424. return flag - 1;
  425. }
  426.  
  427. void(*massfunc[])(cinema *a, int *size) = { InitCinemaClient, DisplayCinemaClients, SortCinemaClients, SearchCinemaClients, ChangeCinemaClients, DeleteCinemaClients };
  428.  
  429. int main(int argc, char *argv[])
  430. {
  431. setlocale(LC_ALL, "rus");
  432. /*if (argc != 2)
  433. {
  434. cout << "вы забыли ввести свое имя." << endl;
  435. exit(1);
  436. }*/
  437. int size = 0;
  438. cinema *a = new cinema[size];
  439. for (;;)
  440. {
  441. (*massfunc[menu()])(a, &size);
  442. }
  443. return 0;
  444. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement