Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- struct date {
- int day;
- int month;
- int year;
- };
- bool vis(int y) {//високосный год
- return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
- }
- int EndOfMonth(int m, int y) {//конец месяца
- switch (m) {
- case 1: case 3: case 5:
- case 7: case 8: case 10: case 12: return 31;
- case 4: case 6: case 9: case 11: return 30;
- case 2: if (vis(y)) return 29;
- else return 28;
- }
- }
- date STR_date(string str) {//перевод из строки в дату
- date data;
- //—–day———————-
- string str1 = str.substr(0, 2);
- const char* sd = str1.c_str();
- int dd = atoi(sd);
- data.day = dd;
- //———month—————-
- str1 = str.substr(3, 2);
- sd = str1.c_str();
- dd = atoi(sd);
- data.month = dd;
- //———year—————–
- str1 = str.substr(6, 4);
- sd = str1.c_str();
- dd = atoi(sd);
- data.year = dd;
- return data;
- }
- int correct(string str) {//проверка корректности данных
- if (str.length() != 10) return -1;
- for (string::size_type i = 0; i < str.length(); i++)
- if (i != 2 && i != 5) {
- if (!isdigit(str[i])) return -1;
- }
- date data = STR_date(str);
- if (data.day <= 0 || data.day > EndOfMonth(data.month, data.year)) return -2;
- if (data.month <= 0 || data.month > 12) return -3;
- if (data.year == 0) return -4;
- return 1;
- }
- date Next(date x) {//следующий день
- date y = x;
- if (x.day < EndOfMonth(x.month, x.year)) y.day = x.day + 1;//не конец месяца
- else if (x.month < 12) {//конец месяца, но не конец года
- y.day = 1;
- y.month = x.month + 1;
- }
- else {//31 декабря
- y.day = 1;
- y.month = 1;
- y.year = x.year + 1;
- }
- return y;
- }
- struct Hotel {
- string FIO;
- date date;
- int days;
- };
- int main()
- {
- setlocale(LC_ALL, "ru");
- cout << "Введите кол-во посетителей" << endl;
- int n;
- string g;
- getline(cin, g);
- n = stoi(g);
- Hotel* h = new Hotel[n];
- for (int i = 0; i < n; i++) {
- string str;
- cout << "введите ФИО" << endl;
- getline(cin, str);
- h[i].FIO = str;
- cout << "введите дату заезда" << endl;
- getline(cin, str);
- while (correct(str) != 1) {
- cout << "дата заезда некорректная, введите еще раз" << endl;
- getline(cin, str);
- }
- h[i].date = STR_date(str);
- cout << "введите кол-во дней пребывания" << endl;
- string l;
- getline(cin, l);
- h[i].days = stoi(l);
- }
- cout << "введите выбранную дату " << endl;
- string d;
- getline(cin, d);
- while (correct(d) != 1) {
- cout << " дата некорректная, введите снова " << endl;
- getline(cin, d);
- }
- date data = STR_date(d);
- for (int i = 0; i < n; i++) {
- date temp = h[i].date;
- int j = 0;
- while (j < h[i].days) {
- if (temp.day == data.day && temp.month == data.month && temp.year == data.year) {
- cout << h[i].FIO << endl;
- break;
- }
- temp = Next(temp);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement