Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. struct date {
  9. int day;
  10. int month;
  11. int year;
  12. };
  13.  
  14. bool vis(int y) {//високосный год
  15. return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
  16. }
  17.  
  18. int EndOfMonth(int m, int y) {//конец месяца
  19. switch (m) {
  20. case 1: case 3: case 5:
  21. case 7: case 8: case 10: case 12: return 31;
  22. case 4: case 6: case 9: case 11: return 30;
  23. case 2: if (vis(y)) return 29;
  24. else return 28;
  25. }
  26. }
  27.  
  28. date STR_date(string str) {//перевод из строки в дату
  29. date data;
  30. //—–day———————-
  31. string str1 = str.substr(0, 2);
  32. const char* sd = str1.c_str();
  33. int dd = atoi(sd);
  34. data.day = dd;
  35. //———month—————-
  36. str1 = str.substr(3, 2);
  37. sd = str1.c_str();
  38. dd = atoi(sd);
  39. data.month = dd;
  40. //———year—————–
  41. str1 = str.substr(6, 4);
  42. sd = str1.c_str();
  43. dd = atoi(sd);
  44. data.year = dd;
  45. return data;
  46. }
  47.  
  48. int correct(string str) {//проверка корректности данных
  49. if (str.length() != 10) return -1;
  50. for (string::size_type i = 0; i < str.length(); i++)
  51. if (i != 2 && i != 5) {
  52. if (!isdigit(str[i])) return -1;
  53. }
  54. date data = STR_date(str);
  55. if (data.day <= 0 || data.day > EndOfMonth(data.month, data.year)) return -2;
  56. if (data.month <= 0 || data.month > 12) return -3;
  57. if (data.year == 0) return -4;
  58. return 1;
  59. }
  60.  
  61. date Next(date x) {//следующий день
  62. date y = x;
  63. if (x.day < EndOfMonth(x.month, x.year)) y.day = x.day + 1;//не конец месяца
  64. else if (x.month < 12) {//конец месяца, но не конец года
  65. y.day = 1;
  66. y.month = x.month + 1;
  67. }
  68. else {//31 декабря
  69. y.day = 1;
  70. y.month = 1;
  71. y.year = x.year + 1;
  72. }
  73. return y;
  74. }
  75.  
  76. struct Hotel {
  77. string FIO;
  78. date date;
  79. int days;
  80. };
  81.  
  82. int main()
  83. {
  84. setlocale(LC_ALL, "ru");
  85. cout << "Введите кол-во посетителей" << endl;
  86. int n;
  87. string g;
  88. getline(cin, g);
  89. n = stoi(g);
  90. Hotel* h = new Hotel[n];
  91. for (int i = 0; i < n; i++) {
  92. string str;
  93. cout << "введите ФИО" << endl;
  94. getline(cin, str);
  95. h[i].FIO = str;
  96. cout << "введите дату заезда" << endl;
  97.  
  98. getline(cin, str);
  99. while (correct(str) != 1) {
  100. cout << "дата заезда некорректная, введите еще раз" << endl;
  101. getline(cin, str);
  102. }
  103. h[i].date = STR_date(str);
  104. cout << "введите кол-во дней пребывания" << endl;
  105. string l;
  106. getline(cin, l);
  107. h[i].days = stoi(l);
  108. }
  109. cout << "введите выбранную дату " << endl;
  110. string d;
  111. getline(cin, d);
  112. while (correct(d) != 1) {
  113. cout << " дата некорректная, введите снова " << endl;
  114. getline(cin, d);
  115. }
  116. date data = STR_date(d);
  117. for (int i = 0; i < n; i++) {
  118. date temp = h[i].date;
  119. int j = 0;
  120.  
  121. while (j < h[i].days) {
  122. if (temp.day == data.day && temp.month == data.month && temp.year == data.year) {
  123. cout << h[i].FIO << endl;
  124. break;
  125. }
  126. temp = Next(temp);
  127. }
  128.  
  129. }
  130.  
  131.  
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement