#include <iostream>
#include <sstream>
#include <iterator>
#include <locale>
#include <string>
#include <list>
#include <algorithm>
#include <functional>
#include <ctime>
using namespace std;
// Класс - рабочий
class worker
{
public:
worker(wstring fio,wstring job,unsigned int year);
unsigned int year() const;
private:
wstring _fio;
wstring _job;
unsigned int _year;
friend basic_ostream<wchar_t>& operator<<(basic_ostream<wchar_t>& stream,const worker& right);
};
typedef list<worker> workerList;
int menu();
void addData(workerList& workers);
void printData(const workerList& workers);
void findData(const workerList& workers);
int main()
{
locale::global(locale("russian_russia.866"));
workerList workers;
while(true)
{
switch(menu())
{
case 0:
return 0;
case 1:
addData(workers);
break;
case 2:
printData(workers);
break;
case 3:
findData(workers);
break;
}
}
}
// Выводит меню
int menu()
{
while(true)
{
wcout<<L"Возможны следующие варианты:"<<endl
<<L"1 - Ввод данных"<<endl
<<L"2 - Вывод информации"<<endl
<<L"3 - Поиск"<<endl
<<L"0 - Выход"<<endl
<<L"Сделайте свой выбор:";
wint_t choice=_getwche();
wcout<<endl;
switch(choice)
{
case L'0':
case L'1':
case L'2':
case L'3':
return choice-L'0';
default:
wcout<<L"Будьте внимательней"<<endl;
}
}
}
// Добавляет данные к списку
void addData(workerList& workers)
{
while(true)
{
wcout<<L"Введите Ф.И.О.(пустая строка для выхода):";
wstring fio;
getline(wcin,fio);
if(fio.empty())
{
return;
}
wcout<<L"Должность:";
wstring job;
getline(wcin,job);
wcout<<L"Год:";
unsigned int year;
wcin>>year;
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
workers.push_back(worker(fio,job,year));
}
}
// Выводит список
void printData(const workerList& workers)
{
wcout<<L"Полный список:"<<endl;
copy(workers.begin(),workers.end(),ostream_iterator<worker,wchar_t>(wcout,L"\n"));
}
// Функтор для поиска согласно стажа работы
class stageFunctor:unary_function<worker,bool>
{
public:
stageFunctor(unsigned int stage)
{
// Получим год ниже которого будем искать
time_t curTime=time(0);
#pragma warning(disable:4996)
_year=localtime(&curTime)->tm_year+1900-stage;
}
// Собственно сам функтор
result_type operator()(const argument_type& arg) const
{
return arg.year()<_year;
}
private:
unsigned int _year;
};
// Ищет данные согласно условия
void findData(const workerList& workers)
{
wcout<<L"Требуемый стаж работы:";
unsigned int stage;
wcin>>stage;
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
copy_if(workers.begin(),workers.end(),ostream_iterator<worker,wchar_t>(wcout,L"\n"),stageFunctor(stage));
}
worker::worker(wstring fio,wstring job,unsigned int year)
:_fio(fio)
,_job(job)
,_year(year)
{}
unsigned int worker::year() const
{
return _year;
}
// Оператор вывода для worker
basic_ostream<wchar_t>& operator<<(basic_ostream<wchar_t>& stream,const worker& right)
{
basic_stringstream<wchar_t> sstr;
sstr<<L"Ф.И.О.:"<<right._fio<<L" Должность:"<<right._job<<L" Год:"<<right._year;
return stream<<sstr.str();
}
Возможны следующие варианты:
1 - Ввод данных
2 - Вывод информации
3 - Поиск
0 - Выход
Сделайте свой выбор:1
Введите Ф.И.О.(пустая строка для выхода):Иванов П.С.
Должность:Слесарь
Год:1999
Введите Ф.И.О.(пустая строка для выхода):Петров И.И.
Должность:Дворник
Год:2005
Введите Ф.И.О.(пустая строка для выхода):Сидоров А.П.
Должность:Директор
Год:1990
Введите Ф.И.О.(пустая строка для выхода):
Возможны следующие варианты:
1 - Ввод данных
2 - Вывод информации
3 - Поиск
0 - Выход
Сделайте свой выбор:2
Полный список:
Ф.И.О.:Иванов П.С. Должность:Слесарь Год:1 999
Ф.И.О.:Петров И.И. Должность:Дворник Год:2 005
Ф.И.О.:Сидоров А.П. Должность:Директор Год:1 990
Возможны следующие варианты:
1 - Ввод данных
2 - Вывод информации
3 - Поиск
0 - Выход
Сделайте свой выбор:3
Требуемый стаж работы:15
Ф.И.О.:Сидоров А.П. Должность:Директор Год:1 990
Возможны следующие варианты:
1 - Ввод данных
2 - Вывод информации
3 - Поиск
0 - Выход
Сделайте свой выбор:3
Требуемый стаж работы:8
Ф.И.О.:Иванов П.С. Должность:Слесарь Год:1 999
Ф.И.О.:Сидоров А.П. Должность:Директор Год:1 990
Возможны следующие варианты:
1 - Ввод данных
2 - Вывод информации
3 - Поиск
0 - Выход
Сделайте свой выбор:
...
using std::wcout;
using std::wcin;
using std::wstring;
... и т.д.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.