Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*1.Поля данных: страна,город,название отеля,класс отеля,стоимость проживания за один день,стоимость проезда в оба конца.
- Вывести сведения об отелях определенного класса,где стоимость проживания за неделю наименьшая.
- Определить среднюю стоимость тура на неделю в определённый класс отеля,включая стоимость проживания и стоимость проезда. (person-hotel,client-otel)*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct hotel /*Структура*/
- {
- char country[20];
- char city[10];
- char name[30];
- int clas;
- float moneyoneday;
- float moneyputi; /*Поля структуры*/
- };
- typedef struct hotel DataType;
- struct node /*Структура узла*/
- {
- DataType data;
- struct node * next;
- };
- typedef struct node * list;
- DataType input_otel (void);
- list read_file (char * filename);
- list new_node (list, DataType);
- int write_file (char * filename, list);
- void delete_list (list);
- void edit (list);
- void show (list);
- void search (list begin);
- list delete_node (list);
- int main (void) /*Меню*/
- {
- char file[50];
- char menu;
- list otels = NULL;
- puts ("Enter the file name");
- gets (file);
- otels = read_file (file);
- do
- {
- system ("CLS");
- puts ("1. Insert"); /*Добавление записи*/
- puts ("2. Show");/*Показать записи*/
- puts ("3. Search");/*Поиск отеля*/
- puts ("4. Delete");/*Удаление записи*/
- puts ("5. Display a list of hotels of a certain class, where the cost of accommodation for a week is the lowest ");
- puts ("6. Exit"); /*Выход*/
- menu = getchar(); getchar();
- switch (menu)
- {
- case '1': otels = new_node (otels, input_otel()); break;
- case '2': show (otels); break;
- case '3': search (otels); break;
- case '4': otels = delete_node (otels);
- }
- }
- while (menu!='5');
- if (write_file (file, otels))
- puts ("File saved");
- else
- puts ("File not saved");
- delete_list (otels);
- return 0;
- }
- DataType input_otel (void)
- {
- DataType otel;
- puts ("Country");
- gets (otel.country);
- puts ("City");
- gets (otel.city);
- puts ("Name");
- gets (otel.name);
- puts ("Clas");
- scanf ("%d", &otel.clas);
- puts ("Moneyoneday");
- scanf ("%f", &otel.moneyoneday);
- puts ("Moneyputi");
- scanf ("%f", &otel.moneyputi);
- getchar();
- return otel;
- }
- list new_node (list begin, DataType hotel) /*!Добавление элемента в начало списка!*/
- {
- list temp = (list) malloc (sizeof(struct node)); /*создаём новый элемент,выделяем под него память*/
- temp->data = hotel; /*присваиваем ему значение структуры*/
- temp->next = begin; /*присваиваем указателю next адрес предыдущего узла*/
- return temp;
- }
- list read_file (char * filename) /*Чтение файла*/
- {
- FILE * f;
- DataType otel;
- list begin=NULL, cur;
- if ((f = fopen (filename, "rb")) == NULL)
- {
- perror ("Error open file");
- getchar();
- return begin;
- }
- if (fread(&otel, sizeof(otel), 1, f))
- begin = new_node (NULL, otel);
- else
- return NULL;
- cur = begin;
- while (fread(&otel, sizeof(otel), 1, f))
- {
- cur->next = new_node (NULL, otel);
- cur = cur->next;
- }
- fclose(f);
- return begin;
- }
- void delete_list (list begin) /*Удаление листа-весь список*/
- {
- list temp = begin;
- while (temp)
- {
- begin = temp->next;
- free (temp);
- temp = begin;
- }
- }
- int write_file (char * filename, list begin)/*Бинарный файл*/
- {
- FILE * f;
- if ((f = fopen (filename, "wb")) == NULL)
- {
- perror ("Error create file");
- getchar();
- return 0;
- }
- while (begin)
- {
- if (fwrite (&begin->data, sizeof(DataType), 1, f))
- begin = begin->next;
- else
- return 0;
- }
- return 1;
- }
- void print_data (struct hotel hotel) /*Фунция вывода*/
- {
- printf ("Country : %s\nCity : %s\nName : %s\nClas: %d\nMoneyoneday : %.f\nMoneyputi : %.2f\n", hotel.country,
- hotel.city, hotel.name,hotel.clas,hotel.moneyoneday, hotel.moneyputi);
- }
- void show (list cur) /*!Показать список!*/
- {
- int k=0;
- system ("CLS"); /*Очистка консоли*/
- if (cur == NULL) /*Проверка листа на пустоту*/
- {
- puts ("List is empty");
- getchar();
- return;
- }
- puts ("| N | Country | City | Clas | Name | Moneyoneday | Moneyputi |");
- puts ("-------------------------------------------------------------------------");
- while (cur) /*Пока cur не указывает на NULL ,т.е. пока он не пустой*/
- {
- 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);
- cur = cur->next; /*Переходим к следующему узлу*/
- }
- puts ("-------------------------------------------------------------------------");
- getchar(); /*Удержание консоли*/
- }
- void printHotel(list cur, float min, int *clas)
- {
- DataType hotel;
- while(cur)
- {
- if ((cur->data.moneyoneday == min) && (cur->data.clas == *clas))
- {
- hotel = cur->data;
- printf("\n--------------------\n");
- print_data(hotel);
- printf("\n--------------------\n");
- }
- else
- {
- /*printf("moneyoneday %f\n", cur->data.moneyoneday);
- printf("min %f\n", min);
- printf("clas %d\n", cur->data.clas);
- printf("&clas %d\n", clas);*/
- }
- cur = cur->next;
- }
- }
- int findMinMoneyDay(list cur, int* clas)
- {
- system ("CLS");
- float minMoney = 9999999;
- while(cur)
- {
- if ((cur->data.moneyoneday) < minMoney && (cur->data.clas == *clas))
- {
- minMoney = cur->data.moneyoneday;
- }
- cur = cur->next;
- }
- if(minMoney == 9999999)
- {
- printf("There are no such records\n");
- }
- return minMoney;
- }
- void search(list cur) /*Вывести сведения об отелях определенного класса,где стоимость проживания за неделю наименьшая.*/
- {
- DataType hotel;
- system ("CLS");
- if(cur == NULL)
- {
- printf("List is empty\n");
- getchar();
- return;
- }
- int clas;
- printf("clas hotel: ");
- scanf("%d", &clas);
- printf("\n");
- printf("Search hotel, gde stoimost progivaniya za nedelu naim.\n\n");
- printHotel(cur,findMinMoneyDay(cur, &clas), &clas);
- getchar();
- printf("---\nPress any key to continue . . .");
- getchar();
- }
- /*ФУНКЦИЯ ОПРЕДЕЛЕНИЯ СРЕДНЕЙ СТОИМОСТИ ТУРА НА НЕДЕЛЮ В ОПРЕДЕЛЁННЫЙ КЛАСС ОТЕЛЯ,ВКЛЮЧАЯ СТОИМОСТЬ ПРОЖИВАНИЯ И СТОИМОСТЬ ПРОЕЗДА-1 ФУНКЦИЯ-ОПРЕДЕЛИТЬ+ВЫВЕСТИ*/
- list delete_node (list begin) /*!удаление первого элемента!*/
- {
- struct node * temp;
- if (begin) /*если список не пуст*/
- {
- temp = begin;
- begin = begin->next; /*переставляем указатель на следующий элемент*/
- free (temp); /*первый удаляем*/
- puts ("Deleted");
- getchar();
- }
- return begin;
- }
Advertisement
Add Comment
Please, Sign In to add comment