Advertisement
Usow_Maxim

Lab_6.9

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