/*В банке данных о получении пособий на детей находятся три поля:
1-ое поле: ФИО рабочих
2-ое поле: количество детей
3-е поле: даты рождения (год, месяц, число) детей.
Найти сколько пособий на своих детей получает каждый рабочий.
(Дети старше 18 лет пособие не получают).*/
#include "stdafx.h"
#define N 3
using namespace std;
struct idk
{
string name;
string surname;
string fth;
};
//Структура из 3 полей из условия задачи.
struct Person
{
struct idk fio;
int ChildAmount;
string ChildBrth[5]; //Пять, потому что вероятность правильно -
// - реализовать резиновый массив крайне мала!
};
struct Date
{
int year;
int mth;
int day;
};
//Функция заполнения ФИО случайными символами с большой буквы
string creator_fio(string str1)
{
for (int i = 0; i < 6; i++)
{
int x = rand() % (122 - 97 + 1) + 97;
str1[i] = char(x);
str1 += str1[i];
str1[0] = char(x - 32);
}
return str1;
};
//Функция создания даты с учетом весокосного года
string creator_date(string str1)
{
Date idk;
int year, mth, day;
year = (rand() % (2013 - 1990 + 1) + 1990);
mth = (1 + rand() % 12);
if ((mth == 2) && (year % 4 == 0))
day = (1 + rand() % 28);
else if ((mth % 2 == 0) && (mth != 2))
day = (1 + rand() % 30);
else
day = (1 + rand() % 31);
str1 = to_string(idk.year = year) + '.';
str1 += to_string(idk.mth = mth) + '.';
str1 += to_string(idk.day = day);
/*str1 = to_string(idk.year = (rand() % (2013 - 1990 +1) + 1990)) + '.';
str1 += to_string(idk.mth = (1 + rand() % 12)) + '.';
str1 += to_string(idk.day = (1 + rand() % 30));*/
return str1;
};
//Перевод даты класса string к типу int и проверка на совершеннолетие относительно заданной даты
int calculator(string str1)
{
int i = 0, date[3], cnt = 0;
while ((str1[i] <= '.') && (i < 3))
{
date[i] = atoi(str1.c_str());
i++;
}
if ((date[0] <= 1996) && (date[1] <= 12) && (date[2] <= 12))
cnt++;
return cnt;
};
int _tmain()
{
setlocale(LC_ALL, "Rus");
string str, date;
Person a[N];
srand(time(NULL));
//Заполение структуры из функций
for (int i = 0; i < N; i++)
{
int counter = 0;
int x = (1 + rand() % 5); //Определение кол-ва детей
a[i].fio.name = creator_fio(str);
a[i].fio.surname = creator_fio(str);
a[i].fio.fth = creator_fio(str);
a[i].ChildAmount = x;
//Присвоение даты рождения детям из функции и подсчет количества пособий
for (int j = 0; j < x; j++)
{
a[i].ChildBrth[j] += creator_date(date);
counter += calculator(a[i].ChildBrth[j]);
}
cout << "Рабочий "<< a[i].fio.name << " " << a[i].fio.surname << "\tполучает " << counter << " пособие(я);\n";
counter = 0;
}
_getch();
return 0;
}