Advertisement
Guest User

Untitled

a guest
May 26th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 33.42 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. #include <windows.h>
  7. #include <string.h>
  8.  
  9. #define SC system("cls");
  10. #define SP system("pause");
  11. #define TZP printf("\n\aТаблица заказов пуста\n");
  12. #define TPP printf("\n\aТаблица продукции пуста\n");
  13. #define gets gets_s
  14. void menu(void); // Меню выбора администратора либо пользователя
  15. void menuAdm(void); // Меню администратора
  16. void menuPol(void);// Меню пользователя
  17. void menuSKR(void); // Меню ввода продукции либо заказа
  18. void menuexit(void); // Меню выхода
  19. void exitProg(void); // функция закрытия программы
  20. void vvod(void); // функция ввода
  21. void zapis(void);  // функция записи продукции
  22. void vvodZak(void); // функция ввода заказа
  23. void menusort(void); // меню сортировки
  24. void menusearch(void);// меню поиска
  25. void menuvivod(void); // мею вывода
  26. void sort(void); // функция сортировки продукции
  27. void sortZak(void); // функция сортировки заказов
  28. void searchZak(void); // функция поиска заказов
  29. void search(void); // функция поиска продукции
  30. void change(void); // функция изменения продукции
  31. void changemenu(void); // меню изменения
  32. void changeZak(void); // функция изменения заказов
  33. void deletee(void); // функция удаления продукции
  34. void deleteemenu(void); // меню удаления
  35. void deleteeZak(void); //функция удаления заказов
  36. void deleteePol(void); // функция удаления пользователей
  37. void vivodProd(void); // функция вывода продукции
  38. void vivodZakaz(void); // функция вывода заказов
  39. void zapisZak(void); // функция записи заказов
  40. void vhodADMIN(void); // функция отвечающая за ввод логина и пароля для администратора
  41. void vhod(void); // функция отвещающая за ввод логина и пароля для пользователя
  42. void schitatPIP(void);// функция считывания пользователей из бинарного файла
  43. void zapisatPIP(void);// функция записи новых пользователей в бинарный файл
  44. void dobavitPIP(void);// функция добавления новых пользователей
  45. void loginPol(void); // функция выбора для пользователя
  46. void vivodtopProd(void); // функция вывода топ продукции
  47. void vivodtopZakaz(void);// функция вывода топ заказов
  48. int structsize = 0, i, j, k, kol, q, intbuf, res, structsize1 = 0, structsize2 = 0, bal, vib = 0;
  49. char choice, buffer[30], check, block;
  50.  
  51. struct strct {
  52.     char dataa[30];
  53. };
  54.  
  55. struct struct1 {
  56.     struct strct data;
  57.     char prod[30], kolv[30];
  58.     int sum, sumZa;
  59.  
  60. };
  61.  
  62. struct struct1 client[50];
  63. struct struct1 tmp;
  64.  
  65. struct struct2 {
  66.     struct strct dataz;
  67.     char prodz[30], kolvz[30], adres[30];
  68.     int stom;
  69.  
  70. };
  71.  
  72. struct struct2 clp[50];
  73. struct struct2 ppa;
  74.  
  75.  
  76. struct struct3 {
  77.     char login[30], parol[30];
  78.     char role[30];
  79. };
  80. struct struct3 pip[50];
  81. int pipsize = 0;
  82.  
  83.  
  84.  
  85. FILE *file, *file2, *file3;
  86. FILE *users;
  87.  
  88. void schitatPIP() {
  89.     users = fopen("users", "rb");
  90.     fread(&pipsize, sizeof(int), 1, users);
  91.     for (int i = 0; i < pipsize; i++)
  92.         fread(&pip[i], sizeof(struct struct3), 1, users);
  93.     fclose(users);
  94.     getchar();
  95. }
  96.  
  97. void zapisatPIP() {
  98.     users = fopen("users", "w+b");
  99.     fwrite(&pipsize, sizeof(int), 1, users);
  100.     for (int i = 0; i < pipsize; i++)
  101.         fwrite(&pip[i], sizeof(struct struct3), 1, users);
  102.     fclose(users);
  103.     getchar();
  104. }
  105.  
  106. void dobavitPIP() {
  107.     struct struct3 noviy_pip;
  108.     strcpy(noviy_pip.role, "user");
  109.     printf("Введите логин\n");
  110.     fflush(stdin);
  111.     gets(noviy_pip.login);
  112.     gets(noviy_pip.login);
  113.     printf("Введите пароль\n");
  114.     fflush(stdin);
  115.     gets(noviy_pip.parol);
  116.     pip[pipsize] = noviy_pip;
  117.     pipsize += 1;
  118.     zapisatPIP();
  119. }
  120.  
  121. void udalitPIP() {
  122.     char login[30];
  123.     printf("Введите логин\n");
  124.     fflush(stdin);
  125.     gets(login);
  126.     gets(login);
  127.     int i, j;
  128.     for (i = 0; i < pipsize; i++) {
  129.         if (strcmp(pip[i].login, login) == 0) {
  130.             for (j = i; j < pipsize - 1; j++) {
  131.                 pip[j] = pip[j + 1];
  132.             }
  133.             zapisatPIP();
  134.             return;
  135.         }
  136.     }
  137.     printf("Ошибка ввода\n");
  138.     system("pause");
  139. }
  140.  
  141. void vhodADMIN() {
  142.     char login[30], parol[30], role[30];
  143.     strcpy(role, "admin");
  144.     int i;
  145.     schitatPIP();
  146.     printf("Введите логин\n");
  147.     fflush(stdin);
  148.     gets(login);
  149.     gets(login);
  150.     printf("Введите пароль\n");
  151.     fflush(stdin);
  152.     gets(parol);
  153.     for (i = 0; i < pipsize; i++) {
  154.         if (strcmp(pip[i].login, login) == 0 && strcmp(pip[i].parol, parol) == 0 && strcmp(pip[i].role, role) == 0) {
  155.             SC
  156.                 menuAdm();
  157.             system("cls");
  158.             return;
  159.         }
  160.     }
  161.     printf("Ошибка входа\n");
  162.     system("pause");
  163. }
  164.  
  165. void sort() {
  166.     struct struct1 tmp1;
  167.     int temp, i, j;
  168.     for (i = 0; i < structsize - 1; i++) {
  169.         temp = i;
  170.         for (j = i + 1; j < structsize; j++) {
  171.             if (client[j].sumZa > client[temp].sumZa) {
  172.                 temp = j;
  173.             }
  174.         }
  175.         tmp1 = client[temp];
  176.         client[temp] = client[i];
  177.         client[i] = tmp1;
  178.     }
  179.     return;
  180. }
  181.  
  182. void vhod() {
  183.     char login[30], parol[30], role[30];
  184.     strcpy(role, "user");
  185.     int i;
  186.     schitatPIP();
  187.     printf("Введите логин\n");
  188.     fflush(stdin);
  189.     gets(login);
  190.     gets(login);
  191.     printf("Введите пароль\n");
  192.     fflush(stdin);
  193.     gets(parol);
  194.     for (i = 0; i < pipsize; i++) {
  195.         if (strcmp(pip[i].login, login) == 0 && strcmp(pip[i].parol, parol) == 0 && strcmp(pip[i].role, role) == 0) {
  196.             SC
  197.                 menuPol();
  198.             system("cls");
  199.             return;
  200.         }
  201.     }
  202.     printf("Ошибка входа\n");
  203.     system("pause");
  204. }
  205.  
  206. void menu(void) {
  207.     while (1) {
  208.         schitat();
  209.         schitatPIP();
  210.         schitatZak();
  211.         printf("1)Войти как администратор\n2)Войти как пользователь\n0)Выйти из программы\n");
  212.         scanf("%c", &block);
  213.         switch (block)
  214.         {
  215.         case '1':
  216.             SC
  217.                 vhodADMIN();
  218.             system("cls");
  219.             break;
  220.         case '2':
  221.             SC
  222.                 loginPol();
  223.             system("cls");
  224.             break;
  225.         case '0':
  226.             SC
  227.                 exitProg();
  228.             system("cls");
  229.             break;
  230.             return;
  231.         default:
  232.             system("cls");
  233.             break;
  234.         }
  235.     }
  236.     system("cls");
  237. }
  238.  
  239. void menuAdm(void) {
  240.     while (1) {
  241.         printf("МЕНЮ АДМИНИСТРАТОРА\n1)Меню ввода данных\n2)Меню сортировки\n3)Меню поиска\n4)Меню изменения\n5)Меню удаления\n6)меню вывода\n7)Управление пользователями\n0)Выйти\n");
  242.         scanf(" %c", &choice);
  243.         switch (choice)
  244.         {
  245.         case '1':
  246.             SC
  247.                 menuSKR();
  248.             system("cls");
  249.             break;
  250.         case '2':
  251.             SC
  252.                 if (structsize < 1 && structsize1 < 1) {
  253.                     printf("Ведите данные!\n");
  254.                     SP
  255.                         SC
  256.                         break;
  257.                 }
  258.             SC
  259.                 menusort();
  260.             SC
  261.                 break;
  262.         case '3':
  263.             SC
  264.                 if (structsize < 1 && structsize1 < 1) {
  265.                     printf("Ведите данные!\n");
  266.                     SP
  267.                         SC
  268.                         break;
  269.                 }
  270.             SC
  271.                 menusearch();
  272.             SC
  273.                 break;
  274.         case '4':
  275.             SC
  276.                 if (structsize < 1 && structsize1 < 1) {
  277.  
  278.                     printf("Ведите данные!\n");
  279.                     SP
  280.                         SC
  281.                         break;
  282.                 }
  283.             SC
  284.                 changemenu();
  285.             SP
  286.                 SC
  287.                 break;
  288.         case '5':
  289.             SC
  290.                 if (structsize < 1 && structsize1 < 1) {
  291.  
  292.                     printf("Ведите данные!\n");
  293.                     SP
  294.                         SC
  295.                         break;
  296.                 }
  297.             SC
  298.                 deleteemenu();
  299.             SP
  300.                 SC
  301.                 break;
  302.         case '6':
  303.             SC
  304.                 if (structsize < 1 && structsize1 < 1) {
  305.  
  306.                     printf("Ведите данные!\n");
  307.                     SP
  308.                         SC
  309.                         break;
  310.                 }
  311.             menuvivod();
  312.             SP
  313.                 SC
  314.                 break;
  315.         case '7':
  316.             deleteePol();
  317.             system("cls");
  318.             break;
  319.         case '0':
  320.             zapis();
  321.             zapisatPIP();
  322.             zapisZak();
  323.             SC
  324.                 menuexit();
  325.             system("cls");
  326.             break;
  327.         default:
  328.             system("cls");
  329.             break;
  330.         }
  331.     }
  332.     return;
  333. }
  334.  
  335. void vvod(void)
  336. {
  337.     printf("#%d\n", structsize + 1);
  338.     printf("Тип продукции\n");
  339.     fflush(stdin);
  340.     gets(client[structsize].prod);
  341.     gets(client[structsize].prod);
  342.     printf("Количество\n");
  343.     fflush(stdin);
  344.     gets(client[structsize].kolv);
  345.     printf("Цена за всю партию\n");
  346.     scanf("%d", &client[structsize].sum);
  347.     printf("Цена за десток\n");
  348.     scanf("%d", &client[structsize].sumZa);
  349.     printf("Дата последнего изменения\n");
  350.     fflush(stdin);
  351.     gets(client[structsize].data.dataa);
  352.     gets(client[structsize].data.dataa);
  353.     char proverka[30];
  354.     int data[30];
  355.     if (client[structsize].data.dataa[2] != '.' || client[structsize].data.dataa[5] != '.' || strlen(client[structsize].data.dataa) != 10) {
  356.         printf("Ошибка ввода\n");
  357.         system("pause");
  358.         return;
  359.     }
  360.     proverka[0] = client[structsize].data.dataa[0];
  361.     proverka[1] = client[structsize].data.dataa[1];
  362.     data[0] = atoi(proverka);
  363.     for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  364.         proverka[pro]=' ';
  365.     }
  366.     proverka[0] = client[structsize].data.dataa[3];
  367.     proverka[1] = client[structsize].data.dataa[4];
  368.     data[1] = atoi(proverka);
  369.     for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  370.         proverka[pro]=' ';
  371.     }
  372.     proverka[0] = client[structsize].data.dataa[6];
  373.     proverka[1] = client[structsize].data.dataa[7];
  374.     proverka[2] = client[structsize].data.dataa[8];
  375.     proverka[3] = client[structsize].data.dataa[9];
  376.     data[2] = atoi(proverka);
  377.     if (data[0] > 31 || data[0] < 0 || data[1]>12 || data[1] < 0 || data[2]>2020 || data[2] < 2019) {
  378.         printf("Ошибка ввода\n");
  379.         system("pause");
  380.         return;
  381.     }
  382.     structsize++;
  383.     while (1) {
  384.         printf("\n1)продолжить ввод\n2)прекратить\n");
  385.         scanf(" %c", &choice);
  386.         switch (choice) {
  387.         case '1':
  388.  
  389.             printf("#%d\n", structsize + 1);
  390.             printf("Тип продукции\n");
  391.             fflush(stdin);
  392.             gets(client[structsize].prod);
  393.             gets(client[structsize].prod);
  394.             printf("Количество\n");
  395.             fflush(stdin);
  396.             gets(client[structsize].kolv);
  397.             printf("Цена за всю партию\n");
  398.             scanf("%d", &client[structsize].sum);
  399.             printf("Цена за десток\n");
  400.             scanf("%d", &client[structsize].sumZa);
  401.             printf("Дата последнего изменения\n");
  402.             fflush(stdin);
  403.             gets(client[structsize].data.dataa);
  404.             gets(client[structsize].data.dataa);
  405.             char proverka[30];
  406.             int data[3];
  407.             if (client[structsize].data.dataa[2] != '.' || client[structsize].data.dataa[5] != '.' || strlen(client[structsize].data.dataa) != 10) {
  408.                 printf("Ошибка ввода\n");
  409.                 system("pause");
  410.                 return;
  411.             }
  412.             proverka[0] = client[structsize].data.dataa[0];
  413.             proverka[1] = client[structsize].data.dataa[1];
  414.             data[0] = atoi(proverka);
  415.             for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  416.         proverka[pro]=' ';
  417.     }
  418.             proverka[0] = client[structsize].data.dataa[3];
  419.             proverka[1] = client[structsize].data.dataa[4];
  420.             data[1] = atoi(proverka);
  421.             for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  422.         proverka[pro]=' ';
  423.     }
  424.             proverka[0] = client[structsize].data.dataa[6];
  425.             proverka[1] = client[structsize].data.dataa[7];
  426.             proverka[2] = client[structsize].data.dataa[8];
  427.             proverka[3] = client[structsize].data.dataa[9];
  428.             data[2] = atoi(proverka);
  429.             if (data[0] > 31 || data[0] < 0 || data[1]>12 || data[1] < 0 || data[2]>2020 || data[2] < 2019) {
  430.                 printf("Ошибка ввода\n");
  431.                 system("pause");
  432.                 return;
  433.             }
  434.             structsize++;
  435.             break;
  436.         case '2':
  437.             zapis();
  438.             return;
  439.         default:
  440.             system("cls");
  441.             break;
  442.         }
  443.     }
  444.     return;
  445. }
  446.  
  447. void loginPol(void) {
  448.     while (1) {
  449.         printf("1)Аккаунт существует\n");
  450.         printf("2)Создать новый аккаунт\n");
  451.         printf("0)Назад\n");
  452.         scanf("%c", &block);
  453.         switch (block)
  454.         {
  455.         case '1':
  456.             SC
  457.                 vhod();
  458.             system("cls");
  459.             break;
  460.         case '2':
  461.             SC
  462.                 dobavitPIP();
  463.             system("cls");
  464.             break;
  465.         case '0':
  466.             SC
  467.                 return;
  468.         default:
  469.             system("cls");
  470.             break;
  471.         }
  472.     }
  473. }
  474.  
  475. void vvodZak(void)
  476. {
  477.     int pro;
  478.     char proverka[30];
  479.     int data[3];
  480.     printf("#%d\n", structsize1 + 1);
  481.     printf("Тип продукции\n");
  482.     fflush(stdin);
  483.     gets(clp[structsize1].prodz);
  484.     gets(clp[structsize1].prodz);
  485.     printf("Нужное количество(десятки)\n");
  486.     fflush(stdin);
  487.     gets(clp[structsize1].kolvz);
  488.     printf("Стоимость заказа\n");
  489.     scanf("%d", &clp[structsize1].stom);
  490.     printf("Дата добавления заказа:\n");
  491.     fflush(stdin);
  492.     gets(clp[structsize1].dataz.dataa);
  493.     gets(clp[structsize1].dataz.dataa);
  494.     if (clp[structsize1].dataz.dataa[2] != '.' || clp[structsize1].dataz.dataa[5] != '.' || strlen(clp[structsize1].dataz.dataa) != 10) {
  495.         printf("Ошибка ввода\n");
  496.         system("pause");
  497.         return;
  498.     }
  499.     proverka[0] = clp[structsize1].dataz.dataa[0];
  500.     proverka[1] = clp[structsize1].dataz.dataa[1];
  501.     data[0] = atoi(proverka);
  502.     for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  503.         proverka[pro]=' ';
  504.     }
  505.     proverka[0] = clp[structsize1].dataz.dataa[3];
  506.     proverka[1] = clp[structsize1].dataz.dataa[4];
  507.     data[1] = atoi(proverka);
  508.     for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  509.         proverka[pro]=' ';
  510.     }
  511.     proverka[0] = clp[structsize1].dataz.dataa[6];
  512.     proverka[1] = clp[structsize1].dataz.dataa[7];
  513.     proverka[2] = clp[structsize1].dataz.dataa[8];
  514.     proverka[3] = clp[structsize1].dataz.dataa[9];
  515.     data[2] = atoi(proverka);
  516.     if (data[0] > 31 || data[0] < 0 || data[1]>12 || data[1] < 0 || data[2]>2020 || data[2] < 2019) {
  517.         printf("Ошибка ввода\n");
  518.         system("pause");
  519.         return;
  520.     }
  521.     printf("Адрес:\n ");
  522.     fflush(stdin);
  523.     gets(clp[structsize1].adres);
  524.     structsize1++;
  525.     while (1) {
  526.         printf("\n1)продолжить ввод\n2)прекратить\n");
  527.         scanf(" %c", &choice);
  528.         switch (choice) {
  529.         case '1':
  530.             printf("#%d\n", structsize1 + 1);
  531.             printf("Тип продукции\n");
  532.             fflush(stdin);
  533.             gets(clp[structsize1].prodz);
  534.             gets(clp[structsize1].prodz);
  535.             printf("Нужное количество(десятки)\n");
  536.             fflush(stdin);
  537.             gets(clp[structsize1].kolvz);
  538.             printf("Стоимость заказа\n");
  539.             scanf("%d", &clp[structsize1].stom);
  540.             printf("Дата добавления заказа:\n");
  541.             fflush(stdin);
  542.             gets(clp[structsize1].dataz.dataa);
  543.             gets(clp[structsize1].dataz.dataa);
  544.             if (clp[structsize1].dataz.dataa[2] != '.' || clp[structsize1].dataz.dataa[5] != '.' || strlen(clp[structsize1].dataz.dataa) != 10) {
  545.                 printf("Ошибка ввода\n");
  546.                 system("pause");
  547.                 return;
  548.             }
  549.             proverka[0] = clp[structsize1].dataz.dataa[0];
  550.             proverka[1] = clp[structsize1].dataz.dataa[1];
  551.             data[0] = atoi(proverka);
  552.             for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  553.                 proverka[pro]=' ';
  554.             }
  555.             proverka[0] = clp[structsize1].dataz.dataa[3];
  556.             proverka[1] = clp[structsize1].dataz.dataa[4];
  557.             data[1] = atoi(proverka);
  558.             for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  559.                 proverka[pro]=' ';
  560.             }
  561.             proverka[0] = clp[structsize1].dataz.dataa[6];
  562.             proverka[1] = clp[structsize1].dataz.dataa[7];
  563.             proverka[2] = clp[structsize1].dataz.dataa[8];
  564.             proverka[3] = clp[structsize1].dataz.dataa[9];
  565.             data[2] = atoi(proverka);
  566.             if (data[0] > 31 || data[0] < 0 || data[1]>12 || data[1] < 0 || data[2]>2020 || data[2] < 2019) {
  567.                 printf("Ошибка ввода\n");
  568.                 system("pause");
  569.                 return;
  570.             }
  571.             printf("Адрес:\n ");
  572.             fflush(stdin);
  573.             gets(clp[structsize1].adres);
  574.             structsize1++;
  575.             break;
  576.         case '2':
  577.             zapisZak();
  578.             return;
  579.         default:
  580.             system("cls");
  581.             break;
  582.         }
  583.     }
  584.     return;
  585. }
  586.  
  587. void menusort(void)
  588. {
  589.     while (1) {
  590.         printf("1)Сортировать продукцию\n2)Сортировать заказы\n0)Выйти\n");
  591.         scanf(" %c", &block);
  592.         switch (block)
  593.         {
  594.         case '1':
  595.             SC
  596.                 sort();
  597.             system("cls");
  598.             break;
  599.         case '2':
  600.             SC
  601.                 sortZak();
  602.             system("cls");
  603.             break;
  604.         case '0':
  605.             return;
  606.         default:
  607.             system("cls");
  608.             break;
  609.         }
  610.     }
  611.     system("cls");
  612. }
  613.  
  614. void menusearch(void)
  615. {
  616.     while (1) {
  617.         printf("1)Поиск продукции\n2)Поиск заказов\n0)Выйти\n");
  618.         scanf(" %c", &block);
  619.         switch (block)
  620.         {
  621.         case '1':
  622.             SC
  623.                 search();
  624.             SP
  625.                 system("cls");
  626.             break;
  627.         case '2':
  628.             SC
  629.                 searchZak();
  630.             SP
  631.                 system("cls");
  632.             break;
  633.         case '0':
  634.             return;
  635.         default:
  636.             system("cls");
  637.             break;
  638.         }
  639.     }
  640.     system("cls");
  641. }
  642.  
  643. void menuSKR(void)
  644. {
  645.     while (1) {
  646.         printf("1)Ввести продукцию\n2)Ввести заказы\n0)Выйти\n");
  647.         scanf(" %c", &block);
  648.         switch (block)
  649.         {
  650.         case '1':
  651.             SC
  652.                 vvod();
  653.             system("cls");
  654.             break;
  655.         case '2':
  656.             SC
  657.                 vvodZak();
  658.             system("cls");
  659.             break;
  660.         case '0':
  661.             return;
  662.         default:
  663.             system("cls");
  664.             break;
  665.         }
  666.     }
  667.     system("cls");
  668. }
  669.  
  670. void sortZak(void)
  671. {
  672.     struct struct2 tmp;
  673.     int temp, i, j;
  674.     for (i = 0; i < structsize1 - 1; i++) {
  675.         temp = i;
  676.         for (j = i + 1; j < structsize1; j++) {
  677.             if (clp[j].stom > clp[temp].stom) {
  678.                 temp = j;
  679.             }
  680.         }
  681.         tmp = clp[temp];
  682.         clp[temp] = clp[i];
  683.         clp[i] = tmp;
  684.     }
  685.     return;
  686. }
  687.  
  688. void zapis(void)
  689. {
  690.     FILE *clients;
  691.     clients = fopen("clients", "w+b");
  692.     fwrite(&structsize1, sizeof(int), 1, clients);
  693.     for (int i = 0; i < structsize1; i++)
  694.         fwrite(&client[i], sizeof(struct struct1), 1, clients);
  695.     fclose(clients);
  696.     getchar();
  697. }
  698. void schitat(void)
  699. {
  700.     FILE *clients;
  701.     clients = fopen("clients", "rb");
  702.     fread(&structsize1, sizeof(int), 1, clients);
  703.     for (int i = 0; i < structsize1; i++)
  704.         fread(&client[i], sizeof(struct struct1), 1, clients);
  705.     fclose(clients);
  706.     getchar();
  707. }
  708.  
  709. void zapisZak(void) {
  710.     FILE *zaks;
  711.     zaks = fopen("zaks", "w+b");
  712.     fwrite(&structsize1, sizeof(int), 1, zaks);
  713.     for (int i = 0; i < structsize1; i++)
  714.         fwrite(&clp[i], sizeof(struct struct2), 1, zaks);
  715.     fclose(zaks);
  716.     getchar();
  717. }
  718. void schitatZak(void) {
  719.     FILE *zaks;
  720.     zaks = fopen("zaks", "r+b");
  721.     fread(&structsize1, sizeof(int), 1, zaks);
  722.     for (int i = 0; i < structsize1; i++)
  723.         fread(&clp[i], sizeof(struct struct2), 1, zaks);
  724.     fclose(zaks);
  725.     getchar();
  726. }
  727. void deleteePol(void)
  728. {
  729.     SC
  730.         while (1) {
  731.             printf("1)Создать нового пользователя\n");
  732.             printf("2)Удалить пользователя\n");
  733.             printf("3)Изменить пароль\n");
  734.             printf("0)Назад\n");
  735.             scanf(" %c", &block);
  736.             switch (block)
  737.             {
  738.             case '1':
  739.                 SC
  740.                    
  741.                     dobavitPIP();
  742.                 SP
  743.                     system("cls");
  744.                 break;
  745.             case '2':
  746.                 SC
  747.                     schitatPIP();
  748.                     udalitPIP();
  749.                 SP
  750.                     system("cls");
  751.                 break;
  752.             case '0':
  753.                 return;
  754.             default:
  755.                 system("cls");
  756.                 break;
  757.             }
  758.         }
  759.     system("cls");
  760.     SP
  761. }
  762.  
  763. void deleteemenu(void)
  764. {
  765.     while (1) {
  766.         printf("1)Удалить продукцию\n2)Удалить заказ\n0)Выйти\n");
  767.         scanf(" %c", &block);
  768.         switch (block)
  769.         {
  770.         case '1':
  771.             SC
  772.                 deletee();
  773.             SP
  774.                 system("cls");
  775.             break;
  776.         case '2':
  777.             SC
  778.                 deleteeZak();
  779.             SP
  780.                 system("cls");
  781.             break;
  782.         case '0':
  783.             return;
  784.         default:
  785.             system("cls");
  786.             break;
  787.         }
  788.     }
  789.     system("cls");
  790. }
  791.  
  792. void search(void) {
  793.     vivodProd();
  794.     printf("Искать\n1)Тип продукции\n2)Количество\n3)Цену\n4)Дату посл. изменения\n");
  795.     scanf(" %c", &choice);
  796.     char searchvar[30];
  797.     int flag = 0, searchint;
  798.     switch (choice)
  799.     {
  800.     case '1':
  801.         kol = 0;
  802.         printf("?-> ");
  803.         fflush(stdin);
  804.         gets(searchvar);
  805.         gets(searchvar);
  806.         puts("");
  807.         for (i = 0; i < structsize; i++) {
  808.             if (strcmp(searchvar, client[i].prod) == 0) {
  809.                 kol++;
  810.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\n\n", client[i].prod, client[i].kolv, client[i].sum, client[i].data.dataa);
  811.             }
  812.         }
  813.         break;
  814.     case '2':
  815.         kol = 0;
  816.         printf("?-> ");
  817.         fflush(stdin);
  818.         gets(searchvar);
  819.         gets(searchvar);
  820.         puts("");
  821.         for (i = 0; i < structsize; i++) {
  822.             if (strcmp(searchvar, client[i].kolv) == 0) {
  823.                 kol++;
  824.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\n\n", client[i].prod, client[i].kolv, client[i].sum, client[i].data.dataa);
  825.             }
  826.         }
  827.         break;
  828.     case '3':
  829.         kol = 0;
  830.         printf("?-> ");
  831.         scanf("%d", &searchint);
  832.         puts("");
  833.         for (i = 0; i < structsize; i++) {
  834.             if (searchint == client[i].sum) {
  835.                 kol++;
  836.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\n\n", client[i].prod, client[i].kolv, client[i].sum, client[i].data.dataa);
  837.             }
  838.         }
  839.         break;
  840.     case '4':
  841.         kol = 0;
  842.         printf("?-> ");
  843.         fflush(stdin);
  844.         gets(searchvar);
  845.         gets(searchvar);
  846.         puts("");
  847.         for (i = 0; i < structsize; i++) {
  848.             if (strcmp(searchvar, client[i].data.dataa) == 0) {
  849.                 kol++;
  850.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\n\n", client[i].prod, client[i].kolv, client[i].sum, client[i].data.dataa);
  851.             }
  852.         }
  853.         break;
  854.     default:
  855.         system("cls");
  856.         break;
  857.     }
  858.     return;
  859. }
  860.  
  861. void searchZak(void) {
  862.     vivodZakaz();
  863.     printf("Искать\n1)Тип продукции\n2)Количество\n3)Цену\n4)Дату посл. изменения\n5)Адрес\n0)Выход\n");
  864.     scanf(" %c", &choice);
  865.     char searchvar2[30];
  866.     int flag2 = 0, searchint2;
  867.     switch (choice)
  868.     {
  869.     case '1':
  870.         kol = 0;
  871.         printf("?-> ");
  872.         fflush(stdin);
  873.         gets(searchvar2);
  874.         gets(searchvar2);
  875.         puts("");
  876.         for (i = 0; i < structsize1; i++) {
  877.             if (strcmp(searchvar2, clp[i].prodz) == 0) {
  878.                 kol++;
  879.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\nАдрес %s\n\n", clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  880.             }
  881.         }
  882.         break;
  883.     case '2':
  884.         kol = 0;
  885.         printf("?-> ");
  886.         fflush(stdin);
  887.         gets(searchvar2);
  888.         gets(searchvar2);
  889.         puts("");
  890.         for (i = 0; i < structsize1; i++) {
  891.             if (strcmp(searchvar2, clp[i].kolvz) == 0) {
  892.                 kol++;
  893.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\nАдрес %s\n\n", clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  894.             }
  895.         }
  896.         break;
  897.     case '3':
  898.         kol = 0;
  899.         printf("?-> ");
  900.         scanf("%d", &searchint2);
  901.         puts("");
  902.         for (i = 0; i < structsize1; i++) {
  903.             if (searchint2 == clp[i].stom) {
  904.                 kol++;
  905.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\nАдрес %s\n\n", clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  906.             }
  907.         }
  908.         break;
  909.     case '4':
  910.         kol = 0;
  911.         printf("?-> ");
  912.         fflush(stdin);
  913.         gets(searchvar2);
  914.         gets(searchvar2);
  915.         puts("");
  916.         for (i = 0; i < structsize1; i++) {
  917.             if (strcmp(searchvar2, clp[i].dataz.dataa) == 0) {
  918.                 kol++;
  919.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\nАдрес %s\n\n", clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  920.             }
  921.         }
  922.         break;
  923.     case '5':
  924.         kol = 0;
  925.         printf("?-> ");
  926.         fflush(stdin);
  927.         gets(searchvar2);
  928.         gets(searchvar2);
  929.         puts("");
  930.         for (i = 0; i < structsize1; i++) {
  931.             if (strcmp(searchvar2, clp[i].adres) == 0) {
  932.                 kol++;
  933.                 printf("Продукция %s\nКоличество %s\nЦена %d\nДата посл. изменения %s\nАдрес %s\n\n", clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  934.             }
  935.         }
  936.         break;
  937.     case '0':
  938.         return;
  939.     default:
  940.         system("cls");
  941.         break;
  942.     }
  943.     return;
  944. }
  945.  
  946. void change(void) {
  947.     vivodProd();
  948.     printf("\nИзменить\n");
  949.     scanf("%d", &i);
  950.     if (i<1 || i>structsize) {
  951.         printf("ошибка\n");
  952.         return;
  953.     }
  954.     printf("1)Продукция \n2)Количество\n3)Цена\n4)Дата\n");
  955.     scanf(" %c", &choice);
  956.     switch (choice)
  957.     {
  958.     case '1':
  959.         printf("Введите продукцию\n");
  960.         fflush(stdin);
  961.         gets(client[i - 1].prod);
  962.         gets(client[i - 1].prod);
  963.         break;
  964.     case '2':
  965.         printf("Введите количество\n ");
  966.         fflush(stdin);
  967.         gets(client[i - 1].kolv);
  968.         gets(client[i - 1].kolv);
  969.         break;
  970.     case '3':
  971.         printf("Введите цену\n ");
  972.         scanf("%d", &client[i - 1].sum);
  973.         break;
  974.     case '4':
  975.         printf("Введите дату\n");
  976.         fflush(stdin);
  977.         gets(client[i - 1].data.dataa);
  978.         gets(client[i - 1].data.dataa);
  979.         break;
  980.     default:
  981.         system("cls");
  982.         break;
  983.     }
  984.     return;
  985. }
  986.  
  987. void changemenu(void)
  988. {
  989.     while (1) {
  990.         printf("1)Изменить продукцию\n2)Изменить заказы\n0)Выйти\n");
  991.         scanf(" %c", &block);
  992.         switch (block)
  993.         {
  994.         case '1':
  995.             SC
  996.                 change();
  997.             system("cls");
  998.             break;
  999.         case '2':
  1000.             SC
  1001.                 changeZak();
  1002.             system("cls");
  1003.             break;
  1004.         case '0':
  1005.             return;
  1006.         default:
  1007.             system("cls");
  1008.             break;
  1009.         }
  1010.     }
  1011.     system("cls");
  1012. }
  1013.  
  1014. void changeZak(void)
  1015. {
  1016.     vivodZakaz();
  1017.     char proverka[30];
  1018.     int data[3];
  1019.     printf("\nИзменить\n");
  1020.     scanf("%d", &i);
  1021.     if (i<1 || i>structsize1) {
  1022.         printf("ошибка\n");
  1023.         return;
  1024.     }
  1025.     printf("1)Продукция \n2)Количество\n3)Цена\n4)Дата\n5)Адрес\n0)Выход");
  1026.     scanf(" %c", &choice);
  1027.     switch (choice)
  1028.     {
  1029.     case '1':
  1030.         printf("Введите продукцию\n");
  1031.         fflush(stdin);
  1032.         gets(clp[i - 1].prodz);
  1033.         gets(clp[i - 1].prodz);
  1034.         break;
  1035.     case '2':
  1036.         printf("Введите количество\n ");
  1037.         fflush(stdin);
  1038.         gets(clp[i - 1].kolvz);
  1039.         gets(clp[i - 1].kolvz);
  1040.         break;
  1041.     case '3':
  1042.         printf("Введите цену\n ");
  1043.         scanf("%d", &clp[i - 1].stom);
  1044.         break;
  1045.     case '4':
  1046.         printf("Введите дату\n");
  1047.         fflush(stdin);
  1048.         gets(clp[i - 1].dataz.dataa);
  1049.         gets(clp[i - 1].dataz.dataa);
  1050.         if (clp[i - 1].dataz.dataa[2] != '.' || clp[i - 1].dataz.dataa[5] != '.' || strlen(clp[i - 1].dataz.dataa) != 10) {
  1051.             printf("Ошибка ввода\n");
  1052.             system("pause");
  1053.             return;
  1054.         }
  1055.         proverka[0] = clp[i - 1].dataz.dataa[0];
  1056.         proverka[1] = clp[i - 1].dataz.dataa[1];
  1057.         data[0] = atoi(proverka);
  1058.         for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  1059.         proverka[pro]=' ';
  1060.     }
  1061.         proverka[0] = clp[i - 1].dataz.dataa[3];
  1062.         proverka[1] = clp[i - 1].dataz.dataa[4];
  1063.         data[1] = atoi(proverka);
  1064.         for (pro=0;pro<strlen(clp[structsize1].dataz.dataa);pro++){
  1065.         proverka[pro]=' ';
  1066.     }
  1067.         proverka[0] = clp[i - 1].dataz.dataa[6];
  1068.         proverka[1] = clp[i - 1].dataz.dataa[7];
  1069.         proverka[2] = clp[i - 1].dataz.dataa[8];
  1070.         proverka[3] = clp[i - 1].dataz.dataa[9];
  1071.         data[2] = atoi(proverka);
  1072.         if (data[0] > 31 || data[0] < 0 || data[1]>12 || data[1] < 0 || data[2]>2020 || data[2] < 2019) {
  1073.             printf("Ошибка ввода\n");
  1074.             system("pause");
  1075.             return;
  1076.         }
  1077.         break;
  1078.     case '5':
  1079.         printf("Введите адрес\n");
  1080.         fflush(stdin);
  1081.         gets(clp[i - 1].adres);
  1082.         gets(clp[i - 1].adres);
  1083.         break;
  1084.     case '0':
  1085.         return;
  1086.     default:
  1087.         system("cls");
  1088.         break;
  1089.     }
  1090.     return;
  1091. }
  1092.  
  1093. void deletee(void) {
  1094.     vivodProd();
  1095.     printf("Доступно для удаления %d\nУдалить поле №\n", structsize);
  1096.     scanf("%d", &j);
  1097.     if (j<1 || j>structsize) {
  1098.         printf("Такой структуры не существует\n");
  1099.         return;
  1100.     }
  1101.     for (i = j - 1; i < structsize; i++) {
  1102.         client[i] = client[i + 1];
  1103.         structsize--;
  1104.     }
  1105.     return;
  1106. }
  1107.  
  1108. void deleteeZak(void)
  1109. {
  1110.     vivodZakaz();
  1111.     printf("Доступно для удаления %d\nУдалить поле №\n", structsize1);
  1112.     scanf("%d", &j);
  1113.     if (j<1 || j>structsize1) {
  1114.         printf("Такой структуры не существует\n");
  1115.         return;
  1116.     }
  1117.     for (i = j - 1; i < structsize1; i++) {
  1118.         clp[i] = clp[i + 1];
  1119.         structsize1--;
  1120.     }
  1121.     return;
  1122.  
  1123. }
  1124.  
  1125. void vivodProd(void) {
  1126.     if (structsize == 0)
  1127.     {
  1128.         printf("Введите что нить\n");
  1129.     }
  1130.     else {
  1131.  
  1132.         puts("|   Тип Продукции   |     Количество    | Цена всей партии |  Цена за десяток  |   Дата изменения  |");
  1133.         puts("|___________________|___________________|__________________|___________________|___________________|");
  1134.         for (i = 0; i < structsize; i++)
  1135.         {
  1136.  
  1137.             printf("|%d)%17s|%19s|%14d BYN|%15d BYN|%19s|", i + 1, client[i].prod, client[i].kolv, client[i].sum, client[i].sum, client[i].data.dataa);
  1138.             printf("\n");
  1139.             puts("|___________________|___________________|__________________|___________________|___________________|");
  1140.         }
  1141.     }
  1142.     return;
  1143. }
  1144. void vivodtopProd(void) {
  1145.     if (structsize == 0)
  1146.     {
  1147.         printf("Введите что нить\n");
  1148.     }
  1149.     else {
  1150.  
  1151.         puts("|   Тип Продукции   |     Количество    | Цена всей партии |  Цена за десяток  |   Дата изменения  |");
  1152.         puts("|___________________|___________________|__________________|___________________|___________________|");
  1153.         for (i = 0; i < 3; i++)
  1154.         {
  1155.  
  1156.             printf("|%d)%17s|%19s|%14d BYN|%15d BYN|%19s|", i + 1, client[i].prod, client[i].kolv, client[i].sum, client[i].sum, client[i].data.dataa);
  1157.             printf("\n");
  1158.             puts("|___________________|___________________|__________________|___________________|___________________|");
  1159.         }
  1160.     }
  1161.     return;
  1162. }
  1163.  
  1164. void vivodtopZakaz(void) {
  1165.     if (structsize1 == 0)
  1166.     {
  1167.         printf("Введите что нить\n");
  1168.     }
  1169.     else {
  1170.         puts("___________________________________________________________________________________________________");
  1171.         puts("|   Тип Продукции   |     Количество    |    Общая цена    |     Дата заказа   |   Адрес доставки  |");
  1172.         puts("|___________________|___________________|__________________|___________________|___________________|");
  1173.         for (i = 0; i < 3; i++)
  1174.         {
  1175.  
  1176.             printf("|%d)%17s|%19s|%14d BYN|%19s|%19s|", i + 1, clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  1177.             printf("\n");
  1178.             puts("|___________________|___________________|__________________|___________________|___________________|");
  1179.         }
  1180.     }
  1181.     return;
  1182. }
  1183. void vivodZakaz(void)
  1184. {
  1185.     if (structsize1 == 0)
  1186.     {
  1187.         printf("Введите что нить\n");
  1188.     }
  1189.     else {
  1190.         puts("___________________________________________________________________________________________________");
  1191.         puts("|   Тип Продукции   |     Количество    |    Общая цена    |     Дата заказа   |   Адрес доставки  |");
  1192.         puts("|___________________|___________________|__________________|___________________|___________________|");
  1193.         for (i = 0; i < structsize1; i++)
  1194.         {
  1195.  
  1196.             printf("|%d)%17s|%19s|%14d BYN|%19s|%19s|", i + 1, clp[i].prodz, clp[i].kolvz, clp[i].stom, clp[i].dataz.dataa, clp[i].adres);
  1197.             printf("\n");
  1198.             puts("|___________________|___________________|__________________|___________________|___________________|");
  1199.         }
  1200.     }
  1201.     return;
  1202. }
  1203.  
  1204. void menuvivod(void)
  1205. {
  1206.     while (1) {
  1207.         printf("1)Вывести продукцию\n2)Вывести заказы\n0)Выйти\n");
  1208.         scanf(" %c", &block);
  1209.         switch (block)
  1210.         {
  1211.         case '1':
  1212.             SC
  1213.                 vivodProd();
  1214.             SP
  1215.                 system("cls");
  1216.             break;
  1217.         case '2':
  1218.             SC
  1219.                 vivodZakaz();
  1220.             SP
  1221.                 system("cls");
  1222.             break;
  1223.         case '0':
  1224.             return;
  1225.         default:
  1226.             system("cls");
  1227.             break;
  1228.         }
  1229.     }
  1230.     system("cls");
  1231. }
  1232.  
  1233. void menuPol(void)
  1234. {
  1235.     while (1) {
  1236.         printf("МЕНЮ ПОЛЬЗОВАТЕЛЯ\n1)Просмотреть продукцию\n2)Просмотреть заказы\n3)Просметреть топ продукции\n4)просмотреть топ заказов\n5)Отсортировать продукцию\n6)Найти\n7)Отсортировать заказы\n0)Выйти\n");
  1237.         scanf(" %c", &choice);
  1238.         switch (choice)
  1239.         {
  1240.         case '1':
  1241.             if (structsize < 1) {
  1242.                 SC
  1243.                     printf("Администратор не в нёс данные либо список пуст\n");
  1244.                 SP
  1245.                     SC
  1246.                     break;
  1247.             }
  1248.             SC
  1249.                 vivodProd();
  1250.  
  1251.             SP
  1252.                 SC
  1253.                 break;
  1254.         case '2':
  1255.             if (structsize1 < 1) {
  1256.                 SC
  1257.                     printf("Администратор не в нёс данные либо список пуст\n");
  1258.                 SP
  1259.                     SC
  1260.                     break;
  1261.             }
  1262.             SC
  1263.                 vivodZakaz();
  1264.  
  1265.             SP
  1266.                 SC
  1267.                 break;
  1268.         case '3':
  1269.             if (structsize < 1) {
  1270.                 SC
  1271.                     printf("Администратор не в нёс данные либо список пуст\n");
  1272.                 SP
  1273.                     SC
  1274.                     break;
  1275.             }
  1276.             SC
  1277.                 vivodtopProd();
  1278.  
  1279.             SP
  1280.                 SC
  1281.                 break;
  1282.         case '4':
  1283.             if (structsize1 < 1) {
  1284.                 SC
  1285.                     printf("Администратор не в нёс данные либо список пуст\n");
  1286.                 SP
  1287.                     SC
  1288.                     break;
  1289.             }
  1290.             SC
  1291.                 vivodtopZakaz();
  1292.  
  1293.             SP
  1294.                 SC
  1295.                 break;
  1296.         case '5':
  1297.             if (structsize < 1) {
  1298.                 SC
  1299.                     printf("Администратор не в нёс данные либо список пуст\n");
  1300.                 SP
  1301.                     SC
  1302.                     break;
  1303.             }
  1304.             SC
  1305.                 sort();
  1306.             break;
  1307.         case '6':
  1308.             if (structsize < 1) {
  1309.                 SC
  1310.                     printf("Администратор не в нёс данные либо список пуст\n");
  1311.                 SP
  1312.                     SC
  1313.                     break;
  1314.             }
  1315.             SC
  1316.                 search();
  1317.             SP
  1318.                 SC
  1319.                 break;
  1320.         case '7':
  1321.             if (structsize1 < 1) {
  1322.                 SC
  1323.                     printf("Администратор не в нёс данные либо список пуст\n");
  1324.                 SP
  1325.                     SC
  1326.                     break;
  1327.             }
  1328.             SC
  1329.                 sortZak();
  1330.             SP
  1331.                 SC
  1332.                 break;
  1333.         case '0':
  1334.             zapis();
  1335.             zapisatPIP();
  1336.             zapisZak();
  1337.             SC
  1338.                 menuexit();
  1339.             system("cls");
  1340.             break;
  1341.         default:
  1342.             system("cls");
  1343.             break;
  1344.         }
  1345.     }
  1346.     return;
  1347. }
  1348.  
  1349. void menuexit(void)
  1350. {
  1351.     while (1) {
  1352.         printf("Выйти в меню пользователей?\n1)Да\n2)Нет\n");
  1353.         scanf(" %c", &block);
  1354.         switch (block)
  1355.         {
  1356.         case '1':
  1357.             SC
  1358.                 menu();
  1359.             system("cls");
  1360.             break;
  1361.         case '2':
  1362.             return;
  1363.             break;
  1364.         default:
  1365.             system("cls");
  1366.             break;
  1367.         }
  1368.     }
  1369.     system("cls");
  1370. }
  1371.  
  1372. void exitProg(void)
  1373. {
  1374.     while (1) {
  1375.         printf("Выйти из программы?\n1)Да\n2)Нет\n");
  1376.         scanf(" %c", &block);
  1377.         switch (block)
  1378.         {
  1379.         case '1':
  1380.             exit(0);
  1381.             SC
  1382.         case '2':
  1383.             SC
  1384.                 menu();
  1385.             SC
  1386.                 break;
  1387.         default:
  1388.             system("cls");
  1389.             break;
  1390.         }
  1391.     }
  1392.     system("cls");
  1393. }
  1394.  
  1395. int main(void) {
  1396.     SetConsoleCP(1251);
  1397.     SetConsoleOutputCP(1251);
  1398.     /*pipsize = 2;
  1399.     strcpy(pip[0].login, "sask");
  1400.     strcpy(pip[0].parol, "228");
  1401.     strcpy(pip[0].role, "admin");
  1402.     strcpy(pip[1].login, "asd");
  1403.     strcpy(pip[1].parol, "asd");
  1404.     strcpy(pip[1].role, "user");
  1405.     zapisatPIP();
  1406.     printf("Выход из программы\n");
  1407.     Sleep(1000);
  1408.     return 0;*/
  1409.     menu();
  1410. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement