Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Поисковик туров. Структура записи по туру: страна, дата начала, дата завершения, отель (категория по звездам), тип питания (, «все включено», шведский стол, завтрак в отелях),
- вид отдыха (пляжный, активный, экскурсионный), стоимость тура.
- Операции
- 1) Заполнение записи по одному туру с клавиатуры.
- 2) Вставить сведения по туру в таблицу, упорядочивая по стране. Новая запись вставляется как последняя запись в подсписок по стране.
- 3) Удалить сведения по завершенным турам.
- 4) Сформировать список туров в страну по предполагаемой стоимости.
- */
- #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- #define _CRT_SECURE_NO_WARNINGS
- #pragma warning(disable:4996)
- #endif
- #include <iostream>
- #include <string>
- #include <windows.h>
- #include <ctime>
- #define L long long
- #define N 1000
- using namespace std;
- struct date {
- unsigned short day, month;
- unsigned int year;
- };
- struct Tour {
- string country;
- date date_start, date_end;
- unsigned short hotel_stars;
- string type_eating;
- string type_rest;
- L price;
- };
- struct Table {
- int size = 0;
- const int max_size = N;
- Tour tours[N];
- };
- void insert(Tour*, int&, int, Tour);
- void erase(Tour*, int&, int);
- bool compareByCountry(const Tour, const Tour);
- void inputTour(Tour&);
- void insertDataTour(Tour*, int&, Tour);
- date getCurDate();
- void deleteOutdatedTours(Tour* t, int& size);
- void searchToursByPrice(Tour* toursByPrice, int& sizeByPrice, Tour* tours, int size, L price);
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Table t,tByPrice;
- for (int i = 0; i < 2; i++) {
- Tour tmp;
- inputTour(tmp);
- insertDataTour(t.tours, t.size, tmp);
- }
- for (int i = 0; i < t.size; i++) {
- cout << t.tours[i].country << '\n'
- << t.tours[i].hotel_stars << '\n'
- << t.tours[i].price << '\n';
- }
- deleteOutdatedTours(t.tours,t.size);
- for (int i = 0; i < t.size; i++) {
- cout << t.tours[i].country << '\n'
- << t.tours[i].hotel_stars << '\n'
- << t.tours[i].price << '\n';
- }
- searchToursByPrice(tByPrice.tours, tByPrice.size,t.tours,t.size,1500);
- for (int i = 0; i < tByPrice.size; i++) {
- cout << tByPrice.tours[i].country << '\n'
- << tByPrice.tours[i].hotel_stars << '\n'
- << tByPrice.tours[i].price << '\n';
- }
- }
- void searchToursByPrice(Tour* toursByPrice,int& sizeByPrice,Tour* tours,int size, L price) {
- for (int i = 0; i < size; i++) if (tours[i].price <= price) insert(toursByPrice, sizeByPrice, sizeByPrice, tours[i]);
- }
- void deleteOutdatedTours(Tour* t,int& size) {
- date cur_date = getCurDate();
- for (int i = 0; i < size; i++) {
- if (t[i].date_end.year < cur_date.year) {
- erase(t,size,i); return;
- }
- else if (t[i].date_end.year == cur_date.year) {
- if (t[i].date_end.month < cur_date.month) {
- erase(t, size, i); return;
- }
- else if (t[i].date_end.month == cur_date.month && t[i].date_end.day < cur_date.day) {
- erase(t, size, i); return;
- }
- }
- }
- }
- date getCurDate() {
- date d;
- time_t rawtime;
- struct tm* timeinfo;
- char buffer[80];
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- strftime(buffer, sizeof(buffer), "%d", timeinfo);
- d.day = atoi(buffer);
- strftime(buffer, sizeof(buffer), "%m", timeinfo);
- d.month = atoi(buffer);
- strftime(buffer, sizeof(buffer), "%Y", timeinfo);
- d.year = atoi(buffer);
- return d;
- }
- void inputTour(Tour& t) {
- cout << "Страна отдыха: "; cin >> t.country;
- //cout << "Дата начала отдыха (формат Д,М,Г (через пробел 1 1 2022)): "; cin >> t.date_start.day >> t.date_start.month >> t.date_start.year;
- cout << "Дата конца отдыха (формат Д,М,Г (через пробел 1 1 2022)): "; cin >> t.date_end.day >> t.date_end.month >> t.date_end.year;
- cout << "Количество звезд у отеля: "; cin >> t.hotel_stars;
- //cout << "Тип питания: \n"
- // << "1.Нет питания\n"
- // << "2.Все включено\n"
- // << "3.Шведский стол\n"
- // << "4.Завтрак в постелях\n"
- // << "Ваш ответ: ";
- //unsigned short c;
- //cin >> c;
- //switch (c) {
- //case 1:
- // t.type_eating = "Нет питания";
- // break;
- //case 2:
- // t.type_eating = "Все включено";
- // break;
- //case 3:
- // t.type_eating = "Шведский стол";
- // break;
- //case 4:
- // t.type_eating = "Завтрак в постелях";
- // break;
- //default:
- // cerr << "Такого варианта нет!";
- // return;
- //}
- //cout << "Вид отдыха: \n"
- // << "1.Пляжный\n"
- // << "2.Активный\n"
- // << "3.Экскурсионный\n"
- // << "Ваш ответ: ";
- //cin >> c;
- //switch (c) {
- //case 1:
- // t.type_rest = "Пляжный";
- // break;
- //case 2:
- // t.type_rest = "Активный";
- // break;
- //case 3:
- // t.type_rest = "Экскурсионный";
- // break;
- //default:
- // cerr << "Такого варианта нет!";
- // return;
- //}
- cout << "Цена отдыха: "; cin >> t.price;
- }
- void insertDataTour(Tour* tours, int& size, Tour t) {
- if (tours==nullptr || size==0) {insert(tours,size,size,t); return; }
- for (int i = 0; i < size; i++) {
- if (tours[i].country == t.country) {
- for (int j = i; j < size - 1; j++) {
- if (tours[j].country != tours[j + 1].country) {
- insert(tours,size, j + 1, t);
- return;
- }
- }
- insert(tours, size, size, t);
- return;
- }
- else if (compareByCountry(t, tours[i])) {
- insert(tours, size, i, t);
- return;
- }
- }
- insert(tours, size, size, t);
- }
- bool compareByCountry(const Tour a, const Tour b)
- {
- for (int i = 0; i < min(a.country.size(), b.country.size()); i++) if (a.country[i] != b.country[i]) return (a.country[i] < b.country[i]);
- return (a.country.size() < b.country.size());
- }
- void insert(Tour* arr, int& size, int pos, Tour el) {
- size++;
- for (int i = size-1; i > pos; i--) arr[i] = arr[i - 1];
- arr[pos] = el;
- }
- void erase(Tour* arr, int& size, int pos) {
- size--;
- for (int i = pos; i < size; i++) arr[i] = arr[i + 1];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement