C/C++

Задача в С++ на знание массивов, строк, файлов и тд

Составить программу, выводящую на экран график отпусков (Ф. И. О., дата начала
отпуска, дата выхода на работу, количество дней). Распечатать имена сотрудников,
которые будут находиться в отпуске в заданный день.
C++
Код который я накидал, но не понимаю как найти кол-во дней которые человек будет отдыхать.
Из даты не вычетается дата, помогите пожалуйста!
#include
#include
#include
#include
#include

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string fio[5];
char nach[5];
char kon[5];
int kolvo[5];
int max;

for (int i = 0; i < 5; i++)
{
cout << "ФИО " << i+1 << " работника: ";
getline(cin, fio[i]);
cout << "Введите дату начала отпуска " << i+1 << " работника: ";
cin >> nach[i];
cout << "Введите дату выхода на работу " << i+1 << " работника: ";
cin >> kon[i];
cout << i + 1 << " работник отдыхает " << kon[i] - nach[i] << " дн";
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
short integer(istream& inp, const char* msg) {
cout << msg;
short value;
inp >> value;
inp.ignore(inp.rdbuf()->in_avail());
return value;
}
struct Date {
short d;
short m;
short y;
Date() : d(0), m(0), y(0) {}
Date(short d, short m, short y) : d(d), m(m), y(y) {}
friend bool operator<(const Date& a, const Date& b) {
if (a.y < b.y) return true;
if (a.y == b.y && a.m < b.m) return true;
if (a.y == b.y && a.m == b.m && a.d < b.d) return true;
return false;
}
friend bool operator==(const Date& a, const Date& b) {
return a.y == b.y && a.m == b.m && a.d == b.d;
}
friend bool operator!=(const Date& a, const Date& b) {
return !(a == b);
}
friend bool operator<=(const Date& a, const Date& b) {
return a < b || a == b;
}
friend bool operator>(const Date& a, const Date& b) {
return !(a <= b);
}
friend bool operator>=(const Date& a, const Date& b) {
return !(a < b);
}
friend istream& operator>>(istream& inp, Date& date) {
date.y = integer(inp, "Год: ");
date.m = integer(inp, "Месяц: ");
date.d = integer(inp, "День: ");
return inp;
}
};
struct Worker {
short days;
Date start;
Date finish;
string name;
Worker() : days(0) {}
bool includes(const Date& date)const {
return date >= start && date <= finish;
}
friend istream& operator>>(istream& inp, Worker& wrk) {
cout << "Ф. И. О.: ";
getline(inp, wrk.name);
puts("Дата начала отпуска:");
inp >> wrk.start;
puts("Дата конца отпуска:");
inp >> wrk.finish;
wrk.days = integer(inp, "Количество дней: ");
return inp;
}
};
class Sheet {
public:
void add(const size_t quant) {
for (auto i = 0U; i < quant; ++i) {
Worker wrk;
cin >> wrk;
sheet.emplace_back(wrk);
}
}
void on_labor_leave(const Date& date)const {
for (const auto& record : sheet) {
if (record.includes(date)) {
cout << record.name << '\n';
}
}
}
private:
vector<Worker> sheet;
};
int main() {
system("chcp 1251 > nul");
Sheet sheet;
sheet.add(3); // вводит количество работников: 3
system("cls");
puts("Контрольная дата:");
Date control;
cin >> control;
sheet.on_labor_leave(control);
system("pause > nul");
}
Виталий Редька
Виталий Редька
58 409
Лучший ответ
Дату нужно парсить либо руками, либо библиотекой, в стандартные плюсы какой-то парсинг добавили только в c++20.
https://en.cppreference.com/w/cpp/chrono/parse

После парсинга можно вычесть через хроно
https://en.cppreference.com/w/cpp/chrono
Стас Павлодар
Стас Павлодар
4 588