SHARE
TWEET

Untitled

a guest Oct 21st, 2019 79 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <string>
  5. #include <string.h>
  6. #include <windows.h>
  7. #include <cstring>
  8. #include <conio.h>
  9. #include <time.h>
  10. #include <stdlib.h>
  11. #include <ctime>
  12.  
  13. using namespace std;
  14.  
  15. const int M = 50;//размер массива
  16.  
  17. struct books
  18. {
  19.     string fio; // фио автора
  20.     string name; //название книг
  21.     int year;
  22. };
  23.  
  24. struct author
  25. {
  26.     string nameBook;
  27.     int yearBook;
  28. };
  29.  
  30. struct perechen
  31. {
  32.     int year;//год издания книги
  33.     int quantity;//количество авторов, издавших книги в year год
  34. };
  35.  
  36. void inputMasBoooksFile(books x[], int& n); //ввод из файла
  37. void outputMasBook(books x[], int n); //вывод исходного массива на экран
  38. void addbooks(books x[], int& n); //добавление записи
  39. void delelteBooks(books x[], int& n); //удаление записи
  40. void sortyear(books x[], int n);//сортировка исходного массива по году
  41. void sortbookfio(books y[], int k);//сортировка исходного массива по фамилии и году издания
  42. void outputSourceMassToFile(books x[], int n);//запись исходного массива в файл
  43. void poiskyear(books x[], int n, author y[], int& m); //создание поиска
  44. void outputResultArray(author x[], int n);//вывод поиска (выходного массива) на экран
  45. void sortname(author x[], int n);//сортировка поиска (выходного массива) по названию книг
  46. void outputMasBooksFilePoisk(author x[], int n);//запись поиска (выходного массива) в файл
  47. void createPerechen(books book[], int n, perechen y[], int& m);//создание перечня
  48. void outputPerechen(perechen x[], int m);//вывод перечня на экран
  49. void outputSourcePerechenToFile(perechen x[], int m);//запись исходного перечня на экран
  50. void sortPerechYear(perechen x[], int m);//сортировка переченя по году издания в порядке возрастания.
  51. void sortPerechQuantity(perechen x[], int m);//сортировка переченя по количеству авторов в порядке убывания.
  52. void outputSortPerechenToFile(perechen x[], int m);//запись результата работы с перечнем на экран
  53.  
  54. int main()
  55. {
  56.     SetConsoleCP(1251);// для ввода русского языка
  57.     SetConsoleOutputCP(1251); // для вывода русского языка
  58.     setlocale(LC_ALL, "rus");
  59.  
  60.     books a[M];//исходный массив
  61.     author b[M];//выходной массив
  62.     perechen c[M];//перечень
  63.  
  64.     int m, l, t, n;//m - действительный размер исходного массива; l - действительный размер выходного массива; n - действительный размер перечня
  65.     bool exit = true;
  66.  
  67.     while (exit)
  68.     {
  69.         system("CLS");
  70.         cout << " МЕНЮ \n";
  71.         cout << "1. Заполнить исходный массив.\n";
  72.         cout << "2. Вывести исходную таблицу записей на экран.\n";
  73.         cout << "3. Добавить книгу.\n";
  74.         cout << "4. Удалить книгу.\n";
  75.         cout << "5. Отсортировать исходный массив по году издания в порядке возрастания.\n";
  76.         cout << "6. Отсортировать исходный массив по фио в алфавитном порядке, а при совпадении фио по году издания в порядке убывания.\n";
  77.         cout << "7.Запись исходного массива в файл.\n";
  78.         cout << "8. Для данного автора найти его самую раннюю и самую последнюю книгу по году издания(выходной массив).\n";
  79.         cout << "9. Вывести результа поиска на экран.\n";
  80.         cout << "10. Отсортировать выходной массив по названию книг в алфавитном порядке.\n";
  81.         cout << "11.Запись результата поиска в файл.\n";
  82.         cout << "12.Составить перечень.\n";
  83.         cout << "13.Вывести перечень на экран.\n";
  84.         cout << "14.Записать исходный перечень в файл.\n";
  85.         cout << "15.Отсортировать перечень по году издания в порядке возрастания.\n";
  86.         cout << "16.Отсортировать перечень по количеству авторов в порядке убывания.\n";
  87.         cout << "17.Записать результат работы с перечнем в файл.\n";
  88.         cout << "18.Завершить работу.\n";
  89.         cout << "Ваш выбор (1-18): ";
  90.         cin >> t;
  91.         switch (t)
  92.         {
  93.         case 1:
  94.             inputMasBoooksFile(a, m);
  95.             break;
  96.         case 2:
  97.             outputMasBook(a, m);
  98.             break;
  99.         case 3:
  100.             addbooks(a, m);
  101.             break;
  102.         case 4:
  103.             delelteBooks(a, m);
  104.             break;
  105.         case 5:
  106.             sortyear(a, m);
  107.             break;
  108.         case 6:
  109.             sortbookfio(a, m);
  110.             break;
  111.         case 7:
  112.             outputSourceMassToFile(a, m);
  113.             break;
  114.         case 8:
  115.             poiskyear(a, m, b, l);
  116.             break;
  117.         case 9:
  118.             outputResultArray(b, l);
  119.             break;
  120.         case 10:
  121.             sortname(b, l);
  122.             break;
  123.         case 11:
  124.             outputMasBooksFilePoisk(b, l);
  125.             break;
  126.         case 12:
  127.             createPerechen(a, m, c, n);
  128.             break;
  129.         case 13:
  130.             outputPerechen(c, n);
  131.             break;
  132.         case 14:
  133.             outputSourcePerechenToFile(c, n);
  134.             break;
  135.         case 15:
  136.             sortPerechYear(c, n);
  137.             break;
  138.         case 16:
  139.             sortPerechQuantity(c, n);
  140.             break;
  141.         case 17:
  142.             outputSortPerechenToFile(c, n);
  143.             break;
  144.         case 18:
  145.             exit = false;
  146.             break;
  147.         default:
  148.             cout << "Нет такого номера меню.\n";
  149.             break;
  150.         }
  151.         if (t != 18)
  152.             system("pause");
  153.     }
  154.  
  155.     cout << "Конец работы.\n";
  156.     return 0;
  157. }
  158. //1
  159. void inputMasBoooksFile(books x[], int& n)//ввод данных из файла
  160. {
  161.     char file[20];
  162.     string iniz;
  163.     n = 0;
  164.  
  165.     ifstream fin;
  166.     cout << "Введите имя входного файла: ";
  167.     cin >> file;
  168.  
  169.     strcat_s(file, ".txt");
  170.  
  171.     fin.open(file);
  172.     if (fin.fail())
  173.     {
  174.         cout << "Ошибка! Файл не открывается!\n\n";
  175.         return;
  176.     }
  177.  
  178.     while (!fin.eof())
  179.     {
  180.         fin >> x[n].fio >> iniz >> x[n].name >> x[n].year;
  181.         x[n].fio = x[n].fio + " ";
  182.         x[n].fio = x[n].fio + iniz;
  183.         n++;
  184.     }
  185.  
  186.     n--;
  187.  
  188.     fin.close();
  189.  
  190.     cout << "\n\tФайл введен.\n\n";
  191. }
  192. //2
  193. void outputMasBook(books x[], int n)//вывод результата в текстовый файл
  194. {
  195.     if (n == 0)
  196.     {
  197.         cout << "\n\tМассив пуст.\n\n";
  198.         return;
  199.     }
  200.  
  201.     cout << " _____________________________________________________________________________\n";
  202.     cout << "|                              Список книг                                    |\n";
  203.     cout << "|_____________________________________________________________________________|\n";
  204.     cout << "|№  |      Фамилия и инициалы      |           Название           |Год издания|\n";
  205.  
  206.     for (int i = 0; i < n; i++)
  207.         cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
  208.  
  209.     cout << "|_____________________________________________________________________________|\n\n";
  210. }
  211. //3
  212. void addbooks(books x[], int& n)//добавление строки
  213. {
  214.     books t;
  215.     string iniz;
  216.  
  217.     if (n == M)
  218.     {
  219.         cout << "Массив заполнен!\n\n";
  220.         return;
  221.     }
  222.     cout << "Фамилия: ";
  223.     cin >> t.fio;
  224.  
  225.     cout << "Инициалы: ";
  226.     cin >> iniz;
  227.  
  228.     t.fio = t.fio + " ";
  229.     t.fio = t.fio + iniz;
  230.  
  231.     cout << "Название: ";
  232.     cin >> t.name;
  233.  
  234.     cout << "Год издания: ";
  235.     cin >> t.year;
  236.  
  237.     x[n++] = t;
  238.  
  239.     cout << "\n\tЗапись добавлена.\n\n";
  240. }
  241. //4
  242. void delelteBooks(books x[], int& n)//удаление строки
  243. {
  244.     if (n == 0)
  245.     {
  246.         cout << "\n\tМассив пуст.\n\n";
  247.         return;
  248.     }
  249.  
  250.     int j;
  251.     char ch;
  252.     bool exit = true;
  253.  
  254.     outputMasBook(x, n);
  255.  
  256.     cout << "Номер удаляемой строки: ";
  257.     cin >> j;
  258.  
  259.     j--;
  260.  
  261.     if (j < 0 || j >= n)
  262.     {
  263.         cout << "Нет такой строки!\n\n";
  264.         return;
  265.     }
  266.  
  267.     while (exit)
  268.     {
  269.         cout << j + 1 << "-я строка:\n";
  270.         cout << x[j].fio << " " << x[j].name << " " << x[j].year << " " << endl;
  271.         cout << "Удалить: 'y' или 'д'(да)/ 'n' или 'н'(нет)? -> ";
  272.  
  273.         cin >> ch;
  274.  
  275.         switch (ch)
  276.         {
  277.         case 'n':
  278.         case 'N':
  279.         case 'н':
  280.         case 'Н':
  281.             cout << "\n\tЗапись не удалена.\n\n";
  282.             return;
  283.         case 'y':
  284.         case 'Y':
  285.         case 'д':
  286.         case 'Д':
  287.             for (int i = j + 1; i < n; i++)
  288.                 x[i - 1] = x[i];
  289.             n--;
  290.  
  291.             exit = false;
  292.             break;
  293.         default:
  294.             cout << "\n\nНеправильно введен символ! Пожалуйста, повторите попытку...\n";
  295.         }
  296.     }
  297.  
  298.     cout << "\n\tЗапись удалена.\n\n";
  299. }
  300. //5
  301. void sortyear(books x[], int n) //сортировка по году издания в порядке возрастания
  302. {
  303.     if (n == 0)
  304.     {
  305.         cout << "\n\tМассив пуст.\n\n";
  306.         return;
  307.     }
  308.  
  309.     for (int j = 0; j < n; j++)
  310.     {
  311.         for (int i = 0; i < n; i++)
  312.         {
  313.             if (x[j].year < x[i].year)
  314.             {
  315.                 books t = x[i];
  316.                 x[i] = x[j];
  317.                 x[j] = t;
  318.             }
  319.         }
  320.     }
  321.  
  322.     cout << "\n\tЗаписи отсортированы по году издания в порядке возрастания.\n\n";
  323. }
  324. //6
  325. void sortbookfio(books y[], int n)
  326. {
  327.     if (n == 0)
  328.     {
  329.         cout << "\n\tМассив пуст.\n\n";
  330.         return;
  331.     }
  332.  
  333.     for (int i = 0; i < n; i++)
  334.         for (int j = 0; j < n; j++)
  335.             if (y[i].fio <= y[j].fio)
  336.             {
  337.                 if (y[i].fio == y[j].fio)
  338.                 {
  339.                     if (y[i].year > y[j].year)
  340.                     {
  341.                         books t = y[i];
  342.                         y[i] = y[j];
  343.                         y[j] = t;
  344.                     }
  345.                 }
  346.                 else
  347.                 {
  348.                     books t = y[i];
  349.                     y[i] = y[j];
  350.                     y[j] = t;
  351.                 }
  352.             }
  353.  
  354.     cout << "\n\tЗаписи отсортированы по фио в алфавитном порядке и году издания в порядке убывания.\n\n";
  355. }
  356. //7
  357. void outputSourceMassToFile(books x[], int n)//вывод в файл сортировки
  358. {
  359.     if (n == 0)
  360.     {
  361.         cout << "\n\tМассив пуст.\n\n";
  362.         return;
  363.     }
  364.  
  365.     char file[20];
  366.     ofstream fout;
  367.  
  368.     cout << "\n\tВведите имя выходного файла: ";
  369.     cin >> file;
  370.  
  371.     strcat_s(file, ".txt");
  372.  
  373.     fout.open(file);
  374.  
  375.     if (fout.fail())
  376.     {
  377.         cout << "Ошибка! Файл не открывается!\n\n";
  378.         return;
  379.     }
  380.  
  381.     fout << " _____________________________________________________________________________\n";
  382.     fout << "|                              Список книг                                    |\n";
  383.     fout << "|_____________________________________________________________________________|\n";
  384.     fout << "|№  |      Фамилия и инициалы      |           Название           |Год издания|\n";
  385.  
  386.     for (int i = 0; i < n; i++)
  387.         fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
  388.  
  389.     fout << "|_____________________________________________________________________________|\n";
  390.  
  391.     cout << "\n\tИсходный массив выведен в файл " << file << ".\n\n";
  392. }
  393. //8
  394. void poiskyear(books x[], int n, author y[], int& m)//Поиск самой ранней и самой поздней книг данного автора
  395. {
  396.     int s = 0;
  397.     m = 0;
  398.     string fio, iniz;
  399.     int earlybook, latebook;
  400.  
  401.     outputMasBook(x, n);
  402.  
  403.     cout << "\tВведите автора: ";
  404.     cout << "\nФамилия: ";
  405.     cin >> fio;
  406.  
  407.     cout << "Инициалы: ";
  408.     cin >> iniz;
  409.  
  410.     fio = fio + " ";
  411.     fio = fio + iniz;
  412.  
  413.     for (int i = 0; i < n; i++)
  414.         if (fio != x[i].fio)
  415.             s++;
  416.  
  417.     if (s == n)
  418.     {
  419.         cout << "Такого автора нет.\n\n";
  420.         return;
  421.     }
  422.  
  423.     for (int i = 1; i < n; i++)
  424.         if (fio == x[i].fio)
  425.         {
  426.             earlybook = x[i].year;
  427.             latebook = x[i].year;
  428.             break;
  429.         }
  430.  
  431.     //находим минимальный и максимальный год для данного автора
  432.     for (int i = 0; i < n; i++)
  433.     {
  434.         if ((fio == x[i].fio) && (earlybook > x[i].year))
  435.             earlybook = x[i].year;//минимальное
  436.         if ((fio == x[i].fio) && (x[i].year > latebook))
  437.             latebook = x[i].year; //максимальное
  438.     }
  439.  
  440.     for (int i = 0; i < n; i++)
  441.         if ((fio == x[i].fio) && ((earlybook == x[i].year) || (x[i].year == latebook)))
  442.         {
  443.             y[m++].nameBook = x[i].name;
  444.             if (x[i].year == earlybook)
  445.                 y[m - 1].yearBook = x[i].year;
  446.             if (x[i].year == latebook)
  447.                 y[m - 1].yearBook = x[i].year;
  448.         }
  449.  
  450.     cout << "\n\tПоиск завершен.\n\n";
  451. }
  452. //9
  453. void outputResultArray(author x[], int n)
  454. {
  455.     if (n == 0)
  456.     {
  457.         cout << "\n\tМассив пуст.\n\n";
  458.         return;
  459.     }
  460.  
  461.     cout << " ______________________________________________ \n";
  462.     cout << "|                  Список книг                 |\n";
  463.     cout << "|______________________________________________|\n";
  464.     cout << "|№  |           Название           |Год издания|\n";
  465.  
  466.     for (int i = 0; i < n; i++)
  467.         cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
  468.  
  469.     cout << "|______________________________________________|\n\n";
  470. }
  471. //10
  472. void sortname(author x[], int n) //сортировка по названию книги в алфавитном порядке
  473. {
  474.     if (n == 0)
  475.     {
  476.         cout << "\n\tМассив пуст.\n\n";
  477.         return;
  478.     }
  479.  
  480.     for (int j = 0; j < n; j++)
  481.     {
  482.         for (int i = 0; i < n; i++)
  483.         {
  484.             if (x[i].nameBook > x[j].nameBook)
  485.             {
  486.                 author t = x[i];
  487.                 x[i] = x[j];
  488.                 x[j] = t;
  489.             }
  490.         }
  491.     }
  492.  
  493.     cout << "\n\tЗаписи отсортированы по названию книг в алфавитном порядке.\n\n";
  494. }
  495. //11
  496. void outputMasBooksFilePoisk(author x[], int n)// вывод поиска в файл
  497. {
  498.     if (n == 0)
  499.     {
  500.         cout << "\n\tМассив пуст.\n\n";
  501.         return;
  502.     }
  503.  
  504.     char file[20];
  505.     ofstream fout;
  506.  
  507.     cout << "\n\tВведите имя выходного файла: ";
  508.     cin >> file;
  509.  
  510.     strcat_s(file, ".txt");
  511.     fout.open(file);
  512.  
  513.     if (fout.fail())
  514.     {
  515.         cout << "Ошибка! Файл не открывается!\n\n";
  516.         return;
  517.     }
  518.  
  519.     fout << " ______________________________________________ \n";
  520.     fout << "|                  Список книг                 |\n";
  521.     fout << "|______________________________________________|\n";
  522.     fout << "|№  |           Название           |Год издания|\n";
  523.  
  524.     for (int i = 0; i < n; i++)
  525.         fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
  526.  
  527.     fout << "|______________________________________________|\n";
  528.  
  529.     cout << "\n\tМассив выведен в файл " << file << "\n\n";
  530. }
  531. //12
  532. void createPerechen(books x[], int n, perechen y[], int& m)
  533. {
  534.     int flag;//флаг, показывающий, что нашлись совпадения по году
  535.  
  536.     m = 0;
  537.  
  538.     for (int i = 0; i < n; i++)
  539.     {
  540.         flag = 0;
  541.  
  542.         for (int j = 0; j < m; j++)
  543.         {
  544.             if (x[i].year == y[j].year)//если год издания книги из book совпал с годом издания из перечня, то ...
  545.             {
  546.                 y[j].quantity++;//увеличиваем количество авторов на 1
  547.                 flag = 1;//показываем, что замена была
  548.             }
  549.         }
  550.         if (flag == 0)//если замен не было, то
  551.         {
  552.             y[m].year = x[i].year;//присваиваем году издания из перечня год издания из book
  553.             y[m].quantity = 1;//устанавливаем количество авторов на 1
  554.             m++;//увеличиваем размер перечня
  555.         }
  556.     }
  557.     cout << "\n\tПеречень составлен\n\n";
  558. }
  559. //13
  560. void outputPerechen(perechen x[], int m)
  561. {
  562.     if (m == 0)
  563.     {
  564.         cout << "\n\tПеречень пуст.\n\n";
  565.         return;
  566.     }
  567.  
  568.     cout << " ___________________________\n";
  569.     cout << "|         Перечень         |\n";
  570.     cout << "|__________________________|\n";
  571.     cout << "|№  |Год издания|Количество|\n";
  572.  
  573.     for (int i = 0; i < m; i++)
  574.         cout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  575.  
  576.     cout << " ___________________________\n\n";
  577. }
  578. //14
  579. void sortPerechYear(perechen x[], int m)
  580. {
  581.     if (m == 0)
  582.     {
  583.         cout << "\n\tПеречень пуст.\n\n";
  584.         return;
  585.     }
  586.  
  587.     for (int j = 0; j < m; j++)
  588.     {
  589.         for (int i = 0; i < m; i++)
  590.         {
  591.             if (x[j].year < x[i].year)
  592.             {
  593.                 perechen t = x[i];
  594.                 x[i] = x[j];
  595.                 x[j] = t;
  596.             }
  597.         }
  598.     }
  599.  
  600.     cout << "\n\tПеречень отсортирован по году издания в порядке возрастания.\n\n";
  601. }
  602. //15
  603. void sortPerechQuantity(perechen x[], int m)
  604. {
  605.     if (m == 0)
  606.     {
  607.         cout << "\n\tПеречень пуст.\n\n";
  608.         return;
  609.     }
  610.  
  611.     for (int j = 0; j < m; j++)
  612.     {
  613.         for (int i = 0; i < m; i++)
  614.         {
  615.             if (x[j].quantity > x[i].quantity)
  616.             {
  617.                 perechen t = x[i];
  618.                 x[i] = x[j];
  619.                 x[j] = t;
  620.             }
  621.         }
  622.     }
  623.  
  624.     cout << "\n\tПеречень отсортирован по количеству авторов в порядке убывания.\n\n";
  625. }
  626. //16
  627. void outputSourcePerechenToFile(perechen x[], int m)
  628. {
  629.     if (m == 0)
  630.     {
  631.         cout << "\n\tПеречень пуст.\n\n";
  632.         return;
  633.     }
  634.  
  635.     char file[20];
  636.     ofstream fout;
  637.  
  638.     cout << "Введите имя выходного файла: ";
  639.     cin >> file;
  640.  
  641.     strcat_s(file, ".txt");
  642.     fout.open(file);
  643.  
  644.     if (fout.fail())
  645.     {
  646.         cout << "Ошибка! Файл не открывается!\n\n";
  647.         return;
  648.     }
  649.  
  650.  
  651.     fout << " ___________________________\n";
  652.     fout << "|         Перечень         |\n";
  653.     fout << "|__________________________|\n";
  654.     fout << "|№  |Год издания|Количество|\n";
  655.  
  656.     for (int i = 0; i < m; i++)
  657.         fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  658.  
  659.     fout << " ___________________________\n\n";
  660.  
  661.     cout << "\n\tИсходный перечень выведен в файл " << file << ".\n\n";
  662. }
  663. //17
  664. void outputSortPerechenToFile(perechen x[], int m)
  665. {
  666.     if (m == 0)
  667.     {
  668.         cout << "\n\tПеречень пуст.\n\n";
  669.         return;
  670.     }
  671.  
  672.     char file[20];
  673.     ofstream fout;
  674.  
  675.     cout << "Введите имя выходного файла: ";
  676.     cin >> file;
  677.  
  678.     strcat_s(file, ".txt");
  679.     fout.open(file);
  680.  
  681.     if (fout.fail())
  682.     {
  683.         cout << "Ошибка! Файл не открывается!\n\n";
  684.         return;
  685.     }
  686.  
  687.  
  688.     fout << " ___________________________\n";
  689.     fout << "|         Перечень         |\n";
  690.     fout << "|__________________________|\n";
  691.     fout << "|№  |Год издания|Количество|\n";
  692.  
  693.     for (int i = 0; i < m; i++)
  694.         fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
  695.  
  696.     fout << " ___________________________\n\n";
  697.  
  698.     cout << "\n\tРезультат работы с перечнем выведен в файл " << file << ".\n\n";
  699. }
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