Advertisement
kxcoze

Tanya_lists

Nov 27th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <windows.h>
  5. #include <string>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. struct Form {
  11.     int age;
  12.     char pol[2];
  13.     char edu[20];
  14.     char otvet[4];
  15.     Form* next;
  16. };
  17.  
  18. char* fileName = new char[50];
  19. FILE* fl;
  20.  
  21. struct dyn_list {
  22.     Form* head = NULL; // Первый элемент (голова) списка
  23.     Form* tail; // Последний элемент (хвост) списка
  24. };
  25.  
  26. short menu();
  27.  
  28. void constr_list(dyn_list& l);
  29. bool chk_empty(dyn_list l);
  30. void comp_in(dyn_list& l, int n, char* nu, char* st, char* t);
  31. void news(dyn_list& vars1);
  32. void print(dyn_list l);
  33. int find_m(dyn_list l, int age, const char* pol, const char* edu, const char* otvet);
  34. int find_s(dyn_list l, int age, const char* pol, const char* edu, const char* otvet);
  35. void find(dyn_list l);
  36.  
  37.  
  38. int main() {
  39.     SetConsoleCP(1251);
  40.     SetConsoleOutputCP(1251);
  41.     setlocale(LC_ALL, "Rus");
  42.     char* buf_age = new char[3];
  43.     char* buf_pol = new char[2];
  44.     char* buf_edu = new char[20];
  45.     char* buf_otvet = new char[4];
  46.  
  47.     dyn_list vars; // Динамический список
  48.  
  49.     cout << "Работаем с базой данных! ";
  50.     cout << "Введите имя файла -> ";
  51.     cin >> fileName;
  52.     ifstream* inp = new ifstream(fileName);
  53.  
  54.     fopen_s(&fl, fileName, "r");
  55.     if (!inp->good()) {
  56.         cout << "Ошибка в открытии файла!\n";
  57.         system("pause");
  58.         return 0;
  59.     }
  60.    
  61.  
  62.     cout << "\nИнформация, содержащаяся в исходном файле:\n" << endl;
  63.     while (!inp->eof()) {
  64.         inp->getline(buf_age, 3);
  65.         cout << buf_age << " ";
  66.         int age = atoi(buf_age);
  67.         inp->getline(buf_pol, 2);
  68.         cout << buf_pol << " ";
  69.         inp->getline(buf_edu, 20);
  70.         cout << buf_edu << " ";
  71.         inp->getline(buf_otvet, 20);
  72.         cout << buf_otvet << " " << endl;
  73.         comp_in(vars, age, buf_pol, buf_edu, buf_otvet);
  74.     }
  75.     system("pause");
  76.     inp->close();
  77.     short choise;
  78.  
  79.     do {
  80.         system("cls");
  81.         choise = menu();
  82.         switch (choise) {
  83.         case 1:
  84.             system("cls");
  85.             news(vars);
  86.             _getch();
  87.             system("cls");
  88.             break;
  89.         case 2:
  90.             system("cls");
  91.             print(vars);
  92.             _getch();
  93.             system("cls");
  94.             break;
  95.         case 3:
  96.             system("cls");
  97.             find(vars);
  98.             _getch();
  99.             system("cls");
  100.             break;
  101.         case 0:
  102.             cout << "До свидания!!!" << endl;
  103.             break;
  104.         default:
  105.             cout << "Неверный выбор!!!" << endl;
  106.             cout << "\n\nPress Enter..." << endl;
  107.             _getch();
  108.             system("cls");
  109.             break;
  110.         }
  111.     } while (choise);
  112.     cout << endl;
  113.     delete[] buf_pol;
  114.     delete[] buf_edu;
  115.     delete[] buf_otvet;
  116.     return 0;
  117. }
  118.  
  119. short menu() {
  120.     short v;
  121.     cout << "           МЕНЮ" << endl;
  122.     cout << " Введите [1] для заполнения анкеты\n";
  123.     cout << " Введите [2] для просмотра всех анкет\n";
  124.     cout << " Введите [3] для анализа анкет\n";
  125.     cout << " Введите [0] для выхода\n";
  126.     cout << " Пункт: ";
  127.     cin >> v;
  128.     return v;
  129. }
  130.  
  131. void constr_list(dyn_list& l) {
  132.     l.head = NULL;
  133. }
  134.  
  135. // Проверка списка на пустоту
  136. bool chk_empty(dyn_list l) {
  137.     return (l.head == NULL);
  138. }
  139.  
  140. // Включение в список нового компонента
  141. void comp_in(dyn_list& l, int n, char* nu, char* st, char* t) {
  142.     Form* c = new Form();
  143.     c->age = n;
  144.     //strcpy_s(c->age, 4, n);
  145.     strcpy_s(c->pol, 2, nu);
  146.     strcpy_s(c->edu, 20, st);
  147.     strcpy_s(c->otvet, 4, t);
  148.     c->next = NULL;
  149.     if (chk_empty(l))
  150.         l.head = c;
  151.     else
  152.         l.tail->next = c;
  153.     l.tail = c;
  154. }
  155.  
  156. //ФУНКЦИЯ НОВЫЕ ЗАПИСИ
  157. void news(dyn_list& vars1) {
  158.     cout << "Введите возраст: ";
  159.     int buf_age;
  160.     cin >> buf_age;
  161.     cout << "Введите пол (м/ж): ";
  162.     char buf_pol[2];
  163.     cin >> buf_pol;
  164.     cout << "Образование (начальное, среднее, высшее): ";
  165.     char buf_edu[20];
  166.     cin >> buf_edu;
  167.     cout << "Ответ на вопрос анкеты (да/нет): ";
  168.     char buf_otvet[4];
  169.     cin >> buf_otvet;
  170.     comp_in(vars1, buf_age, buf_pol, buf_edu, buf_otvet);
  171.     cout << "\nАнкета успешно добавлена в список";
  172. }
  173.  
  174. void print(dyn_list l) {
  175.     while (l.head != NULL) {
  176.         cout << "Возраст: " << l.head->age << endl;
  177.         cout << "Пол: " << l.head->pol << endl;
  178.         cout << "Образование: " << l.head->edu << endl;
  179.         cout << "Ответ на вопрос анкеты: " << l.head->otvet << endl << endl;
  180.         l.head = l.head->next;
  181.     }
  182. }
  183.  
  184. //Поиск старших
  185. int find_s(dyn_list l, int age, const char* pol, const char* edu, const char* otvet) {
  186.     bool flak = false;
  187.     int numk = 0;
  188.     while (l.head != NULL) {
  189.         if (l.head->age > age)
  190.             if (strcmp(l.head->pol, pol) == 0)
  191.                 if (strcmp(l.head->edu, edu) == 0)
  192.                     if (strcmp(l.head->otvet, otvet) == 0) {
  193.                         cout << "Возраст: " << l.head->age << endl;
  194.                         cout << "Пол: " << l.head->pol << endl;
  195.                         cout << "Образование: " << l.head->edu << endl;
  196.                         cout << "Ответ: " << l.head->otvet << endl << endl;
  197.                         flak = true;
  198.                         ++numk;
  199.                     }
  200.         l.head = l.head->next;
  201.     }
  202.     if (!flak)
  203.         cout << "Нет таких анкет\n";
  204.     else {
  205.         cout << "Таких анкет в списке: " << numk << endl;
  206.         cout << "\nНажмите любую клавишу, чтобы продолжить работу!";
  207.     }
  208.     return 0;
  209. }
  210.  
  211. //Поиск младших
  212. int find_m(dyn_list l, int age, const char* pol, const char* edu, const char* otvet) {
  213.     bool flak = false;
  214.     int numk = 0;
  215.     while (l.head) {
  216.         if (l.head->age < age)
  217.             if (strcmp(l.head->pol, pol) == 0)
  218.                 if (strcmp(l.head->edu, edu) == 0)
  219.                     if (strcmp(l.head->otvet, otvet) == 0) {
  220.                         cout << "Возраст: " << l.head->age << endl;
  221.                         cout << "Пол: " << l.head->pol << endl;
  222.                         cout << "Образование: " << l.head->edu << endl;
  223.                         cout << "Ответ: " << l.head->otvet << endl << endl;
  224.                         flak = true;
  225.                         ++numk;
  226.                     }
  227.         l.head = l.head->next;
  228.     }
  229.     if (!flak)
  230.         cout << "Нет таких анкет\n";
  231.     else {
  232.         cout << "Таких анкет в списке: " << numk << endl;
  233.         cout << "\nНажмите любую клавишу, чтобы продолжить работу!";
  234.     }
  235.     return 0;
  236. }
  237.  
  238. void find(dyn_list l) {
  239.     int v;
  240.  
  241.     cout << "[1] - Cколько мужчин старше 40 лет, имеющих высшее образование, ответили ДА на вопрос анкеты\n";
  242.     cout << "[2] - Cколько женщин моложе 30 лет, имеющих среднее образование ответили НЕТ на вопрос анкеты\n";
  243.     cout << "[3] - Cколько мужчин моложе 25 лет, имеющих начальное образование, ответили ДА на вопрос анкеты\n";
  244.     cin >> v;
  245.  
  246.     switch (v) {
  247.     case 1:
  248.         system("cls");
  249.         find_s(l, 40, "м", "высшее", "да");
  250.         break;
  251.     case 2:
  252.         system("cls");
  253.         find_m(l, 30, "ж", "среднее", "нет");
  254.         break;
  255.     case 3:
  256.         system("cls");
  257.         find_m(l, 25, "м", "начальное", "да");
  258.         break;
  259.     default:
  260.         cout << "Неверный выбор!!!" << endl;
  261.         cout << "\n\nPress Enter..." << endl;
  262.         _getch();
  263.         system("cls");
  264.         break;
  265.     }
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement