SHARE
TWEET

Untitled

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