Advertisement
Usow_Maxim

Lab_6.4

Dec 28th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5.  
  6. struct Dog
  7. {
  8.     char* name;
  9.     char* breed;
  10.     int weight;
  11.     int year;
  12. };
  13.  
  14. int SecureEntry(bool zero = false)
  15. {
  16.     char String[10];
  17.     int value = 0;
  18.     while(true)
  19.     {
  20.         scanf("%s", String);
  21.         if(abs(atoi(String)))
  22.             value = abs(atoi(String));
  23.         else
  24.             value = 0;
  25.         if (zero) break;
  26.         if (!zero && value > 0)
  27.             break;
  28.         else
  29.             printf("Введите значение |n| > 0: ");
  30.     }
  31.     return value;
  32. }
  33.  
  34. char* strEdit()
  35. {
  36.     char* cloneString = NULL;
  37.     char* String = NULL;
  38.  
  39.     int Size = 0;
  40.  
  41.     while(true)
  42.     {
  43.         int symbol = _getch();
  44.  
  45.         cloneString = new char[Size + 1];
  46.         for (int i = 0; i < Size; i++)
  47.             if (String[i] != '\0')
  48.                 cloneString[i] = String[i];
  49.         String = new char[Size + 1];
  50.         for (int i = 0; i < Size; i++)
  51.             String[i] = cloneString[i];
  52.         delete[] cloneString;
  53.  
  54.         if ((symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z') || (symbol >= '0' && symbol <= '9'))
  55.         {
  56.             String[Size] = symbol;
  57.             Size++;
  58.         }
  59.  
  60.         if(symbol == 32)
  61.         {
  62.             String[Size] = '_';
  63.             Size++;
  64.         }
  65.  
  66.         if (symbol == 8 && Size > 0)
  67.         {
  68.             String[Size] = ' ';
  69.             Size--;
  70.         }
  71.  
  72.         if (symbol == 13)
  73.         {
  74.             String[Size] = '\0';
  75.             break;
  76.         }
  77.     }
  78.     return String;
  79. }
  80.  
  81. Dog* DogRemove(Dog* dogs, int &Size)
  82. {
  83.     if(Size == 0)
  84.     {
  85.         printf("Список собак пуст.\n\n");
  86.         return dogs;
  87.     }
  88.     printf("\nВыберите собаку от 1..%d: ", Size);
  89.     int Index = SecureEntry();
  90.     Index--;
  91.  
  92.     if(Index >= Size)
  93.     {
  94.         printf("Собака не найдена!\n\n");
  95.         return dogs;
  96.     }
  97.  
  98.     Size--;
  99.     Dog* copyDogs = new Dog[Size];
  100.     for (int i = 0; i < Index; ++i)
  101.         copyDogs[i] = dogs[i];
  102.     for (int i = Index; i < Size; ++i)
  103.         copyDogs[i] = dogs[i + 1];
  104.     delete[] dogs;
  105.  
  106.     printf("Собака была удалена!\n\n");
  107.     return copyDogs;
  108. }
  109.  
  110. Dog* DogAdd(Dog* dogs, int &Size)
  111. {
  112.     Dog dog;
  113.     printf("\n[Добавление в список]:\n");
  114.  
  115.     printf("Кличка: ");
  116.     dog.name = strEdit();
  117.     printf("%s\n", dog.name);
  118.  
  119.     printf("Порода: ");
  120.     dog.breed = strEdit();
  121.     printf("%s\n", dog.breed);
  122.  
  123.     printf("Вес: ");
  124.     dog.weight = SecureEntry();
  125.  
  126.     printf("Год рождения: ");
  127.     dog.year = SecureEntry();
  128.  
  129.     Size++;
  130.     Dog* copyDogs = new Dog[Size];
  131.     for (int i = 0; i < Size - 1; i++)
  132.         copyDogs[i] = dogs[i];
  133.     copyDogs[Size - 1].name = dog.name;
  134.     copyDogs[Size - 1].breed = dog.breed;
  135.     copyDogs[Size - 1].weight = dog.weight;
  136.     copyDogs[Size - 1].year = dog.year;
  137.     delete[] dogs;
  138.  
  139.     printf("Собака была добавлена в список.\n\n");
  140.  
  141.     return copyDogs;
  142. }
  143.  
  144. void Output(Dog* dogs, int Size)
  145. {
  146.     printf("[Вывод списка собак]:\n");
  147.     if(Size == 0)
  148.         printf("Список к сожалению пуст...\n\n");
  149.     else
  150.         for (int i = 0; i < Size; i++)
  151.         {
  152.             printf("%d) %s %d %d %d", i + 1, dogs[i].name, dogs[i].breed, dogs[i].weight, dogs[i].year);
  153.             if(dogs[i].year >= 2 && dogs[i].year <= 6)
  154.                 printf(" Собака годна к службе!\n");
  155.             else
  156.                 printf("\n");
  157.         }
  158. }
  159.  
  160. int main()
  161. {
  162.     SetConsoleCP(1251);
  163.     SetConsoleOutputCP(1251);
  164.  
  165.     int Size = 0;
  166.     Dog* dogs = NULL;
  167.  
  168.     bool RUN = true;
  169.     while(RUN)
  170.     {
  171.         printf("[Меню]:\n");
  172.         printf("----------------\n");
  173.         printf("1.Вывод\n");
  174.         printf("2.Добавить\n");
  175.         printf("3.Удалить\n");
  176.         printf("4.Выход\n");
  177.         printf("----------------\n");
  178.         switch(SecureEntry())
  179.         {
  180.             case 1:
  181.             {
  182.                 Output(dogs, Size);
  183.                 break;
  184.             }
  185.             case 2:
  186.             {
  187.                 dogs = DogAdd(dogs, Size);
  188.                 break;
  189.             }
  190.             case 3:
  191.             {
  192.                 dogs = DogRemove(dogs, Size);
  193.                 break;
  194.             }
  195.             case 4:
  196.                 RUN = false;
  197.                 break;
  198.         }
  199.     }
  200.  
  201.     delete[] dogs;
  202.     return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement