Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <malloc.h>
- #include <string.h>
- #include <conio.h>
- using namespace std;
- union price
- {
- int price_int;
- double price_double;
- };
- enum currency { rub = 1, usd, eur };
- struct cinema
- {
- char name[10];
- enum currency curr;
- union price price;
- int number, session;
- bool status : 1;
- };
- void InitCinemaClient(cinema *a, int *size)
- {
- cinema *backup_1, *backup_2;
- int size_old, f, i, back;
- size_old = *size;
- backup_1 = new cinema[*size];
- for (int i = 0; i<size_old; i++) backup_1[i] = a[i];
- //cout << "\nbackup_1: ";
- //for (int i=0; i<size_old; i++) {backup_1[i] = a[i]; cout << backup_1[i] << " ";}
- cout << "\nВведите количество структур ";
- cin >> *size;
- backup_2 = new cinema[*size];
- int pos; double price_back;
- for (int i = 0; i<*size; i++)
- {
- cout << "\nВведите данные в структуру №" << i + 1 << endl;
- cout << "\tНазвание кинофильма: "; cin >> a[i].name;
- cout << "\tСеанс: "; cin >> back; a[i].session = back;
- cout << "\tCтоимость билета и валюту через пробел (1-rub; 2-usd; 3-eur.): ";
- cin >> price_back; //cin >> a[i].price;
- cin >> pos;
- if ((price_back - (double)((int)price_back)) == 0) { a[i].price.price_int = price_back; a[i].status = true; }
- else { a[i].price.price_double = price_back; a[i].status = false; }
- //a[i].curr = pos;
- if (pos == 1) a[i].curr = rub;
- else if (pos == 2) { a[i].curr = usd; }
- else pos = eur;
- cout << "\tКоличество зрителей: "; cin >> a[i].number;
- }
- //for (i=0; i<size_old; i++) a[i] = backup_1[i];
- // for (int j=i; j<(size+size_old); j++) a[j] = backup_2[j-size_old];
- for (int i = 0; i<*size; i++) backup_2[i] = a[i];
- a = new cinema[*size + size_old];
- for (i = 0; i<size_old; i++) a[i] = backup_1[i];
- for (int j = i; j<(*size + size_old); j++) a[j] = backup_2[j - size_old];
- *size = _msize(a) / sizeof(a[0]);
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- //delete backup_1;
- //delete backup_2;
- system("cls");
- }
- void DisplayCinemaClients(cinema *a, int *n)
- {
- int f, i, size = *n;
- for (i = 0; i<size; i++)
- {
- cout << "\nСтруктура №" << i + 1 << endl;
- cout << "\tНазвание кинофильма: " << a[i].name << endl;
- cout << "\tСеанс: " << a[i].session << endl;
- cout << "\tCтоимость билета: " << ((a[i].status) ? a[i].price.price_int : a[i].price.price_double) << " ";
- switch (a[i].curr)
- {
- case 1:
- cout << "rub" << endl;
- break;
- case 2:
- cout << "usd" << endl;
- break;
- case 3:
- cout << "eur" << endl;
- break;
- default: break;
- }
- cout << "\tКоличество зрителей: " << a[i].number << endl;
- }
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- system("cls");
- }
- void SortCinemaClients(cinema *a, int *n)
- {
- int fl, f, flag, i, size = *n;
- double first, second;
- cout << "\n\t1) Название фильма\n"
- "\t2) Сеанс\n"
- "\t3) Стоимость билета\n"
- "\t4) Количество зрителей\n"
- "\tВыберите нужный пункт: "; cin >> flag;
- cout << "\n";
- cinema backup;
- switch (flag)
- {
- case 1:
- {
- for (i = 0; i<size; i++)
- {
- for (int j = 0; j<size; j++)
- {
- if (strcmp(a[i].name, a[j].name) < 0)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- }
- break;
- }
- case 2:
- {
- cout << "Сортировать в порядке возрастания - 1" << endl;
- cout << "Сортировать в порядке убывания - 2" << endl;
- cin >> fl;
- for (i = 0; i<size; i++)
- {
- for (int j = 0; j<size; j++)
- {
- if (fl == 1)
- {
- if (a[i].session < a[j].session)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- else
- {
- if (a[i].session > a[j].session)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- }
- }
- break;
- }
- case 3:
- {
- cout << "Сортировать в порядке возрастания - 1" << endl;
- cout << "Сортировать в порядке убывания - 2" << endl;
- cin >> fl;
- for (i = 0; i<size; i++)
- {
- for (int j = 0; j<size; j++)
- {
- first = ((a[i].status) ? (double)a[i].price.price_int : a[i].price.price_double);
- second = ((a[j].status) ? (double)a[j].price.price_int : a[j].price.price_double);
- if (fl == 1)
- {
- if (first < second)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- else
- {
- if (first > second)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- }
- }
- break;
- }
- case 4:
- {
- cout << "Сортировать в порядке возрастания - 1" << endl;
- cout << "Сортировать в порядке убывания - 2" << endl;
- cin >> fl;
- for (i = 0; i<size; i++)
- {
- for (int j = 0; j<size; j++)
- {
- if (fl == 1)
- {
- if (a[i].number < a[j].number)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- else
- {
- if (a[i].number > a[j].number)
- {
- backup = a[i];
- a[i] = a[j];
- a[j] = backup;
- }
- }
- }
- }
- break;
- }
- default: break;
- }
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- system("cls");
- }
- void ChangeCinemaClients(cinema *a, int *n)
- {
- int flag, i, f, size = *n;
- cout << "Введите № структуры: "; cin >> flag;
- cout << "\n\tСтруктура №" << flag << endl;
- cout << "\tНазвание кинофильма: " << a[flag].name << endl;
- cout << "\tСеанс: " << a[flag].session << endl;
- cout << "\tCтоимость билета: " << ((a[flag].status) ? a[flag].price.price_int : a[flag].price.price_double) << " ";
- switch (a[flag].curr)
- {
- case 1:
- cout << "rub" << endl;
- break;
- case 2:
- cout << "usd" << endl;
- break;
- case 3:
- cout << "eur" << endl;
- break;
- default: break;
- }
- cout << "\tКоличество зрителей: " << a[flag].number << endl;
- cout << "\n\t1) Название фильма\n"
- "\t2) Сеанс\n"
- "\t3) Стоимость билета\n"
- "\t4) Количество зрителей\n"
- "\tВыберите нужный пункт для изменения: "; cin >> i;
- cout << "\n";
- switch (i)
- {
- case 1:
- {
- cout << "Введите новое название фильма: "; cin >> a[flag - 1].name;
- cout << "\n OK";
- break;
- }
- case 2:
- {
- cout << "Введите новый сеанс: "; cin >> a[flag - 1].session;
- cout << "\n OK";
- break;
- }
- case 3:
- {
- double price_back; int pos;
- //cout << "Введите новую стоимость билета: "; cin >> a[flag-1].price;
- cout << "Новую стоимость тоимость билета и валюту через пробел (1-rub; 2-usd; 3-eur.): ";
- cin >> price_back; //cin >> a[i].price;
- cin >> pos;
- if ((price_back - (double)((int)price_back)) == 0) { a[i].price.price_int = price_back; a[i].status = true; }
- else { a[i].price.price_double = price_back; a[i].status = false; }
- if (pos == 1) a[i].curr = rub;
- else if (pos == 2) { a[i].curr = usd; }
- else pos = eur;
- break;
- cout << "\n OK";
- }
- case 4:
- {
- cout << "Введите новое количество зрителей: "; cin >> a[flag - 1].number;
- cout << "\n OK";
- break;
- }
- }
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- system("cls");
- }
- void SearchCinemaClients(cinema *a, int *n)
- {
- int flag, i, f, size = *n;
- cout << "\n\t1) Название фильма\n"
- "\t2) Сеанс\n"
- "\t3) Стоимость билета\n"
- "\t4) Количество зрителей\n"
- "\tВыберите нужный пункт: "; cin >> flag;
- cout << "\n";
- switch (flag)
- {
- case 1:
- {
- for (i = 0; i<size; i++)
- {
- cout << "\tСтруктура №" << i + 1
- << " - Название фильма: " << a[i].name << endl;
- }
- break;
- }
- case 2:
- {
- for (i = 0; i<size; i++)
- {
- cout << "\tСтруктура №" << i + 1
- << " - Сеанс: " << a[i].session << endl;
- }
- break;
- }
- case 3:
- {
- for (i = 0; i<size; i++)
- {
- cout << "\tСтруктура №" << i + 1
- << " - Cтоимость билета: " << ((a[i].status) ? a[i].price.price_int : a[i].price.price_double) << " ";
- switch (a[i].curr)
- {
- case 1:
- cout << "rub" << endl;
- break;
- case 2:
- cout << "usd" << endl;
- break;
- case 3:
- cout << "eur" << endl;
- break;
- default: break;
- }
- }
- break;
- }
- case 4:
- {
- for (i = 0; i<size; i++)
- {
- cout << "\tСтруктура №" << i + 1
- << " - Количество зрителей: " << a[i].number << endl;
- }
- break;
- }
- default: { }
- }
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- system("cls");
- }
- void DeleteCinemaClients(cinema *a, int *size)
- {
- int flag, i, f;
- cout << "Введите № удаляемой структуры: "; cin >> flag;
- cinema *new_a = new cinema[*size - 1];
- for (i = 0; i<flag - 1; i++) new_a[i] = a[i];
- for (int j = flag; j<*size; j++, i++) new_a[i] = a[j];
- *size = *size - 1;
- a = new cinema[*size];
- for (int i = 0; i<*size; i++) a[i] = new_a[i];
- delete[] new_a;
- cout << "Для продолжения работы введите любое число: "; cin >> f;
- system("cls");
- }
- int menu()
- {
- int flag;
- cout << "\n1) Ввод массива структур\n"
- "2) Вывод массива структур\n"
- "3) Сортировка массива структур\n"
- "4) Поиск в массиве структур по заданному параметру\n"
- "5) Изменение заданной структуры\n"
- "6) Удаление структуры из массива\n"
- "7) Выход\n"
- "Выберите нужный пункт меню: "; cin >> flag;
- if (flag == 7) exit(0);
- //delete[] a;
- return flag - 1;
- }
- void(*massfunc[])(cinema *a, int *size) = { InitCinemaClient, DisplayCinemaClients, SortCinemaClients, SearchCinemaClients, ChangeCinemaClients, DeleteCinemaClients };
- int main(int argc, char *argv[])
- {
- setlocale(LC_ALL, "rus");
- /*if (argc != 2)
- {
- cout << "вы забыли ввести свое имя." << endl;
- exit(1);
- }*/
- int size = 0;
- cinema *a = new cinema[size];
- for (;;)
- {
- (*massfunc[menu()])(a, &size);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement