Guest User

Untitled

a guest
Feb 24th, 2020
90
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include <locale.h>
  7.  
  8.  typedef struct Flat
  9.  {
  10.      int floor, countRoom, Square;
  11.      struct {
  12.          char district[20];
  13.          char street[20];
  14.      }Adress;
  15.      struct Flat* next;
  16.  } Flat;
  17.  
  18.  
  19. int compare(Flat *el1, Flat *el2){
  20.     if(strcmp(el1->Adress.district,el2->Adress.district)>0)
  21.         return 1;
  22.     return 0;
  23.    
  24. }
  25.  
  26. //int proverka(Flat *First, Flat *Last){
  27. //    Flat *el = NULL;
  28. //    for (el = First; el->next != NULL; el = el->next)
  29. //        if(compare(el, el->next) == 1)
  30. //            return 1;
  31. //    return 0;
  32. //
  33. //}
  34.  
  35. void swap(Flat *el){        //смена соседних элементов
  36.     Flat *tmp = NULL;
  37.     tmp = el;
  38.     el=el->next;
  39.     el->next = tmp;
  40.     return;
  41. }
  42.  
  43. int sort(Flat *First, Flat *Last){          //сортировка
  44.     Flat *el1 = NULL, *el2 = NULL, *el = NULL;
  45.     int size = 0, j = 0, i = 0;
  46.    
  47.         for (el = First; el->next != NULL;)
  48.             if (compare(el,el->next) == 1)
  49.                 swap(el);
  50.             else
  51.                 el=el->next;
  52.     return 0;
  53.    
  54.  
  55.  
  56. int push(struct Flat *First,struct Flat *Last)
  57. {
  58.    
  59.     int tmp = 0;
  60.     while(1)
  61. {
  62.     struct Flat* el = NULL;
  63.         el = (struct Flat*)malloc(sizeof(struct Flat));
  64.    
  65.         if (el == NULL)
  66.         {
  67.             printf("Не удалось выделить память под элемент списка.\n");
  68.             return 0;
  69.         }
  70.    
  71.         el->next = NULL;
  72.  
  73.         if (First == NULL)
  74.             First = Last = el;
  75.         else
  76.         {
  77.             Last->next = el;
  78.             Last = Last->next;
  79.         }
  80.     printf("\nВведите данные квартиры! \n\n");
  81.     printf("Введите количество комнат: ");
  82.     scanf("%d", &el->countRoom);
  83.     printf("Введите площадь комнаты: ");
  84.     scanf("%d", &el->Square);
  85.     printf("Введите этаж: ");
  86.     scanf("%d", &el->floor);
  87.     printf("Введите район: ");
  88.     scanf("%s", el->Adress.district);
  89.     printf("Введите улицу: ");
  90.     scanf("%s", el->Adress.street);
  91.    
  92.     printf("%s \n",el->Adress.street);
  93.    
  94.     printf("Хотите ввести еще квартиру? (1 - да, 0 - нет): ");
  95.     scanf("%d",&tmp);
  96.    
  97.     if(tmp == 0)
  98.     {
  99.         printf("Ну как хотите.\n\n");
  100.         sort(First, Last);
  101.         return 0;
  102.     }
  103.    
  104.     if(tmp == 0)
  105.         return 0;
  106.    
  107. }
  108.     return 0;
  109. }
  110.  
  111. int printFlat(Flat *First, Flat *Last){
  112.     Flat *el = NULL;
  113.     int i = 0;
  114.         for (el = First; el != NULL; el = el->next, i++)
  115.         {
  116.             printf("Информация о %d квартире:\n",i);
  117.             printf("Количество комнат: %d\n", el->countRoom);
  118.             printf("Площадь комнаты: %d\n", el->Square);
  119.             printf("Этаж: %d\n", el->floor);
  120.             printf("Район: %s", el->Adress.district);
  121.             printf("Улица: %s", el->Adress.street);
  122.         }
  123.     return 0;
  124. }
  125.          
  126. int findFlat(Flat *First, Flat *Last){
  127.     int k = 0, i = 0;
  128.     Flat *el = NULL;
  129.     printf("Введите количество комнат:");
  130.     scanf("%d", &k);
  131.     printf("Квартиры, подходящие под параметры:\n");
  132.     for (el = First; el!= Last; el = el->next)
  133.         if(el->countRoom == k){
  134.             printf("Количество комнат: %d\n", el->countRoom);
  135.             printf("Площадь комнаты: %d\n", el->Square);
  136.             printf("Этаж: %d\n", el->floor);
  137.             printf("Район: %s", el->Adress.district);
  138.             printf("Улица: %s", el->Adress.street);
  139.             i++;
  140.         }
  141.     if(i==0)
  142.         printf("их нет(\n\n");
  143.     return 0;
  144. }
  145.        
  146. int callFunction(int k, Flat *First, Flat *Last){
  147.     switch(k){
  148.         case 1:
  149.             push(First, Last);
  150.             break;
  151.         case 2:
  152.             printFlat(First, Last);
  153.             break;
  154.         case 3:
  155.             findFlat(First, Last);
  156.             break;
  157.         case 4:
  158.             push(First, Last);
  159.             break;
  160.         case 5:
  161.             return 0;
  162.         default:
  163.             printf("Вы ввели не хорошую циферку, попробуйте еще!\n\n");
  164.             break;
  165.         }
  166.     return 0;
  167. }
  168.  
  169.  
  170. int main(void)
  171. {
  172.     setlocale(LC_ALL, "Russian");
  173.     struct Flat *First = NULL, *Last = NULL;
  174.     int k;
  175.     printf("Гамарджома дорогой друг! Что хотите?\n1)Создать список квартир\n2)Вывести список квартир на экран\n3)Найти квартиру с заданным количеством комнат\n4)Добавить квартиру в список\n5)Выйти и закончить работу\n\nВведите циферку: ");
  176.    
  177.     while(1){
  178.         if(!scanf("%d",&k)){
  179.             printf("Вы вводите не цифру!\n");
  180.             break;
  181.         }
  182.         callFunction(k, First, Last);
  183.         printf("1)Создать список квартир\n2)Вывести список квартир на экран\n3)Найти квартиру с заданным количеством комнат\n4)Добавить квартиру в список\n5)Выйти и закончить работу\n\nВведите циферку:");
  184.     }
  185.     printFlat(First, Last);
  186.     struct Flat *el = NULL, *tmp = NULL;
  187.     for (el = First; el != NULL;)
  188.     {
  189.         tmp = el;
  190.         el = el->next;
  191.         free(tmp);
  192.     }
  193.        
  194.  
  195.     return 0;
  196. }
RAW Paste Data