Advertisement
kxcoze

stepan_

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