Advertisement
Xsufu

4th lab

Mar 10th, 2020
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <windows.h>
  5. using namespace std;
  6.  
  7. void menuv();
  8. void output();
  9. void add();
  10. void menu4Sort();
  11. void sortByName();
  12. void sortByColor();
  13. void sortByWeight();
  14. void uFind();
  15. void uDelete();
  16.  
  17. struct animals{
  18.    
  19.     string name;
  20.     string color;
  21.     int weight;
  22.    
  23. };
  24.  
  25. int main(){
  26.     SetConsoleOutputCP(1251);
  27.     SetConsoleCP(1251);
  28.    
  29.     menuv();
  30.    
  31.     system("pause");
  32.     return 0;
  33. }
  34.  
  35. //меню
  36. void menuv(){
  37.     int menu = 0;
  38.  
  39.     // выводим информацию о меню пользователю
  40.     cout << "Выберите пункт меню: \n";
  41.     cout << " 1 - Вывод всех жывотных \n 2 - Добавление жывотных \n 3 - Сортировка \n 4 - Поиск \n 5 - Удаление \n 6 - Exit\n";
  42.     cout << ">>";
  43.     cin >> menu;
  44.  
  45.     switch (menu) {
  46.         case 1: system("cls"); output(); cout << "\n"; menuv(); break;
  47.         case 2: system("cls"); add(); cout << "\n"; menuv(); break;
  48.         case 3: system("cls"); menu4Sort(); menuv(); break;
  49.         case 4: system("cls"); uFind(); cout << "\n"; menuv(); break;
  50.         case 5:system("cls"); uDelete(); cout << "\n"; menuv(); break;
  51.         case 6: return; // выход
  52.         default: cout << "\nATTENTION!! Левое число\n\n"; menuv(); // включаем защиту от левых чисел
  53.     }
  54.  
  55. }
  56.  
  57. //ф-ия вывода
  58. void output(){
  59.     int g = 0;
  60.     int n = 50;
  61.     animals animal[50];
  62.     ifstream P1;
  63.     P1.open("input.txt");
  64.    
  65.     for (g; !P1.eof(); g++){
  66.         P1 >> animal[g].name;
  67.         P1 >> animal[g].color;
  68.         P1 >> animal[g].weight;
  69.     }
  70.    
  71.     //вывод данных
  72.     for (int i = 0; i<g-1; i++)
  73.         cout << animal[i].name << " " << animal[i].color << " " << animal[i].weight << "\n";
  74.    
  75.     P1.close();
  76.     return;
  77. }
  78.  
  79. //ф-ия добавления
  80. void add(){
  81.     animals animal;
  82.     ofstream P1;
  83.     //игнорирование предыдщего cin
  84.     cin.ignore();
  85.     int n = 4;
  86.     char arr[n];
  87.     string mass[1];
  88.    
  89.     //открываем файл на дозапись
  90.     P1.open("input.txt", ios::app);
  91.    
  92.     cout << "Введите название животного: " << "\n>>";
  93.     getline(cin,animal.name);
  94.     system("cls");
  95.    
  96.     cout << "Введите цвет животного: " << "\n>>";
  97.     getline(cin,animal.color);
  98.     system("cls");
  99.    
  100.     cout << "Введите вес животного: " << "\n>>";
  101.     cin.getline(arr, n);
  102.     mass[0] = arr;
  103.  
  104.     //перевод строки в число
  105.     animal.weight = atoi(mass[0].c_str());
  106.    
  107.     //запись полученных данных в файл
  108.     P1 << animal.name << " " << animal.color << " " << animal.weight << endl;
  109.    
  110.     P1.close();
  111.    
  112.     system("cls");
  113.    
  114.     //выводим изменённый файл на экран
  115.     output();
  116.    
  117.     return;
  118. }
  119.  
  120. //меню сортировки
  121. void menu4Sort(){
  122.    
  123.     int menu = 0;
  124.  
  125.     // выводим информацию о меню пользователю
  126.     cout << "Выберите сортировку: \n";
  127.     cout << " 1 - По названию \n 2 - По цвету \n 3 - По весу \n 4 - Exit\n";
  128.     cout << ">>";
  129.     cin >> menu;
  130.  
  131.     switch (menu) {
  132.         case 1: system("cls"); sortByName(); cout << "\n"; menu4Sort(); break;
  133.         case 2: system("cls"); sortByColor(); cout << "\n"; menu4Sort(); break;
  134.         case 3: system("cls"); sortByWeight(); cout << "\n"; menu4Sort(); break;
  135.         case 4: system("cls"); return; // выход
  136.         default: cout << "\nATTENTION!! Левое число\n\n"; menu4Sort(); // включаем защиту от левых чисел
  137.     }
  138.    
  139.     return;
  140. }
  141.  
  142. //сортировка по названию
  143. void sortByName(){
  144.     const int n = 50;
  145.     animals animal[n];
  146.     string bN, bC;
  147.     int g = 0, bW = 0;
  148.    
  149.     ifstream P1;
  150.     P1.open("input.txt");
  151.    
  152.     for (g = 0; !P1.eof(); g++){
  153.         P1 >> animal[g].name;
  154.         P1 >> animal[g].color;
  155.         P1 >> animal[g].weight;
  156.     }
  157.    
  158.     for (int i = 0; i<g; i++){
  159.         for (int j = 0; j<g-1; j++){
  160.             if (animal[j].name > animal[j+1].name){
  161.                 bN = animal[j].name;
  162.                 bC = animal[j].color;
  163.                 bW = animal[j].weight;
  164.                
  165.                
  166.                 animal[j].name = animal[j+1].name;
  167.                 animal[j].color = animal[j+1].color;
  168.                 animal[j].weight = animal[j+1].weight;
  169.                
  170.                
  171.                 animal[j+1].name = bN;
  172.                 animal[j+1].color = bC;
  173.                 animal[j+1].weight = bW;
  174.             }
  175.         }
  176.     }
  177.    
  178.     cout << "Сортировка животных по названию (по возрастанию):\n\n";
  179.     for (int i = 1; i<g; i++){
  180.         cout << animal[i].name << " " << animal[i].color << " " << animal[i].weight << "\n";
  181.     }
  182.    
  183.     P1.close();
  184.     return;
  185. }
  186.  
  187. //сортировка по цвету
  188. void sortByColor(){
  189.     const int n = 50;
  190.     animals animal[n];
  191.     string bN, bC;
  192.     int g = 0, bW = 0;
  193.    
  194.     ifstream P1;
  195.     P1.open("input.txt");
  196.    
  197.     for (g = 0; !P1.eof(); g++){
  198.         P1 >> animal[g].name;
  199.         P1 >> animal[g].color;
  200.         P1 >> animal[g].weight;
  201.     }
  202.    
  203.     for (int i = 0; i<g; i++){
  204.         for (int j = 0; j<g-1; j++){
  205.             if (animal[j].color > animal[j+1].color){
  206.                 bN = animal[j].name;
  207.                 bC = animal[j].color;
  208.                 bW = animal[j].weight;
  209.                
  210.                
  211.                 animal[j].name = animal[j+1].name;
  212.                 animal[j].color = animal[j+1].color;
  213.                 animal[j].weight = animal[j+1].weight;
  214.                
  215.                
  216.                 animal[j+1].name = bN;
  217.                 animal[j+1].color = bC;
  218.                 animal[j+1].weight = bW;
  219.             }
  220.         }
  221.     }
  222.    
  223.     cout << "Сортировка животных по названию (по возрастанию):\n\n";
  224.     for (int i = 1; i<g; i++){
  225.         cout << animal[i].name << " " << animal[i].color << " " << animal[i].weight << "\n";
  226.     }
  227.    
  228.     P1.close();
  229.     return;
  230. }
  231.  
  232. //сортировка по весу
  233. void sortByWeight(){
  234.     const int n = 50;
  235.     animals animal[n];
  236.     string bN, bC;
  237.     int g = 0, bW = 0;
  238.    
  239.     ifstream P1;
  240.     P1.open("input.txt");
  241.    
  242.     for (g = 0; !P1.eof(); g++){
  243.         P1 >> animal[g].name;
  244.         P1 >> animal[g].color;
  245.         P1 >> animal[g].weight;
  246.     }
  247.    
  248.     for (int i = 0; i<g; i++){
  249.         for (int j = 0; j<g-1; j++){
  250.             if (animal[j].weight > animal[j+1].weight){
  251.                 bN = animal[j].name;
  252.                 bC = animal[j].color;
  253.                 bW = animal[j].weight;
  254.                
  255.                
  256.                 animal[j].name = animal[j+1].name;
  257.                 animal[j].color = animal[j+1].color;
  258.                 animal[j].weight = animal[j+1].weight;
  259.                
  260.                
  261.                 animal[j+1].name = bN;
  262.                 animal[j+1].color = bC;
  263.                 animal[j+1].weight = bW;
  264.             }
  265.         }
  266.     }
  267.    
  268.     cout << "Сортировка животных по названию (по возрастанию):\n\n";
  269.     for (int i = 0; i<g-1; i++){
  270.         cout << animal[i].name << " " << animal[i].color << " " << animal[i].weight << "\n";
  271.     }
  272.    
  273.     P1.close();
  274.     return;
  275. }
  276.  
  277. void uFind(){
  278.     const int n = 50;
  279.     char mas[n];
  280.     animals animal;
  281.     string userWord, weight;
  282.     int f = 0, fn = 0, fc = 0, fw = 0, len = 0;
  283.    
  284.     ifstream P2;
  285.     P2.open("input.txt");
  286.    
  287.    
  288.     cout << "Введите фразу для поиска: ";
  289.     cin >> userWord;
  290.    
  291.     //узнаём длину файла
  292.     for (len; !P2.eof(); len++){
  293.         P2.getline(mas, n);
  294.     }
  295.     P2.close();
  296.    
  297.     ifstream P1;
  298.     P1.open("input.txt");
  299.        
  300.     for (int i = 0; i < len-1; i++){
  301.         P1 >> animal.name;
  302.         P1 >> animal.color;
  303.         P1 >> animal.weight;
  304.    
  305.         weight = to_string(animal.weight);
  306.        
  307.         fn = animal.name.find(userWord);
  308.         fc = animal.color.find(userWord);
  309.         fw = weight.find(userWord);
  310.        
  311.         if (fn>=0 || fc>=0 || fw>=0)
  312.             cout << animal.name << " " << animal.color << " " << animal.weight << "\n";
  313.  
  314.     }
  315.        
  316.     P1.close();
  317.    
  318.     return;
  319. }
  320.  
  321. //удаление
  322. void uDelete(){
  323.     const int n = 50;
  324.     char mas[n];
  325.     animals animal[n];
  326.     string userWord, weight[n], buf, memory;
  327.     int fn = 0, fc = 0, fw = 0, len = 0;
  328.    
  329.     ifstream P2;
  330.     P2.open("input.txt");
  331.    
  332.    
  333.     cout << "Введите фразу для поиска и дальнейшего удаления строки: ";
  334.     cin >> userWord;
  335.    
  336.     //узнаём длину файла и переписываем его в массивы
  337.     for (len; !P2.eof(); len++){
  338.         P2 >> animal[len].name;
  339.         P2 >> animal[len].color;
  340.         P2 >> animal[len].weight;
  341.         weight[len] = animal[len].weight;
  342.     }
  343.     P2.close();
  344.  
  345.    
  346.     ofstream P1;
  347.     P1.open("input.txt");//
  348.     P1.close(); //очищаем файл
  349.     P1.open("input.txt", ios::app); //открываем на дозапись
  350.    
  351.        
  352.     for (int i = 0; i < len-1; i++){
  353.         //переводим число в строку
  354.         weight[i] = to_string(animal[i].weight);
  355.        
  356.         //ищем введённое слово во всех масиивах
  357.         fn = animal[i].name.find(userWord);
  358.         fc = animal[i].color.find(userWord);
  359.         fw = weight[i].find(userWord);
  360.        
  361.         //если совпадений нет, записываем строку в файл
  362.         if (fn==-1 && fc==-1 && fw==-1){
  363.             P1 << animal[i].name << " " << animal[i].color << " " << animal[i].weight << endl;     
  364.         }
  365.     }
  366.    
  367.     P1.close();
  368.     output();
  369.    
  370.     return;
  371. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement