GrimHansl

Untitled

Mar 16th, 2021
989
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.02 KB | None | 0 0
  1. /*1.Поля данных: страна,город,название отеля,класс отеля,стоимость проживания за один день,стоимость проезда в оба конца.
  2. Вывести сведения об отелях определенного класса,где стоимость проживания за неделю наименьшая.
  3. Определить среднюю стоимость тура на неделю в определённый класс отеля,включая стоимость проживания и стоимость проезда. (person-hotel,client-otel)*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. struct hotel /*Структура*/
  10. {
  11.        char country[20];
  12.        char city[10];
  13.        char name[30];
  14.        int clas;
  15.        float moneyoneday;
  16.        float moneyputi;  /*Поля структуры*/
  17. };
  18. typedef struct hotel DataType;
  19.  
  20. struct node /*Структура узла*/
  21. {
  22.        DataType data;
  23.        struct node * next;
  24. };
  25. typedef struct node * list;
  26.  
  27. DataType input_otel (void);
  28. list read_file (char * filename);
  29. list new_node (list, DataType);
  30. int write_file (char * filename, list);
  31. void delete_list (list);
  32. void edit (list);
  33. void show (list);
  34. void search (list begin);
  35. list delete_node (list);
  36.  
  37. int main (void) /*Меню*/
  38. {
  39.     char file[50];
  40.     char menu;
  41.     list otels = NULL;
  42.     puts ("Enter the file name");
  43.     gets (file);
  44.     otels = read_file (file);
  45.     do
  46.     {
  47.        system ("CLS");
  48.        puts ("1. Insert"); /*Добавление записи*/
  49.        puts ("2. Show");/*Показать записи*/
  50.        puts ("3. Search");/*Поиск отеля*/
  51.        puts ("4. Delete");/*Удаление записи*/
  52.        puts ("5. Display a list of hotels of a certain class, where the cost of accommodation for a week is the lowest ");
  53.        puts ("6. Exit"); /*Выход*/
  54.        menu = getchar(); getchar();
  55.        switch (menu)
  56.        {
  57.               case '1': otels = new_node (otels, input_otel()); break;
  58.               case '2': show (otels); break;
  59.               case '3': search (otels); break;
  60.               case '4': otels = delete_node (otels);
  61.        }
  62.     }
  63.     while (menu!='5');
  64.     if (write_file (file, otels))
  65.         puts ("File saved");
  66.     else
  67.         puts ("File not saved");
  68.     delete_list (otels);
  69.     return 0;
  70. }
  71. DataType input_otel (void)
  72. {
  73.     DataType otel;
  74.     puts ("Country");
  75.     gets (otel.country);
  76.     puts ("City");
  77.     gets (otel.city);
  78.     puts ("Name");
  79.     gets (otel.name);
  80.     puts ("Clas");
  81.     scanf ("%d", &otel.clas);
  82.     puts ("Moneyoneday");
  83.     scanf ("%f", &otel.moneyoneday);
  84.     puts ("Moneyputi");
  85.     scanf ("%f", &otel.moneyputi);
  86.     getchar();
  87.     return otel;
  88. }
  89. list new_node (list begin, DataType hotel) /*!Добавление элемента в начало списка!*/
  90. {
  91.     list temp = (list) malloc (sizeof(struct node)); /*создаём новый элемент,выделяем под него память*/
  92.     temp->data = hotel; /*присваиваем ему значение структуры*/
  93.     temp->next = begin; /*присваиваем указателю next адрес предыдущего узла*/
  94.     return temp;
  95. }
  96. list read_file (char * filename) /*Чтение файла*/
  97. {
  98.     FILE * f;
  99.     DataType otel;
  100.     list begin=NULL, cur;
  101.     if ((f = fopen (filename, "rb")) == NULL)
  102.     {
  103.         perror ("Error open file");
  104.         getchar();
  105.         return begin;
  106.     }
  107.     if (fread(&otel, sizeof(otel), 1, f))
  108.         begin = new_node (NULL, otel);
  109.     else
  110.         return NULL;
  111.     cur = begin;
  112.     while (fread(&otel, sizeof(otel), 1, f))
  113.     {
  114.         cur->next = new_node (NULL, otel);
  115.         cur = cur->next;
  116.     }
  117.     fclose(f);
  118.     return begin;
  119. }
  120. void delete_list (list begin) /*Удаление листа-весь список*/
  121. {
  122.     list temp = begin;
  123.     while (temp)
  124.     {
  125.         begin = temp->next;
  126.         free (temp);
  127.         temp = begin;
  128.     }
  129. }
  130. int write_file (char * filename, list begin)/*Бинарный файл*/
  131. {
  132.     FILE * f;
  133.     if ((f = fopen (filename, "wb")) == NULL)
  134.     {
  135.         perror ("Error create file");
  136.         getchar();
  137.         return 0;
  138.     }
  139.     while (begin)
  140.     {
  141.         if (fwrite (&begin->data, sizeof(DataType), 1, f))
  142.             begin = begin->next;
  143.         else
  144.             return 0;
  145.     }
  146.     return 1;
  147. }
  148. void print_data (struct hotel hotel) /*Фунция вывода*/
  149. {
  150.     printf ("Country : %s\nCity : %s\nName : %s\nClas: %d\nMoneyoneday : %.f\nMoneyputi : %.2f\n", hotel.country,
  151.              hotel.city, hotel.name,hotel.clas,hotel.moneyoneday, hotel.moneyputi);
  152. }
  153.  
  154. void show (list cur) /*!Показать список!*/
  155. {
  156.      int k=0;
  157.      system ("CLS"); /*Очистка консоли*/
  158.      if (cur == NULL) /*Проверка листа на пустоту*/
  159.      {
  160.           puts ("List is empty");
  161.           getchar();
  162.           return;
  163.      }
  164.      puts ("| N |    Country    |    City    |   Clas   |   Name   | Moneyoneday | Moneyputi |");
  165.      puts ("-------------------------------------------------------------------------");
  166.      while (cur) /*Пока cur не указывает на NULL ,т.е. пока он не пустой*/
  167.      {
  168.         printf ("|%3d | %13s |%11s | %8d |%10s|%12f |%10f |\n", ++k, cur->data.country, cur->data.city, cur->data.clas, cur->data.name, cur->data.moneyoneday, cur->data.moneyputi);
  169.         cur = cur->next; /*Переходим к следующему узлу*/
  170.      }
  171.      puts ("-------------------------------------------------------------------------");
  172.      getchar(); /*Удержание консоли*/
  173. }
  174.  
  175. void printHotel(list cur, float min, int *clas)
  176. {
  177.     DataType hotel;
  178.    
  179.  
  180.     while(cur)
  181.     {
  182.         if ((cur->data.moneyoneday == min) && (cur->data.clas == *clas))
  183.         {
  184.             hotel = cur->data;
  185.             printf("\n--------------------\n");
  186.             print_data(hotel);
  187.             printf("\n--------------------\n");
  188.            
  189.         }  
  190.         else
  191.         {
  192.             /*printf("moneyoneday %f\n", cur->data.moneyoneday);
  193.             printf("min %f\n", min);
  194.             printf("clas %d\n", cur->data.clas);
  195.             printf("&clas %d\n", clas);*/
  196.         }
  197.         cur = cur->next;
  198.     }  
  199. }
  200.  
  201. int findMinMoneyDay(list cur, int* clas)
  202. {
  203.     system ("CLS");
  204.    
  205.     float minMoney = 9999999;
  206.    
  207.    
  208.  
  209.     while(cur)
  210.     {
  211.         if ((cur->data.moneyoneday) < minMoney && (cur->data.clas == *clas))
  212.         {
  213.             minMoney = cur->data.moneyoneday;
  214.         }
  215.        cur = cur->next;
  216.     }
  217.  
  218.     if(minMoney == 9999999)
  219.     {
  220.         printf("There are no such records\n"); 
  221.     }
  222.     return minMoney;
  223. }
  224.  
  225.  
  226.  
  227. void search(list cur) /*Вывести сведения об отелях определенного класса,где стоимость проживания за неделю наименьшая.*/
  228. {
  229.    
  230.    
  231.     DataType hotel;
  232.     system ("CLS");
  233.     if(cur == NULL)
  234.     {
  235.        printf("List is empty\n");
  236.        getchar();
  237.        return;
  238.     }
  239.  
  240.     int clas;
  241.     printf("clas hotel: ");
  242.     scanf("%d", &clas);
  243.     printf("\n");
  244.  
  245.     printf("Search hotel, gde stoimost progivaniya za nedelu naim.\n\n");
  246.     printHotel(cur,findMinMoneyDay(cur, &clas), &clas);
  247.     getchar();
  248.    
  249.  
  250.        
  251.     printf("---\nPress any key to continue . . .");
  252.     getchar();
  253. }
  254.  
  255. /*ФУНКЦИЯ ОПРЕДЕЛЕНИЯ СРЕДНЕЙ СТОИМОСТИ ТУРА НА НЕДЕЛЮ В ОПРЕДЕЛЁННЫЙ КЛАСС ОТЕЛЯ,ВКЛЮЧАЯ СТОИМОСТЬ ПРОЖИВАНИЯ И СТОИМОСТЬ ПРОЕЗДА-1 ФУНКЦИЯ-ОПРЕДЕЛИТЬ+ВЫВЕСТИ*/
  256.  
  257. list delete_node (list begin) /*!удаление первого элемента!*/
  258. {
  259.      struct node * temp;
  260.      if (begin) /*если список не пуст*/
  261.      {
  262.            temp = begin;
  263.            begin = begin->next; /*переставляем указатель на следующий элемент*/
  264.            free (temp); /*первый удаляем*/
  265.            puts ("Deleted");
  266.            getchar();
  267.      }
  268.      return begin;
  269. }
  270.  
  271.  
Advertisement
Add Comment
Please, Sign In to add comment